From 6149641c1e50313ea874ad262cbe956d37b92541 Mon Sep 17 00:00:00 2001 From: Jeff Chang Date: Sun, 19 Mar 2023 17:24:44 +0800 Subject: [PATCH] Update the split layout while density changed According to mDividerSnapAlgorithm, the density change results in the position of the driver bar changed, but the split layout is changed only in the legacy transition environment. This CL updates the split layout when the display density changed. Bug: 273430199 Test: atest SplitLayoutTests atest StageCoordinatorTests Change-Id: I767c499494c3498de36c007c7d3f1a0c275f776b --- .../com/android/wm/shell/common/split/SplitLayout.java | 4 ++++ .../android/wm/shell/splitscreen/StageCoordinator.java | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java index 2832c553c20c8..9a2ec15238a76 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java @@ -717,6 +717,10 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange return bounds.width() > bounds.height(); } + public boolean isDensityChanged(int densityDpi) { + return mDensity != densityDpi; + } + /** * Return if this layout is landscape. */ 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 749549d1ca557..ef0d3e61a518f 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 @@ -2183,6 +2183,14 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, return; } mDisplayLayout.set(mDisplayController.getDisplayLayout(displayId)); + + if (mSplitLayout != null && mSplitLayout.isDensityChanged(newConfig.densityDpi) + && mMainStage.isActive() + && mSplitLayout.updateConfiguration(newConfig) + && ENABLE_SHELL_TRANSITIONS) { + mSplitLayout.update(null /* t */); + onLayoutSizeChanged(mSplitLayout); + } } void updateSurfaces(SurfaceControl.Transaction transaction) {