diff --git a/core/java/com/android/internal/policy/DividerSnapAlgorithm.java b/core/java/com/android/internal/policy/DividerSnapAlgorithm.java
index 669e1efb92491..b8bc1618b3a3e 100644
--- a/core/java/com/android/internal/policy/DividerSnapAlgorithm.java
+++ b/core/java/com/android/internal/policy/DividerSnapAlgorithm.java
@@ -330,6 +330,14 @@ public class DividerSnapAlgorithm {
return snapTarget;
}
+ public boolean isFirstSplitTargetAvailable() {
+ return mFirstSplitTarget != mMiddleTarget;
+ }
+
+ public boolean isLastSplitTargetAvailable() {
+ return mLastSplitTarget != mMiddleTarget;
+ }
+
/**
* Cycles through all non-dismiss targets with a stepping of {@param increment}. It moves left
* if {@param increment} is negative and moves right otherwise.
diff --git a/packages/SystemUI/res/values/ids.xml b/packages/SystemUI/res/values/ids.xml
index 9697ea6f37880..94d79f27e67f9 100644
--- a/packages/SystemUI/res/values/ids.xml
+++ b/packages/SystemUI/res/values/ids.xml
@@ -63,9 +63,10 @@
-
-
-
-
+
+
+
+
+
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index a03aa28c47c57..8e3ea4c946e07 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -1580,17 +1580,27 @@
Split-screen divider
-
- Move down
+
+ Left full screen
+
+ Left 70%
+
+ Left 50%
+
+ Left 30%
+
+ Right full screen
-
- Move up
-
-
- Move left
-
-
- Move right
+
+ Top full screen
+
+ Top 70%
+
+ Top 50%
+
+ Top 30%
+
+ Bottom full screen
Position %1$d, %2$s. Double tap to edit.
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java
index 67c4008b4dc6c..277c60bbb6b64 100644
--- a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java
+++ b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java
@@ -154,31 +154,62 @@ public class DividerView extends FrameLayout implements OnTouchListener,
public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfo(host, info);
if (isHorizontalDivision()) {
- info.addAction(new AccessibilityAction(R.id.action_move_up,
- mContext.getString(R.string.accessibility_action_divider_move_up)));
- info.addAction(new AccessibilityAction(R.id.action_move_down,
- mContext.getString(R.string.accessibility_action_divider_move_down)));
+ info.addAction(new AccessibilityAction(R.id.action_move_tl_full,
+ mContext.getString(R.string.accessibility_action_divider_top_full)));
+ if (mSnapAlgorithm.isFirstSplitTargetAvailable()) {
+ info.addAction(new AccessibilityAction(R.id.action_move_tl_70,
+ mContext.getString(R.string.accessibility_action_divider_top_70)));
+ }
+ info.addAction(new AccessibilityAction(R.id.action_move_tl_50,
+ mContext.getString(R.string.accessibility_action_divider_top_50)));
+ if (mSnapAlgorithm.isLastSplitTargetAvailable()) {
+ info.addAction(new AccessibilityAction(R.id.action_move_tl_30,
+ mContext.getString(R.string.accessibility_action_divider_top_30)));
+ }
+ info.addAction(new AccessibilityAction(R.id.action_move_rb_full,
+ mContext.getString(R.string.accessibility_action_divider_bottom_full)));
} else {
- info.addAction(new AccessibilityAction(R.id.action_move_left,
- mContext.getString(R.string.accessibility_action_divider_move_left)));
- info.addAction(new AccessibilityAction(R.id.action_move_right,
- mContext.getString(R.string.accessibility_action_divider_move_right)));
+ info.addAction(new AccessibilityAction(R.id.action_move_tl_full,
+ mContext.getString(R.string.accessibility_action_divider_left_full)));
+ if (mSnapAlgorithm.isFirstSplitTargetAvailable()) {
+ info.addAction(new AccessibilityAction(R.id.action_move_tl_70,
+ mContext.getString(R.string.accessibility_action_divider_left_70)));
+ }
+ info.addAction(new AccessibilityAction(R.id.action_move_tl_50,
+ mContext.getString(R.string.accessibility_action_divider_left_50)));
+ if (mSnapAlgorithm.isLastSplitTargetAvailable()) {
+ info.addAction(new AccessibilityAction(R.id.action_move_tl_30,
+ mContext.getString(R.string.accessibility_action_divider_left_30)));
+ }
+ info.addAction(new AccessibilityAction(R.id.action_move_rb_full,
+ mContext.getString(R.string.accessibility_action_divider_right_full)));
}
}
@Override
public boolean performAccessibilityAction(View host, int action, Bundle args) {
- if (action == R.id.action_move_up || action == R.id.action_move_down
- || action == R.id.action_move_left || action == R.id.action_move_right) {
- int position = getCurrentPosition();
- SnapTarget currentTarget = mSnapAlgorithm.calculateSnapTarget(
- position, 0 /* velocity */);
- SnapTarget nextTarget =
- action == R.id.action_move_up || action == R.id.action_move_left
- ? mSnapAlgorithm.getPreviousTarget(currentTarget)
- : mSnapAlgorithm.getNextTarget(currentTarget);
+ int currentPosition = getCurrentPosition();
+ SnapTarget nextTarget = null;
+ switch (action) {
+ case R.id.action_move_tl_full:
+ nextTarget = mSnapAlgorithm.getDismissEndTarget();
+ break;
+ case R.id.action_move_tl_70:
+ nextTarget = mSnapAlgorithm.getLastSplitTarget();
+ break;
+ case R.id.action_move_tl_50:
+ nextTarget = mSnapAlgorithm.getMiddleTarget();
+ break;
+ case R.id.action_move_tl_30:
+ nextTarget = mSnapAlgorithm.getFirstSplitTarget();
+ break;
+ case R.id.action_move_rb_full:
+ nextTarget = mSnapAlgorithm.getDismissStartTarget();
+ break;
+ }
+ if (nextTarget != null) {
startDragging(true /* animate */, false /* touching */);
- stopDragging(getCurrentPosition(), nextTarget, 250, Interpolators.FAST_OUT_SLOW_IN);
+ stopDragging(currentPosition, nextTarget, 250, Interpolators.FAST_OUT_SLOW_IN);
return true;
}
return super.performAccessibilityAction(host, action, args);