Drop the 'initial' of suppressInitialNotification API
Relax the 'initial' bit of this API, i.e. apps could update a bubble
to 'suppress notification' and if their app is foreground, we would
remove the notification (but not the bubble).
Bug: 123542531
Test: incoming....
Change-Id: I256112c7a560e26ebc00efb11435298922bec11c
diff --git a/api/current.txt b/api/current.txt
index f78dfde..5d8dfcc 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -5480,7 +5480,8 @@
method @DimenRes public int getDesiredHeightResId();
method @NonNull public android.graphics.drawable.Icon getIcon();
method @NonNull public android.app.PendingIntent getIntent();
- method public boolean getSuppressInitialNotification();
+ method @Deprecated public boolean getSuppressInitialNotification();
+ method public boolean getSuppressNotification();
method public void writeToParcel(android.os.Parcel, int);
field @NonNull public static final android.os.Parcelable.Creator<android.app.Notification.BubbleMetadata> CREATOR;
}
@@ -5494,7 +5495,8 @@
method @NonNull public android.app.Notification.BubbleMetadata.Builder setDesiredHeightResId(@DimenRes int);
method @NonNull public android.app.Notification.BubbleMetadata.Builder setIcon(@NonNull android.graphics.drawable.Icon);
method @NonNull public android.app.Notification.BubbleMetadata.Builder setIntent(@NonNull android.app.PendingIntent);
- method @NonNull public android.app.Notification.BubbleMetadata.Builder setSuppressInitialNotification(boolean);
+ method @Deprecated @NonNull public android.app.Notification.BubbleMetadata.Builder setSuppressInitialNotification(boolean);
+ method @NonNull public android.app.Notification.BubbleMetadata.Builder setSuppressNotification(boolean);
}
public static class Notification.Builder {
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 0ab1a85..2c515fc 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -8555,16 +8555,16 @@
private static final int FLAG_AUTO_EXPAND_BUBBLE = 0x00000001;
/**
- * If set and the app creating the bubble is in the foreground, the bubble will be posted
- * <b>without</b> the associated notification in the notification shade. Subsequent update
- * notifications to this bubble will post a notification in the shade.
+ * If set and the app posting the bubble is in the foreground, the bubble will
+ * be posted <b>without</b> the associated notification in the notification shade.
*
- * <p>If the app creating the bubble is not in the foreground this flag has no effect.</p>
+ * <p>If the app posting the bubble is not in the foreground this flag has no effect.</p>
*
* <p>Generally this flag should only be set if the user has performed an action to request
- * or create a bubble.</p>
+ * or create a bubble, or if the user has seen the content in the notification and the
+ * notification is no longer relevant.</p>
*/
- private static final int FLAG_SUPPRESS_INITIAL_NOTIFICATION = 0x00000002;
+ private static final int FLAG_SUPPRESS_NOTIFICATION = 0x00000002;
private BubbleMetadata(PendingIntent expandIntent, PendingIntent deleteIntent,
Icon icon, int height, @DimenRes int heightResId) {
@@ -8643,9 +8643,20 @@
* @return whether this bubble should suppress the initial notification when it is posted.
*
* @see BubbleMetadata.Builder#setSuppressInitialNotification(boolean)
+ * @deprecated TO BE REMOVED, use {@link #getSuppressNotification()} instead.
*/
+ @Deprecated
public boolean getSuppressInitialNotification() {
- return (mFlags & FLAG_SUPPRESS_INITIAL_NOTIFICATION) != 0;
+ return (mFlags & FLAG_SUPPRESS_NOTIFICATION) != 0;
+ }
+
+ /**
+ * @return whether this bubble should suppress the notification when it is posted.
+ *
+ * @see BubbleMetadata.Builder#setSuppressInitialNotification(boolean)
+ */
+ public boolean getSuppressNotification() {
+ return (mFlags & FLAG_SUPPRESS_NOTIFICATION) != 0;
}
public static final @android.annotation.NonNull Parcelable.Creator<BubbleMetadata> CREATOR =
@@ -8804,11 +8815,31 @@
*
* <p>Generally this flag should only be set if the user has performed an action to
* request or create a bubble.</p>
+ *
+ * @deprecated TO BE REMOVED, use {@link #setSuppressNotification(boolean)} instead.
*/
+ @Deprecated
@NonNull
public BubbleMetadata.Builder setSuppressInitialNotification(
boolean shouldSupressNotif) {
- setFlag(FLAG_SUPPRESS_INITIAL_NOTIFICATION, shouldSupressNotif);
+ setFlag(FLAG_SUPPRESS_NOTIFICATION, shouldSupressNotif);
+ return this;
+ }
+
+ /**
+ * If set and the app posting the bubble is in the foreground, the bubble will be
+ * posted <b>without</b> the associated notification in the notification shade.
+ *
+ * <p>If the app posting the bubble is not in the foreground this flag has no effect.
+ * </p>
+ *
+ * <p>Generally this flag should only be set if the user has performed an action to
+ * request or create a bubble, or if the user has seen the content in the notification
+ * and the notification is no longer relevant.</p>
+ */
+ @NonNull
+ public BubbleMetadata.Builder setSuppressNotification(boolean shouldSupressNotif) {
+ setFlag(FLAG_SUPPRESS_NOTIFICATION, shouldSupressNotif);
return this;
}
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java
index a5aed87..df1443c 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java
@@ -394,11 +394,8 @@
return;
}
if (shouldAutoBubbleForFlags(mContext, entry) || shouldBubble(entry)) {
- // TODO: handle group summaries
- boolean suppressNotification = entry.getBubbleMetadata() != null
- && entry.getBubbleMetadata().getSuppressInitialNotification()
- && isForegroundApp(entry.notification.getPackageName());
- entry.setShowInShadeWhenBubble(!suppressNotification);
+ // TODO: handle group summaries?
+ updateShowInShadeForSuppressNotification(entry);
}
}
@@ -419,7 +416,7 @@
}
if (mNotificationInterruptionStateProvider.shouldBubbleUp(entry)
&& alertAgain(entry, entry.notification.getNotification())) {
- entry.setShowInShadeWhenBubble(true);
+ updateShowInShadeForSuppressNotification(entry);
entry.setBubbleDismissed(false); // updates come back as bubbles even if dismissed
updateBubble(entry, true /* updatePosition */);
mStackView.updateDotVisibility(entry.key);
@@ -545,6 +542,13 @@
&& isForegroundApp(entry.notification.getPackageName());
}
+ private void updateShowInShadeForSuppressNotification(NotificationEntry entry) {
+ boolean suppressNotification = entry.getBubbleMetadata() != null
+ && entry.getBubbleMetadata().getSuppressNotification()
+ && isForegroundApp(entry.notification.getPackageName());
+ entry.setShowInShadeWhenBubble(!suppressNotification);
+ }
+
/**
* Return true if the applications with the package name is running in foreground.
*