diff options
4 files changed, 28 insertions, 143 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java index 7bfd168eea25..dcc0419ab0cf 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java @@ -16,9 +16,6 @@ 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.service.notification.NotificationListenerService.REASON_APP_CANCEL; import static android.service.notification.NotificationListenerService.REASON_APP_CANCEL_ALL; import static android.service.notification.NotificationListenerService.REASON_CANCEL; @@ -52,7 +49,6 @@ import android.os.RemoteException; 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; @@ -79,7 +75,6 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntry; 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; @@ -145,7 +140,6 @@ public class BubbleController implements ConfigurationController.ConfigurationLi // Bubbles get added to the status bar view private final StatusBarWindowController mStatusBarWindowController; - private final ZenModeController mZenModeController; private StatusBarStateListener mStatusBarStateListener; private final NotificationInterruptionStateProvider mNotificationInterruptionStateProvider; @@ -207,31 +201,17 @@ public class BubbleController implements ConfigurationController.ConfigurationLi @Inject public BubbleController(Context context, StatusBarWindowController statusBarWindowController, BubbleData data, ConfigurationController configurationController, - NotificationInterruptionStateProvider interruptionStateProvider, - ZenModeController zenModeController) { + NotificationInterruptionStateProvider interruptionStateProvider) { this(context, statusBarWindowController, data, null /* synchronizer */, - configurationController, interruptionStateProvider, zenModeController); + configurationController, interruptionStateProvider); } public BubbleController(Context context, StatusBarWindowController statusBarWindowController, BubbleData data, @Nullable BubbleStackView.SurfaceSynchronizer synchronizer, ConfigurationController configurationController, - NotificationInterruptionStateProvider interruptionStateProvider, - ZenModeController zenModeController) { + NotificationInterruptionStateProvider interruptionStateProvider) { 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 */); @@ -277,8 +257,6 @@ public class BubbleController implements ConfigurationController.ConfigurationLi if (mExpandListener != null) { mStackView.setExpandListener(mExpandListener); } - - updateStackViewForZenConfig(); } } @@ -582,28 +560,6 @@ public class BubbleController implements ConfigurationController.ConfigurationLi }; /** - * Updates the stack view's suppression flags from the latest config from the zen (do not - * disturb) controller. - */ - private void updateStackViewForZenConfig() { - final int suppressedEffects = mZenModeController.getConfig().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. diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java index 6391070fe45d..4ad3a332ebe6 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java @@ -285,9 +285,6 @@ public class BubbleStackView extends FrameLayout { private BubbleDismissView mDismissContainer; private Runnable mAfterMagnet; - private boolean mSuppressNewDot = false; - private boolean mSuppressFlyout = false; - public BubbleStackView(Context context, BubbleData data, @Nullable SurfaceSynchronizer synchronizer) { super(context); @@ -687,9 +684,6 @@ public class BubbleStackView extends FrameLayout { mBubbleContainer.addView(bubble.iconView, 0, new FrameLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT)); ViewClippingUtil.setClippingDeactivated(bubble.iconView, true, mClippingParameters); - if (bubble.iconView != null) { - bubble.iconView.setSuppressDot(mSuppressNewDot, false /* animate */); - } animateInFlyoutForBubble(bubble); requestUpdate(); logBubbleEvent(bubble, StatsLog.BUBBLE_UICHANGED__ACTION__POSTED); @@ -1307,29 +1301,6 @@ public class BubbleStackView extends FrameLayout { } } - /** Sets whether all bubbles in the stack should not show the 'new' dot. */ - void setSuppressNewDot(boolean suppressNewDot) { - mSuppressNewDot = suppressNewDot; - - for (int i = 0; i < mBubbleContainer.getChildCount(); i++) { - BubbleView bv = (BubbleView) mBubbleContainer.getChildAt(i); - bv.setSuppressDot(suppressNewDot, true /* animate */); - } - } - - /** - * Sets whether the flyout should not appear, even if the notif otherwise would generate one. - */ - void setSuppressFlyout(boolean suppressFlyout) { - mSuppressFlyout = suppressFlyout; - } - - /** - * Callback to run after the flyout hides. Also called if a new flyout is shown before the - * previous one animates out. - */ - private Runnable mAfterFlyoutHides; - /** * Animates in the flyout for the given bubble, if available, and then hides it after some time. */ @@ -1341,44 +1312,22 @@ public class BubbleStackView extends FrameLayout { if (updateMessage != null && !isExpanded() && !mIsExpansionAnimating - && !mIsGestureInProgress - && !mSuppressFlyout) { + && !mIsGestureInProgress) { if (bubble.iconView != null) { - // Temporarily suppress the dot while the flyout is visible. - bubble.iconView.setSuppressDot( - true /* suppressDot */, false /* animate */); - + bubble.iconView.setSuppressDot(true /* suppressDot */, false /* animate */); mFlyoutDragDeltaX = 0f; mFlyout.setAlpha(0f); - if (mAfterFlyoutHides != null) { - mAfterFlyoutHides.run(); - } - - mAfterFlyoutHides = () -> { - // If we're going to suppress the dot, make it visible first so it'll - // visibly animate away. - if (mSuppressNewDot) { - bubble.iconView.setSuppressDot( - false /* suppressDot */, false /* animate */); - } - - // Reset dot suppression. If we're not suppressing due to DND, then - // stop suppressing it with no animation (since the flyout has - // transformed into the dot). If we are suppressing due to DND, animate - // it away. - bubble.iconView.setSuppressDot( - mSuppressNewDot /* suppressDot */, - mSuppressNewDot /* animate */); - }; - // Post in case layout isn't complete and getWidth returns 0. post(() -> mFlyout.showFlyout( updateMessage, mStackAnimationController.getStackPosition(), getWidth(), mStackAnimationController.isStackOnLeftSide(), - bubble.iconView.getBadgeColor(), mAfterFlyoutHides)); + bubble.iconView.getBadgeColor(), + () -> { + bubble.iconView.setSuppressDot( + false /* suppressDot */, false /* animate */); + })); } - mFlyout.removeCallbacks(mHideFlyout); mFlyout.postDelayed(mHideFlyout, FLYOUT_HIDE_AFTER); logBubbleEvent(bubble, StatsLog.BUBBLE_UICHANGED__ACTION__FLYOUT); @@ -1387,10 +1336,6 @@ public class BubbleStackView extends FrameLayout { /** Hide the flyout immediately and cancel any pending hide runnables. */ private void hideFlyoutImmediate() { - if (mAfterFlyoutHides != null) { - mAfterFlyoutHides.run(); - } - mFlyout.removeCallbacks(mHideFlyout); mFlyout.hideFlyout(); } @@ -1493,7 +1438,6 @@ public class BubbleStackView extends FrameLayout { int bubbsCount = mBubbleContainer.getChildCount(); for (int i = 0; i < bubbsCount; i++) { BubbleView bv = (BubbleView) mBubbleContainer.getChildAt(i); - bv.updateDotVisibility(true /* animate */); bv.setZ((BubbleController.MAX_BUBBLES * getResources().getDimensionPixelSize(R.dimen.bubble_elevation)) - i); diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleView.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleView.java index 6f1ed28d649e..aa32b9456cbc 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleView.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleView.java @@ -138,6 +138,19 @@ public class BubbleView extends FrameLayout { updateDotVisibility(animate, null /* after */); } + /** + * Changes the dot's visibility to match the bubble view's state, running the provided callback + * after animation if requested. + */ + void updateDotVisibility(boolean animate, Runnable after) { + boolean showDot = getEntry().showInShadeWhenBubble() && !mSuppressDot; + + if (animate) { + animateDot(showDot, after); + } else { + mBadgedImageView.setShowDot(showDot); + } + } /** * Sets whether or not to hide the dot even if we'd otherwise show it. This is used while the @@ -165,34 +178,17 @@ public class BubbleView extends FrameLayout { } /** - * Changes the dot's visibility to match the bubble view's state, running the provided callback - * after animation if requested. - */ - private void updateDotVisibility(boolean animate, Runnable after) { - boolean showDot = getEntry().showInShadeWhenBubble() && !mSuppressDot; - - if (animate) { - animateDot(showDot, after); - } else { - mBadgedImageView.setShowDot(showDot); - } - } - - /** * Animates the badge to show or hide. */ private void animateDot(boolean showDot, Runnable after) { if (mBadgedImageView.isShowingDot() != showDot) { - if (showDot) { - mBadgedImageView.setShowDot(true); - } - + mBadgedImageView.setShowDot(showDot); mBadgedImageView.clearAnimation(); mBadgedImageView.animate().setDuration(200) .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) .setUpdateListener((valueAnimator) -> { float fraction = valueAnimator.getAnimatedFraction(); - fraction = showDot ? fraction : 1f - fraction; + fraction = showDot ? fraction : 1 - fraction; mBadgedImageView.setDotScale(fraction); }).withEndAction(() -> { if (!showDot) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java index b3f6f4ecdf0c..35a15167d207 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java @@ -47,7 +47,6 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.graphics.drawable.Icon; -import android.service.notification.ZenModeConfig; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.view.WindowManager; @@ -70,7 +69,6 @@ import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.phone.StatusBarWindowController; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.HeadsUpManager; -import com.android.systemui.statusbar.policy.ZenModeController; import org.junit.Before; import org.junit.Test; @@ -101,10 +99,6 @@ public class BubbleControllerTest extends SysuiTestCase { private DozeParameters mDozeParameters; @Mock private ConfigurationController mConfigurationController; - @Mock - private ZenModeController mZenModeController; - @Mock - private ZenModeConfig mZenModeConfig; private FrameLayout mStatusBarView; @Captor @@ -168,9 +162,6 @@ public class BubbleControllerTest extends SysuiTestCase { when(mNotificationEntryManager.getNotificationData()).thenReturn(mNotificationData); when(mNotificationData.getChannel(mRow.getEntry().key)).thenReturn(mRow.getEntry().channel); - mZenModeConfig.suppressedVisualEffects = 0; - when(mZenModeController.getConfig()).thenReturn(mZenModeConfig); - TestableNotificationInterruptionStateProvider interruptionStateProvider = new TestableNotificationInterruptionStateProvider(mContext); interruptionStateProvider.setUpWithPresenter( @@ -179,8 +170,7 @@ public class BubbleControllerTest extends SysuiTestCase { mock(NotificationInterruptionStateProvider.HeadsUpSuppressor.class)); mBubbleData = new BubbleData(mContext); mBubbleController = new TestableBubbleController(mContext, mStatusBarWindowController, - mBubbleData, mConfigurationController, interruptionStateProvider, - mZenModeController); + mBubbleData, mConfigurationController, interruptionStateProvider); mBubbleController.setBubbleStateChangeListener(mBubbleStateChangeListener); mBubbleController.setExpandListener(mBubbleExpandListener); @@ -638,10 +628,9 @@ public class BubbleControllerTest extends SysuiTestCase { TestableBubbleController(Context context, StatusBarWindowController statusBarWindowController, BubbleData data, ConfigurationController configurationController, - NotificationInterruptionStateProvider interruptionStateProvider, - ZenModeController zenModeController) { + NotificationInterruptionStateProvider interruptionStateProvider) { super(context, statusBarWindowController, data, Runnable::run, - configurationController, interruptionStateProvider, zenModeController); + configurationController, interruptionStateProvider); } @Override |