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 6169fc9..292698f 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 -->
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/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);
