From ce9630da86342c7bf30f00d1ced34a1d051c55ba Mon Sep 17 00:00:00 2001 From: Winson Date: Tue, 19 Apr 2016 11:33:04 -0700 Subject: [PATCH] Tweaking accessibility actions for dock divider. - Adding tl_full/70%/50%/30%/rb_full Bug: 27724715 Change-Id: Ie3125ec81e6463696cf56640c6b86f9cfcbda945 --- .../internal/policy/DividerSnapAlgorithm.java | 8 +++ packages/SystemUI/res/values/ids.xml | 9 +-- packages/SystemUI/res/values/strings.xml | 30 ++++++--- .../systemui/stackdivider/DividerView.java | 67 ++++++++++++++----- 4 files changed, 82 insertions(+), 32 deletions(-) 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);