diff --git a/res/values/strings.xml b/res/values/strings.xml
index 91099ac82c5..6e48a1139ab 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -5974,7 +5974,7 @@
Normal: Allow these notification to make sounds
- High: Peek onto the screen and allow sound and allow sound
+ High: Peek onto the screen and allow sound
Urgent: Show at the top of the notifications list, peek onto the screen and allow sound
@@ -6434,6 +6434,8 @@
Normal
Blocked
+
+ Silenced
%1$s / %2$s
@@ -6476,6 +6478,14 @@
Blocked
With domain URLs
+
+ Overrides Do Not Disturb
+
+ No sensitive content on lock screen
+
+ Never shown on lock screen
+
+ Shown silently
Advanced
diff --git a/src/com/android/settings/applications/AppStateNotificationBridge.java b/src/com/android/settings/applications/AppStateNotificationBridge.java
index f1f08963800..a5182bfdef6 100644
--- a/src/com/android/settings/applications/AppStateNotificationBridge.java
+++ b/src/com/android/settings/applications/AppStateNotificationBridge.java
@@ -15,7 +15,9 @@
*/
package com.android.settings.applications;
+import android.app.Notification;
import android.content.pm.PackageManager;
+import android.service.notification.NotificationListenerService;
import com.android.settings.notification.NotificationBackend;
import com.android.settings.notification.NotificationBackend.AppRow;
@@ -70,4 +72,55 @@ public class AppStateNotificationBridge extends AppStateBaseBridge {
return row.banned;
}
};
+
+ public static final AppFilter FILTER_APP_NOTIFICATION_SILENCED = new AppFilter() {
+ @Override
+ public void init() {
+ }
+
+ @Override
+ public boolean filterApp(AppEntry info) {
+ if (info == null) {
+ return false;
+ }
+ AppRow row = (AppRow) info.extraInfo;
+ return row.appImportance > NotificationListenerService.Ranking.IMPORTANCE_NONE
+ && row.appImportance < NotificationListenerService.Ranking.IMPORTANCE_DEFAULT;
+ }
+ };
+
+ public static final AppFilter FILTER_APP_NOTIFICATION_PRIORITY = new AppFilter() {
+ @Override
+ public void init() {
+ }
+
+ @Override
+ public boolean filterApp(AppEntry info) {
+ return info.extraInfo != null && ((AppRow) info.extraInfo).appBypassDnd;
+ }
+ };
+
+ public static final AppFilter FILTER_APP_NOTIFICATION_HIDE_SENSITIVE = new AppFilter() {
+ @Override
+ public void init() {
+ }
+
+ @Override
+ public boolean filterApp(AppEntry info) {
+ return info.extraInfo != null
+ && ((AppRow) info.extraInfo).appVisOverride == Notification.VISIBILITY_PRIVATE;
+ }
+ };
+
+ public static final AppFilter FILTER_APP_NOTIFICATION_HIDE_ALL = new AppFilter() {
+ @Override
+ public void init() {
+ }
+
+ @Override
+ public boolean filterApp(AppEntry info) {
+ return info.extraInfo != null
+ && ((AppRow) info.extraInfo).appVisOverride == Notification.VISIBILITY_SECRET;
+ }
+ };
}
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java
index 8a9c119b72e..2eaa76f3992 100755
--- a/src/com/android/settings/applications/InstalledAppDetails.java
+++ b/src/com/android/settings/applications/InstalledAppDetails.java
@@ -50,6 +50,7 @@ import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
import android.os.UserManager;
+import android.service.notification.NotificationListenerService;
import android.support.v7.preference.Preference;
import android.support.v7.preference.Preference.OnPreferenceClickListener;
import android.support.v7.preference.PreferenceCategory;
@@ -1007,8 +1008,11 @@ public class InstalledAppDetails extends AppInfoBase
public static CharSequence getNotificationSummary(AppRow appRow, Context context) {
if (appRow.banned) {
return context.getString(R.string.notifications_disabled);
+ } else if (appRow.appImportance > NotificationListenerService.Ranking.IMPORTANCE_NONE
+ && appRow.appImportance < NotificationListenerService.Ranking.IMPORTANCE_DEFAULT) {
+ return context.getString(R.string.notifications_silenced);
}
- return context.getString(R.string.notifications_enabled);
+ return "";
}
private class MemoryUpdater extends AsyncTask {
diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java
index f88a8aebdcc..56661b4b214 100644
--- a/src/com/android/settings/applications/ManageApplications.java
+++ b/src/com/android/settings/applications/ManageApplications.java
@@ -126,12 +126,16 @@ public class ManageApplications extends InstrumentedFragment
public static final int FILTER_APPS_ENABLED = 3;
public static final int FILTER_APPS_DISABLED = 4;
public static final int FILTER_APPS_BLOCKED = 5;
- public static final int FILTER_APPS_PERSONAL = 6;
- public static final int FILTER_APPS_WORK = 7;
- public static final int FILTER_APPS_WITH_DOMAIN_URLS = 8;
- public static final int FILTER_APPS_USAGE_ACCESS = 9;
- public static final int FILTER_APPS_WITH_OVERLAY = 10;
- public static final int FILTER_APPS_WRITE_SETTINGS = 11;
+ public static final int FILTER_APPS_SILENT = 6;
+ public static final int FILTER_APPS_SENSITIVE = 7;
+ public static final int FILTER_APPS_HIDE_NOTIFICATIONS = 8;
+ public static final int FILTER_APPS_PRIORITY = 9;
+ public static final int FILTER_APPS_PERSONAL = 10;
+ public static final int FILTER_APPS_WORK = 11;
+ public static final int FILTER_APPS_WITH_DOMAIN_URLS = 12;
+ public static final int FILTER_APPS_USAGE_ACCESS = 13;
+ public static final int FILTER_APPS_WITH_OVERLAY = 14;
+ public static final int FILTER_APPS_WRITE_SETTINGS = 15;
// This is the string labels for the filter modes above, the order must be kept in sync.
public static final int[] FILTER_LABELS = new int[]{
@@ -141,6 +145,10 @@ public class ManageApplications extends InstrumentedFragment
R.string.filter_enabled_apps, // Enabled
R.string.filter_apps_disabled, // Disabled
R.string.filter_notif_blocked_apps, // Blocked Notifications
+ R.string.filter_notif_silent, // Silenced Notifications
+ R.string.filter_notif_sensitive_apps, // Sensitive Notifications
+ R.string.filter_notif_hide_notifications_apps, // Sensitive Notifications
+ R.string.filter_notif_priority_apps, // Priority Notifications
R.string.filter_personal_apps, // Personal
R.string.filter_work_apps, // Work
R.string.filter_with_domain_urls_apps, // Domain URLs
@@ -159,6 +167,10 @@ public class ManageApplications extends InstrumentedFragment
ApplicationsState.FILTER_ALL_ENABLED, // Enabled
ApplicationsState.FILTER_DISABLED, // Disabled
AppStateNotificationBridge.FILTER_APP_NOTIFICATION_BLOCKED, // Blocked Notifications
+ AppStateNotificationBridge.FILTER_APP_NOTIFICATION_SILENCED, // Silenced Notifications
+ AppStateNotificationBridge.FILTER_APP_NOTIFICATION_HIDE_SENSITIVE, // Sensitive Notifications
+ AppStateNotificationBridge.FILTER_APP_NOTIFICATION_HIDE_ALL, // Hide all Notifications
+ AppStateNotificationBridge.FILTER_APP_NOTIFICATION_PRIORITY, // Priority Notifications
ApplicationsState.FILTER_PERSONAL, // Personal
ApplicationsState.FILTER_WORK, // Work
ApplicationsState.FILTER_WITH_DOMAIN_URLS, // Apps with Domain URLs
@@ -343,6 +355,10 @@ public class ManageApplications extends InstrumentedFragment
}
if (mListType == LIST_TYPE_NOTIFICATION) {
mFilterAdapter.enableFilter(FILTER_APPS_BLOCKED);
+ mFilterAdapter.enableFilter(FILTER_APPS_SILENT);
+ mFilterAdapter.enableFilter(FILTER_APPS_SENSITIVE);
+ mFilterAdapter.enableFilter(FILTER_APPS_HIDE_NOTIFICATIONS);
+ mFilterAdapter.enableFilter(FILTER_APPS_PRIORITY);
}
if (mListType == LIST_TYPE_HIGH_POWER) {
mFilterAdapter.enableFilter(FILTER_APPS_POWER_WHITELIST_ALL);