Add settings for notification bubbling
And a new api to consolidate that information for notification
listeners
Test: atest
Bug: 123543052
Change-Id: I61d1718ef5b5bb8ab824d4c3efff511669266313
diff --git a/services/core/java/com/android/server/notification/PreferencesHelper.java b/services/core/java/com/android/server/notification/PreferencesHelper.java
index 6ed4f5c..6e34b2d 100644
--- a/services/core/java/com/android/server/notification/PreferencesHelper.java
+++ b/services/core/java/com/android/server/notification/PreferencesHelper.java
@@ -127,6 +127,7 @@
private final ZenModeHelper mZenModeHelper;
private SparseBooleanArray mBadgingEnabled;
+ private SparseBooleanArray mBubblesEnabled;
private boolean mAreChannelsBypassingDnd;
private boolean mHideSilentStatusBarIcons;
@@ -138,6 +139,7 @@
mPm = pm;
updateBadgingEnabled();
+ updateBubblesEnabled();
syncChannelsBypassingDnd(mContext.getUserId());
}
@@ -485,6 +487,7 @@
* @param uid the uid to check if bubbles are allowed for.
* @return whether bubbles are allowed.
*/
+ @Override
public boolean areBubblesAllowed(String pkg, int uid) {
return getOrCreatePackagePreferences(pkg, uid).allowBubble;
}
@@ -1266,7 +1269,7 @@
if (original.canShowBadge() != update.canShowBadge()) {
update.lockFields(NotificationChannel.USER_LOCKED_SHOW_BADGE);
}
- if (original.isBubbleAllowed() != update.isBubbleAllowed()) {
+ if (original.canBubble() != update.canBubble()) {
update.lockFields(NotificationChannel.USER_LOCKED_ALLOW_BUBBLE);
}
}
@@ -1638,6 +1641,40 @@
.setPackageName(pkg);
}
+ public void updateBubblesEnabled() {
+ if (mBubblesEnabled == null) {
+ mBubblesEnabled = new SparseBooleanArray();
+ }
+ boolean changed = false;
+ // update the cached values
+ for (int index = 0; index < mBubblesEnabled.size(); index++) {
+ int userId = mBubblesEnabled.keyAt(index);
+ final boolean oldValue = mBubblesEnabled.get(userId);
+ final boolean newValue = Settings.Secure.getIntForUser(mContext.getContentResolver(),
+ Settings.Secure.NOTIFICATION_BUBBLES,
+ DEFAULT_ALLOW_BUBBLE ? 1 : 0, userId) != 0;
+ mBubblesEnabled.put(userId, newValue);
+ changed |= oldValue != newValue;
+ }
+ if (changed) {
+ updateConfig();
+ }
+ }
+
+ public boolean bubblesEnabled(UserHandle userHandle) {
+ int userId = userHandle.getIdentifier();
+ if (userId == UserHandle.USER_ALL) {
+ return false;
+ }
+ if (mBubblesEnabled.indexOfKey(userId) < 0) {
+ mBubblesEnabled.put(userId,
+ Settings.Secure.getIntForUser(mContext.getContentResolver(),
+ Settings.Secure.NOTIFICATION_BUBBLES,
+ DEFAULT_ALLOW_BUBBLE ? 1 : 0, userId) != 0);
+ }
+ return mBubblesEnabled.get(userId, DEFAULT_ALLOW_BUBBLE);
+ }
+
public void updateBadgingEnabled() {
if (mBadgingEnabled == null) {