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

Commit bb8a92b2 authored by Hiroki Sato's avatar Hiroki Sato
Browse files

Populate AccessibilityEvent.getAction when preforming an action

This change populates the action in AccessibilityEevnt when this event
is dispatched while performing an accessibility action.

Note that there is no guarantee that action is always populated for
any action because developers can handle actions in their delegate.

Bug: 151398335
Test: none. (manually confirm that the value is populated)
Change-Id: I3fc46ba9df239c665ad5d804d2b81b366f5dd3de
parent ca96d07b
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -679,6 +679,7 @@ public final class AccessibilityInteractionController {
            mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = flags;
            final View target = findViewByAccessibilityId(accessibilityViewId);
            if (target != null && isShown(target)) {
                mA11yManager.notifyPerformingAction(action);
                if (action == R.id.accessibilityActionClickOnClickableSpan) {
                    // Handle this hidden action separately
                    succeeded = handleClickableSpanActionUiThread(
@@ -692,6 +693,7 @@ public final class AccessibilityInteractionController {
                        succeeded = target.performAccessibilityAction(action, arguments);
                    }
                }
                mA11yManager.notifyPerformingAction(0);
            }
        } finally {
            try {
+15 −0
Original line number Diff line number Diff line
@@ -240,6 +240,8 @@ public final class AccessibilityManager {

    AccessibilityPolicy mAccessibilityPolicy;

    private int mPerformingAction = 0;

    @UnsupportedAppUsage
    private final ArrayMap<AccessibilityStateChangeListener, Handler>
            mAccessibilityStateChangeListeners = new ArrayMap<>();
@@ -573,6 +575,9 @@ public final class AccessibilityManager {
                return;
            }
            event.setEventTime(SystemClock.uptimeMillis());
            if (event.getAction() == 0) {
                event.setAction(mPerformingAction);
            }
            if (mAccessibilityPolicy != null) {
                dispatchedEvent = mAccessibilityPolicy.onAccessibilityEvent(event,
                        mIsEnabled, mRelevantEventTypes);
@@ -972,6 +977,16 @@ public final class AccessibilityManager {
        return mRequestPreparerLists.get(id);
    }

    /**
     * Set the currently performing accessibility action in views.
     *
     * @param actionId the action id of {@link AccessibilityNodeInfo.AccessibilityAction}.
     * @hide
     */
    public void notifyPerformingAction(int actionId) {
        mPerformingAction = actionId;
    }

    /**
     * Registers a {@link HighTextContrastChangeListener} for changes in
     * the global high text contrast state of the system.