是什么触发了 Android 上对 AccessibilityInteractionController.performAccessibilityActionUiThread 的调用?

What triggers a call to AccessibilityInteractionController.performAccessibilityActionUiThread on Android?

当用户与应用了 LengthFilter InputFilterEditText 交互时,Samsung Galaxy S 7 Edge 出现崩溃。用户将如何调用方法 AccessibilityInteractionController.performAccessibilityActionUiThread

我查看了 AccessibilityInteractionController 的来源,但找不到有关用户如何触发该方法的良好文档。

我的崩溃堆栈跟踪与这些问题中发布的内容类似:

查看 Android 的 issue tracker,这个问题似乎是由于密码管理器使用辅助功能事件生成密码造成的。但是,生成的密码不符合 maxLength 属性,导致崩溃。

建议的解决方案似乎有效:创建一个子类,然后改用它。 (复制代码供参考)

public class SafePinEntryEditText extends EditText {

    public SafePinEntryEditText(Context context) {
        super(context);
    }

    public SafePinEntryEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public SafePinEntryEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @TargetApi(21)
    public SafePinEntryEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    @Override
    public void setSelection(int index) {
        // prevent index out of bounds caused by AccessibilityService events
        if (index > length()) {
            index = length();
        }
        super.setSelection(index);
    }

    @Override
    public void setSelection(int start, int stop) {
        // prevent index out of bounds caused by AccessibilityService events
        if (start > length()) {
            start = length();
        }
        if (stop > length()) {
            stop = length();
        }
        super.setSelection(start, stop);
    }
}