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

This commit is contained in:
Svetoslav Ganov
2012-06-04 10:20:33 -07:00
committed by Android (Google) Code Review

View File

@@ -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.
*