From 930cffe5f4ec101b9c8414e8ad6c9da877c6119a Mon Sep 17 00:00:00 2001 From: Jeremy Sim Date: Fri, 26 Apr 2024 18:47:42 -0700 Subject: Allow devices to calculate their own split ratio instead of using fixed ratio Previously, the 30-70 and 70-30 ratios were always calculated precisely at 34.15%, defined in docked_stack_divider_fixed_ratio. This CL adds a boolean flag, config_flexibleSplitRatios, that allows devices to override docked_stack_divider_fixed_ratio. When overridden, the device will possibly use a larger split ratio to ensure that apps are shown with a minimum size. Fixes: 330388049 Test: Manual Change-Id: I491e895abab075e0319804fdec21f5e94053e7f3 --- .../com/android/wm/shell/common/split/DividerSnapAlgorithm.java | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'libs') diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerSnapAlgorithm.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerSnapAlgorithm.java index f9a286ec804f..bc6ed1f63c8a 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerSnapAlgorithm.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerSnapAlgorithm.java @@ -84,6 +84,8 @@ public class DividerSnapAlgorithm { private final int mMinimalSizeResizableTask; private final int mTaskHeightInMinimizedMode; private final float mFixedRatio; + /** Allows split ratios to calculated dynamically instead of using {@link #mFixedRatio}. */ + private final boolean mAllowFlexibleSplitRatios; private boolean mIsHorizontalDivision; /** The first target which is still splitting the screen */ @@ -144,6 +146,8 @@ public class DividerSnapAlgorithm { com.android.internal.R.fraction.docked_stack_divider_fixed_ratio, 1, 1); mMinimalSizeResizableTask = res.getDimensionPixelSize( com.android.internal.R.dimen.default_minimal_size_resizable_task); + mAllowFlexibleSplitRatios = res.getBoolean( + com.android.internal.R.bool.config_flexibleSplitRatios); mTaskHeightInMinimizedMode = isHomeResizable ? res.getDimensionPixelSize( com.android.internal.R.dimen.task_height_of_minimized_mode) : 0; calculateTargets(isHorizontalDivision, dockSide); @@ -349,6 +353,9 @@ public class DividerSnapAlgorithm { ? mDisplayHeight - mInsets.bottom : mDisplayWidth - mInsets.right; int size = (int) (mFixedRatio * (end - start)) - mDividerSize / 2; + if (mAllowFlexibleSplitRatios) { + size = Math.max(size, mMinimalSizeResizableTask); + } int topPosition = start + size; int bottomPosition = end - size - mDividerSize; addNonDismissingTargets(isHorizontalDivision, topPosition, bottomPosition, dividerMax); -- cgit v1.2.3-59-g8ed1b