From d18a7bb1588abd713f355f917c3a1f57b8e4d242 Mon Sep 17 00:00:00 2001 From: Jerry Chang Date: Sat, 22 May 2021 17:27:52 +0000 Subject: [PATCH] Fix broken layout after switched stage positions Invoke onBoundsChanged to make sure it always updates bounds of both stages in window hierachy after switched stage positions. Fix: 189046868 Test: atest WMShellUnitTests Test: trigger staged split, snap divider to non-middle position, observed double tapping divider bar will update split layout properly. Change-Id: I5556cc94a19758f737076f241426deee2ca24a22 --- .../android/wm/shell/splitscreen/StageCoordinator.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java index 2545d6b462d6e..38f6361387a4d 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java @@ -253,17 +253,17 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler, } void setSideStagePosition(@SplitPosition int sideStagePosition) { - setSideStagePosition(sideStagePosition, true /* updateVisibility */); + setSideStagePosition(sideStagePosition, true /* updateBounds */); } private void setSideStagePosition(@SplitPosition int sideStagePosition, - boolean updateVisibility) { + boolean updateBounds) { if (mSideStagePosition == sideStagePosition) return; mSideStagePosition = sideStagePosition; sendOnStagePositionChanged(); - if (mSideStageListener.mVisible && updateVisibility) { - onStageVisibilityChanged(mSideStageListener); + if (mSideStageListener.mVisible && updateBounds) { + onBoundsChanged(mSplitLayout); } } @@ -755,7 +755,7 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler, // Update local states (before animating). setDividerVisibility(true); - setSideStagePosition(SPLIT_POSITION_BOTTOM_OR_RIGHT, false /* updateVisibility */); + setSideStagePosition(SPLIT_POSITION_BOTTOM_OR_RIGHT, false /* updateBounds */); setSplitsVisible(true); addDividerBarToTransition(info, t, true /* show */);