From 233a5f97ea7b46814747a99f584b08d4e8c70105 Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Mon, 19 Oct 2015 13:51:23 -0400 Subject: [PATCH] Implement notification ranking by topic. Including sensitive notification visibility & DND bypass. Bug: 22451710 Change-Id: I5f3a0c6d59de0495cb904bad6f886eb29ed4bda4 --- api/current.txt | 1 + api/system-current.txt | 1 + .../android/app/INotificationManager.aidl | 10 +- core/java/android/app/Notification.aidl | 1 + core/java/android/app/Notification.java | 8 + .../internal/logging/MetricsLogger.java | 1 + core/res/res/values/config.xml | 4 +- core/res/res/values/strings.xml | 2 + core/res/res/values/symbols.xml | 1 + .../NotificationManagerService.java | 23 ++- .../server/notification/RankingConfig.java | 16 +- .../server/notification/RankingHelper.java | 176 +++++++++++++----- ...actor.java => TopicPriorityExtractor.java} | 11 +- ...tor.java => TopicVisibilityExtractor.java} | 12 +- .../statusbartest/NotificationTestList.java | 30 +++ 15 files changed, 221 insertions(+), 76 deletions(-) rename services/core/java/com/android/server/notification/{PackagePriorityExtractor.java => TopicPriorityExtractor.java} (79%) rename services/core/java/com/android/server/notification/{PackageVisibilityExtractor.java => TopicVisibilityExtractor.java} (80%) diff --git a/api/current.txt b/api/current.txt index a98f19fa5ae0e..9a039edf260cd 100644 --- a/api/current.txt +++ b/api/current.txt @@ -4867,6 +4867,7 @@ package android.app { field public static final int PRIORITY_MAX = 2; // 0x2 field public static final int PRIORITY_MIN = -2; // 0xfffffffe field public static final deprecated int STREAM_DEFAULT = -1; // 0xffffffff + field public static final java.lang.String TOPIC_DEFAULT = "system_default_topic"; field public static final int VISIBILITY_PRIVATE = 0; // 0x0 field public static final int VISIBILITY_PUBLIC = 1; // 0x1 field public static final int VISIBILITY_SECRET = -1; // 0xffffffff diff --git a/api/system-current.txt b/api/system-current.txt index d873925d45847..c5db694812b51 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -4985,6 +4985,7 @@ package android.app { field public static final int PRIORITY_MAX = 2; // 0x2 field public static final int PRIORITY_MIN = -2; // 0xfffffffe field public static final deprecated int STREAM_DEFAULT = -1; // 0xffffffff + field public static final java.lang.String TOPIC_DEFAULT = "system_default_topic"; field public static final int VISIBILITY_PRIVATE = 0; // 0x0 field public static final int VISIBILITY_PUBLIC = 1; // 0x1 field public static final int VISIBILITY_SECRET = -1; // 0xffffffff diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl index 84ddd9f0cf7f0..c1d5b196563c0 100644 --- a/core/java/android/app/INotificationManager.aidl +++ b/core/java/android/app/INotificationManager.aidl @@ -47,11 +47,11 @@ interface INotificationManager void setNotificationsEnabledForPackage(String pkg, int uid, boolean enabled); boolean areNotificationsEnabledForPackage(String pkg, int uid); - void setPackagePriority(String pkg, int uid, int priority); - int getPackagePriority(String pkg, int uid); - - void setPackageVisibilityOverride(String pkg, int uid, int visibility); - int getPackageVisibilityOverride(String pkg, int uid); + ParceledListSlice getTopics(String pkg, int uid); + void setTopicVisibilityOverride(String pkg, int uid, in Notification.Topic topic, int visibility); + int getTopicVisibilityOverride(String pkg, int uid, in Notification.Topic topic); + void setTopicPriority(String pkg, int uid, in Notification.Topic topic, int priority); + int getTopicPriority(String pkg, int uid, in Notification.Topic topic); // TODO: Remove this when callers have been migrated to the equivalent // INotificationListener method. diff --git a/core/java/android/app/Notification.aidl b/core/java/android/app/Notification.aidl index 9d8129ca601a2..3f1d1130b936d 100644 --- a/core/java/android/app/Notification.aidl +++ b/core/java/android/app/Notification.aidl @@ -17,3 +17,4 @@ package android.app; parcelable Notification; +parcelable Notification.Topic; diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index 4e6548b7bb173..848b33ffc99f0 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -21,6 +21,7 @@ import android.annotation.DrawableRes; import android.annotation.IntDef; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; +import android.annotation.SystemApi; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; @@ -1433,6 +1434,9 @@ public class Notification implements Parcelable }; } + @SystemApi + public static final String TOPIC_DEFAULT = "system_default_topic"; + private Topic topic; public Topic getTopic() { @@ -3419,6 +3423,10 @@ public class Notification implements Parcelable mN.extras.putStringArray(EXTRA_PEOPLE, mPersonList.toArray(new String[mPersonList.size()])); } + if (mN.topic == null) { + mN.topic = new Topic(TOPIC_DEFAULT, mContext.getString( + R.string.default_notification_topic_label)); + } return mN; } diff --git a/core/java/com/android/internal/logging/MetricsLogger.java b/core/java/com/android/internal/logging/MetricsLogger.java index 08c7935895ec2..c992c70f73e4a 100644 --- a/core/java/com/android/internal/logging/MetricsLogger.java +++ b/core/java/com/android/internal/logging/MetricsLogger.java @@ -33,6 +33,7 @@ public class MetricsLogger implements MetricsConstants { public static final int NOTIFICATION_ZEN_MODE_VISUAL_INTERRUPTIONS = 260; public static final int ACTION_ZEN_ALLOW_PEEK = 261; public static final int ACTION_ZEN_ALLOW_LIGHTS = 262; + public static final int NOTIFICATION_TOPIC_NOTIFICATION = 263; public static void visible(Context context, int category) throws IllegalArgumentException { if (Build.IS_DEBUGGABLE && category == VIEW_UNKNOWN) { diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 057790a4cb08e..539baa59471bb 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -1946,9 +1946,9 @@ See {@link com.android.server.notification.NotificationSignalExtractor} --> com.android.server.notification.ValidateNotificationPeople - com.android.server.notification.PackagePriorityExtractor + com.android.server.notification.TopicPriorityExtractor com.android.server.notification.NotificationIntrusivenessExtractor - com.android.server.notification.PackageVisibilityExtractor + com.android.server.notification.TopicVisibilityExtractor