From 88afd020b696af24332547f203eaa2538618ac9e Mon Sep 17 00:00:00 2001 From: Jorim Jaggi Date: Wed, 24 Feb 2016 21:11:08 -0500 Subject: [PATCH] Accessibility for split-screen divider - Add label - Add actions Bug: 27274494 Bug: 26894949 Change-Id: I041c44f793f1ec86ec27951cc8e87868148b527d --- .../res/layout/docked_stack_divider.xml | 1 + packages/SystemUI/res/values/ids.xml | 6 +++ packages/SystemUI/res/values/strings.xml | 14 +++++++ .../stackdivider/DividerHandleView.java | 4 +- .../systemui/stackdivider/DividerView.java | 40 +++++++++++++++++++ 5 files changed, 63 insertions(+), 2 deletions(-) diff --git a/packages/SystemUI/res/layout/docked_stack_divider.xml b/packages/SystemUI/res/layout/docked_stack_divider.xml index 7ea5027b78f4a..cfaf018268859 100644 --- a/packages/SystemUI/res/layout/docked_stack_divider.xml +++ b/packages/SystemUI/res/layout/docked_stack_divider.xml @@ -27,6 +27,7 @@ diff --git a/packages/SystemUI/res/values/ids.xml b/packages/SystemUI/res/values/ids.xml index 87aedab6eec50..54d271a4ff15f 100644 --- a/packages/SystemUI/res/values/ids.xml +++ b/packages/SystemUI/res/values/ids.xml @@ -56,5 +56,11 @@ + + + + + + diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 6f6e515605b33..30c0be882416b 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -1430,4 +1430,18 @@ Don\'t show this icon + + Split-screen divider + + + Move down + + + Move up + + + Move left + + + Move right diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerHandleView.java b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerHandleView.java index 9118e9cb8635c..d5f7b39b8e612 100644 --- a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerHandleView.java +++ b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerHandleView.java @@ -26,7 +26,7 @@ import android.graphics.Canvas; import android.graphics.Paint; import android.util.AttributeSet; import android.util.Property; -import android.widget.ImageButton; +import android.view.View; import com.android.systemui.Interpolators; import com.android.systemui.R; @@ -34,7 +34,7 @@ import com.android.systemui.R; /** * View for the handle in the docked stack divider. */ -public class DividerHandleView extends ImageButton { +public class DividerHandleView extends View { private final static Property WIDTH_PROPERTY = new Property(Integer.class, "width") { diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java index 65a2f8fc8f064..da5cbe7a90032 100644 --- a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java +++ b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java @@ -27,6 +27,7 @@ import android.content.res.Configuration; import android.graphics.Rect; import android.graphics.Region.Op; import android.hardware.display.DisplayManager; +import android.os.Bundle; import android.util.AttributeSet; import android.view.Display; import android.view.DisplayInfo; @@ -40,6 +41,8 @@ import android.view.ViewTreeObserver.InternalInsetsInfo; import android.view.ViewTreeObserver.OnComputeInternalInsetsListener; import android.view.WindowInsets; import android.view.WindowManager; +import android.view.accessibility.AccessibilityNodeInfo; +import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction; import android.view.animation.Interpolator; import android.view.animation.PathInterpolator; import android.widget.FrameLayout; @@ -132,6 +135,42 @@ public class DividerView extends FrameLayout implements OnTouchListener, private boolean mGrowRecents; private Animator mCurrentAnimator; + private final AccessibilityDelegate mHandleDelegate = new AccessibilityDelegate() { + @Override + 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))); + } 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))); + } + } + + @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); + startDragging(true /* animate */, false /* touching */); + stopDragging(getCurrentPosition(), nextTarget, 250, Interpolators.FAST_OUT_SLOW_IN); + return true; + } + return super.performAccessibilityAction(host, action, args); + } + }; + public DividerView(Context context) { super(context); } @@ -171,6 +210,7 @@ public class DividerView extends FrameLayout implements OnTouchListener, mHandle.setPointerIcon(PointerIcon.getSystemIcon(getContext(), landscape ? STYLE_HORIZONTAL_DOUBLE_ARROW : STYLE_VERTICAL_DOUBLE_ARROW)); getViewTreeObserver().addOnComputeInternalInsetsListener(this); + mHandle.setAccessibilityDelegate(mHandleDelegate); } @Override