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

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

Merge "Client app crashes if accessibility service uses invalid focus type." into jb-dev

parents 6e3301dc 2ef69050
Loading
Loading
Loading
Loading
+32 −0
Original line number Original line Diff line number Diff line
@@ -443,6 +443,7 @@ public class AccessibilityNodeInfo implements Parcelable {
     */
     */
    public AccessibilityNodeInfo findFocus(int focus) {
    public AccessibilityNodeInfo findFocus(int focus) {
        enforceSealed();
        enforceSealed();
        enforceValidFocusType(focus);
        if (!canPerformRequestOverConnection(mSourceNodeId)) {
        if (!canPerformRequestOverConnection(mSourceNodeId)) {
            return null;
            return null;
        }
        }
@@ -472,6 +473,7 @@ public class AccessibilityNodeInfo implements Parcelable {
     */
     */
    public AccessibilityNodeInfo focusSearch(int direction) {
    public AccessibilityNodeInfo focusSearch(int direction) {
        enforceSealed();
        enforceSealed();
        enforceValidFocusDirection(direction);
        if (!canPerformRequestOverConnection(mSourceNodeId)) {
        if (!canPerformRequestOverConnection(mSourceNodeId)) {
            return null;
            return null;
        }
        }
@@ -1330,6 +1332,36 @@ public class AccessibilityNodeInfo implements Parcelable {
        }
        }
    }
    }


    private void enforceValidFocusDirection(int direction) {
        switch (direction) {
            case View.FOCUS_DOWN:
            case View.FOCUS_UP:
            case View.FOCUS_LEFT:
            case View.FOCUS_RIGHT:
            case View.FOCUS_FORWARD:
            case View.FOCUS_BACKWARD:
            case View.ACCESSIBILITY_FOCUS_DOWN:
            case View.ACCESSIBILITY_FOCUS_UP:
            case View.ACCESSIBILITY_FOCUS_LEFT:
            case View.ACCESSIBILITY_FOCUS_RIGHT:
            case View.ACCESSIBILITY_FOCUS_FORWARD:
            case View.ACCESSIBILITY_FOCUS_BACKWARD:
                return;
            default:
                throw new IllegalArgumentException("Unknown direction: " + direction);
        }
    }

    private void enforceValidFocusType(int focusType) {
        switch (focusType) {
            case FOCUS_INPUT:
            case FOCUS_ACCESSIBILITY:
                return;
            default:
                throw new IllegalArgumentException("Unknown focus type: " + focusType);
        }
    }

    /**
    /**
     * Enforces that this instance is not sealed.
     * Enforces that this instance is not sealed.
     *
     *