From 148ace318dde600f0b0100f373337ab534fa9ca0 Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Wed, 2 Dec 2015 08:35:49 -0500 Subject: [PATCH] Warn users about rule deletion when revoking DND access. Bug: 25472361 Change-Id: I5a850891733e213ac76aa67c8cb84dfa6f82b153 --- res/values/strings.xml | 6 ++ .../notification/ZenAccessSettings.java | 76 +++++++++++++++++-- 2 files changed, 74 insertions(+), 8 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index ecc465ec676..8928307796c 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -6864,6 +6864,12 @@ The app will be able to turn on/off Do Not Disturb and make changes to related settings. + + Revoke access to Do Not Disturb for %1$s? + + + All Do Not Disturb rules created by this app will be removed. + Don\u2019t optimize diff --git a/src/com/android/settings/notification/ZenAccessSettings.java b/src/com/android/settings/notification/ZenAccessSettings.java index 1c85f4d9c82..4cec0b4503d 100644 --- a/src/com/android/settings/notification/ZenAccessSettings.java +++ b/src/com/android/settings/notification/ZenAccessSettings.java @@ -119,15 +119,15 @@ public class ZenAccessSettings extends EmptyTextSettings { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { final boolean access = (Boolean) newValue; - if (!access) { - // disabling access - setAccess(mContext, pkg, access); - return true; + if (access) { + new ScaryWarningDialogFragment() + .setPkgInfo(pkg, label) + .show(getFragmentManager(), "dialog"); + } else { + new FriendlyWarningDialogFragment() + .setPkgInfo(pkg, label) + .show(getFragmentManager(), "dialog"); } - // enabling access: show a scary dialog first - new ScaryWarningDialogFragment() - .setPkgInfo(pkg, label) - .show(getFragmentManager(), "dialog"); return false; } }); @@ -149,6 +149,16 @@ public class ZenAccessSettings extends EmptyTextSettings { }); } + private static void deleteRules(final Context context, final String pkg) { + AsyncTask.execute(new Runnable() { + @Override + public void run() { + final NotificationManager mgr = context.getSystemService(NotificationManager.class); + mgr.removeAutomaticZenRules(pkg); + } + }); + } + private final class SettingObserver extends ContentObserver { public SettingObserver() { super(new Handler(Looper.getMainLooper())); @@ -160,6 +170,9 @@ public class ZenAccessSettings extends EmptyTextSettings { } } + /** + * Warning dialog when allowing zen access warning about the privileges being granted. + */ public static class ScaryWarningDialogFragment extends DialogFragment { static final String KEY_PKG = "p"; static final String KEY_LABEL = "l"; @@ -202,4 +215,51 @@ public class ZenAccessSettings extends EmptyTextSettings { .create(); } } + + /** + * Warning dialog when revoking zen access warning that zen rule instances will be deleted. + */ + public static class FriendlyWarningDialogFragment extends DialogFragment { + static final String KEY_PKG = "p"; + static final String KEY_LABEL = "l"; + + public FriendlyWarningDialogFragment setPkgInfo(String pkg, CharSequence label) { + Bundle args = new Bundle(); + args.putString(KEY_PKG, pkg); + args.putString(KEY_LABEL, TextUtils.isEmpty(label) ? pkg : label.toString()); + setArguments(args); + return this; + } + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + final Bundle args = getArguments(); + final String pkg = args.getString(KEY_PKG); + final String label = args.getString(KEY_LABEL); + + final String title = getResources().getString( + R.string.zen_access_revoke_warning_dialog_title, label); + final String summary = getResources() + .getString(R.string.zen_access_revoke_warning_dialog_summary); + return new AlertDialog.Builder(getContext()) + .setMessage(summary) + .setTitle(title) + .setCancelable(true) + .setPositiveButton(R.string.okay, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + deleteRules(getContext(), pkg); + setAccess(getContext(), pkg, false); + } + }) + .setNegativeButton(R.string.cancel, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + // pass + } + }) + .create(); + } + } }