diff --git a/core/java/com/android/internal/policy/DividerSnapAlgorithm.java b/core/java/com/android/internal/policy/DividerSnapAlgorithm.java index 2779be6f97539..575a5320bbd3c 100644 --- a/core/java/com/android/internal/policy/DividerSnapAlgorithm.java +++ b/core/java/com/android/internal/policy/DividerSnapAlgorithm.java @@ -69,6 +69,7 @@ public class DividerSnapAlgorithm { private final ArrayList mTargets = new ArrayList<>(); private final Rect mInsets = new Rect(); private final int mSnapMode; + private final boolean mFreeSnapMode; private final int mMinimalSizeResizableTask; private final int mTaskHeightInMinimizedMode; private final float mFixedRatio; @@ -125,6 +126,8 @@ public class DividerSnapAlgorithm { mInsets.set(insets); mSnapMode = isMinimizedMode ? SNAP_MODE_MINIMIZED : res.getInteger(com.android.internal.R.integer.config_dockedStackDividerSnapMode); + mFreeSnapMode = res.getBoolean( + com.android.internal.R.bool.config_dockedStackDividerFreeSnapMode); mFixedRatio = res.getFraction( com.android.internal.R.fraction.docked_stack_divider_fixed_ratio, 1, 1); mMinimalSizeResizableTask = res.getDimensionPixelSize( @@ -247,7 +250,20 @@ public class DividerSnapAlgorithm { } } + private boolean shouldApplyFreeSnapMode(int position) { + if (!mFreeSnapMode) { + return false; + } + if (!isFirstSplitTargetAvailable() || !isLastSplitTargetAvailable()) { + return false; + } + return mFirstSplitTarget.position < position && position < mLastSplitTarget.position; + } + private SnapTarget snap(int position, boolean hardDismiss) { + if (shouldApplyFreeSnapMode(position)) { + return new SnapTarget(position, position, SnapTarget.FLAG_NONE); + } int minIndex = -1; float minDistance = Float.MAX_VALUE; int size = mTargets.size(); diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index b1bba53bd7ab4..340dd4d7d89a2 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -3346,6 +3346,10 @@ This should only be set when the device has gestural navigation enabled by default. --> false + + false + 16x16 diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 9a8cde5b9fc14..488f123da2b7b 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -1667,6 +1667,7 @@ +