diff options
| author | 2016-02-24 21:11:08 -0500 | |
|---|---|---|
| committer | 2016-02-25 13:18:12 -0500 | |
| commit | 88afd020b696af24332547f203eaa2538618ac9e (patch) | |
| tree | 3462087c49c3e360c4e3ff386b37aff70bd7f5a9 | |
| parent | e1c4641d6f7d234a912284254f67c0122d7eca5b (diff) | |
Accessibility for split-screen divider
- Add label
- Add actions
Bug: 27274494
Bug: 26894949
Change-Id: I041c44f793f1ec86ec27951cc8e87868148b527d
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 7ea5027b78f4..cfaf01826885 100644 --- a/packages/SystemUI/res/layout/docked_stack_divider.xml +++ b/packages/SystemUI/res/layout/docked_stack_divider.xml @@ -27,6 +27,7 @@ <com.android.systemui.stackdivider.DividerHandleView style="@style/DockedDividerHandle" android:id="@+id/docked_divider_handle" + android:contentDescription="@string/accessibility_divider" android:background="@null"/> </com.android.systemui.stackdivider.DividerView> diff --git a/packages/SystemUI/res/values/ids.xml b/packages/SystemUI/res/values/ids.xml index 87aedab6eec5..54d271a4ff15 100644 --- a/packages/SystemUI/res/values/ids.xml +++ b/packages/SystemUI/res/values/ids.xml @@ -56,5 +56,11 @@ <item type="id" name="image_icon_tag" /> <item type="id" name="contains_transformed_view" /> <item type="id" name="is_clicked_heads_up_tag" /> + + <!-- Accessibility actions for the docked stack divider --> + <item type="id" name="action_move_left" /> + <item type="id" name="action_move_right" /> + <item type="id" name="action_move_up" /> + <item type="id" name="action_move_down" /> </resources> diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 6f6e515605b3..30c0be882416 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -1430,4 +1430,18 @@ <item>Don\'t show this icon</item> </string-array> + <!-- Accessibility label for the divider that separates the windows in split-screen mode [CHAR LIMIT=NONE] --> + <string name="accessibility_divider">Split-screen divider</string> + + <!-- Accessibility action for moving down the docked stack divider [CHAR LIMIT=NONE] --> + <string name="accessibility_action_divider_move_down">Move down</string> + + <!-- Accessibility action for moving down the docked stack divider [CHAR LIMIT=NONE] --> + <string name="accessibility_action_divider_move_up">Move up</string> + + <!-- Accessibility action for moving down the docked stack divider [CHAR LIMIT=NONE] --> + <string name="accessibility_action_divider_move_left">Move left</string> + + <!-- Accessibility action for moving down the docked stack divider [CHAR LIMIT=NONE] --> + <string name="accessibility_action_divider_move_right">Move right</string> </resources> diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerHandleView.java b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerHandleView.java index 9118e9cb8635..d5f7b39b8e61 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<DividerHandleView, Integer> WIDTH_PROPERTY = new Property<DividerHandleView, Integer>(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 65a2f8fc8f06..da5cbe7a9003 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 |