diff --git a/packages/CarSystemUI/res/layout/super_notification_shade.xml b/packages/CarSystemUI/res/layout/super_notification_shade.xml
index e36d8caa67f3a..db71c91ca6959 100644
--- a/packages/CarSystemUI/res/layout/super_notification_shade.xml
+++ b/packages/CarSystemUI/res/layout/super_notification_shade.xml
@@ -43,14 +43,6 @@
android:visibility="invisible"/>
-
-
-
-
mCallbacks = new ArrayList<>();
- /**
- * Listener to be notified when some states of the bubbles change.
- */
- public interface BubbleStateChangeListener {
- /**
- * Called when the stack has bubbles or no longer has bubbles.
- */
- void onHasBubblesChanged(boolean hasBubbles);
- }
-
/**
* Listener to find out about stack expansion / collapse events.
*/
@@ -393,9 +391,12 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
}
mSurfaceSynchronizer = synchronizer;
+ mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
mBarService = IStatusBarService.Stub.asInterface(
ServiceManager.getService(Context.STATUS_BAR_SERVICE));
+ mBubbleScrim = new ScrimView(mContext);
+
mSavedBubbleKeysPerUser = new SparseSetArray<>();
mCurrentUserId = mNotifUserManager.getCurrentUserId();
mNotifUserManager.addUserChangedListener(
@@ -572,6 +573,15 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
});
}
+ /**
+ * Returns the scrim drawn behind the bubble stack. This is managed by {@link ScrimController}
+ * since we want the scrim's appearance and behavior to be identical to that of the notification
+ * shade scrim.
+ */
+ public ScrimView getScrimForBubble() {
+ return mBubbleScrim;
+ }
+
/**
* Sets whether to perform inflation on the same thread as the caller. This method should only
* be used in tests, not in production.
@@ -592,7 +602,6 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
return mBubbleData.getOverflowBubbles();
}
-
/**
* BubbleStackView is lazily created by this method the first time a Bubble is added. This
* method initializes the stack view and adds it to the StatusBar just above the scrim.
@@ -602,11 +611,8 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
mStackView = new BubbleStackView(
mContext, mBubbleData, mSurfaceSynchronizer, mFloatingContentCoordinator,
mSysUiState, mNotificationShadeWindowController);
- ViewGroup nsv = mNotificationShadeWindowController.getNotificationShadeView();
- int bubbleScrimIndex = nsv.indexOfChild(nsv.findViewById(R.id.scrim_for_bubble));
- int stackIndex = bubbleScrimIndex + 1; // Show stack above bubble scrim.
- nsv.addView(mStackView, stackIndex,
- new FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT));
+ mStackView.addView(mBubbleScrim);
+ addToWindowManager();
if (mExpandListener != null) {
mStackView.setExpandListener(mExpandListener);
}
@@ -616,6 +622,45 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
}
}
+ /** Adds the BubbleStackView to the WindowManager. */
+ private void addToWindowManager() {
+ mWmLayoutParams = new WindowManager.LayoutParams(
+ // Fill the screen so we can use translation animations to position the bubble
+ // stack. We'll use touchable regions to ignore touches that are not on the bubbles
+ // themselves.
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
+ // Start not focusable - we'll become focusable when expanded so the ActivityView
+ // can use the IME.
+ WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
+ | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
+ PixelFormat.TRANSLUCENT);
+
+ mWmLayoutParams.setFitInsetsTypes(0);
+ mWmLayoutParams.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
+ mWmLayoutParams.token = new Binder();
+ mWmLayoutParams.setTitle("Bubbles!");
+ mWmLayoutParams.packageName = mContext.getPackageName();
+ mWmLayoutParams.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
+
+ mWindowManager.addView(mStackView, mWmLayoutParams);
+ }
+
+ private void updateWmFlags() {
+ if (isStackExpanded()) {
+ // If we're expanded, we want to be focusable so that the ActivityView can receive focus
+ // and show the IME.
+ mWmLayoutParams.flags &= ~WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
+ } else {
+ // If we're collapsed, we don't want to be able to receive focus. Doing so would
+ // preclude applications from using the IME since we are always above them.
+ mWmLayoutParams.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
+ }
+
+ mWindowManager.updateViewLayout(mStackView, mWmLayoutParams);
+ }
+
/**
* Records the notification key for any active bubbles. These are used to restore active
* bubbles when the user returns to the foreground.
@@ -686,13 +731,6 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
}
}
- /**
- * Set a listener to be notified when some states of the bubbles change.
- */
- public void setBubbleStateChangeListener(BubbleStateChangeListener listener) {
- mStateChangeListener = listener;
- }
-
/**
* Set a listener to be notified of bubble expand events.
*/
@@ -701,7 +739,8 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
if (listener != null) {
listener.onBubbleExpandChanged(isExpanding, key);
}
- mNotificationShadeWindowController.setBubbleExpanded(isExpanding);
+
+ updateWmFlags();
});
if (mStackView != null) {
mStackView.setExpandListener(mExpandListener);
@@ -712,7 +751,8 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
* Whether or not there are bubbles present, regardless of them being visible on the
* screen (e.g. if on AOD).
*/
- public boolean hasBubbles() {
+ @VisibleForTesting
+ boolean hasBubbles() {
if (mStackView == null) {
return false;
}
@@ -1146,8 +1186,7 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
/**
* 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.
+ * Does not un-bubble, just hides or un-hides.
* Updates stack description for TalkBack focus.
*/
public void updateStack() {
@@ -1161,28 +1200,9 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
mStackView.setVisibility(INVISIBLE);
}
- // Let listeners know if bubble state changed.
- boolean hadBubbles = mNotificationShadeWindowController.getBubblesShowing();
- boolean hasBubblesShowing = hasBubbles() && mStackView.getVisibility() == VISIBLE;
- mNotificationShadeWindowController.setBubblesShowing(hasBubblesShowing);
- if (mStateChangeListener != null && hadBubbles != hasBubblesShowing) {
- mStateChangeListener.onHasBubblesChanged(hasBubblesShowing);
- }
-
mStackView.updateContentDescription();
}
- /**
- * Rect indicating the touchable region for the bubble stack / expanded stack.
- */
- public Rect getTouchableRegion() {
- if (mStackView == null || mStackView.getVisibility() != VISIBLE) {
- return null;
- }
- mStackView.getBoundsOnScreen(mTempRect);
- return mTempRect;
- }
-
/**
* The display id of the expanded view, if the stack is expanded and not occluded by the
* status bar, otherwise returns {@link Display#INVALID_DISPLAY}.
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java
index 366d4a7345af8..c802b59faba99 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java
@@ -108,7 +108,8 @@ import java.util.function.Consumer;
/**
* Renders bubbles in a stack and handles animating expanded and collapsed states.
*/
-public class BubbleStackView extends FrameLayout {
+public class BubbleStackView extends FrameLayout
+ implements ViewTreeObserver.OnComputeInternalInsetsListener {
private static final String TAG = TAG_WITH_CLASS_NAME ? "BubbleStackView" : TAG_BUBBLES;
/** Animation durations for bubble stack user education views. **/
@@ -647,7 +648,6 @@ public class BubbleStackView extends FrameLayout {
private boolean mShowingManage = false;
private PhysicsAnimator.SpringConfig mManageSpringConfig = new PhysicsAnimator.SpringConfig(
SpringForce.STIFFNESS_MEDIUM, SpringForce.DAMPING_RATIO_LOW_BOUNCY);
-
@SuppressLint("ClickableViewAccessibility")
public BubbleStackView(Context context, BubbleData data,
@Nullable SurfaceSynchronizer synchronizer,
@@ -1052,14 +1052,24 @@ public class BubbleStackView extends FrameLayout {
}
@Override
- public void getBoundsOnScreen(Rect outRect, boolean clipToParent) {
- getBoundsOnScreen(outRect);
+ public void onComputeInternalInsets(ViewTreeObserver.InternalInsetsInfo inoutInfo) {
+ inoutInfo.setTouchableInsets(ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_REGION);
+
+ getTouchableRegion(mTempRect);
+ inoutInfo.touchableRegion.set(mTempRect);
+ }
+
+ @Override
+ protected void onAttachedToWindow() {
+ super.onAttachedToWindow();
+ getViewTreeObserver().addOnComputeInternalInsetsListener(this);
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
getViewTreeObserver().removeOnPreDrawListener(mViewUpdater);
+ getViewTreeObserver().removeOnComputeInternalInsetsListener(this);
}
@Override
@@ -1960,8 +1970,16 @@ public class BubbleStackView extends FrameLayout {
mAfterFlyoutHidden = null;
}
- @Override
- public void getBoundsOnScreen(Rect outRect) {
+ /**
+ * Fills the Rect with the touchable region of the bubbles. This will be used by WindowManager
+ * to decide which touch events go to Bubbles.
+ *
+ * Bubbles is below the status bar/notification shade but above application windows. If you're
+ * trying to get touch events from the status bar or another higher-level window layer, you'll
+ * need to re-order TYPE_BUBBLES in WindowManagerPolicy so that we have the opportunity to steal
+ * them.
+ */
+ public void getTouchableRegion(Rect outRect) {
if (mUserEducationView != null && mUserEducationView.getVisibility() == VISIBLE) {
// When user education shows then capture all touches
outRect.set(0, 0, getWidth(), getHeight());
@@ -1971,12 +1989,12 @@ public class BubbleStackView extends FrameLayout {
if (!mIsExpanded) {
if (getBubbleCount() > 0) {
mBubbleContainer.getChildAt(0).getBoundsOnScreen(outRect);
+ // Increase the touch target size of the bubble
+ outRect.top -= mBubbleTouchPadding;
+ outRect.left -= mBubbleTouchPadding;
+ outRect.right += mBubbleTouchPadding;
+ outRect.bottom += mBubbleTouchPadding;
}
- // Increase the touch target size of the bubble
- outRect.top -= mBubbleTouchPadding;
- outRect.left -= mBubbleTouchPadding;
- outRect.right += mBubbleTouchPadding;
- outRect.bottom += mBubbleTouchPadding;
} else {
mBubbleContainer.getBoundsOnScreen(outRect);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowController.java
index 462b42a44c17f..fc6a028408911 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowController.java
@@ -273,8 +273,7 @@ public class NotificationShadeWindowController implements Callback, Dumpable,
private void applyFocusableFlag(State state) {
boolean panelFocusable = state.mNotificationShadeFocusable && state.mPanelExpanded;
if (state.mBouncerShowing && (state.mKeyguardOccluded || state.mKeyguardNeedsInput)
- || ENABLE_REMOTE_INPUT && state.mRemoteInputActive
- || state.mBubbleExpanded) {
+ || ENABLE_REMOTE_INPUT && state.mRemoteInputActive) {
mLpChanged.flags &= ~LayoutParams.FLAG_NOT_FOCUSABLE;
mLpChanged.flags &= ~LayoutParams.FLAG_ALT_FOCUSABLE_IM;
} else if (state.isKeyguardShowingAndNotOccluded() || panelFocusable) {
@@ -320,7 +319,7 @@ public class NotificationShadeWindowController implements Callback, Dumpable,
private boolean isExpanded(State state) {
return !state.mForceCollapsed && (state.isKeyguardShowingAndNotOccluded()
|| state.mPanelVisible || state.mKeyguardFadingAway || state.mBouncerShowing
- || state.mHeadsUpShowing || state.mBubblesShowing
+ || state.mHeadsUpShowing
|| state.mScrimsVisibility != ScrimController.TRANSPARENT)
|| state.mBackgroundBlurRadius > 0;
}
@@ -578,36 +577,6 @@ public class NotificationShadeWindowController implements Callback, Dumpable,
apply(mCurrentState);
}
- /**
- * Sets whether there are bubbles showing on the screen.
- */
- public void setBubblesShowing(boolean bubblesShowing) {
- mCurrentState.mBubblesShowing = bubblesShowing;
- apply(mCurrentState);
- }
-
- /**
- * The bubbles showing state for the status bar.
- */
- public boolean getBubblesShowing() {
- return mCurrentState.mBubblesShowing;
- }
-
- /**
- * Sets if there is a bubble being expanded on the screen.
- */
- public void setBubbleExpanded(boolean bubbleExpanded) {
- mCurrentState.mBubbleExpanded = bubbleExpanded;
- apply(mCurrentState);
- }
-
- /**
- * Whether the bubble is shown in expanded state for the status bar.
- */
- public boolean getBubbleExpanded() {
- return mCurrentState.mBubbleExpanded;
- }
-
/**
* Whether the status bar panel is expanded or not.
*/
@@ -679,8 +648,6 @@ public class NotificationShadeWindowController implements Callback, Dumpable,
boolean mBackdropShowing;
boolean mWallpaperSupportsAmbientMode;
boolean mNotTouchable;
- boolean mBubblesShowing;
- boolean mBubbleExpanded;
boolean mForceHasTopUi;
/**
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
index ac5557b571d73..bbf83bc2057a7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -1144,7 +1144,7 @@ public class StatusBar extends SystemUI implements DemoMode,
ScrimView scrimBehind = mNotificationShadeWindowView.findViewById(R.id.scrim_behind);
ScrimView scrimInFront = mNotificationShadeWindowView.findViewById(R.id.scrim_in_front);
- ScrimView scrimForBubble = mNotificationShadeWindowView.findViewById(R.id.scrim_for_bubble);
+ ScrimView scrimForBubble = mBubbleController.getScrimForBubble();
mScrimController.setScrimVisibleListener(scrimsVisible -> {
mNotificationShadeWindowController.setScrimsVisibility(scrimsVisible);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarTouchableRegionManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarTouchableRegionManager.java
index 5bab86715663e..9c7f49090122e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarTouchableRegionManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarTouchableRegionManager.java
@@ -32,7 +32,6 @@ import android.view.WindowInsets;
import com.android.systemui.Dumpable;
import com.android.systemui.R;
import com.android.systemui.ScreenDecorations;
-import com.android.systemui.bubbles.BubbleController;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
@@ -45,8 +44,8 @@ import javax.inject.Singleton;
/**
* Manages what parts of the status bar are touchable. Clients are primarily UI that display in the
- * status bar even though the UI doesn't look like part of the status bar. Currently this
- * includes HeadsUpNotifications and Bubbles.
+ * status bar even though the UI doesn't look like part of the status bar. Currently this consists
+ * of HeadsUpNotifications.
*/
@Singleton
public final class StatusBarTouchableRegionManager implements Dumpable {
@@ -55,7 +54,6 @@ public final class StatusBarTouchableRegionManager implements Dumpable {
private final Context mContext;
private final HeadsUpManagerPhone mHeadsUpManager;
private final NotificationShadeWindowController mNotificationShadeWindowController;
- private final BubbleController mBubbleController;
private boolean mIsStatusBarExpanded = false;
private boolean mShouldAdjustInsets = false;
@@ -73,8 +71,7 @@ public final class StatusBarTouchableRegionManager implements Dumpable {
Context context,
NotificationShadeWindowController notificationShadeWindowController,
ConfigurationController configurationController,
- HeadsUpManagerPhone headsUpManager,
- BubbleController bubbleController
+ HeadsUpManagerPhone headsUpManager
) {
mContext = context;
initResources();
@@ -117,11 +114,6 @@ public final class StatusBarTouchableRegionManager implements Dumpable {
mNotificationShadeWindowController.setForcePluginOpenListener((forceOpen) -> {
updateTouchableRegion();
});
-
- mBubbleController = bubbleController;
- mBubbleController.setBubbleStateChangeListener((hasBubbles) -> {
- updateTouchableRegion();
- });
}
protected void setup(
@@ -172,12 +164,6 @@ public final class StatusBarTouchableRegionManager implements Dumpable {
mStatusBarHeight);
updateRegionForNotch(mTouchableRegion);
}
-
- // Update touchable region for bubbles
- Rect bubbleRect = mBubbleController.getTouchableRegion();
- if (bubbleRect != null) {
- mTouchableRegion.union(bubbleRect);
- }
return mTouchableRegion;
}
@@ -198,7 +184,6 @@ public final class StatusBarTouchableRegionManager implements Dumpable {
&& (mNotificationShadeWindowView.getRootWindowInsets().getDisplayCutout() != null);
boolean shouldObserve = mHeadsUpManager.hasPinnedHeadsUp()
|| mHeadsUpManager.isHeadsUpGoingAway()
- || mBubbleController.hasBubbles()
|| mForceCollapsedUntilLayout
|| hasCutoutInset
|| mNotificationShadeWindowController.getForcePluginOpen();
@@ -266,7 +251,7 @@ public final class StatusBarTouchableRegionManager implements Dumpable {
}
// Update touch insets to include any area needed for touching features that live in
- // the status bar (ie: heads up notifications or bubbles)
+ // the status bar (ie: heads up notifications)
info.setTouchableInsets(ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_REGION);
info.touchableRegion.set(calculateTouchableRegion());
}
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 c2b35069a4ada..58906d7bd2d31 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java
@@ -30,7 +30,6 @@ import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
@@ -161,8 +160,6 @@ public class BubbleControllerTest extends SysuiTestCase {
private ExpandableNotificationRow mRow3;
private ExpandableNotificationRow mNonBubbleNotifRow;
- @Mock
- private BubbleController.BubbleStateChangeListener mBubbleStateChangeListener;
@Mock
private BubbleController.BubbleExpandListener mBubbleExpandListener;
@Mock
@@ -280,7 +277,6 @@ public class BubbleControllerTest extends SysuiTestCase {
mFloatingContentCoordinator,
mSysUiState,
mock(INotificationManager.class));
- mBubbleController.setBubbleStateChangeListener(mBubbleStateChangeListener);
mBubbleController.setExpandListener(mBubbleExpandListener);
// Get a reference to the BubbleController's entry listener
@@ -298,7 +294,6 @@ public class BubbleControllerTest extends SysuiTestCase {
mBubbleController.updateBubble(mRow.getEntry());
assertTrue(mBubbleController.hasBubbles());
- verify(mBubbleStateChangeListener).onHasBubblesChanged(true);
assertFalse(mSysUiStateBubblesExpanded);
}
@@ -316,14 +311,11 @@ public class BubbleControllerTest extends SysuiTestCase {
assertNotNull(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()));
assertTrue(mBubbleController.hasBubbles());
verify(mNotificationEntryManager).updateNotifications(any());
- verify(mBubbleStateChangeListener).onHasBubblesChanged(true);
mBubbleController.removeBubble(
mRow.getEntry(), BubbleController.DISMISS_USER_GESTURE);
- assertFalse(mNotificationShadeWindowController.getBubblesShowing());
assertNull(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()));
verify(mNotificationEntryManager, times(2)).updateNotifications(anyString());
- verify(mBubbleStateChangeListener).onHasBubblesChanged(false);
assertFalse(mSysUiStateBubblesExpanded);
}
@@ -388,7 +380,6 @@ public class BubbleControllerTest extends SysuiTestCase {
assertTrue(mBubbleController.hasBubbles());
mBubbleData.dismissAll(BubbleController.DISMISS_USER_GESTURE);
- assertFalse(mNotificationShadeWindowController.getBubblesShowing());
verify(mNotificationEntryManager, times(3)).updateNotifications(any());
assertNull(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()));
assertNull(mBubbleData.getBubbleInStackWithKey(mRow2.getEntry().getKey()));
@@ -408,14 +399,12 @@ public class BubbleControllerTest extends SysuiTestCase {
assertTrue(mBubbleController.hasBubbles());
assertFalse(mBubbleController.isBubbleNotificationSuppressedFromShade(
mRow.getEntry()));
- assertFalse(mNotificationShadeWindowController.getBubbleExpanded());
// Expand the stack
BubbleStackView stackView = mBubbleController.getStackView();
mBubbleData.setExpanded(true);
assertTrue(mBubbleController.isStackExpanded());
verify(mBubbleExpandListener).onBubbleExpandChanged(true, mRow.getEntry().getKey());
- assertTrue(mNotificationShadeWindowController.getBubbleExpanded());
assertTrue(mSysUiStateBubblesExpanded);
@@ -427,7 +416,6 @@ public class BubbleControllerTest extends SysuiTestCase {
mBubbleController.collapseStack();
verify(mBubbleExpandListener).onBubbleExpandChanged(false, mRow.getEntry().getKey());
assertFalse(mBubbleController.isStackExpanded());
- assertFalse(mNotificationShadeWindowController.getBubbleExpanded());
assertFalse(mSysUiStateBubblesExpanded);
}
@@ -553,7 +541,6 @@ public class BubbleControllerTest extends SysuiTestCase {
mEntryListener.onPendingEntryAdded(mRow2.getEntry());
mBubbleController.updateBubble(mRow.getEntry());
mBubbleController.updateBubble(mRow2.getEntry());
- verify(mBubbleStateChangeListener).onHasBubblesChanged(true);
// Expand
BubbleStackView stackView = mBubbleController.getStackView();
@@ -588,7 +575,6 @@ public class BubbleControllerTest extends SysuiTestCase {
// Make sure state changes and collapse happens
verify(mBubbleExpandListener).onBubbleExpandChanged(false, mRow.getEntry().getKey());
- verify(mBubbleStateChangeListener).onHasBubblesChanged(false);
assertFalse(mBubbleController.hasBubbles());
assertFalse(mSysUiStateBubblesExpanded);
@@ -609,9 +595,6 @@ public class BubbleControllerTest extends SysuiTestCase {
mRow.getEntry().getKey());
assertFalse(mBubbleController.isStackExpanded());
- // # of bubbles should change
- verify(mBubbleStateChangeListener).onHasBubblesChanged(true /* hasBubbles */);
-
assertFalse(mSysUiStateBubblesExpanded);
}
@@ -629,9 +612,6 @@ public class BubbleControllerTest extends SysuiTestCase {
mRow.getEntry().getKey());
assertTrue(mBubbleController.isStackExpanded());
- // # of bubbles should change
- verify(mBubbleStateChangeListener).onHasBubblesChanged(true /* hasBubbles */);
-
assertTrue(mSysUiStateBubblesExpanded);
}
@@ -651,9 +631,6 @@ public class BubbleControllerTest extends SysuiTestCase {
assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()).showDot());
assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()).showFlyout());
- // # of bubbles should change
- verify(mBubbleStateChangeListener).onHasBubblesChanged(true /* hasBubbles */);
-
assertFalse(mSysUiStateBubblesExpanded);
}
@@ -679,9 +656,6 @@ public class BubbleControllerTest extends SysuiTestCase {
assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()).showDot());
assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()).showFlyout());
- // # of bubbles should change
- verify(mBubbleStateChangeListener).onHasBubblesChanged(true /* hasBubbles */);
-
assertFalse(mSysUiStateBubblesExpanded);
}
@@ -716,7 +690,6 @@ public class BubbleControllerTest extends SysuiTestCase {
mEntryListener.onPendingEntryAdded(mNonBubbleNotifRow.getEntry());
mEntryListener.onPreEntryUpdated(mNonBubbleNotifRow.getEntry());
- verify(mBubbleStateChangeListener, never()).onHasBubblesChanged(anyBoolean());
assertThat(mBubbleController.hasBubbles()).isFalse();
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/bubbles/NewNotifPipelineBubbleControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/bubbles/NewNotifPipelineBubbleControllerTest.java
index 23dfb7c2a3a5b..ec1a797533fa4 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/bubbles/NewNotifPipelineBubbleControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/bubbles/NewNotifPipelineBubbleControllerTest.java
@@ -26,7 +26,6 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
@@ -150,8 +149,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {
private ExpandableNotificationRow mRow2;
private ExpandableNotificationRow mNonBubbleNotifRow;
@Mock
- private BubbleController.BubbleStateChangeListener mBubbleStateChangeListener;
- @Mock
private BubbleController.BubbleExpandListener mBubbleExpandListener;
@Mock
private PendingIntent mDeleteIntent;
@@ -256,7 +253,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {
mSysUiState,
mock(INotificationManager.class));
mBubbleController.addNotifCallback(mNotifCallback);
- mBubbleController.setBubbleStateChangeListener(mBubbleStateChangeListener);
mBubbleController.setExpandListener(mBubbleExpandListener);
// Get a reference to the BubbleController's entry listener
@@ -269,8 +265,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {
public void testAddBubble() {
mBubbleController.updateBubble(mRow.getEntry());
assertTrue(mBubbleController.hasBubbles());
-
- verify(mBubbleStateChangeListener).onHasBubblesChanged(true);
}
@Test
@@ -286,13 +280,10 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {
assertNotNull(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()));
assertTrue(mBubbleController.hasBubbles());
verify(mNotifCallback, times(1)).invalidateNotifications(anyString());
- verify(mBubbleStateChangeListener).onHasBubblesChanged(true);
mBubbleController.removeBubble(mRow.getEntry(), BubbleController.DISMISS_USER_GESTURE);
- assertFalse(mNotificationShadeWindowController.getBubblesShowing());
assertNull(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()));
verify(mNotifCallback, times(2)).invalidateNotifications(anyString());
- verify(mBubbleStateChangeListener).onHasBubblesChanged(false);
}
@Test
@@ -347,7 +338,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {
assertTrue(mBubbleController.hasBubbles());
mBubbleData.dismissAll(BubbleController.DISMISS_USER_GESTURE);
- assertFalse(mNotificationShadeWindowController.getBubblesShowing());
verify(mNotifCallback, times(3)).invalidateNotifications(anyString());
assertNull(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()));
assertNull(mBubbleData.getBubbleInStackWithKey(mRow2.getEntry().getKey()));
@@ -365,14 +355,12 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {
assertTrue(mBubbleController.hasBubbles());
assertFalse(mBubbleController.isBubbleNotificationSuppressedFromShade(
mRow.getEntry()));
- assertFalse(mNotificationShadeWindowController.getBubbleExpanded());
// Expand the stack
BubbleStackView stackView = mBubbleController.getStackView();
mBubbleData.setExpanded(true);
assertTrue(mBubbleController.isStackExpanded());
verify(mBubbleExpandListener).onBubbleExpandChanged(true, mRow.getEntry().getKey());
- assertTrue(mNotificationShadeWindowController.getBubbleExpanded());
// Make sure the notif is suppressed
assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(mRow.getEntry()));
@@ -381,7 +369,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {
mBubbleController.collapseStack();
verify(mBubbleExpandListener).onBubbleExpandChanged(false, mRow.getEntry().getKey());
assertFalse(mBubbleController.isStackExpanded());
- assertFalse(mNotificationShadeWindowController.getBubbleExpanded());
}
@Test
@@ -495,7 +482,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {
mEntryListener.onEntryAdded(mRow2.getEntry());
mBubbleController.updateBubble(mRow.getEntry());
mBubbleController.updateBubble(mRow2.getEntry());
- verify(mBubbleStateChangeListener).onHasBubblesChanged(true);
// Expand
BubbleStackView stackView = mBubbleController.getStackView();
@@ -528,7 +514,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {
// Make sure state changes and collapse happens
verify(mBubbleExpandListener).onBubbleExpandChanged(false, mRow.getEntry().getKey());
- verify(mBubbleStateChangeListener).onHasBubblesChanged(false);
assertFalse(mBubbleController.hasBubbles());
}
@@ -546,9 +531,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {
verify(mBubbleExpandListener, never()).onBubbleExpandChanged(false /* expanded */,
mRow.getEntry().getKey());
assertFalse(mBubbleController.isStackExpanded());
-
- // # of bubbles should change
- verify(mBubbleStateChangeListener).onHasBubblesChanged(true /* hasBubbles */);
}
@Test
@@ -564,9 +546,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {
verify(mBubbleExpandListener).onBubbleExpandChanged(true /* expanded */,
mRow.getEntry().getKey());
assertTrue(mBubbleController.isStackExpanded());
-
- // # of bubbles should change
- verify(mBubbleStateChangeListener).onHasBubblesChanged(true /* hasBubbles */);
}
@Test
@@ -584,9 +563,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {
// Dot + flyout is hidden because notif is suppressed
assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()).showDot());
assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()).showFlyout());
-
- // # of bubbles should change
- verify(mBubbleStateChangeListener).onHasBubblesChanged(true /* hasBubbles */);
}
@Test
@@ -610,9 +586,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {
// Dot + flyout is hidden because notif is suppressed
assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()).showDot());
assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()).showFlyout());
-
- // # of bubbles should change
- verify(mBubbleStateChangeListener).onHasBubblesChanged(true /* hasBubbles */);
}
@Test
@@ -630,7 +603,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {
mEntryListener.onEntryAdded(mNonBubbleNotifRow.getEntry());
mEntryListener.onEntryUpdated(mNonBubbleNotifRow.getEntry());
- verify(mBubbleStateChangeListener, never()).onHasBubblesChanged(anyBoolean());
assertThat(mBubbleController.hasBubbles()).isFalse();
}