Align bubble behavior with DND settings.
As described at https://docs.google.com/presentation/d/1mPxqu8QBWpz-ieWkJGyLzBLcfAJNVUn8sxS1m58ogn8/edit#slide=id.g51f96ac1fd_25_230.
Test: atest SystemUITests
Fixes: 123540994
Change-Id: Ib45c10a2ae148806c8ddd766e987eb24473f0a39
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java
index 7e016bb..e9ac875 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java
@@ -16,6 +16,9 @@
package com.android.systemui.bubbles;
+import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_BADGE;
+import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_NOTIFICATION_LIST;
+import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_PEEK;
import static android.content.pm.ActivityInfo.DOCUMENT_LAUNCH_ALWAYS;
import static android.service.notification.NotificationListenerService.REASON_APP_CANCEL;
import static android.service.notification.NotificationListenerService.REASON_APP_CANCEL_ALL;
@@ -52,6 +55,7 @@
import android.os.ServiceManager;
import android.provider.Settings;
import android.service.notification.StatusBarNotification;
+import android.service.notification.ZenModeConfig;
import android.util.Log;
import android.view.Display;
import android.view.IPinnedStackController;
@@ -78,6 +82,7 @@
import com.android.systemui.statusbar.notification.row.NotificationContentInflater.InflationFlag;
import com.android.systemui.statusbar.phone.StatusBarWindowController;
import com.android.systemui.statusbar.policy.ConfigurationController;
+import com.android.systemui.statusbar.policy.ZenModeController;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@@ -143,6 +148,7 @@
// Bubbles get added to the status bar view
private final StatusBarWindowController mStatusBarWindowController;
+ private final ZenModeController mZenModeController;
private StatusBarStateListener mStatusBarStateListener;
private final NotificationInterruptionStateProvider mNotificationInterruptionStateProvider;
@@ -204,17 +210,31 @@
@Inject
public BubbleController(Context context, StatusBarWindowController statusBarWindowController,
BubbleData data, ConfigurationController configurationController,
- NotificationInterruptionStateProvider interruptionStateProvider) {
+ NotificationInterruptionStateProvider interruptionStateProvider,
+ ZenModeController zenModeController) {
this(context, statusBarWindowController, data, null /* synchronizer */,
- configurationController, interruptionStateProvider);
+ configurationController, interruptionStateProvider, zenModeController);
}
public BubbleController(Context context, StatusBarWindowController statusBarWindowController,
BubbleData data, @Nullable BubbleStackView.SurfaceSynchronizer synchronizer,
ConfigurationController configurationController,
- NotificationInterruptionStateProvider interruptionStateProvider) {
+ NotificationInterruptionStateProvider interruptionStateProvider,
+ ZenModeController zenModeController) {
mContext = context;
mNotificationInterruptionStateProvider = interruptionStateProvider;
+ mZenModeController = zenModeController;
+ mZenModeController.addCallback(new ZenModeController.Callback() {
+ @Override
+ public void onZenChanged(int zen) {
+ updateStackViewForZenConfig();
+ }
+
+ @Override
+ public void onConfigChanged(ZenModeConfig config) {
+ updateStackViewForZenConfig();
+ }
+ });
configurationController.addCallback(this /* configurationListener */);
@@ -260,6 +280,8 @@
if (mExpandListener != null) {
mStackView.setExpandListener(mExpandListener);
}
+
+ updateStackViewForZenConfig();
}
}
@@ -566,6 +588,35 @@
};
/**
+ * Updates the stack view's suppression flags from the latest config from the zen (do not
+ * disturb) controller.
+ */
+ private void updateStackViewForZenConfig() {
+ final ZenModeConfig zenModeConfig = mZenModeController.getConfig();
+
+ if (zenModeConfig == null || mStackView == null) {
+ return;
+ }
+
+ final int suppressedEffects = zenModeConfig.suppressedVisualEffects;
+ final boolean hideNotificationDotsSelected =
+ (suppressedEffects & SUPPRESSED_EFFECT_BADGE) != 0;
+ final boolean dontPopNotifsOnScreenSelected =
+ (suppressedEffects & SUPPRESSED_EFFECT_PEEK) != 0;
+ final boolean hideFromPullDownShadeSelected =
+ (suppressedEffects & SUPPRESSED_EFFECT_NOTIFICATION_LIST) != 0;
+
+ final boolean dndEnabled = mZenModeController.getZen() != Settings.Global.ZEN_MODE_OFF;
+
+ mStackView.setSuppressNewDot(
+ dndEnabled && hideNotificationDotsSelected);
+ mStackView.setSuppressFlyout(
+ dndEnabled && (dontPopNotifsOnScreenSelected
+ || hideFromPullDownShadeSelected));
+ }
+
+ /**
+ * Lets any listeners know if bubble state has changed.
* Updates the visibility of the bubbles based on current state.
* Does not un-bubble, just hides or un-hides. Notifies any
* {@link BubbleStateChangeListener}s of visibility changes.