Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 170cb017 authored by Vinit Nayak's avatar Vinit Nayak
Browse files

Add divider swap for a11y voice access

Test: Manual, atest DividerViewTest
Fixes: 379640352
Flag: EXEMPT bug fix
Change-Id: I12d51c22322b9de20ff1567cf11c5581f6a7e277
parent abcbc53a
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@
    <item type="id" name="action_move_tl_50" />
    <item type="id" name="action_move_tl_30" />
    <item type="id" name="action_move_rb_full" />
    <item type="id" name="action_swap_apps" />

    <!-- For saving PhysicsAnimationLayout animations/animators as view tags. -->
    <item type="id" name="translation_x_dynamicanimation_tag"/>
+2 −0
Original line number Diff line number Diff line
@@ -90,6 +90,8 @@
    <string name="accessibility_action_divider_left_30">Left 30%</string>
    <!-- Accessibility action for moving docked stack divider to make the right screen full screen [CHAR LIMIT=NONE] -->
    <string name="accessibility_action_divider_right_full">Right full screen</string>
    <!-- Accessibility action for swapping the apps around the divider (double tap action) [CHAR LIMIT=NONE] -->
    <string name="accessibility_action_divider_swap">Swap Apps</string>

    <!-- Accessibility action for moving docked stack divider to make the top screen full screen [CHAR LIMIT=NONE] -->
    <string name="accessibility_action_divider_top_full">Top full screen</string>
+8 −1
Original line number Diff line number Diff line
@@ -125,11 +125,13 @@ public class DividerView extends FrameLayout implements View.OnTouchListener {
        }
    };

    private final AccessibilityDelegate mHandleDelegate = new AccessibilityDelegate() {
    final AccessibilityDelegate mHandleDelegate = new AccessibilityDelegate() {
        @Override
        public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) {
            super.onInitializeAccessibilityNodeInfo(host, info);
            final DividerSnapAlgorithm snapAlgorithm = mSplitLayout.mDividerSnapAlgorithm;
            info.addAction(new AccessibilityAction(R.id.action_swap_apps,
                    mContext.getString(R.string.accessibility_action_divider_swap)));
            if (mSplitLayout.isLeftRightSplit()) {
                info.addAction(new AccessibilityAction(R.id.action_move_tl_full,
                        mContext.getString(R.string.accessibility_action_divider_left_full)));
@@ -172,6 +174,11 @@ public class DividerView extends FrameLayout implements View.OnTouchListener {
        @Override
        public boolean performAccessibilityAction(@NonNull View host, int action,
                @Nullable Bundle args) {
            if (action == R.id.action_swap_apps) {
                mSplitLayout.onDoubleTappedDivider();
                return true;
            }

            DividerSnapAlgorithm.SnapTarget nextTarget = null;
            DividerSnapAlgorithm snapAlgorithm = mSplitLayout.mDividerSnapAlgorithm;
            if (action == R.id.action_move_tl_full) {
+11 −2
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import androidx.test.annotation.UiThreadTest;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;

import com.android.wm.shell.R;
import com.android.wm.shell.ShellTaskOrganizer;
import com.android.wm.shell.ShellTestCase;
import com.android.wm.shell.common.DisplayController;
@@ -66,9 +67,9 @@ public class DividerViewTest extends ShellTestCase {
    public void setup() {
        MockitoAnnotations.initMocks(this);
        Configuration configuration = getConfiguration();
        mSplitLayout = new SplitLayout("TestSplitLayout", mContext, configuration,
        mSplitLayout = spy(new SplitLayout("TestSplitLayout", mContext, configuration,
                mSplitLayoutHandler, mCallbacks, mDisplayController, mDisplayImeController,
                mTaskOrganizer, SplitLayout.PARALLAX_NONE, mSplitState, mHandler);
                mTaskOrganizer, SplitLayout.PARALLAX_NONE, mSplitState, mHandler));
        SplitWindowManager splitWindowManager = new SplitWindowManager("TestSplitWindowManager",
                mContext,
                configuration, mCallbacks);
@@ -98,6 +99,14 @@ public class DividerViewTest extends ShellTestCase {
                "false", false);
    }

    @Test
    public void swapDividerActionForA11y() {
        mDividerView.setAccessibilityDelegate(mDividerView.mHandleDelegate);
        mDividerView.getAccessibilityDelegate().performAccessibilityAction(mDividerView,
                R.id.action_swap_apps, null);
        verify(mSplitLayout, times(1)).onDoubleTappedDivider();
    }

    private static MotionEvent getMotionEvent(long eventTime, int action, float x, float y) {
        MotionEvent.PointerProperties properties = new MotionEvent.PointerProperties();
        properties.id = 0;