diff --git a/res/xml/app_notification_settings.xml b/res/xml/app_notification_settings.xml index 1d8ae4561a6..a65b98dbbd0 100644 --- a/res/xml/app_notification_settings.xml +++ b/res/xml/app_notification_settings.xml @@ -39,7 +39,6 @@ android:key="sensitive" android:title="@string/app_notification_sensitive_title" android:summary="@string/app_notification_sensitive_summary" - android:enabled="false" android:persistent="false" /> diff --git a/src/com/android/settings/notification/AppNotificationSettings.java b/src/com/android/settings/notification/AppNotificationSettings.java index 050008de0af..1dd3bdca793 100644 --- a/src/com/android/settings/notification/AppNotificationSettings.java +++ b/src/com/android/settings/notification/AppNotificationSettings.java @@ -137,7 +137,9 @@ public class AppNotificationSettings extends SettingsPreferenceFragment { mSensitive = (SwitchPreference) findPreference(KEY_SENSITIVE); final boolean secure = new LockPatternUtils(getActivity()).isSecure(); - if (!secure) { + final boolean enabled = getLockscreenNotificationsEnabled(); + final boolean allowPrivate = getLockscreenAllowPrivateNotifications(); + if (!secure || !enabled || !allowPrivate) { getPreferenceScreen().removePreference(mSensitive); } @@ -193,6 +195,16 @@ public class AppNotificationSettings extends SettingsPreferenceFragment { } } + private boolean getLockscreenNotificationsEnabled() { + return Settings.Secure.getInt(getContentResolver(), + Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, 0) != 0; + } + + private boolean getLockscreenAllowPrivateNotifications() { + return Settings.Secure.getInt(getContentResolver(), + Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, 0) != 0; + } + private void toastAndFinish() { Toast.makeText(mContext, R.string.app_not_found_dlg_text, Toast.LENGTH_SHORT).show(); getActivity().finish(); diff --git a/src/com/android/settings/notification/NotificationAppList.java b/src/com/android/settings/notification/NotificationAppList.java index ad6956bd6c1..bfed92d03a7 100644 --- a/src/com/android/settings/notification/NotificationAppList.java +++ b/src/com/android/settings/notification/NotificationAppList.java @@ -568,13 +568,28 @@ public class NotificationAppList extends PinnedHeaderListFragment } public boolean getSensitive(String pkg, int uid) { - // TODO get visibility state from NoMan - return false; + INotificationManager nm = INotificationManager.Stub.asInterface( + ServiceManager.getService(Context.NOTIFICATION_SERVICE)); + try { + return nm.getPackageVisibility(pkg, uid) == Notification.VISIBILITY_PRIVATE; + } catch (Exception e) { + Log.w(TAG, "Error calling NoMan", e); + return false; + } } public boolean setSensitive(String pkg, int uid, boolean sensitive) { - // TODO save visibility state to NoMan - return true; + INotificationManager nm = INotificationManager.Stub.asInterface( + ServiceManager.getService(Context.NOTIFICATION_SERVICE)); + try { + nm.setPackageVisibility(pkg, uid, + sensitive ? Notification.VISIBILITY_PRIVATE + : Notification.VISIBILITY_NO_OVERRIDE); + return true; + } catch (Exception e) { + Log.w(TAG, "Error calling NoMan", e); + return false; + } } } }