diff --git a/api/current.txt b/api/current.txt index 03648ea01c78e..01edc71191f8e 100644 --- a/api/current.txt +++ b/api/current.txt @@ -5481,7 +5481,8 @@ package android.app { 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 CREATOR; } @@ -5495,7 +5496,8 @@ package android.app { 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 a90185cf1468d..5248329718640 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -8557,16 +8557,16 @@ public class Notification implements Parcelable 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 - * without 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 without the associated notification in the notification shade. * - *

If the app creating the bubble is not in the foreground this flag has no effect.

+ *

If the app posting the bubble is not in the foreground this flag has no effect.

* *

Generally this flag should only be set if the user has performed an action to request - * or create a bubble.

+ * or create a bubble, or if the user has seen the content in the notification and the + * notification is no longer relevant.

*/ - 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) { @@ -8645,9 +8645,20 @@ public class Notification implements Parcelable * @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 CREATOR = @@ -8806,11 +8817,31 @@ public class Notification implements Parcelable * *

Generally this flag should only be set if the user has performed an action to * request or create a bubble.

+ * + * @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 without the associated notification in the notification shade. + * + *

If the app posting the bubble is not in the foreground this flag has no effect. + *

+ * + *

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.

+ */ + @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 418d052e18580..89abd35ab92ef 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java @@ -397,11 +397,8 @@ public class BubbleController implements BubbleExpandedView.OnBubbleBlockedListe 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); } } @@ -422,7 +419,7 @@ public class BubbleController implements BubbleExpandedView.OnBubbleBlockedListe } 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); mStackView.updateDotVisibility(entry.key); @@ -589,6 +586,13 @@ public class BubbleController implements BubbleExpandedView.OnBubbleBlockedListe && 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. *