Merge "Fix crash when opening overflow after dismissing stack" into rvc-dev
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java
index d447596..f05d547 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java
@@ -657,7 +657,13 @@
try {
mAddedToWindowManager = false;
- mWindowManager.removeView(mStackView);
+ if (mStackView != null) {
+ mWindowManager.removeView(mStackView);
+ mStackView.removeView(mBubbleScrim);
+ mStackView = null;
+ } else {
+ Log.w(TAG, "StackView added to WindowManager, but was null when removing!");
+ }
} catch (IllegalArgumentException e) {
// This means the stack has already been removed - it shouldn't happen, but ignore if it
// does, since we wanted it removed anyway.
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java
index 494a51d..64dc2cc 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java
@@ -306,7 +306,9 @@
* if a view has been added or removed from on top of the ActivityView, such as the manage menu.
*/
void updateObscuredTouchableRegion() {
- mActivityView.onLocationChanged();
+ if (mActivityView != null) {
+ mActivityView.onLocationChanged();
+ }
}
void applyThemeAttrs() {
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleOverflow.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleOverflow.java
index af6e66a..b77e226 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleOverflow.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleOverflow.java
@@ -129,7 +129,7 @@
return mOverflowBtn;
}
- void setBtnVisible(int visible) {
+ void setVisible(int visible) {
mOverflowBtn.setVisibility(visible);
}
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java
index 6ba1aa8..239132e 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java
@@ -1117,6 +1117,9 @@
super.onDetachedFromWindow();
getViewTreeObserver().removeOnPreDrawListener(mViewUpdater);
getViewTreeObserver().removeOnComputeInternalInsetsListener(this);
+ if (mBubbleOverflow != null && mBubbleOverflow.getExpandedView() != null) {
+ mBubbleOverflow.getExpandedView().cleanUpExpandedState();
+ }
}
@Override
@@ -1334,21 +1337,12 @@
Log.d(TAG, "was asked to remove Bubble, but didn't find the view! " + bubble);
}
- private void updateOverflowBtnVisibility() {
- if (!BubbleExperimentConfig.allowBubbleOverflow(mContext)) {
+ private void updateOverflowVisibility() {
+ if (!BubbleExperimentConfig.allowBubbleOverflow(mContext)
+ || mBubbleOverflow == null) {
return;
}
- if (mIsExpanded) {
- if (DEBUG_BUBBLE_STACK_VIEW) {
- Log.d(TAG, "Show overflow button.");
- }
- mBubbleOverflow.setBtnVisible(VISIBLE);
- } else {
- if (DEBUG_BUBBLE_STACK_VIEW) {
- Log.d(TAG, "Collapsed. Hide overflow button.");
- }
- mBubbleOverflow.setBtnVisible(GONE);
- }
+ mBubbleOverflow.setVisible(mIsExpanded ? VISIBLE : GONE);
}
// via BubbleData.Listener
@@ -1602,7 +1596,7 @@
Log.d(TAG, BubbleDebugConfig.formatBubblesString(getBubblesOnScreen(),
mExpandedBubble));
}
- updateOverflowBtnVisibility();
+ updateOverflowVisibility();
mBubbleContainer.cancelAllAnimations();
mExpandedAnimationController.collapseBackToStack(
mStackAnimationController.getStackPositionAlongNearestHorizontalEdge()
@@ -1626,7 +1620,7 @@
beforeExpandedViewAnimation();
mBubbleContainer.setActiveController(mExpandedAnimationController);
- updateOverflowBtnVisibility();
+ updateOverflowVisibility();
mExpandedAnimationController.expandFromStack(() -> {
updatePointerPosition();
afterExpandedViewAnimation();