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

Commit b0873998 authored by Jacky Kao's avatar Jacky Kao
Browse files

Providing new accessibilityNode action

Providing a new A11yNode action for ime actions:
ACTION_IME_ENTER
1. TextView will expose this action and store the ime action id
if it is editable and has focus.
2. This A11y action which would have default text “Enter” if the
developer didn’t set a custom ime action label, otherwise the label
would be what the developer provided.
3. This A11y action which would have default id,
IME_ACTION_UNSPECIFIED if the developer didn't set a custom ime
action id, otherwise the id would be what the developer provided.
4. TextView will perform this action by calling its onEditorAction
with stored ime action when populating this node.

Bug: 139380257
Test: a11y CTS tests & unit tests
Change-Id: Ifba432f8fda732f8335c40fe27f5e74499621d47
parent 35be8b1d
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -1872,6 +1872,7 @@ package android {
    ctor public R.id();
    ctor public R.id();
    field public static final int accessibilityActionContextClick = 16908348; // 0x102003c
    field public static final int accessibilityActionContextClick = 16908348; // 0x102003c
    field public static final int accessibilityActionHideTooltip = 16908357; // 0x1020045
    field public static final int accessibilityActionHideTooltip = 16908357; // 0x1020045
    field public static final int accessibilityActionImeEnter = 16908372; // 0x1020054
    field public static final int accessibilityActionMoveWindow = 16908354; // 0x1020042
    field public static final int accessibilityActionMoveWindow = 16908354; // 0x1020042
    field public static final int accessibilityActionPageDown = 16908359; // 0x1020047
    field public static final int accessibilityActionPageDown = 16908359; // 0x1020047
    field public static final int accessibilityActionPageLeft = 16908360; // 0x1020048
    field public static final int accessibilityActionPageLeft = 16908360; // 0x1020048
@@ -54085,6 +54086,7 @@ package android.view.accessibility {
    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_EXPAND;
    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_EXPAND;
    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_FOCUS;
    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_FOCUS;
    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_HIDE_TOOLTIP;
    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_HIDE_TOOLTIP;
    field @NonNull public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_IME_ENTER;
    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_LONG_CLICK;
    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_LONG_CLICK;
    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_MOVE_WINDOW;
    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_MOVE_WINDOW;
    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_NEXT_AT_MOVEMENT_GRANULARITY;
    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_NEXT_AT_MOVEMENT_GRANULARITY;
@@ -59233,6 +59235,7 @@ package android.widget {
    method public void setTypeface(@Nullable android.graphics.Typeface, int);
    method public void setTypeface(@Nullable android.graphics.Typeface, int);
    method public void setTypeface(@Nullable android.graphics.Typeface);
    method public void setTypeface(@Nullable android.graphics.Typeface);
    method public void setWidth(int);
    method public void setWidth(int);
    field public static final int ACCESSIBILITY_ACTION_IME_ENTER = 16908372; // 0x1020054
    field public static final int AUTO_SIZE_TEXT_TYPE_NONE = 0; // 0x0
    field public static final int AUTO_SIZE_TEXT_TYPE_NONE = 0; // 0x0
    field public static final int AUTO_SIZE_TEXT_TYPE_UNIFORM = 1; // 0x1
    field public static final int AUTO_SIZE_TEXT_TYPE_UNIFORM = 1; // 0x1
  }
  }
+22 −1
Original line number Original line Diff line number Diff line
@@ -551,6 +551,14 @@ public class AccessibilityNodeInfo implements Parcelable {
    public static final String ACTION_ARGUMENT_PRESS_HOLD_DURATION_MILLIS_INT =
    public static final String ACTION_ARGUMENT_PRESS_HOLD_DURATION_MILLIS_INT =
            "android.view.accessibility.action.ARGUMENT_PRESS_HOLD_DURATION_MILLIS_INT";
            "android.view.accessibility.action.ARGUMENT_PRESS_HOLD_DURATION_MILLIS_INT";


    /**
     * Argument to represent the IME action Id to press the returning key on a node.
     * For use with R.id.accessibilityActionImeEnter
     * @hide
     */
    public static final String ACTION_ARGUMENT_IME_ACTION_ID_INT =
            "android.view.accessibility.action.ARGUMENT_IME_ACTION_ID_INT";

    // Focus types
    // Focus types


    /**
    /**
@@ -1644,8 +1652,12 @@ public class AccessibilityNodeInfo implements Parcelable {
            return false;
            return false;
        }
        }
        AccessibilityInteractionClient client = AccessibilityInteractionClient.getInstance();
        AccessibilityInteractionClient client = AccessibilityInteractionClient.getInstance();
        Bundle arguments = null;
        if (mExtras != null) {
            arguments = mExtras;
        }
        return client.performAccessibilityAction(mConnectionId, mWindowId, mSourceNodeId,
        return client.performAccessibilityAction(mConnectionId, mWindowId, mSourceNodeId,
                action, null);
                action, arguments);
    }
    }


    /**
    /**
@@ -4210,6 +4222,8 @@ public class AccessibilityNodeInfo implements Parcelable {
                return "ACTION_HIDE_TOOLTIP";
                return "ACTION_HIDE_TOOLTIP";
            case R.id.accessibilityActionPressAndHold:
            case R.id.accessibilityActionPressAndHold:
                return "ACTION_PRESS_AND_HOLD";
                return "ACTION_PRESS_AND_HOLD";
            case R.id.accessibilityActionImeEnter:
                return "ACTION_IME_ENTER";
            default:
            default:
                return "ACTION_UNKNOWN";
                return "ACTION_UNKNOWN";
        }
        }
@@ -4839,6 +4853,13 @@ public class AccessibilityNodeInfo implements Parcelable {
        @NonNull public static final AccessibilityAction ACTION_PRESS_AND_HOLD =
        @NonNull public static final AccessibilityAction ACTION_PRESS_AND_HOLD =
                new AccessibilityAction(R.id.accessibilityActionPressAndHold);
                new AccessibilityAction(R.id.accessibilityActionPressAndHold);


        /**
         * Action to send ime action. A node should expose this action only for views that are
         * currently with input focus and editable.
         */
        @NonNull public static final AccessibilityAction ACTION_IME_ENTER =
                new AccessibilityAction(R.id.accessibilityActionImeEnter);

        private final int mActionId;
        private final int mActionId;
        private final CharSequence mLabel;
        private final CharSequence mLabel;


+31 −0
Original line number Original line Diff line number Diff line
@@ -422,6 +422,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
     */
     */
    static final int PROCESS_TEXT_REQUEST_CODE = 100;
    static final int PROCESS_TEXT_REQUEST_CODE = 100;
    // Accessibility action to send IME custom action for CTS testing.
    public static final int ACCESSIBILITY_ACTION_IME_ENTER = R.id.accessibilityActionImeEnter;
    /**
    /**
     *  Return code of {@link #doKeyDown}.
     *  Return code of {@link #doKeyDown}.
     */
     */
@@ -11740,6 +11743,23 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                info.setContentInvalid(true);
                info.setContentInvalid(true);
                info.setError(mEditor.mError);
                info.setError(mEditor.mError);
            }
            }
            // TextView will expose this action if it is editable and has focus.
            if (isTextEditable() && isFocused()) {
                CharSequence imeActionLabel = mContext.getResources().getString(
                        com.android.internal.R.string.keyboardview_keycode_enter);
                if (getImeActionId() != 0 && getImeActionLabel() != null) {
                    imeActionLabel = getImeActionLabel();
                    final int imeActionId = getImeActionId();
                    // put ime action id into the extra data with ACTION_ARGUMENT_IME_ACTION_ID_INT.
                    final Bundle argument = info.getExtras();
                    argument.putInt(AccessibilityNodeInfo.ACTION_ARGUMENT_IME_ACTION_ID_INT,
                            imeActionId);
                }
                AccessibilityNodeInfo.AccessibilityAction action =
                        new AccessibilityNodeInfo.AccessibilityAction(
                                ACCESSIBILITY_ACTION_IME_ENTER, imeActionLabel);
                info.addAction(action);
            }
        }
        }
        if (!TextUtils.isEmpty(mText)) {
        if (!TextUtils.isEmpty(mText)) {
@@ -12051,6 +12071,17 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                    }
                    }
                }
                }
            } return true;
            } return true;
            case ACCESSIBILITY_ACTION_IME_ENTER: {
                if (isFocused() && isTextEditable()) {
                    final int imeActionId = (arguments != null) ? arguments.getInt(
                            AccessibilityNodeInfo.ACTION_ARGUMENT_IME_ACTION_ID_INT,
                            EditorInfo.IME_ACTION_UNSPECIFIED)
                            : EditorInfo.IME_ACTION_UNSPECIFIED;
                    if (imeActionId == getImeActionId()) {
                        onEditorAction(imeActionId);
                    }
                }
            } return true;
            default: {
            default: {
                return super.performAccessibilityActionInternal(action, arguments);
                return super.performAccessibilityActionInternal(action, arguments);
            }
            }
+3 −0
Original line number Original line Diff line number Diff line
@@ -223,4 +223,7 @@


  <!-- Accessibility action identifier for {@link android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction#ACTION_PRESS_AND_HOLD}. -->
  <!-- Accessibility action identifier for {@link android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction#ACTION_PRESS_AND_HOLD}. -->
  <item type="id" name="accessibilityActionPressAndHold" />
  <item type="id" name="accessibilityActionPressAndHold" />

  <!-- Accessibility action identifier for {@link android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction#ACTION_IME_ENTER}. -->
  <item type="id" name="accessibilityActionImeEnter" />
</resources>
</resources>
+1 −0
Original line number Original line Diff line number Diff line
@@ -3054,6 +3054,7 @@
      <public name="accessibilitySystemActionToggleSplitScreen" />
      <public name="accessibilitySystemActionToggleSplitScreen" />
      <public name="accessibilitySystemActionLockScreen" />
      <public name="accessibilitySystemActionLockScreen" />
      <public name="accessibilitySystemActionTakeScreenshot" />
      <public name="accessibilitySystemActionTakeScreenshot" />
      <public name="accessibilityActionImeEnter" />
    </public-group>
    </public-group>
  <!-- ===============================================================
  <!-- ===============================================================
       DO NOT ADD UN-GROUPED ITEMS HERE
       DO NOT ADD UN-GROUPED ITEMS HERE