Merge "Clarify process_dex2oat_label description" into mnc-dev
diff --git a/res/layout/ignore_optimizations_content.xml b/res/layout/ignore_optimizations_content.xml
new file mode 100644
index 0000000..4641f0e
--- /dev/null
+++ b/res/layout/ignore_optimizations_content.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2015 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:paddingTop="8dp"
+    android:paddingBottom="8dp"
+    android:orientation="vertical">
+
+    <include
+        layout="@layout/radio_with_summary"
+        android:id="@+id/ignore_on" />
+
+    <include
+        layout="@layout/radio_with_summary"
+        android:id="@+id/ignore_off" />
+
+</LinearLayout>
diff --git a/res/layout/radio_with_summary.xml b/res/layout/radio_with_summary.xml
index 2010207..9c37050 100644
--- a/res/layout/radio_with_summary.xml
+++ b/res/layout/radio_with_summary.xml
@@ -20,6 +20,7 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical"
+    android:background="?android:attr/selectableItemBackground"
     android:minHeight="?android:attr/listPreferredItemHeightSmall">
 
     <CheckedTextView
diff --git a/res/layout/redaction_interstitial.xml b/res/layout/redaction_interstitial.xml
index 6f0ba2e..14e57f8 100644
--- a/res/layout/redaction_interstitial.xml
+++ b/res/layout/redaction_interstitial.xml
@@ -33,6 +33,7 @@
             android:textAppearance="?android:attr/textAppearanceMedium" />
 
     <RadioGroup
+            android:id="@+id/radio_group"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_marginTop="@dimen/redaction_vertical_margins"
diff --git a/res/layout/setup_redaction_interstitial.xml b/res/layout/setup_redaction_interstitial.xml
index 2844828..826e633 100644
--- a/res/layout/setup_redaction_interstitial.xml
+++ b/res/layout/setup_redaction_interstitial.xml
@@ -43,6 +43,7 @@
             android:text="@string/lock_screen_notifications_interstitial_message" />
 
         <RadioGroup
+            android:id="@+id/radio_group"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_marginTop="@dimen/redaction_vertical_margins"
diff --git a/res/layout/widget_text_views.xml b/res/layout/widget_text_views.xml
index 2e029e8..ea49fa5 100644
--- a/res/layout/widget_text_views.xml
+++ b/res/layout/widget_text_views.xml
@@ -21,7 +21,7 @@
 
     <TextView
         android:id="@+id/widget_text1"
-        android:layout_width="0dp"
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_weight="1"
         android:layout_gravity="fill_horizontal|top"
@@ -34,7 +34,7 @@
 
     <TextView
         android:id="@+id/widget_text2"
-        android:layout_width="0dp"
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_weight="1"
         android:layout_marginStart="8dip"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index faea589..8e06465 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -677,11 +677,11 @@
     <!-- Text shown for title of profile info setting [CHAR LIMIT=20]-->
     <string name="profile_info_settings_title">Profile info</string>
     <!-- Main Settings screen setting option title for the item to take you to the Accounts screen [CHAR LIMIT=22] -->
-    <string name="Accounts_settings_title">Account sync</string>
+    <string name="Accounts_settings_title">Accounts</string>
     <!-- Main Settings screen setting option title for the item to take you to the location screen -->
     <string name="location_settings_title">Location</string>
     <!-- Main Settings screen setting option title for the item to take you to the accounts screen [CHAR LIMIT=22] -->
-    <string name="account_settings_title">Account sync</string>
+    <string name="account_settings_title">Accounts</string>
     <!-- Main Settings screen setting option title for the item to take you to the security screen -->
     <string name="security_settings_title">Security</string>
     <!-- Main Settings screen setting option summary text for the item tot ake you to the security and location screen -->
@@ -5147,7 +5147,7 @@
     <string name="data_usage_menu_sim_cards">SIM cards</string>
     <!-- Title for menu option to show details for all cellular networks. [CHAR LIMIT=26] -->
     <string name="data_usage_menu_cellular_networks">Cellular networks</string>
-    <!-- Summary String for Cellular data enable toggle. [CHAR LIMIT=26] -->
+    <!-- Summary String for Cellular data enable toggle. [CHAR LIMIT=33] -->
     <string name="data_usage_cellular_data_summary">Paused at limit</string>
 
     <!--  Title for menu option to enable global auto-sync of personal account data [CHAR LIMIT=30] -->
diff --git a/res/xml/power_usage_details.xml b/res/xml/power_usage_details.xml
index ad28650..724aae8 100644
--- a/res/xml/power_usage_details.xml
+++ b/res/xml/power_usage_details.xml
@@ -17,9 +17,6 @@
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
 
-        <com.android.settings.fuelgauge.BatteryHistoryPreference
-            android:key="battery_history" />
-
         <com.android.settings.applications.LayoutPreference
             android:key="two_buttons"
             android:layout="@layout/two_buttons_panel"
diff --git a/src/com/android/settings/ChooseLockPassword.java b/src/com/android/settings/ChooseLockPassword.java
index 576cee5..64aaaca 100644
--- a/src/com/android/settings/ChooseLockPassword.java
+++ b/src/com/android/settings/ChooseLockPassword.java
@@ -559,7 +559,10 @@
             getActivity().finish();
             mDone = true;
             if (!wasSecureBefore) {
-                startActivity(getRedactionInterstitialIntent(getActivity()));
+                Intent intent = getRedactionInterstitialIntent(getActivity());
+                if (intent != null) {
+                    startActivity(intent);
+                }
             }
         }
 
diff --git a/src/com/android/settings/ChooseLockPattern.java b/src/com/android/settings/ChooseLockPattern.java
index baee599..481cf0f 100644
--- a/src/com/android/settings/ChooseLockPattern.java
+++ b/src/com/android/settings/ChooseLockPattern.java
@@ -641,7 +641,10 @@
                 startVerifyPattern(utils, wasSecureBefore);
             } else {
                 if (!wasSecureBefore) {
-                    startActivity(getRedactionInterstitialIntent(getActivity()));
+                    Intent intent = getRedactionInterstitialIntent(getActivity());
+                    if (intent != null) {
+                        startActivity(intent);
+                    }
                 }
                 getActivity().setResult(RESULT_FINISHED);
                 doFinish();
@@ -670,7 +673,10 @@
                             mPendingLockCheck = null;
 
                             if (!wasSecureBefore) {
-                                startActivity(getRedactionInterstitialIntent(getActivity()));
+                                Intent intent = getRedactionInterstitialIntent(getActivity());
+                                if (intent != null) {
+                                    startActivity(intent);
+                                }
                             }
 
                             Intent intent = new Intent();
diff --git a/src/com/android/settings/DropDownPreference.java b/src/com/android/settings/DropDownPreference.java
index ce4bb2f..0f5b06a 100644
--- a/src/com/android/settings/DropDownPreference.java
+++ b/src/com/android/settings/DropDownPreference.java
@@ -126,6 +126,10 @@
         mValues.add(value);
     }
 
+    public int getItemCount() {
+        return mAdapter.getCount();
+    }
+
     public void clearItems(){
         mAdapter.clear();
         mValues.clear();
diff --git a/src/com/android/settings/SetupChooseLockPassword.java b/src/com/android/settings/SetupChooseLockPassword.java
index 080e470..9837562 100644
--- a/src/com/android/settings/SetupChooseLockPassword.java
+++ b/src/com/android/settings/SetupChooseLockPassword.java
@@ -110,7 +110,9 @@
         @Override
         protected Intent getRedactionInterstitialIntent(Context context) {
             Intent intent = SetupRedactionInterstitial.createStartIntent(context);
-            SetupWizardUtils.copySetupExtras(getActivity().getIntent(), intent);
+            if (intent != null) {
+                SetupWizardUtils.copySetupExtras(getActivity().getIntent(), intent);
+            }
             return intent;
         }
 
diff --git a/src/com/android/settings/SetupChooseLockPattern.java b/src/com/android/settings/SetupChooseLockPattern.java
index 2ea8d4a..bdf7af8 100644
--- a/src/com/android/settings/SetupChooseLockPattern.java
+++ b/src/com/android/settings/SetupChooseLockPattern.java
@@ -103,7 +103,9 @@
         @Override
         protected Intent getRedactionInterstitialIntent(Context context) {
             Intent intent = SetupRedactionInterstitial.createStartIntent(context);
-            SetupWizardUtils.copySetupExtras(getActivity().getIntent(), intent);
+            if (intent != null) {
+                SetupWizardUtils.copySetupExtras(getActivity().getIntent(), intent);
+            }
             return intent;
         }
 
diff --git a/src/com/android/settings/SetupRedactionInterstitial.java b/src/com/android/settings/SetupRedactionInterstitial.java
index 590788b..4939aea 100644
--- a/src/com/android/settings/SetupRedactionInterstitial.java
+++ b/src/com/android/settings/SetupRedactionInterstitial.java
@@ -40,9 +40,11 @@
 
     public static Intent createStartIntent(Context ctx) {
         Intent startIntent = RedactionInterstitial.createStartIntent(ctx);
-        startIntent.setClass(ctx, SetupRedactionInterstitial.class);
-        startIntent.putExtra(EXTRA_PREFS_SHOW_BUTTON_BAR, false)
-                .putExtra(EXTRA_SHOW_FRAGMENT_TITLE_RESID, -1);
+        if (startIntent != null) {
+            startIntent.setClass(ctx, SetupRedactionInterstitial.class);
+            startIntent.putExtra(EXTRA_PREFS_SHOW_BUTTON_BAR, false)
+                    .putExtra(EXTRA_SHOW_FRAGMENT_TITLE_RESID, -1);
+        }
         return startIntent;
     }
 
diff --git a/src/com/android/settings/fuelgauge/HighPowerDetail.java b/src/com/android/settings/fuelgauge/HighPowerDetail.java
index c57a461..8c75868 100644
--- a/src/com/android/settings/fuelgauge/HighPowerDetail.java
+++ b/src/com/android/settings/fuelgauge/HighPowerDetail.java
@@ -16,7 +16,6 @@
 
 package com.android.settings.fuelgauge;
 
-import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.Dialog;
 import android.app.DialogFragment;
@@ -27,18 +26,20 @@
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.os.Bundle;
-import android.util.Pair;
-import android.util.SparseBooleanArray;
+import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.ArrayAdapter;
+import android.view.ViewGroup.LayoutParams;
+import android.widget.Checkable;
+import android.widget.LinearLayout;
 import android.widget.TextView;
 
 import com.android.settings.R;
 import com.android.settings.applications.AppInfoBase;
 import com.android.settingslib.applications.ApplicationsState.AppEntry;
 
-public class HighPowerDetail extends DialogFragment implements OnClickListener {
+public class HighPowerDetail extends DialogFragment implements OnClickListener,
+        View.OnClickListener {
 
     private static final String ARG_DEFAULT_ON = "default_on";
 
@@ -47,8 +48,9 @@
     private String mPackageName;
     private CharSequence mLabel;
     private boolean mDefaultOn;
-    private Adapter mAdapter;
-    private int mSelectedIndex;
+    private boolean mIsEnabled;
+    private Checkable mOptionOn;
+    private Checkable mOptionOff;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -62,15 +64,20 @@
             mLabel = mPackageName;
         }
         mDefaultOn = getArguments().getBoolean(ARG_DEFAULT_ON);
-        mAdapter = new Adapter(getContext(), R.layout.radio_with_summary);
-        mAdapter.add(new Pair<String, String>(getString(R.string.ignore_optimizations_on),
-                getString(R.string.ignore_optimizations_on_desc)));
-        mAdapter.add(new Pair<String, String>(getString(R.string.ignore_optimizations_off),
-                getString(R.string.ignore_optimizations_off_desc)));
-        mSelectedIndex = mDefaultOn || mBackend.isWhitelisted(mPackageName) ? 0 : 1;
-        if (mBackend.isSysWhitelisted(mPackageName)) {
-            mAdapter.setEnabled(1, false);
+        mIsEnabled = mDefaultOn || mBackend.isWhitelisted(mPackageName);
+    }
+
+    public Checkable setup(View view, boolean on) {
+        ((TextView) view.findViewById(android.R.id.title)).setText(on
+                ? R.string.ignore_optimizations_on : R.string.ignore_optimizations_off);
+        ((TextView) view.findViewById(android.R.id.summary)).setText(on
+                ? R.string.ignore_optimizations_on_desc : R.string.ignore_optimizations_off_desc);
+        view.setClickable(true);
+        view.setOnClickListener(this);
+        if (!on && mBackend.isSysWhitelisted(mPackageName)) {
+            view.setEnabled(false);
         }
+        return (Checkable) view;
     }
 
     @Override
@@ -78,7 +85,7 @@
         AlertDialog.Builder b = new AlertDialog.Builder(getContext())
                 .setTitle(getString(R.string.ignore_optimizations_title, mLabel))
                 .setNegativeButton(R.string.cancel, null)
-                .setSingleChoiceItems(mAdapter, mSelectedIndex, this);
+                .setView(R.layout.ignore_optimizations_content);
         if (!mBackend.isSysWhitelisted(mPackageName)) {
             b.setPositiveButton(R.string.done, this);
         }
@@ -86,9 +93,33 @@
     }
 
     @Override
+    public void onStart() {
+        super.onStart();
+        mOptionOn = setup(getDialog().findViewById(R.id.ignore_on), true);
+        mOptionOff = setup(getDialog().findViewById(R.id.ignore_off), false);
+        updateViews();
+    }
+
+    private void updateViews() {
+        mOptionOn.setChecked(mIsEnabled);
+        mOptionOff.setChecked(!mIsEnabled);
+    }
+
+    @Override
+    public void onClick(View v) {
+        if (v == mOptionOn) {
+            mIsEnabled = true;
+            updateViews();
+        } else if (v == mOptionOff) {
+            mIsEnabled = false;
+            updateViews();
+        }
+    }
+
+    @Override
     public void onClick(DialogInterface dialog, int which) {
         if (which == DialogInterface.BUTTON_POSITIVE) {
-            boolean newValue = mSelectedIndex == 0;
+            boolean newValue = mIsEnabled;
             boolean oldValue = mBackend.isWhitelisted(mPackageName);
             if (newValue != oldValue) {
                 if (newValue) {
@@ -97,8 +128,6 @@
                     mBackend.removeApp(mPackageName);
                 }
             }
-        } else {
-            mSelectedIndex = which;
         }
     }
 
@@ -130,29 +159,4 @@
         fragment.setTargetFragment(caller, requestCode);
         fragment.show(caller.getFragmentManager(), HighPowerDetail.class.getSimpleName());
     }
-
-    private class Adapter extends ArrayAdapter<Pair<String, String>> {
-        private final SparseBooleanArray mEnabled = new SparseBooleanArray();
-
-        public Adapter(Context context, int resource) {
-            super(context, resource, android.R.id.title);
-        }
-
-        public void setEnabled(int index, boolean enabled) {
-            mEnabled.put(index, enabled);
-        }
-
-        public boolean isEnabled(int position) {
-            return mEnabled.get(position, true);
-        }
-
-        @Override
-        public View getView(int position, View convertView, ViewGroup parent) {
-            View view = super.getView(position, convertView, parent);
-            ((TextView) view.findViewById(android.R.id.title)).setText(getItem(position).first);
-            ((TextView) view.findViewById(android.R.id.summary)).setText(getItem(position).second);
-            view.setEnabled(isEnabled(position));
-            return view;
-        }
-    }
 }
diff --git a/src/com/android/settings/fuelgauge/PowerUsageDetail.java b/src/com/android/settings/fuelgauge/PowerUsageDetail.java
index 5cb6c24..4bc5982 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageDetail.java
@@ -303,7 +303,6 @@
     private static final String KEY_CONTROLS_PARENT = "controls_parent";
     private static final String KEY_MESSAGES_PARENT = "messages_parent";
     private static final String KEY_PACKAGES_PARENT = "packages_parent";
-    private static final String KEY_BATTERY_HISTORY = "battery_history";
     private static final String KEY_TWO_BUTTONS = "two_buttons";
     private static final String KEY_HIGH_POWER = "high_power";
 
@@ -319,7 +318,6 @@
     private BatterySipper.DrainType mDrainType;
     private double mNoCoverage; // Percentage of time that there was no coverage
 
-    private BatteryHistoryPreference mHistPref;
     private PreferenceCategory mDetailsParent;
     private PreferenceCategory mControlsParent;
     private PreferenceCategory mMessagesParent;
@@ -341,7 +339,6 @@
         mDpm = (DevicePolicyManager)getActivity().getSystemService(Context.DEVICE_POLICY_SERVICE);
 
         addPreferencesFromResource(R.xml.power_usage_details);
-        mHistPref = (BatteryHistoryPreference) findPreference(KEY_BATTERY_HISTORY);
         mDetailsParent = (PreferenceCategory) findPreference(KEY_DETAILS_PARENT);
         mControlsParent = (PreferenceCategory) findPreference(KEY_CONTROLS_PARENT);
         mMessagesParent = (PreferenceCategory) findPreference(KEY_MESSAGES_PARENT);
@@ -440,12 +437,6 @@
         fillControlsSection(mUid);
         fillMessagesSection(mUid);
     }
-    
-    @Override
-    protected void refreshStats() {
-        super.refreshStats();
-        updatePreference(mHistPref);
-    }
 
     private void setupHeader() {
         final Bundle args = getArguments();
diff --git a/src/com/android/settings/notification/NotificationSettings.java b/src/com/android/settings/notification/NotificationSettings.java
index 98f2517..2a56c90 100644
--- a/src/com/android/settings/notification/NotificationSettings.java
+++ b/src/com/android/settings/notification/NotificationSettings.java
@@ -17,6 +17,7 @@
 package com.android.settings.notification;
 
 import android.app.NotificationManager;
+import android.app.admin.DevicePolicyManager;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.ContentResolver;
@@ -427,32 +428,56 @@
             return;
         }
 
-        mLockscreen.addItem(R.string.lock_screen_notifications_summary_show,
-                R.string.lock_screen_notifications_summary_show);
-        if (mSecure) {
+        boolean isSecureNotificationsDisabled = isSecureNotificationsDisabled();
+        boolean isUnredactedNotificationsDisabled = isUnredactedNotificationsDisabled();
+        if (!isSecureNotificationsDisabled && !isUnredactedNotificationsDisabled) {
+            mLockscreen.addItem(R.string.lock_screen_notifications_summary_show,
+                    R.string.lock_screen_notifications_summary_show);
+        }
+        if (mSecure && !isSecureNotificationsDisabled) {
             mLockscreen.addItem(R.string.lock_screen_notifications_summary_hide,
                     R.string.lock_screen_notifications_summary_hide);
         }
         mLockscreen.addItem(R.string.lock_screen_notifications_summary_disable,
                 R.string.lock_screen_notifications_summary_disable);
         updateLockscreenNotifications();
-        mLockscreen.setCallback(new DropDownPreference.Callback() {
-            @Override
-            public boolean onItemSelected(int pos, Object value) {
-                final int val = (Integer) value;
-                if (val == mLockscreenSelectedValue) {
+        if (mLockscreen.getItemCount() > 1) {
+            mLockscreen.setCallback(new DropDownPreference.Callback() {
+                @Override
+                public boolean onItemSelected(int pos, Object value) {
+                    final int val = (Integer) value;
+                    if (val == mLockscreenSelectedValue) {
+                        return true;
+                    }
+                    final boolean enabled =
+                            val != R.string.lock_screen_notifications_summary_disable;
+                    final boolean show = val == R.string.lock_screen_notifications_summary_show;
+                    Settings.Secure.putInt(getContentResolver(),
+                            Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, show ? 1 : 0);
+                    Settings.Secure.putInt(getContentResolver(),
+                            Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, enabled ? 1 : 0);
+                    mLockscreenSelectedValue = val;
                     return true;
                 }
-                final boolean enabled = val != R.string.lock_screen_notifications_summary_disable;
-                final boolean show = val == R.string.lock_screen_notifications_summary_show;
-                Settings.Secure.putInt(getContentResolver(),
-                        Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, show ? 1 : 0);
-                Settings.Secure.putInt(getContentResolver(),
-                        Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, enabled ? 1 : 0);
-                mLockscreenSelectedValue = val;
-                return true;
-            }
-        });
+            });
+        } else {
+            // There is one or less option for the user, disable the drop down.
+            mLockscreen.setEnabled(false);
+        }
+    }
+
+    private boolean isSecureNotificationsDisabled() {
+        final DevicePolicyManager dpm =
+                (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
+        return dpm != null && (dpm.getKeyguardDisabledFeatures(null)
+                & DevicePolicyManager.KEYGUARD_DISABLE_SECURE_NOTIFICATIONS) != 0;
+    }
+
+    private boolean isUnredactedNotificationsDisabled() {
+        final DevicePolicyManager dpm =
+                (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
+        return dpm != null && (dpm.getKeyguardDisabledFeatures(null)
+                & DevicePolicyManager.KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS) != 0;
     }
 
     private void updateLockscreenNotifications() {
diff --git a/src/com/android/settings/notification/RedactionInterstitial.java b/src/com/android/settings/notification/RedactionInterstitial.java
index 16ee3b5..a0d1219 100644
--- a/src/com/android/settings/notification/RedactionInterstitial.java
+++ b/src/com/android/settings/notification/RedactionInterstitial.java
@@ -21,6 +21,7 @@
 import com.android.settings.SettingsActivity;
 import com.android.settings.SettingsPreferenceFragment;
 
+import android.app.admin.DevicePolicyManager;
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
@@ -29,6 +30,7 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.RadioButton;
+import android.widget.RadioGroup;
 
 public class RedactionInterstitial extends SettingsActivity {
 
@@ -44,20 +46,44 @@
         return RedactionInterstitialFragment.class.getName().equals(fragmentName);
     }
 
+    /**
+     * Create an intent for launching RedactionInterstitial.
+     * @return An intent to launch the activity is if is available, @null if the activity is not
+     * available to be launched.
+     */
     public static Intent createStartIntent(Context ctx) {
-        return new Intent(ctx, RedactionInterstitial.class)
-                .putExtra(EXTRA_PREFS_SHOW_BUTTON_BAR, true)
-                .putExtra(EXTRA_PREFS_SET_BACK_TEXT, (String) null)
-                .putExtra(EXTRA_PREFS_SET_NEXT_TEXT, ctx.getString(
-                        R.string.app_notifications_dialog_done));
+        if (isSecureNotificationsDisabled(ctx)) {
+            // If there is no choices for the user, we should not start the activity.
+            return null;
+        } else {
+            return new Intent(ctx, RedactionInterstitial.class)
+                    .putExtra(EXTRA_PREFS_SHOW_BUTTON_BAR, true)
+                    .putExtra(EXTRA_PREFS_SET_BACK_TEXT, (String) null)
+                    .putExtra(EXTRA_PREFS_SET_NEXT_TEXT, ctx.getString(
+                            R.string.app_notifications_dialog_done));
+        }
+    }
+
+    private static boolean isSecureNotificationsDisabled(Context context) {
+        final DevicePolicyManager dpm =
+                (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
+        return dpm != null && (dpm.getKeyguardDisabledFeatures(null)
+                & DevicePolicyManager.KEYGUARD_DISABLE_SECURE_NOTIFICATIONS) != 0;
+    }
+
+    private static boolean isUnredactedNotificationsDisabled(Context context) {
+        final DevicePolicyManager dpm =
+                (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
+        return dpm != null && (dpm.getKeyguardDisabledFeatures(null)
+                & DevicePolicyManager.KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS) != 0;
     }
 
     public static class RedactionInterstitialFragment extends SettingsPreferenceFragment
-            implements View.OnClickListener {
+            implements RadioGroup.OnCheckedChangeListener {
 
+        private RadioGroup mRadioGroup;
         private RadioButton mShowAllButton;
         private RadioButton mRedactSensitiveButton;
-        private RadioButton mHideAllButton;
 
         @Override
         protected int getMetricsCategory() {
@@ -73,13 +99,19 @@
         @Override
         public void onViewCreated(View view, Bundle savedInstanceState) {
             super.onViewCreated(view, savedInstanceState);
+            mRadioGroup = (RadioGroup) view.findViewById(R.id.radio_group);
             mShowAllButton = (RadioButton) view.findViewById(R.id.show_all);
             mRedactSensitiveButton = (RadioButton) view.findViewById(R.id.redact_sensitive);
-            mHideAllButton = (RadioButton) view.findViewById(R.id.hide_all);
 
-            mShowAllButton.setOnClickListener(this);
-            mRedactSensitiveButton.setOnClickListener(this);
-            mHideAllButton.setOnClickListener(this);
+            mRadioGroup.setOnCheckedChangeListener(this);
+
+            // Disable buttons according to policy.
+            if (isSecureNotificationsDisabled(getActivity())) {
+                mShowAllButton.setEnabled(false);
+                mRedactSensitiveButton.setEnabled(false);
+            } else if (isUnredactedNotificationsDisabled(getActivity())) {
+                mShowAllButton.setEnabled(false);
+            }
         }
 
         @Override
@@ -93,15 +125,23 @@
                         Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, 0) != 0;
             final boolean show = Settings.Secure.getInt(getContentResolver(),
                         Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, 1) != 0;
-            mShowAllButton.setChecked(enabled && show);
-            mRedactSensitiveButton.setChecked(enabled && !show);
-            mHideAllButton.setChecked(!enabled);
+
+            int checkedButtonId = R.id.hide_all;
+            if (enabled) {
+                if (show && mShowAllButton.isEnabled()) {
+                    checkedButtonId = R.id.show_all;
+                } else if (mRedactSensitiveButton.isEnabled()) {
+                    checkedButtonId = R.id.redact_sensitive;
+                }
+            }
+
+            mRadioGroup.check(checkedButtonId);
         }
 
         @Override
-        public void onClick(View v) {
-            final boolean show = (v == mShowAllButton);
-            final boolean enabled = (v != mHideAllButton);
+        public void onCheckedChanged(RadioGroup group, int checkedId) {
+            final boolean show = (checkedId == R.id.show_all);
+            final boolean enabled = (checkedId != R.id.hide_all);
 
             Settings.Secure.putInt(getContentResolver(),
                     Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, show ? 1 : 0);
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index fed8fd8..cce1966 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -650,7 +650,7 @@
                         AccessPointPreference preference = new AccessPointPreference(accessPoint,
                                 getActivity(), false);
 
-                        if (mOpenSsid != null && mOpenSsid.equals(accessPoint.getSsid())
+                        if (mOpenSsid != null && mOpenSsid.equals(accessPoint.getSsidStr())
                                 && !accessPoint.isSaved()
                                 && accessPoint.getSecurity() != AccessPoint.SECURITY_NONE) {
                             onPreferenceTreeClick(getPreferenceScreen(), preference);