diff options
author | Lars Greiss <kufikugel@googlemail.com> | 2014-11-24 23:50:07 +0100 |
---|---|---|
committer | Gerrit Code Review <gerrit@cyanogenmod.org> | 2016-06-01 10:58:06 -0700 |
commit | 9546c00936b4458b3bf932d62c28b3219ea6a03e (patch) | |
tree | d8e361b10cb6270351ab1284c48ed9f58f95ecd7 | |
parent | d13fe2ca488fea9627794385b5f563bac55d86ae (diff) | |
download | packages_apps_Settings-9546c00936b4458b3bf932d62c28b3219ea6a03e.zip packages_apps_Settings-9546c00936b4458b3bf932d62c28b3219ea6a03e.tar.gz packages_apps_Settings-9546c00936b4458b3bf932d62c28b3219ea6a03e.tar.bz2 |
Settings: Add per app controls for LP keyguard notifications (2/2)
Nice done by google but the UX is a problem especially for ppl who are using a lot apps and just want
to see from important apps the notifications on the lockscreen.
This commit adds the ability to
- enable/disable per app the keyguard notification at all
- enable/disable per app ongoing notifications on the keyguard
We handle this over the app policy conf file like the other per app notification options
TICKET: CRACKLING-1127
Change-Id: I12df484379621c3baba333d30a8b545b3a0ec0ae
-rw-r--r-- | res/values/cm_strings.xml | 7 | ||||
-rw-r--r-- | res/xml/app_notification_settings.xml | 18 | ||||
-rw-r--r-- | src/com/android/settings/notification/AppNotificationSettings.java | 49 | ||||
-rw-r--r-- | src/com/android/settings/notification/NotificationBackend.java | 19 |
4 files changed, 92 insertions, 1 deletions
diff --git a/res/values/cm_strings.xml b/res/values/cm_strings.xml index c02a8f8..4b97f89 100644 --- a/res/values/cm_strings.xml +++ b/res/values/cm_strings.xml @@ -1216,4 +1216,11 @@ <!-- title for lock screen blur preference --> <string name="lockscreen_blur_enabled_title">Lock screen blur</string> + + <!-- Per app controls for LP keyguard notifications --> + <string name="app_notification_show_on_keyguard_title">Show on lockscreen</string> + <string name="app_notification_show_on_keyguard_summary">Show notifications from this app on the lockscreen</string> + <string name="app_notification_no_ongoing_on_keyguard_title">Disable persistent notification on lockscreen</string> + <string name="app_notification_no_ongoing_on_keyguard_summary">Never show persistent notifications from this app on the lockscreen</string> + </resources> diff --git a/res/xml/app_notification_settings.xml b/res/xml/app_notification_settings.xml index b7557b2..f438e2f 100644 --- a/res/xml/app_notification_settings.xml +++ b/res/xml/app_notification_settings.xml @@ -50,11 +50,27 @@ android:order="4" android:persistent="false" /> + <!-- Keyguard options --> + <SwitchPreference + android:key="show_on_keyguard" + android:title="@string/app_notification_show_on_keyguard_title" + android:summary="@string/app_notification_show_on_keyguard_summary" + android:order="5" + android:persistent="false" /> + + <SwitchPreference + android:key="no_ongoing_on_keyguard" + android:title="@string/app_notification_no_ongoing_on_keyguard_title" + android:summary="@string/app_notification_no_ongoing_on_keyguard_summary" + android:order="6" + android:dependency="show_on_keyguard" + android:persistent="false" /> + <!-- App notification preferences --> <Preference android:key="app_settings" android:title="@string/app_notification_preferences" - android:order="5" + android:order="7" android:persistent="false" /> </PreferenceScreen> diff --git a/src/com/android/settings/notification/AppNotificationSettings.java b/src/com/android/settings/notification/AppNotificationSettings.java index d54aced..22df064 100644 --- a/src/com/android/settings/notification/AppNotificationSettings.java +++ b/src/com/android/settings/notification/AppNotificationSettings.java @@ -59,6 +59,8 @@ public class AppNotificationSettings extends SettingsPreferenceFragment { private static final String KEY_PEEKABLE = "peekable"; private static final String KEY_SENSITIVE = "sensitive"; private static final String KEY_APP_SETTINGS = "app_settings"; + private static final String KEY_SHOW_ON_KEYGUARD = "show_on_keyguard"; + private static final String KEY_NO_ONGOING_ON_KEYGUARD = "no_ongoing_on_keyguard"; private static final Intent APP_NOTIFICATION_PREFS_CATEGORY_INTENT = new Intent(Intent.ACTION_MAIN) @@ -71,6 +73,8 @@ public class AppNotificationSettings extends SettingsPreferenceFragment { private SwitchPreference mPriority; private SwitchPreference mPeekable; private SwitchPreference mSensitive; + private SwitchPreference mShowOnKeyguard; + private SwitchPreference mShowNoOngoingOnKeyguard; private AppRow mAppRow; private boolean mCreated; private boolean mIsSystemPackage; @@ -137,6 +141,8 @@ public class AppNotificationSettings extends SettingsPreferenceFragment { mPriority = (SwitchPreference) findPreference(KEY_PRIORITY); mPeekable = (SwitchPreference) findPreference(KEY_PEEKABLE); mSensitive = (SwitchPreference) findPreference(KEY_SENSITIVE); + mShowOnKeyguard = (SwitchPreference) findPreference(KEY_SHOW_ON_KEYGUARD); + mShowNoOngoingOnKeyguard = (SwitchPreference) findPreference(KEY_NO_ONGOING_ON_KEYGUARD); mAppRow = mBackend.loadAppRow(pm, info.applicationInfo); @@ -202,6 +208,47 @@ public class AppNotificationSettings extends SettingsPreferenceFragment { } else { removePreference(KEY_APP_SETTINGS); } + + int keyguard = mBackend.getShowNotificationForPackageOnKeyguard(pkg, mUid); + mShowOnKeyguard.setChecked((keyguard & Notification.SHOW_ALL_NOTI_ON_KEYGUARD) != 0); + mShowNoOngoingOnKeyguard.setChecked( + (keyguard & Notification.SHOW_NO_ONGOING_NOTI_ON_KEYGUARD) != 0); + + mShowOnKeyguard.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + final boolean showOnKeyguard = (Boolean) newValue; + int keyguard = mBackend.getShowNotificationForPackageOnKeyguard(pkg, mUid); + + if (showOnKeyguard && (keyguard & Notification.SHOW_ALL_NOTI_ON_KEYGUARD) == 0) { + keyguard |= Notification.SHOW_ALL_NOTI_ON_KEYGUARD; + } else { + keyguard &= ~Notification.SHOW_ALL_NOTI_ON_KEYGUARD; + } + return mBackend.setShowNotificationForPackageOnKeyguard(pkg, mUid, keyguard); + } + }); + + mShowNoOngoingOnKeyguard.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + final boolean showNoOngoingOnKeyguard = (Boolean) newValue; + int keyguard = mBackend.getShowNotificationForPackageOnKeyguard(pkg, mUid); + if (showNoOngoingOnKeyguard + && (keyguard & Notification.SHOW_NO_ONGOING_NOTI_ON_KEYGUARD) == 0) { + keyguard |= Notification.SHOW_NO_ONGOING_NOTI_ON_KEYGUARD; + } else { + keyguard &= ~Notification.SHOW_NO_ONGOING_NOTI_ON_KEYGUARD; + } + return mBackend.setShowNotificationForPackageOnKeyguard(pkg, mUid, keyguard); + } + }); + + // Users cannot block notifications from system/signature packages + if (mIsSystemPackage || !getLockscreenNotificationsEnabled()) { + getPreferenceScreen().removePreference(mShowNoOngoingOnKeyguard); + getPreferenceScreen().removePreference(mShowOnKeyguard); + } } @Override @@ -226,6 +273,8 @@ public class AppNotificationSettings extends SettingsPreferenceFragment { setVisible(mPeekable, mIsSystemPackage || !banned && headsUpEnabled); setVisible(mSensitive, mIsSystemPackage || !banned && lockscreenSecure && lockscreenNotificationsEnabled && allowPrivate); + setVisible(mShowOnKeyguard, mIsSystemPackage || !banned); + setVisible(mShowNoOngoingOnKeyguard, mIsSystemPackage || !banned); } private void setVisible(Preference p, boolean visible) { diff --git a/src/com/android/settings/notification/NotificationBackend.java b/src/com/android/settings/notification/NotificationBackend.java index 2060719..5467cb3 100644 --- a/src/com/android/settings/notification/NotificationBackend.java +++ b/src/com/android/settings/notification/NotificationBackend.java @@ -130,6 +130,25 @@ public class NotificationBackend { } } + public int getShowNotificationForPackageOnKeyguard(String pkg, int uid) { + try { + return sINM.getShowNotificationForPackageOnKeyguard(pkg, uid); + } catch (Exception e) { + Log.w(TAG, "Error calling NoMan", e); + return Notification.SHOW_ALL_NOTI_ON_KEYGUARD; + } + } + + public boolean setShowNotificationForPackageOnKeyguard(String pkg, int uid, int status) { + try { + sINM.setShowNotificationForPackageOnKeyguard(pkg, uid, status); + return true; + } catch (Exception e) { + Log.w(TAG, "Error calling NoMan", e); + return false; + } + } + static class Row { public String section; } |