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

Commit b12f423b authored by Peter Liang's avatar Peter Liang Committed by PETER LIANG
Browse files

Support the feature of Drag to remove for the Accessibility Floating Menu(3/n).

Action:
For Talkback users, support the accessibility action of the message view with the undo action.

Bug: 237716018
Bug: 251688823
Test: atest MenuItemAccessibilityDelegateTest
Change-Id: Ie2f602729f5c3322decee4a09894b4df78cda4ea
parent 11d8d5bb
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -177,6 +177,7 @@
    <item type="id" name="action_move_bottom_right"/>
    <item type="id" name="action_move_to_edge_and_hide"/>
    <item type="id" name="action_move_out_edge_and_show"/>
    <item type="id" name="action_remove_menu"/>

    <!-- rounded corner view id -->
    <item type="id" name="rounded_corner_top_left"/>
+2 −0
Original line number Diff line number Diff line
@@ -2218,6 +2218,8 @@
    <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half">Move to edge and hide</string>
    <!-- Action in accessibility menu to move the accessibility floating button out the edge and show. [CHAR LIMIT=36]-->
    <string name="accessibility_floating_button_action_move_out_edge_and_show">Move out edge and show</string>
    <!-- Action in accessibility menu to remove the accessibility floating menu view on the screen. [CHAR LIMIT=36]-->
    <string name="accessibility_floating_button_action_remove_menu">Remove</string>
    <!-- Action in accessibility menu to toggle on/off the accessibility feature. [CHAR LIMIT=30]-->
    <string name="accessibility_floating_button_action_double_tap_to_toggle">toggle</string>

+4 −0
Original line number Diff line number Diff line
@@ -172,4 +172,8 @@ class DismissAnimationController implements ComponentCallbacks {
                R.dimen.dismiss_circle_small);
        mSizePercent = mMinDismissSize / maxDismissSize;
    }

    interface DismissCallback {
        void onDismiss();
    }
}
+15 −0
Original line number Diff line number Diff line
@@ -35,6 +35,8 @@ import androidx.dynamicanimation.animation.SpringAnimation;
import androidx.dynamicanimation.animation.SpringForce;
import androidx.recyclerview.widget.RecyclerView;

import com.android.internal.util.Preconditions;

import java.util.HashMap;

/**
@@ -64,6 +66,7 @@ class MenuAnimationController {
    private final Handler mHandler;
    private boolean mIsMovedToEdge;
    private boolean mIsFadeEffectEnabled;
    private DismissAnimationController.DismissCallback mDismissCallback;

    // Cache the animations state of {@link DynamicAnimation.TRANSLATION_X} and {@link
    // DynamicAnimation.TRANSLATION_Y} to be well controlled by the touch handler
@@ -102,6 +105,11 @@ class MenuAnimationController {
        }
    }

    void setDismissCallback(
            DismissAnimationController.DismissCallback dismissCallback) {
        mDismissCallback = dismissCallback;
    }

    void moveToTopLeftPosition() {
        mIsMovedToEdge = false;
        final Rect draggableBounds = mMenuView.getMenuDraggableBounds();
@@ -132,6 +140,13 @@ class MenuAnimationController {
        constrainPositionAndUpdate(position);
    }

    void removeMenu() {
        Preconditions.checkArgument(mDismissCallback != null,
                "The dismiss callback should be initialized first.");

        mDismissCallback.onDismiss();
    }

    void flingMenuThenSpringToEdge(float x, float velocityX, float velocityY) {
        final boolean shouldMenuFlingLeft = isOnLeftSide()
                ? velocityX < ESCAPE_VELOCITY
+11 −0
Original line number Diff line number Diff line
@@ -84,6 +84,12 @@ class MenuItemAccessibilityDelegate extends RecyclerViewAccessibilityDelegate.It
                new AccessibilityNodeInfoCompat.AccessibilityActionCompat(moveEdgeId,
                        res.getString(moveEdgeTextResId));
        info.addAction(moveToOrOutEdge);

        final AccessibilityNodeInfoCompat.AccessibilityActionCompat removeMenu =
                new AccessibilityNodeInfoCompat.AccessibilityActionCompat(
                        R.id.action_remove_menu,
                        res.getString(R.string.accessibility_floating_button_action_remove_menu));
        info.addAction(removeMenu);
    }

    @Override
@@ -126,6 +132,11 @@ class MenuItemAccessibilityDelegate extends RecyclerViewAccessibilityDelegate.It
            return true;
        }

        if (action == R.id.action_remove_menu) {
            mAnimationController.removeMenu();
            return true;
        }

        return super.performAccessibilityAction(host, action, args);
    }
}
Loading