Merge "Allow devices to calculate their own split ratio instead of using fixed ratio" into main
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index b5256f8..91ef324 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -6973,6 +6973,9 @@
<!-- Whether to enable left-right split in portrait on this device -->
<bool name="config_leftRightSplitInPortrait">false</bool>
+ <!-- Whether to allow split screen ratios to flexibly calculate based on available space -->
+ <bool name="config_flexibleSplitRatios">false</bool>
+
<!-- Whether scroll haptic feedback is enabled for rotary encoder scrolls on
{@link MotionEvent#AXIS_SCROLL} generated by {@link InputDevice#SOURCE_ROTARY_ENCODER}
devices. -->
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 58a17a8..daf1230 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -408,6 +408,7 @@
<java-symbol type="bool" name="config_supportsSplitScreenMultiWindow" />
<java-symbol type="bool" name="config_supportsMultiDisplay" />
<java-symbol type="bool" name="config_leftRightSplitInPortrait" />
+ <java-symbol type="bool" name="config_flexibleSplitRatios" />
<java-symbol type="integer" name="config_supportsNonResizableMultiWindow" />
<java-symbol type="integer" name="config_respectsActivityMinWidthHeightMultiWindow" />
<java-symbol type="dimen" name="config_minPercentageMultiWindowSupportHeight" />
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 f9a286e..bc6ed1f 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 @@
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 @@
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 @@
? 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);