Loading core/java/android/app/INotificationManager.aidl +6 −7 Original line number Diff line number Diff line Loading @@ -48,13 +48,12 @@ interface INotificationManager boolean areNotificationsEnabledForPackage(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); void setTopicImportance(String pkg, int uid, in Notification.Topic topic, int importance); int getTopicImportance(String pkg, int uid, in Notification.Topic topic); void setAppImportance(String pkg, int uid, int importance); void setVisibilityOverride(String pkg, int uid, in Notification.Topic topic, int visibility); int getVisibilityOverride(String pkg, int uid, in Notification.Topic topic); void setPriority(String pkg, int uid, in Notification.Topic topic, int priority); int getPriority(String pkg, int uid, in Notification.Topic topic); void setImportance(String pkg, int uid, in Notification.Topic topic, int importance); int getImportance(String pkg, int uid, in Notification.Topic topic); boolean doesAppUseTopics(String pkg, int uid); // TODO: Remove this when callers have been migrated to the equivalent Loading packages/SystemUI/src/com/android/systemui/statusbar/NotificationGuts.java +2 −7 Original line number Diff line number Diff line Loading @@ -206,13 +206,8 @@ public class NotificationGuts extends LinearLayout { void saveImportance(final StatusBarNotification sbn) { int progress = mSeekBar.getProgress(); try { if (mApplyToTopic.isChecked()) { mINotificationManager.setTopicImportance(sbn.getPackageName(), sbn.getUid(), mTopic, progress); } else { mINotificationManager.setAppImportance( sbn.getPackageName(), sbn.getUid(), progress); } mINotificationManager.setImportance(sbn.getPackageName(), sbn.getUid(), mApplyToTopic.isChecked() ? mTopic : null, progress); } catch (RemoteException e) { // :( } Loading services/core/java/com/android/server/notification/NotificationManagerService.java +22 −25 Original line number Diff line number Diff line Loading @@ -1242,58 +1242,55 @@ public class NotificationManagerService extends SystemService { } @Override public void setTopicPriority(String pkg, int uid, Notification.Topic topic, int priority) { public void setPriority(String pkg, int uid, Notification.Topic topic, int priority) { checkCallerIsSystem(); mRankingHelper.setTopicPriority(pkg, uid, topic, priority); mRankingHelper.setPriority(pkg, uid, topic, priority); savePolicyFile(); } @Override public int getTopicPriority(String pkg, int uid, Notification.Topic topic) { public int getPriority(String pkg, int uid, Notification.Topic topic) { checkCallerIsSystem(); return mRankingHelper.getTopicPriority(pkg, uid, topic); return mRankingHelper.getPriority(pkg, uid, topic); } @Override public void setTopicVisibilityOverride(String pkg, int uid, Notification.Topic topic, public void setVisibilityOverride(String pkg, int uid, Notification.Topic topic, int visibility) { checkCallerIsSystem(); mRankingHelper.setTopicVisibilityOverride(pkg, uid, topic, visibility); mRankingHelper.setVisibilityOverride(pkg, uid, topic, visibility); savePolicyFile(); } @Override public int getTopicVisibilityOverride(String pkg, int uid, Notification.Topic topic) { public int getVisibilityOverride(String pkg, int uid, Notification.Topic topic) { checkCallerIsSystem(); return mRankingHelper.getTopicVisibilityOverride(pkg, uid, topic); return mRankingHelper.getVisibilityOverride(pkg, uid, topic); } @Override public void setTopicImportance(String pkg, int uid, Notification.Topic topic, public void setImportance(String pkg, int uid, Notification.Topic topic, int importance) { enforceSystemOrSystemUI("Caller not system or systemui"); if (topic == null) { // App wide, potentially store block in app ops. setNotificationsEnabledForPackageImpl(pkg, uid, importance != NotificationListenerService.Ranking.IMPORTANCE_NONE); } else { if (NotificationListenerService.Ranking.IMPORTANCE_NONE == importance) { cancelAllNotificationsInt(MY_UID, MY_PID, pkg, 0, 0, true, UserHandle.getUserId(uid), REASON_TOPIC_BANNED, topic, null); } mRankingHelper.setTopicImportance(pkg, uid, topic, importance); } mRankingHelper.setImportance(pkg, uid, topic, importance); savePolicyFile(); } @Override public int getTopicImportance(String pkg, int uid, Notification.Topic topic) { public int getImportance(String pkg, int uid, Notification.Topic topic) { checkCallerIsSystem(); return mRankingHelper.getTopicImportance(pkg, uid, topic); } @Override public void setAppImportance(String pkg, int uid, int importance) { enforceSystemOrSystemUI("Caller not system or systemui"); setNotificationsEnabledForPackageImpl(pkg, uid, importance != NotificationListenerService.Ranking.IMPORTANCE_NONE); mRankingHelper.setAppImportance(pkg, uid, importance); savePolicyFile(); return mRankingHelper.getImportance(pkg, uid, topic); } @Override Loading services/core/java/com/android/server/notification/RankingConfig.java +6 −8 Original line number Diff line number Diff line Loading @@ -23,20 +23,18 @@ public interface RankingConfig { List<Notification.Topic> getTopics(String packageName, int uid); int getTopicPriority(String packageName, int uid, Notification.Topic topic); int getPriority(String packageName, int uid, Notification.Topic topic); void setTopicPriority(String packageName, int uid, Notification.Topic topic, int priority); void setPriority(String packageName, int uid, Notification.Topic topic, int priority); int getTopicVisibilityOverride(String packageName, int uid, Notification.Topic topic); int getVisibilityOverride(String packageName, int uid, Notification.Topic topic); void setTopicVisibilityOverride(String packageName, int uid, Notification.Topic topic, void setVisibilityOverride(String packageName, int uid, Notification.Topic topic, int visibility); void setTopicImportance(String packageName, int uid, Notification.Topic topic, int importance); void setImportance(String packageName, int uid, Notification.Topic topic, int importance); int getTopicImportance(String packageName, int uid, Notification.Topic topic); void setAppImportance(String packageName, int uid, int importance); int getImportance(String packageName, int uid, Notification.Topic topic); boolean doesAppUseTopics(String packageName, int uid); } services/core/java/com/android/server/notification/RankingHelper.java +92 −25 Original line number Diff line number Diff line Loading @@ -164,6 +164,8 @@ public class RankingHelper implements RankingConfig { r = getOrCreateRecord(name, uid); } r.importance = safeInt(parser, ATT_IMPORTANCE, DEFAULT_IMPORTANCE); r.priority = priority; r.visibility = vis; // Migrate package level settings to the default topic. // Might be overwritten by parseTopics. Loading Loading @@ -245,7 +247,15 @@ public class RankingHelper implements RankingConfig { } out.startTag(null, TAG_PACKAGE); out.attribute(null, ATT_NAME, r.pkg); if (r.importance != DEFAULT_IMPORTANCE) { out.attribute(null, ATT_IMPORTANCE, Integer.toString(r.importance)); } if (r.priority != DEFAULT_PRIORITY) { out.attribute(null, ATT_PRIORITY, Integer.toString(r.priority)); } if (r.visibility != DEFAULT_VISIBILITY) { out.attribute(null, ATT_VISIBILITY, Integer.toString(r.visibility)); } if (!forBackup) { out.attribute(null, ATT_UID, Integer.toString(r.uid)); Loading Loading @@ -379,61 +389,104 @@ public class RankingHelper implements RankingConfig { return topics; } /** * Gets priority. If a topic is given, returns the priority of that topic. Otherwise, the * priority of the app. */ @Override public int getTopicPriority(String packageName, int uid, Notification.Topic topic) { public int getPriority(String packageName, int uid, Notification.Topic topic) { final Record r = getOrCreateRecord(packageName, uid); if (topic == null) { return r.priority; } return getOrCreateTopic(r, topic).priority; } /** * Sets priority. If a topic is given, sets the priority of that topic. If not, * sets the default priority for all new topics that appear in the future, and resets * the priority of all current topics. */ @Override public void setTopicPriority(String packageName, int uid, Notification.Topic topic, public void setPriority(String packageName, int uid, Notification.Topic topic, int priority) { final Record r = getOrCreateRecord(packageName, uid); if (topic == null) { r.priority = priority; for (Topic t : r.topics.values()) { t.priority = priority; } } else { getOrCreateTopic(r, topic).priority = priority; } updateConfig(); } /** * Gets visual override. If a topic is given, returns the override of that topic. Otherwise, the * override of the app. */ @Override public int getTopicVisibilityOverride(String packageName, int uid, Notification.Topic topic) { public int getVisibilityOverride(String packageName, int uid, Notification.Topic topic) { final Record r = getOrCreateRecord(packageName, uid); if (topic == null) { return r.visibility; } return getOrCreateTopic(r, topic).visibility; } /** * Sets visibility override. If a topic is given, sets the override of that topic. If not, * sets the default override for all new topics that appear in the future, and resets * the override of all current topics. */ @Override public void setTopicVisibilityOverride(String pkgName, int uid, Notification.Topic topic, public void setVisibilityOverride(String pkgName, int uid, Notification.Topic topic, int visibility) { final Record r = getOrCreateRecord(pkgName, uid); if (topic == null) { r.visibility = visibility; for (Topic t : r.topics.values()) { t.visibility = visibility; } } else { getOrCreateTopic(r, topic).visibility = visibility; } updateConfig(); } /** * Gets importance. If a topic is given, returns the importance of that topic. Otherwise, the * importance of the app. */ @Override public int getTopicImportance(String packageName, int uid, Notification.Topic topic) { public int getImportance(String packageName, int uid, Notification.Topic topic) { final Record r = getOrCreateRecord(packageName, uid); return getOrCreateTopic(r, topic).importance; if (topic == null) { return r.importance; } @Override public void setTopicImportance(String pkgName, int uid, Notification.Topic topic, int importance) { final Record r = getOrCreateRecord(pkgName, uid); getOrCreateTopic(r, topic).importance = importance; updateConfig(); return getOrCreateTopic(r, topic).importance; } /** * Sets the default importance for all new topics that appear in the future, and resets * Sets importance. If a topic is given, sets the importance of that topic. If not, sets the * default importance for all new topics that appear in the future, and resets * the importance of all current topics (unless the app is being blocked). */ @Override public void setAppImportance(String pkgName, int uid, int importance) { public void setImportance(String pkgName, int uid, Notification.Topic topic, int importance) { final Record r = getOrCreateRecord(pkgName, uid); if (topic == null) { r.importance = importance; if (Ranking.IMPORTANCE_NONE != importance) { for (Topic t : r.topics.values()) { t.importance = importance; } } } else { getOrCreateTopic(r, topic).importance = importance; } updateConfig(); } Loading @@ -459,6 +512,8 @@ public class RankingHelper implements RankingConfig { } else { t = new Topic(topic); t.importance = r.importance; t.priority = r.priority; t.visibility = r.visibility; r.topics.put(topic.getId(), t); return t; } Loading Loading @@ -503,8 +558,18 @@ public class RankingHelper implements RankingConfig { pw.print(" ("); pw.print(r.uid == Record.UNKNOWN_UID ? "UNKNOWN_UID" : Integer.toString(r.uid)); pw.print(')'); if (r.importance != DEFAULT_IMPORTANCE) { pw.print(" importance="); pw.print(Ranking.importanceToString(r.importance)); } if (r.priority != DEFAULT_PRIORITY) { pw.print(" priority="); pw.print(Ranking.importanceToString(r.priority)); } if (r.visibility != DEFAULT_VISIBILITY) { pw.print(" visibility="); pw.print(Ranking.importanceToString(r.visibility)); } pw.println(); for (Topic t : r.topics.values()) { pw.print(prefix); Loading Loading @@ -561,6 +626,8 @@ public class RankingHelper implements RankingConfig { String pkg; int uid = UNKNOWN_UID; int importance = DEFAULT_IMPORTANCE; int priority = DEFAULT_PRIORITY; int visibility = DEFAULT_VISIBILITY; Map<String, Topic> topics = new ArrayMap<>(); } Loading Loading
core/java/android/app/INotificationManager.aidl +6 −7 Original line number Diff line number Diff line Loading @@ -48,13 +48,12 @@ interface INotificationManager boolean areNotificationsEnabledForPackage(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); void setTopicImportance(String pkg, int uid, in Notification.Topic topic, int importance); int getTopicImportance(String pkg, int uid, in Notification.Topic topic); void setAppImportance(String pkg, int uid, int importance); void setVisibilityOverride(String pkg, int uid, in Notification.Topic topic, int visibility); int getVisibilityOverride(String pkg, int uid, in Notification.Topic topic); void setPriority(String pkg, int uid, in Notification.Topic topic, int priority); int getPriority(String pkg, int uid, in Notification.Topic topic); void setImportance(String pkg, int uid, in Notification.Topic topic, int importance); int getImportance(String pkg, int uid, in Notification.Topic topic); boolean doesAppUseTopics(String pkg, int uid); // TODO: Remove this when callers have been migrated to the equivalent Loading
packages/SystemUI/src/com/android/systemui/statusbar/NotificationGuts.java +2 −7 Original line number Diff line number Diff line Loading @@ -206,13 +206,8 @@ public class NotificationGuts extends LinearLayout { void saveImportance(final StatusBarNotification sbn) { int progress = mSeekBar.getProgress(); try { if (mApplyToTopic.isChecked()) { mINotificationManager.setTopicImportance(sbn.getPackageName(), sbn.getUid(), mTopic, progress); } else { mINotificationManager.setAppImportance( sbn.getPackageName(), sbn.getUid(), progress); } mINotificationManager.setImportance(sbn.getPackageName(), sbn.getUid(), mApplyToTopic.isChecked() ? mTopic : null, progress); } catch (RemoteException e) { // :( } Loading
services/core/java/com/android/server/notification/NotificationManagerService.java +22 −25 Original line number Diff line number Diff line Loading @@ -1242,58 +1242,55 @@ public class NotificationManagerService extends SystemService { } @Override public void setTopicPriority(String pkg, int uid, Notification.Topic topic, int priority) { public void setPriority(String pkg, int uid, Notification.Topic topic, int priority) { checkCallerIsSystem(); mRankingHelper.setTopicPriority(pkg, uid, topic, priority); mRankingHelper.setPriority(pkg, uid, topic, priority); savePolicyFile(); } @Override public int getTopicPriority(String pkg, int uid, Notification.Topic topic) { public int getPriority(String pkg, int uid, Notification.Topic topic) { checkCallerIsSystem(); return mRankingHelper.getTopicPriority(pkg, uid, topic); return mRankingHelper.getPriority(pkg, uid, topic); } @Override public void setTopicVisibilityOverride(String pkg, int uid, Notification.Topic topic, public void setVisibilityOverride(String pkg, int uid, Notification.Topic topic, int visibility) { checkCallerIsSystem(); mRankingHelper.setTopicVisibilityOverride(pkg, uid, topic, visibility); mRankingHelper.setVisibilityOverride(pkg, uid, topic, visibility); savePolicyFile(); } @Override public int getTopicVisibilityOverride(String pkg, int uid, Notification.Topic topic) { public int getVisibilityOverride(String pkg, int uid, Notification.Topic topic) { checkCallerIsSystem(); return mRankingHelper.getTopicVisibilityOverride(pkg, uid, topic); return mRankingHelper.getVisibilityOverride(pkg, uid, topic); } @Override public void setTopicImportance(String pkg, int uid, Notification.Topic topic, public void setImportance(String pkg, int uid, Notification.Topic topic, int importance) { enforceSystemOrSystemUI("Caller not system or systemui"); if (topic == null) { // App wide, potentially store block in app ops. setNotificationsEnabledForPackageImpl(pkg, uid, importance != NotificationListenerService.Ranking.IMPORTANCE_NONE); } else { if (NotificationListenerService.Ranking.IMPORTANCE_NONE == importance) { cancelAllNotificationsInt(MY_UID, MY_PID, pkg, 0, 0, true, UserHandle.getUserId(uid), REASON_TOPIC_BANNED, topic, null); } mRankingHelper.setTopicImportance(pkg, uid, topic, importance); } mRankingHelper.setImportance(pkg, uid, topic, importance); savePolicyFile(); } @Override public int getTopicImportance(String pkg, int uid, Notification.Topic topic) { public int getImportance(String pkg, int uid, Notification.Topic topic) { checkCallerIsSystem(); return mRankingHelper.getTopicImportance(pkg, uid, topic); } @Override public void setAppImportance(String pkg, int uid, int importance) { enforceSystemOrSystemUI("Caller not system or systemui"); setNotificationsEnabledForPackageImpl(pkg, uid, importance != NotificationListenerService.Ranking.IMPORTANCE_NONE); mRankingHelper.setAppImportance(pkg, uid, importance); savePolicyFile(); return mRankingHelper.getImportance(pkg, uid, topic); } @Override Loading
services/core/java/com/android/server/notification/RankingConfig.java +6 −8 Original line number Diff line number Diff line Loading @@ -23,20 +23,18 @@ public interface RankingConfig { List<Notification.Topic> getTopics(String packageName, int uid); int getTopicPriority(String packageName, int uid, Notification.Topic topic); int getPriority(String packageName, int uid, Notification.Topic topic); void setTopicPriority(String packageName, int uid, Notification.Topic topic, int priority); void setPriority(String packageName, int uid, Notification.Topic topic, int priority); int getTopicVisibilityOverride(String packageName, int uid, Notification.Topic topic); int getVisibilityOverride(String packageName, int uid, Notification.Topic topic); void setTopicVisibilityOverride(String packageName, int uid, Notification.Topic topic, void setVisibilityOverride(String packageName, int uid, Notification.Topic topic, int visibility); void setTopicImportance(String packageName, int uid, Notification.Topic topic, int importance); void setImportance(String packageName, int uid, Notification.Topic topic, int importance); int getTopicImportance(String packageName, int uid, Notification.Topic topic); void setAppImportance(String packageName, int uid, int importance); int getImportance(String packageName, int uid, Notification.Topic topic); boolean doesAppUseTopics(String packageName, int uid); }
services/core/java/com/android/server/notification/RankingHelper.java +92 −25 Original line number Diff line number Diff line Loading @@ -164,6 +164,8 @@ public class RankingHelper implements RankingConfig { r = getOrCreateRecord(name, uid); } r.importance = safeInt(parser, ATT_IMPORTANCE, DEFAULT_IMPORTANCE); r.priority = priority; r.visibility = vis; // Migrate package level settings to the default topic. // Might be overwritten by parseTopics. Loading Loading @@ -245,7 +247,15 @@ public class RankingHelper implements RankingConfig { } out.startTag(null, TAG_PACKAGE); out.attribute(null, ATT_NAME, r.pkg); if (r.importance != DEFAULT_IMPORTANCE) { out.attribute(null, ATT_IMPORTANCE, Integer.toString(r.importance)); } if (r.priority != DEFAULT_PRIORITY) { out.attribute(null, ATT_PRIORITY, Integer.toString(r.priority)); } if (r.visibility != DEFAULT_VISIBILITY) { out.attribute(null, ATT_VISIBILITY, Integer.toString(r.visibility)); } if (!forBackup) { out.attribute(null, ATT_UID, Integer.toString(r.uid)); Loading Loading @@ -379,61 +389,104 @@ public class RankingHelper implements RankingConfig { return topics; } /** * Gets priority. If a topic is given, returns the priority of that topic. Otherwise, the * priority of the app. */ @Override public int getTopicPriority(String packageName, int uid, Notification.Topic topic) { public int getPriority(String packageName, int uid, Notification.Topic topic) { final Record r = getOrCreateRecord(packageName, uid); if (topic == null) { return r.priority; } return getOrCreateTopic(r, topic).priority; } /** * Sets priority. If a topic is given, sets the priority of that topic. If not, * sets the default priority for all new topics that appear in the future, and resets * the priority of all current topics. */ @Override public void setTopicPriority(String packageName, int uid, Notification.Topic topic, public void setPriority(String packageName, int uid, Notification.Topic topic, int priority) { final Record r = getOrCreateRecord(packageName, uid); if (topic == null) { r.priority = priority; for (Topic t : r.topics.values()) { t.priority = priority; } } else { getOrCreateTopic(r, topic).priority = priority; } updateConfig(); } /** * Gets visual override. If a topic is given, returns the override of that topic. Otherwise, the * override of the app. */ @Override public int getTopicVisibilityOverride(String packageName, int uid, Notification.Topic topic) { public int getVisibilityOverride(String packageName, int uid, Notification.Topic topic) { final Record r = getOrCreateRecord(packageName, uid); if (topic == null) { return r.visibility; } return getOrCreateTopic(r, topic).visibility; } /** * Sets visibility override. If a topic is given, sets the override of that topic. If not, * sets the default override for all new topics that appear in the future, and resets * the override of all current topics. */ @Override public void setTopicVisibilityOverride(String pkgName, int uid, Notification.Topic topic, public void setVisibilityOverride(String pkgName, int uid, Notification.Topic topic, int visibility) { final Record r = getOrCreateRecord(pkgName, uid); if (topic == null) { r.visibility = visibility; for (Topic t : r.topics.values()) { t.visibility = visibility; } } else { getOrCreateTopic(r, topic).visibility = visibility; } updateConfig(); } /** * Gets importance. If a topic is given, returns the importance of that topic. Otherwise, the * importance of the app. */ @Override public int getTopicImportance(String packageName, int uid, Notification.Topic topic) { public int getImportance(String packageName, int uid, Notification.Topic topic) { final Record r = getOrCreateRecord(packageName, uid); return getOrCreateTopic(r, topic).importance; if (topic == null) { return r.importance; } @Override public void setTopicImportance(String pkgName, int uid, Notification.Topic topic, int importance) { final Record r = getOrCreateRecord(pkgName, uid); getOrCreateTopic(r, topic).importance = importance; updateConfig(); return getOrCreateTopic(r, topic).importance; } /** * Sets the default importance for all new topics that appear in the future, and resets * Sets importance. If a topic is given, sets the importance of that topic. If not, sets the * default importance for all new topics that appear in the future, and resets * the importance of all current topics (unless the app is being blocked). */ @Override public void setAppImportance(String pkgName, int uid, int importance) { public void setImportance(String pkgName, int uid, Notification.Topic topic, int importance) { final Record r = getOrCreateRecord(pkgName, uid); if (topic == null) { r.importance = importance; if (Ranking.IMPORTANCE_NONE != importance) { for (Topic t : r.topics.values()) { t.importance = importance; } } } else { getOrCreateTopic(r, topic).importance = importance; } updateConfig(); } Loading @@ -459,6 +512,8 @@ public class RankingHelper implements RankingConfig { } else { t = new Topic(topic); t.importance = r.importance; t.priority = r.priority; t.visibility = r.visibility; r.topics.put(topic.getId(), t); return t; } Loading Loading @@ -503,8 +558,18 @@ public class RankingHelper implements RankingConfig { pw.print(" ("); pw.print(r.uid == Record.UNKNOWN_UID ? "UNKNOWN_UID" : Integer.toString(r.uid)); pw.print(')'); if (r.importance != DEFAULT_IMPORTANCE) { pw.print(" importance="); pw.print(Ranking.importanceToString(r.importance)); } if (r.priority != DEFAULT_PRIORITY) { pw.print(" priority="); pw.print(Ranking.importanceToString(r.priority)); } if (r.visibility != DEFAULT_VISIBILITY) { pw.print(" visibility="); pw.print(Ranking.importanceToString(r.visibility)); } pw.println(); for (Topic t : r.topics.values()) { pw.print(prefix); Loading Loading @@ -561,6 +626,8 @@ public class RankingHelper implements RankingConfig { String pkg; int uid = UNKNOWN_UID; int importance = DEFAULT_IMPORTANCE; int priority = DEFAULT_PRIORITY; int visibility = DEFAULT_VISIBILITY; Map<String, Topic> topics = new ArrayMap<>(); } Loading