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

Commit 24443f5a authored by Sally Yuen's avatar Sally Yuen Committed by Automerger Merge Worker
Browse files

Merge "Fixes for a11y selection" into tm-dev am: 8c3314f7

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17198946

Change-Id: Id68dd83d70134e35c5836d69e15a25820b72d7ca
parents 33755245 8c3314f7
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -14649,6 +14649,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
        int selectionStart;
        int selectionEnd;
        if (extendSelection && isAccessibilitySelectionExtendable()) {
            prepareForExtendedAccessibilitySelection();
            selectionStart = getAccessibilitySelectionStart();
            if (selectionStart == ACCESSIBILITY_CURSOR_POSITION_UNDEFINED) {
                selectionStart = forward ? segmentStart : segmentEnd;
@@ -14687,6 +14688,14 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
        return false;
    }
    /**
     * Prepare for extended selection.
     * @hide
     */
    public void prepareForExtendedAccessibilitySelection() {
        return;
    }
    /**
     * @hide
     */
+30 −10
Original line number Diff line number Diff line
@@ -12363,9 +12363,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
        }
        // A view should not be exposed as clickable/long-clickable to a service because of a
        // LinkMovementMethod.
        // LinkMovementMethod or because it has selectable and non-editable text.
        if ((info.isClickable() || info.isLongClickable())
                && mMovement instanceof LinkMovementMethod) {
                && (mMovement instanceof LinkMovementMethod
                || (isTextSelectable() && !isTextEditable()))) {
            if (!hasOnClickListeners()) {
                info.setClickable(false);
                info.removeAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_CLICK);
@@ -12597,11 +12598,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                        return true;
                    }
                    if (start >= 0 && start <= end && end <= text.length()) {
                        requestFocusOnNonEditableSelectableText();
                        Selection.setSelection((Spannable) text, start, end);
                        // Make sure selection mode is engaged.
                        if (mEditor != null) {
                            mEditor.startSelectionActionModeAsync(false);
                        }
                        hideAccessibilitySelectionControllers();
                        return true;
                    }
                }
@@ -12695,6 +12694,18 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
        return handled;
    }
    private void requestFocusOnNonEditableSelectableText() {
        if (!isTextEditable() && isTextSelectable()) {
            if (!isEnabled()) {
                return;
            }
            if (isFocusable() && !isFocused()) {
                requestFocus();
            }
        }
    }
    private boolean hasSpannableText() {
        return mText != null && mText instanceof Spannable;
    }
@@ -12723,9 +12734,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
    /**
     * Returns the text that should be exposed to accessibility services.
     * <p>
     * This approximates what is displayed visually. If the user has specified
     * that accessibility services should speak passwords, this method will
     * bypass any password transformation method and return unobscured text.
     * This approximates what is displayed visually.
     *
     * @return the text that should be exposed to accessibility services, may
     *         be {@code null} if no text is set
@@ -13703,6 +13712,13 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
        return true;
    }
    /**
     * @hide
     */
    public void prepareForExtendedAccessibilitySelection() {
        requestFocusOnNonEditableSelectableText();
    }
    /**
     * @hide
     */
@@ -13727,8 +13743,12 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
            Selection.removeSelection((Spannable) text);
        }
        // Hide all selection controllers used for adjusting selection
        // since we are doing so explicitlty by other means and these
        // since we are doing so explicitly by other means and these
        // controllers interact with how selection behaves.
        hideAccessibilitySelectionControllers();
    }
    private void hideAccessibilitySelectionControllers() {
        if (mEditor != null) {
            mEditor.hideCursorAndSpanControllers();
            mEditor.stopTextActionMode();