diff options
author | Alex Chau <alexchau@google.com> | 2015-06-12 11:45:08 +0100 |
---|---|---|
committer | Alex Chau <alexchau@google.com> | 2015-06-18 16:00:16 +0100 |
commit | ccade402782d9b39331ada3859aa00893132e5c9 (patch) | |
tree | c6d556809b431bf73a1392cfc813ef61bcb671fe /src/com/android/settings/notification/RedactionInterstitial.java | |
parent | 2c55f738c4336a3f379f94f4142c20a473ae3a9a (diff) | |
download | packages_apps_Settings-ccade402782d9b39331ada3859aa00893132e5c9.zip packages_apps_Settings-ccade402782d9b39331ada3859aa00893132e5c9.tar.gz packages_apps_Settings-ccade402782d9b39331ada3859aa00893132e5c9.tar.bz2 |
Enforce Keyguard policy in Notification Settings
- Applied getKeyguardDisabledFeatures for notification settings and
notification setup page (after settings a screenlock)
- If a notification settings is disabled, the next least secure setting
will be chosen
- Although KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS can be set be
profile, it will not be reflected in both settings page. This is
because it does not affect the owner (user 0), as mentioned in
DevicePolicyManagerService.PROFILE_KEYGUARD_FEATURES_AFFECT_OWNER
- Skip RedactionInterstitial if there is <= 1 options for the user
- Tested with both Setup wizard and settings case, both pattern and
password, as well as toggling the policy on and off
Bug: 19307118
Bug: 17099898
Change-Id: If640d5576caa0163e9942569f7b4643a30bbfe0a
Diffstat (limited to 'src/com/android/settings/notification/RedactionInterstitial.java')
-rw-r--r-- | src/com/android/settings/notification/RedactionInterstitial.java | 74 |
1 files changed, 57 insertions, 17 deletions
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.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); |