108531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock/* 208531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock * Copyright (C) 2015 The Android Open Source Project 308531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock * 408531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock * Licensed under the Apache License, Version 2.0 (the "License"); 508531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock * you may not use this file except in compliance with the License. 608531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock * You may obtain a copy of the License at 708531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock * 808531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock * http://www.apache.org/licenses/LICENSE-2.0 908531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock * 1008531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock * Unless required by applicable law or agreed to in writing, software 1108531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock * distributed under the License is distributed on an "AS IS" BASIS, 1208531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1308531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock * See the License for the specific language governing permissions and 1408531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock * limitations under the License. 1508531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock */ 1608531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock 1708531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlockpackage com.android.settings.notification; 1808531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock 19afa3a1a0cbebbab40663aedbd60d721df1f161e9Jason Monkimport android.annotation.Nullable; 20a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlockimport android.app.AlertDialog; 21a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlockimport android.app.Dialog; 22a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlockimport android.app.DialogFragment; 2308531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlockimport android.app.NotificationManager; 2483f35ba88dd80cc7e5613d11c546d989aa1ec078Julia Reynoldsimport android.content.ComponentName; 2508531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlockimport android.content.Context; 26a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlockimport android.content.DialogInterface; 2708531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlockimport android.content.pm.ApplicationInfo; 2808531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlockimport android.content.pm.PackageItemInfo; 2908531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlockimport android.content.pm.PackageManager; 30a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlockimport android.database.ContentObserver; 31a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlockimport android.net.Uri; 32b8099f542c21e3ac57d250837e60ec65653ab55cJohn Spurlockimport android.os.AsyncTask; 3308531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlockimport android.os.Bundle; 34a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlockimport android.os.Handler; 35a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlockimport android.os.Looper; 3683f35ba88dd80cc7e5613d11c546d989aa1ec078Julia Reynoldsimport android.provider.Settings; 37a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlockimport android.provider.Settings.Secure; 3839b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v14.preference.SwitchPreference; 3939b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.Preference; 4039b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.Preference.OnPreferenceChangeListener; 4139b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.PreferenceScreen; 42a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlockimport android.text.TextUtils; 4308531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlockimport android.util.ArraySet; 4408531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlockimport android.view.View; 4583f35ba88dd80cc7e5613d11c546d989aa1ec078Julia Reynoldsimport android.widget.Toast; 4683f35ba88dd80cc7e5613d11c546d989aa1ec078Julia Reynolds 479d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wrenimport com.android.internal.logging.MetricsProto.MetricsEvent; 4808531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlockimport com.android.settings.R; 4908531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock 50b8099f542c21e3ac57d250837e60ec65653ab55cJohn Spurlockimport java.util.ArrayList; 51b8099f542c21e3ac57d250837e60ec65653ab55cJohn Spurlockimport java.util.Collections; 5208531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlockimport java.util.List; 5308531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock 54afa3a1a0cbebbab40663aedbd60d721df1f161e9Jason Monkpublic class ZenAccessSettings extends EmptyTextSettings { 55a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock 56a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock private final SettingObserver mObserver = new SettingObserver(); 5783f35ba88dd80cc7e5613d11c546d989aa1ec078Julia Reynolds private static final String ENABLED_SERVICES_SEPARATOR = ":"; 58a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock 5908531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock private Context mContext; 6008531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock private PackageManager mPkgMan; 6108531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock private NotificationManager mNoMan; 62b8099f542c21e3ac57d250837e60ec65653ab55cJohn Spurlock 63b8099f542c21e3ac57d250837e60ec65653ab55cJohn Spurlock @Override 64b8099f542c21e3ac57d250837e60ec65653ab55cJohn Spurlock protected int getMetricsCategory() { 659d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wren return MetricsEvent.NOTIFICATION_ZEN_MODE_ACCESS; 66b8099f542c21e3ac57d250837e60ec65653ab55cJohn Spurlock } 6708531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock 6808531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock @Override 6908531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock public void onCreate(Bundle icicle) { 7008531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock super.onCreate(icicle); 7108531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock 7208531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock mContext = getActivity(); 7308531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock mPkgMan = mContext.getPackageManager(); 7408531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock mNoMan = mContext.getSystemService(NotificationManager.class); 75b8099f542c21e3ac57d250837e60ec65653ab55cJohn Spurlock setPreferenceScreen(getPreferenceManager().createPreferenceScreen(mContext)); 7608531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock } 7708531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock 7808531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock @Override 79afa3a1a0cbebbab40663aedbd60d721df1f161e9Jason Monk public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 80afa3a1a0cbebbab40663aedbd60d721df1f161e9Jason Monk super.onViewCreated(view, savedInstanceState); 81afa3a1a0cbebbab40663aedbd60d721df1f161e9Jason Monk setEmptyText(R.string.zen_access_empty_text); 8208531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock } 8308531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock 8408531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock @Override 8508531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock public void onResume() { 8608531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock super.onResume(); 8708531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock reloadList(); 88a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock getContentResolver().registerContentObserver( 89a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock Secure.getUriFor(Secure.ENABLED_NOTIFICATION_POLICY_ACCESS_PACKAGES), false, 90a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock mObserver); 9183f35ba88dd80cc7e5613d11c546d989aa1ec078Julia Reynolds getContentResolver().registerContentObserver( 9283f35ba88dd80cc7e5613d11c546d989aa1ec078Julia Reynolds Secure.getUriFor(Secure.ENABLED_NOTIFICATION_LISTENERS), false, 9383f35ba88dd80cc7e5613d11c546d989aa1ec078Julia Reynolds mObserver); 94a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock } 95a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock 96a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock @Override 97a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock public void onPause() { 98a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock super.onPause(); 99a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock getContentResolver().unregisterContentObserver(mObserver); 10008531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock } 10108531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock 10208531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock private void reloadList() { 103b8099f542c21e3ac57d250837e60ec65653ab55cJohn Spurlock final PreferenceScreen screen = getPreferenceScreen(); 104b8099f542c21e3ac57d250837e60ec65653ab55cJohn Spurlock screen.removeAll(); 105b8099f542c21e3ac57d250837e60ec65653ab55cJohn Spurlock final ArrayList<ApplicationInfo> apps = new ArrayList<>(); 10608531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock final ArraySet<String> requesting = mNoMan.getPackagesRequestingNotificationPolicyAccess(); 10783f35ba88dd80cc7e5613d11c546d989aa1ec078Julia Reynolds if (!requesting.isEmpty()) { 108b8099f542c21e3ac57d250837e60ec65653ab55cJohn Spurlock final List<ApplicationInfo> installed = mPkgMan.getInstalledApplications(0); 109b8099f542c21e3ac57d250837e60ec65653ab55cJohn Spurlock if (installed != null) { 110b8099f542c21e3ac57d250837e60ec65653ab55cJohn Spurlock for (ApplicationInfo app : installed) { 11108531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock if (requesting.contains(app.packageName)) { 112b8099f542c21e3ac57d250837e60ec65653ab55cJohn Spurlock apps.add(app); 11308531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock } 11408531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock } 11508531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock } 11608531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock } 11783f35ba88dd80cc7e5613d11c546d989aa1ec078Julia Reynolds ArraySet<String> autoApproved = getEnabledNotificationListeners(); 11883f35ba88dd80cc7e5613d11c546d989aa1ec078Julia Reynolds requesting.addAll(autoApproved); 119b8099f542c21e3ac57d250837e60ec65653ab55cJohn Spurlock Collections.sort(apps, new PackageItemInfo.DisplayNameComparator(mPkgMan)); 120b8099f542c21e3ac57d250837e60ec65653ab55cJohn Spurlock for (ApplicationInfo app : apps) { 121b8099f542c21e3ac57d250837e60ec65653ab55cJohn Spurlock final String pkg = app.packageName; 122a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock final CharSequence label = app.loadLabel(mPkgMan); 12339b467482d1bf256a111c757e9b7621c6f523271Jason Monk final SwitchPreference pref = new SwitchPreference(getPrefContext()); 124b8099f542c21e3ac57d250837e60ec65653ab55cJohn Spurlock pref.setPersistent(false); 125b8099f542c21e3ac57d250837e60ec65653ab55cJohn Spurlock pref.setIcon(app.loadIcon(mPkgMan)); 126a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock pref.setTitle(label); 127b8099f542c21e3ac57d250837e60ec65653ab55cJohn Spurlock pref.setChecked(hasAccess(pkg)); 12883f35ba88dd80cc7e5613d11c546d989aa1ec078Julia Reynolds if (autoApproved.contains(pkg)) { 12983f35ba88dd80cc7e5613d11c546d989aa1ec078Julia Reynolds pref.setEnabled(false); 13083f35ba88dd80cc7e5613d11c546d989aa1ec078Julia Reynolds pref.setSummary(getString(R.string.zen_access_disabled_package_warning)); 13183f35ba88dd80cc7e5613d11c546d989aa1ec078Julia Reynolds } 132b8099f542c21e3ac57d250837e60ec65653ab55cJohn Spurlock pref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 133b8099f542c21e3ac57d250837e60ec65653ab55cJohn Spurlock @Override 134b8099f542c21e3ac57d250837e60ec65653ab55cJohn Spurlock public boolean onPreferenceChange(Preference preference, Object newValue) { 135b8099f542c21e3ac57d250837e60ec65653ab55cJohn Spurlock final boolean access = (Boolean) newValue; 136148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds if (access) { 137148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds new ScaryWarningDialogFragment() 138148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds .setPkgInfo(pkg, label) 139148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds .show(getFragmentManager(), "dialog"); 140148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds } else { 141148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds new FriendlyWarningDialogFragment() 142148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds .setPkgInfo(pkg, label) 143148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds .show(getFragmentManager(), "dialog"); 144a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock } 145a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock return false; 146b8099f542c21e3ac57d250837e60ec65653ab55cJohn Spurlock } 147b8099f542c21e3ac57d250837e60ec65653ab55cJohn Spurlock }); 148b8099f542c21e3ac57d250837e60ec65653ab55cJohn Spurlock screen.addPreference(pref); 149b8099f542c21e3ac57d250837e60ec65653ab55cJohn Spurlock } 15008531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock } 15108531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock 15283f35ba88dd80cc7e5613d11c546d989aa1ec078Julia Reynolds private ArraySet<String> getEnabledNotificationListeners() { 15383f35ba88dd80cc7e5613d11c546d989aa1ec078Julia Reynolds ArraySet<String> packages = new ArraySet<>(); 15483f35ba88dd80cc7e5613d11c546d989aa1ec078Julia Reynolds String settingValue = Settings.Secure.getString(getContext().getContentResolver(), 15583f35ba88dd80cc7e5613d11c546d989aa1ec078Julia Reynolds Settings.Secure.ENABLED_NOTIFICATION_LISTENERS); 15683f35ba88dd80cc7e5613d11c546d989aa1ec078Julia Reynolds if (!TextUtils.isEmpty(settingValue)) { 15783f35ba88dd80cc7e5613d11c546d989aa1ec078Julia Reynolds String[] restored = settingValue.split(ENABLED_SERVICES_SEPARATOR); 15883f35ba88dd80cc7e5613d11c546d989aa1ec078Julia Reynolds for (int i = 0; i < restored.length; i++) { 15983f35ba88dd80cc7e5613d11c546d989aa1ec078Julia Reynolds ComponentName value = ComponentName.unflattenFromString(restored[i]); 16083f35ba88dd80cc7e5613d11c546d989aa1ec078Julia Reynolds if (null != value) { 16183f35ba88dd80cc7e5613d11c546d989aa1ec078Julia Reynolds packages.add(value.getPackageName()); 16283f35ba88dd80cc7e5613d11c546d989aa1ec078Julia Reynolds } 16383f35ba88dd80cc7e5613d11c546d989aa1ec078Julia Reynolds } 16483f35ba88dd80cc7e5613d11c546d989aa1ec078Julia Reynolds } 16583f35ba88dd80cc7e5613d11c546d989aa1ec078Julia Reynolds return packages; 16683f35ba88dd80cc7e5613d11c546d989aa1ec078Julia Reynolds } 16783f35ba88dd80cc7e5613d11c546d989aa1ec078Julia Reynolds 16808531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock private boolean hasAccess(String pkg) { 16908531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock return mNoMan.isNotificationPolicyAccessGrantedForPackage(pkg); 17008531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock } 17108531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock 172a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock private static void setAccess(final Context context, final String pkg, final boolean access) { 173a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock AsyncTask.execute(new Runnable() { 174a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock @Override 175a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock public void run() { 176a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock final NotificationManager mgr = context.getSystemService(NotificationManager.class); 177a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock mgr.setNotificationPolicyAccessGranted(pkg, access); 178a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock } 179a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock }); 180a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock } 181a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock 182148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds private static void deleteRules(final Context context, final String pkg) { 183148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds AsyncTask.execute(new Runnable() { 184148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds @Override 185148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds public void run() { 186148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds final NotificationManager mgr = context.getSystemService(NotificationManager.class); 187148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds mgr.removeAutomaticZenRules(pkg); 188148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds } 189148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds }); 190148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds } 191148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds 192a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock private final class SettingObserver extends ContentObserver { 193a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock public SettingObserver() { 194a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock super(new Handler(Looper.getMainLooper())); 195a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock } 196a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock 197a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock @Override 198a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock public void onChange(boolean selfChange, Uri uri) { 199a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock reloadList(); 200a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock } 20108531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock } 20208531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock 203148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds /** 204148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds * Warning dialog when allowing zen access warning about the privileges being granted. 205148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds */ 206a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock public static class ScaryWarningDialogFragment extends DialogFragment { 207a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock static final String KEY_PKG = "p"; 208a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock static final String KEY_LABEL = "l"; 209a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock 210a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock public ScaryWarningDialogFragment setPkgInfo(String pkg, CharSequence label) { 211a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock Bundle args = new Bundle(); 212a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock args.putString(KEY_PKG, pkg); 213a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock args.putString(KEY_LABEL, TextUtils.isEmpty(label) ? pkg : label.toString()); 214a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock setArguments(args); 215a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock return this; 216a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock } 217a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock 218a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock @Override 219a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock public Dialog onCreateDialog(Bundle savedInstanceState) { 220a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock super.onCreate(savedInstanceState); 221a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock final Bundle args = getArguments(); 222a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock final String pkg = args.getString(KEY_PKG); 223a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock final String label = args.getString(KEY_LABEL); 224a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock 225a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock final String title = getResources().getString(R.string.zen_access_warning_dialog_title, 226a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock label); 227a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock final String summary = getResources() 228a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock .getString(R.string.zen_access_warning_dialog_summary); 229a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock return new AlertDialog.Builder(getContext()) 230a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock .setMessage(summary) 231a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock .setTitle(title) 232a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock .setCancelable(true) 233a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock .setPositiveButton(R.string.allow, 234a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock new DialogInterface.OnClickListener() { 235a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock public void onClick(DialogInterface dialog, int id) { 236a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock setAccess(getContext(), pkg, true); 237a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock } 238a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock }) 239a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock .setNegativeButton(R.string.deny, 240a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock new DialogInterface.OnClickListener() { 241a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock public void onClick(DialogInterface dialog, int id) { 242a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock // pass 243a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock } 244a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock }) 245a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock .create(); 246a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock } 247a00194d99852a0ce63bda50ad5134f99a423015eJohn Spurlock } 248148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds 249148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds /** 250148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds * Warning dialog when revoking zen access warning that zen rule instances will be deleted. 251148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds */ 252148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds public static class FriendlyWarningDialogFragment extends DialogFragment { 253148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds static final String KEY_PKG = "p"; 254148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds static final String KEY_LABEL = "l"; 255148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds 256148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds public FriendlyWarningDialogFragment setPkgInfo(String pkg, CharSequence label) { 257148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds Bundle args = new Bundle(); 258148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds args.putString(KEY_PKG, pkg); 259148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds args.putString(KEY_LABEL, TextUtils.isEmpty(label) ? pkg : label.toString()); 260148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds setArguments(args); 261148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds return this; 262148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds } 263148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds 264148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds @Override 265148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds public Dialog onCreateDialog(Bundle savedInstanceState) { 266148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds super.onCreate(savedInstanceState); 267148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds final Bundle args = getArguments(); 268148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds final String pkg = args.getString(KEY_PKG); 269148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds final String label = args.getString(KEY_LABEL); 270148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds 271148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds final String title = getResources().getString( 272148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds R.string.zen_access_revoke_warning_dialog_title, label); 273148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds final String summary = getResources() 274148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds .getString(R.string.zen_access_revoke_warning_dialog_summary); 275148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds return new AlertDialog.Builder(getContext()) 276148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds .setMessage(summary) 277148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds .setTitle(title) 278148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds .setCancelable(true) 279148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds .setPositiveButton(R.string.okay, 280148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds new DialogInterface.OnClickListener() { 281148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds public void onClick(DialogInterface dialog, int id) { 282148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds deleteRules(getContext(), pkg); 283148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds setAccess(getContext(), pkg, false); 284148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds } 285148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds }) 286148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds .setNegativeButton(R.string.cancel, 287148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds new DialogInterface.OnClickListener() { 288148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds public void onClick(DialogInterface dialog, int id) { 289148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds // pass 290148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds } 291148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds }) 292148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds .create(); 293148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds } 294148ace318dde600f0b0100f373337ab534fa9ca0Julia Reynolds } 29508531a81cb34dc45f0da4ca88e8530169831c7d2John Spurlock} 296