Don't allow removed DividerView to resize stack
If a divider view is removed or in the process of been removed, then it
should no longer have any influence on the size of stacks.
Fixes: 62273599
Test: go/wm-smoke
Test: enter split-screen and make sure recents is visible, lock and
unlock the device and verify things look fine.
Change-Id: I79aca82be8a7013328b78e82f508c4ed9fa48a4a
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java b/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java
index 0b09acc..3b37437 100644
--- a/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java
+++ b/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java
@@ -91,6 +91,9 @@
}
private void removeDivider() {
+ if (mView != null) {
+ mView.onDividerRemoved();
+ }
mWindowManager.remove();
}
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java
index 9e2ec571fa..6dc7870 100644
--- a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java
+++ b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java
@@ -162,6 +162,9 @@
private DividerState mState;
private final SurfaceFlingerVsyncChoreographer mSfChoreographer;
+ // The view is removed or in the process of been removed from the system.
+ private boolean mRemoved;
+
private final Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
@@ -323,6 +326,11 @@
EventBus.getDefault().unregister(this);
}
+ void onDividerRemoved() {
+ mRemoved = true;
+ mHandler.removeMessages(MSG_RESIZE_STACK);
+ }
+
@Override
public WindowInsets onApplyWindowInsets(WindowInsets insets) {
if (mStableInsets.left != insets.getStableInsetLeft()
@@ -917,6 +925,10 @@
}
public void resizeStack(int position, int taskPosition, SnapTarget taskSnapTarget) {
+ if (mRemoved) {
+ // This divider view has been removed so shouldn't have any additional influence.
+ return;
+ }
calculateBoundsForPosition(position, mDockSide, mDockedRect);
if (mDockedRect.equals(mLastResizeRect) && !mEntranceAnimationRunning) {