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

Commit f13f14ef authored by Svetoslav Ganov's avatar Svetoslav Ganov Committed by Android (Google) Code Review
Browse files

Merge "Remove unusable a11y APIs for ClickableSpans." into nyc-dev

parents 8eb8a32f 72fde85f
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -44101,8 +44101,6 @@ package android.view.accessibility {
    method public void setVisibleToUser(boolean);
    method public void writeToParcel(android.os.Parcel, int);
    field public static final int ACTION_ACCESSIBILITY_FOCUS = 64; // 0x40
    field public static final java.lang.String ACTION_ARGUMENT_CLICK_CHARACTER_INDEX_INT = "android.view.accessibility.action.ARGUMENT_CLICK_CHARACTER_INDEX_INT";
    field public static final java.lang.String ACTION_ARGUMENT_CLICK_SPAN_INDEX_INT = "android.view.accessibility.action.ARGUMENT_CLICK_SPAN_INDEX_INT";
    field public static final java.lang.String ACTION_ARGUMENT_COLUMN_INT = "android.view.accessibility.action.ARGUMENT_COLUMN_INT";
    field public static final java.lang.String ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN = "ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN";
    field public static final java.lang.String ACTION_ARGUMENT_HTML_ELEMENT_STRING = "ACTION_ARGUMENT_HTML_ELEMENT_STRING";
+0 −2
Original line number Diff line number Diff line
@@ -46844,8 +46844,6 @@ package android.view.accessibility {
    method public void setVisibleToUser(boolean);
    method public void writeToParcel(android.os.Parcel, int);
    field public static final int ACTION_ACCESSIBILITY_FOCUS = 64; // 0x40
    field public static final java.lang.String ACTION_ARGUMENT_CLICK_CHARACTER_INDEX_INT = "android.view.accessibility.action.ARGUMENT_CLICK_CHARACTER_INDEX_INT";
    field public static final java.lang.String ACTION_ARGUMENT_CLICK_SPAN_INDEX_INT = "android.view.accessibility.action.ARGUMENT_CLICK_SPAN_INDEX_INT";
    field public static final java.lang.String ACTION_ARGUMENT_COLUMN_INT = "android.view.accessibility.action.ARGUMENT_COLUMN_INT";
    field public static final java.lang.String ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN = "ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN";
    field public static final java.lang.String ACTION_ARGUMENT_HTML_ELEMENT_STRING = "ACTION_ARGUMENT_HTML_ELEMENT_STRING";
+0 −2
Original line number Diff line number Diff line
@@ -44175,8 +44175,6 @@ package android.view.accessibility {
    method public void setVisibleToUser(boolean);
    method public void writeToParcel(android.os.Parcel, int);
    field public static final int ACTION_ACCESSIBILITY_FOCUS = 64; // 0x40
    field public static final java.lang.String ACTION_ARGUMENT_CLICK_CHARACTER_INDEX_INT = "android.view.accessibility.action.ARGUMENT_CLICK_CHARACTER_INDEX_INT";
    field public static final java.lang.String ACTION_ARGUMENT_CLICK_SPAN_INDEX_INT = "android.view.accessibility.action.ARGUMENT_CLICK_SPAN_INDEX_INT";
    field public static final java.lang.String ACTION_ARGUMENT_COLUMN_INT = "android.view.accessibility.action.ARGUMENT_COLUMN_INT";
    field public static final java.lang.String ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN = "ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN";
    field public static final java.lang.String ACTION_ARGUMENT_HTML_ELEMENT_STRING = "ACTION_ARGUMENT_HTML_ELEMENT_STRING";
+0 −57
Original line number Diff line number Diff line
@@ -327,36 +327,6 @@ public class AccessibilityNodeInfo implements Parcelable {

    // Action arguments

    /**
     * Argument for specifying index of {@link android.text.style.ClickableSpan} the click action is
     * related to.
     * <p>
     * <strong>Type:</strong> int<br>
     * <strong>Actions:</strong>
     * {@link AccessibilityAction#ACTION_CLICK}
     * </p>
     *
     * @see AccessibilityAction#ACTION_CLICK
     */
    public static final String ACTION_ARGUMENT_CLICK_SPAN_INDEX_INT =
            "android.view.accessibility.action.ARGUMENT_CLICK_SPAN_INDEX_INT";

    /**
     * Argument for specifying index of character in the text which contains
     * {@link android.text.style.ClickableSpan} the click action is
     * related to. If there is more than one {@link android.text.style.ClickableSpan} assigned for
     * the range the character is in only the first span would be clicked.
     * <p>
     * <strong>Type:</strong> int<br>
     * <strong>Actions:</strong>
     * {@link AccessibilityAction#ACTION_CLICK}
     * </p>
     *
     * @see AccessibilityAction#ACTION_CLICK
     */
    public static final String ACTION_ARGUMENT_CLICK_CHARACTER_INDEX_INT =
            "android.view.accessibility.action.ARGUMENT_CLICK_CHARACTER_INDEX_INT";

    /**
     * Argument for which movement granularity to be used when traversing the node text.
     * <p>
@@ -3391,33 +3361,6 @@ public class AccessibilityNodeInfo implements Parcelable {

        /**
         * Action that clicks on the node info.
         *
         * <p>
         * If a specific {@link android.text.style.ClickableSpan} within node's text content is
         * supposed to be clicked, then one of {@link #ACTION_ARGUMENT_CLICK_SPAN_INDEX_INT} or
         * {@link #ACTION_ARGUMENT_CLICK_CHARACTER_INDEX_INT} arguments should be specified.
         * If both arguments are set {@link #ACTION_ARGUMENT_CLICK_CHARACTER_INDEX_INT} would
         * be ignored.<br>
         *
         * {@link #ACTION_ARGUMENT_CLICK_SPAN_INDEX_INT} specifies index of corresponding
         * {@link android.text.style.ClickableSpan} in {@link android.text.SpannableString}.<br>
         *
         * {@link #ACTION_ARGUMENT_CLICK_CHARACTER_INDEX_INT} specifies index of character
         * that could contain one or more spans.
         * </p>
         *
         * <p>
         * <strong>Optional arguments:</strong>
         * {@link #ACTION_ARGUMENT_CLICK_SPAN_INDEX_INT},
         * {@link #ACTION_ARGUMENT_CLICK_CHARACTER_INDEX_INT}<br>
         * <strong>Example:</strong> Perform click on 3rd {@link android.text.style.ClickableSpan}
         * inside {@link android.text.SpannableString} in node's text.
         * <code><pre><p>
         *   Bundle arguments = new Bundle();
         *   arguments.putInt(AccessibilityNodeInfo.ACTION_ARGUMENT_CLICK_SPAN_INDEX_INT, 3);
         *   info.performAction(AccessibilityAction.ACTION_CLICK.getId(), arguments);
         * </code></pre></p>
         * </p>
         */
        public static final AccessibilityAction ACTION_CLICK =
                new AccessibilityAction(
+1 −41
Original line number Diff line number Diff line
@@ -9210,52 +9210,12 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener

    private boolean performAccessibilityActionClick(Bundle arguments) {
        boolean handled = false;
        boolean processed = false;

        if (!isEnabled()) {
            return false;
        }

        if (arguments != null && arguments.containsKey(
                AccessibilityNodeInfo.ACTION_ARGUMENT_CLICK_SPAN_INDEX_INT)) {
            int spanIndex = arguments.getInt(
                    AccessibilityNodeInfo.ACTION_ARGUMENT_CLICK_SPAN_INDEX_INT, -1);
            if (spanIndex >= 0 && hasSpannableText()) {
                ClickableSpan[] spans = ((Spannable) mText).getSpans(0,
                        mText.length(), ClickableSpan.class);
                if (spans != null && spans.length > spanIndex && spans[spanIndex] != null) {
                    // Simulate View.onTouchEvent for an ACTION_UP event
                    if (isFocusable() && !isFocused()) {
                        requestFocus();
                    }
                    spans[spanIndex].onClick(this);
                    handled = true;
                }
            }
            processed = true;
        }

        if (!processed && arguments != null &&  arguments.containsKey(
                AccessibilityNodeInfo.ACTION_ARGUMENT_CLICK_CHARACTER_INDEX_INT)) {
            int characterIndex = arguments.getInt(
                    AccessibilityNodeInfo.ACTION_ARGUMENT_CLICK_CHARACTER_INDEX_INT, -1);
            if (characterIndex >= 0 && hasSpannableText()) {
                ClickableSpan[] spans = ((Spannable) mText).getSpans(characterIndex,
                        characterIndex, ClickableSpan.class);
                // click only on the first span to keep parity with onTouch() implementation
                if (spans != null && spans.length > 0 && spans[0] != null) {
                    // Simulate View.onTouchEvent for an ACTION_UP event
                    if (isFocusable() && !isFocused()) {
                        requestFocus();
                    }
                    spans[0].onClick(this);
                    handled = true;
                }
            }
            processed = true;
        }

        if (!processed && (isClickable() || isLongClickable())) {
        if (isClickable() || isLongClickable()) {
            // Simulate View.onTouchEvent for an ACTION_UP event
            if (isFocusable() && !isFocused()) {
                requestFocus();