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

Commit 6dde7e75 authored by Phil Weaver's avatar Phil Weaver
Browse files

Fix crash with a11y set text with text filters.

A text filter may shorten the text, so we need to use the text
that's actually in the View, not the text we requested, to move
the selection.

Also removing the override of performAccessibilityActionInternal,
which should have been done as part of adding text actions initially.

Bug: 28253708
Change-Id: I184f49dcba0238f4ccc222597cefca258393b263
parent b1dea03f
Loading
Loading
Loading
Loading
+0 −22
Original line number Original line Diff line number Diff line
@@ -149,26 +149,4 @@ public class EditText extends TextView {
            info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SET_TEXT);
            info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SET_TEXT);
        }
        }
    }
    }

    /** @hide */
    @Override
    public boolean performAccessibilityActionInternal(int action, Bundle arguments) {
        switch (action) {
            case AccessibilityNodeInfo.ACTION_SET_TEXT: {
                if (!isEnabled()) {
                    return false;
                }
                CharSequence text = (arguments != null) ? arguments.getCharSequence(
                        AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE) : null;
                setText(text);
                if (text != null && text.length() > 0) {
                    setSelection(text.length());
                }
                return true;
            }
            default: {
                return super.performAccessibilityActionInternal(action, arguments);
            }
        }
    }
}
}
+5 −2
Original line number Original line Diff line number Diff line
@@ -9202,8 +9202,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                CharSequence text = (arguments != null) ? arguments.getCharSequence(
                CharSequence text = (arguments != null) ? arguments.getCharSequence(
                        AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE) : null;
                        AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE) : null;
                setText(text);
                setText(text);
                if (text != null && text.length() > 0) {
                if (mText != null) {
                    Selection.setSelection((Spannable) mText, text.length());
                    int updatedTextLength = mText.length();
                    if (updatedTextLength > 0) {
                        Selection.setSelection((Spannable) mText, updatedTextLength);
                    }
                }
                }
            } return true;
            } return true;
            default: {
            default: {