am 7b4799ca: Merge "Client app crashes if accessibility service uses invalid focus type." into jb-dev
* commit '7b4799cafa6624862a172aaf2ececf661850b03c': Client app crashes if accessibility service uses invalid focus type.
This commit is contained in:
@@ -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.
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user