Fix jumping dock divider when dismissing/maximizng.
Bug: 25590262
Change-Id: I7e3f145fde7fa763a81807163a206ba8971c65f1
diff --git a/services/core/java/com/android/server/wm/DockedStackDividerController.java b/services/core/java/com/android/server/wm/DockedStackDividerController.java
index 63b58b8..c1e0481 100644
--- a/services/core/java/com/android/server/wm/DockedStackDividerController.java
+++ b/services/core/java/com/android/server/wm/DockedStackDividerController.java
@@ -18,6 +18,7 @@
import android.content.Context;
import android.graphics.Rect;
+import android.util.Slog;
import static android.app.ActivityManager.StackId.DOCKED_STACK_ID;
import static android.view.WindowManager.DOCKED_BOTTOM;
@@ -38,6 +39,7 @@
private boolean mResizing;
private WindowState mWindow;
private final Rect mTmpRect = new Rect();
+ private final Rect mLastRect = new Rect();
DockedStackDividerController(Context context, DisplayContent displayContent) {
mDisplayContent = displayContent;
@@ -79,11 +81,15 @@
if (stack == null) {
// Unfortunately we might end up with still having a divider, even though the underlying
// stack was already removed. This is because we are on AM thread and the removal of the
- // divider was deferred to WM thread and hasn't happened yet.
+ // divider was deferred to WM thread and hasn't happened yet. In that case let's just
+ // keep putting it in the same place it was before the stack was removed to have
+ // continuity and prevent it from jumping to the center. It will get hidden soon.
+ frame.set(mLastRect);
return;
+ } else {
+ stack.getBounds(mTmpRect);
}
int side = stack.getDockSide();
- stack.getBounds(mTmpRect);
switch (side) {
case DOCKED_LEFT:
frame.set(mTmpRect.right - mDividerInsets, frame.top,
@@ -102,5 +108,6 @@
frame.right, mTmpRect.top + mDividerInsets);
break;
}
+ mLastRect.set(frame);
}
}