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

Commit 5a716170 authored by Svetoslav Ganov's avatar Svetoslav Ganov Committed by Android Git Automerger
Browse files

am cdb2a216: am 7b4799ca: Merge "Client app crashes if accessibility service...

am cdb2a216: am 7b4799ca: Merge "Client app crashes if accessibility service uses invalid focus type." into jb-dev

* commit 'cdb2a216':
  Client app crashes if accessibility service uses invalid focus type.
parents 449b2392 cdb2a216
Loading
Loading
Loading
Loading
+32 −0
Original line number Diff line number Diff line
@@ -443,6 +443,7 @@ public class AccessibilityNodeInfo implements Parcelable {
     */
    public AccessibilityNodeInfo findFocus(int focus) {
        enforceSealed();
        enforceValidFocusType(focus);
        if (!canPerformRequestOverConnection(mSourceNodeId)) {
            return null;
        }
@@ -472,6 +473,7 @@ public class AccessibilityNodeInfo implements Parcelable {
     */
    public AccessibilityNodeInfo focusSearch(int direction) {
        enforceSealed();
        enforceValidFocusDirection(direction);
        if (!canPerformRequestOverConnection(mSourceNodeId)) {
            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.
     *