diff --git a/res/layout/redaction_interstitial.xml b/res/layout/redaction_interstitial.xml index 6f0ba2ee17a..14e57f8dce9 100644 --- a/res/layout/redaction_interstitial.xml +++ b/res/layout/redaction_interstitial.xml @@ -33,6 +33,7 @@ android:textAppearance="?android:attr/textAppearanceMedium" /> 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 16ee3b58458..a0d12192df9 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.R; 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.LayoutInflater; 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 @@ public class RedactionInterstitial extends SettingsActivity { 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 @@ public class RedactionInterstitial extends SettingsActivity { @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 @@ public class RedactionInterstitial extends SettingsActivity { 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);