Merge "Check for null view root before checking for accessibility focus"

This commit is contained in:
Alan Viverette
2014-02-24 19:09:59 +00:00
committed by Android (Google) Code Review
2 changed files with 48 additions and 42 deletions

View File

@@ -1335,27 +1335,30 @@ public class GridView extends AbsListView {
} }
// Attempt to restore accessibility focus, if necessary. // Attempt to restore accessibility focus, if necessary.
final View newAccessibilityFocusedView = viewRootImpl.getAccessibilityFocusedHost(); if (viewRootImpl != null) {
if (newAccessibilityFocusedView == null) { final View newAccessibilityFocusedView = viewRootImpl.getAccessibilityFocusedHost();
if (accessibilityFocusLayoutRestoreView != null if (newAccessibilityFocusedView == null) {
&& accessibilityFocusLayoutRestoreView.isAttachedToWindow()) { if (accessibilityFocusLayoutRestoreView != null
final AccessibilityNodeProvider provider = && accessibilityFocusLayoutRestoreView.isAttachedToWindow()) {
accessibilityFocusLayoutRestoreView.getAccessibilityNodeProvider(); final AccessibilityNodeProvider provider =
if (accessibilityFocusLayoutRestoreNode != null && provider != null) { accessibilityFocusLayoutRestoreView.getAccessibilityNodeProvider();
final int virtualViewId = AccessibilityNodeInfo.getVirtualDescendantId( if (accessibilityFocusLayoutRestoreNode != null && provider != null) {
accessibilityFocusLayoutRestoreNode.getSourceNodeId()); final int virtualViewId = AccessibilityNodeInfo.getVirtualDescendantId(
provider.performAction(virtualViewId, accessibilityFocusLayoutRestoreNode.getSourceNodeId());
AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS, null); provider.performAction(virtualViewId,
} else { AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS, null);
accessibilityFocusLayoutRestoreView.requestAccessibilityFocus(); } else {
} accessibilityFocusLayoutRestoreView.requestAccessibilityFocus();
} else if (accessibilityFocusPosition != INVALID_POSITION) { }
// Bound the position within the visible children. } else if (accessibilityFocusPosition != INVALID_POSITION) {
final int position = MathUtils.constrain( // Bound the position within the visible children.
accessibilityFocusPosition - mFirstPosition, 0, getChildCount() - 1); final int position = MathUtils.constrain(
final View restoreView = getChildAt(position); accessibilityFocusPosition - mFirstPosition, 0,
if (restoreView != null) { getChildCount() - 1);
restoreView.requestAccessibilityFocus(); final View restoreView = getChildAt(position);
if (restoreView != null) {
restoreView.requestAccessibilityFocus();
}
} }
} }
} }

View File

@@ -1738,27 +1738,30 @@ public class ListView extends AbsListView {
} }
// Attempt to restore accessibility focus, if necessary. // Attempt to restore accessibility focus, if necessary.
final View newAccessibilityFocusedView = viewRootImpl.getAccessibilityFocusedHost(); if (viewRootImpl != null) {
if (newAccessibilityFocusedView == null) { final View newAccessibilityFocusedView = viewRootImpl.getAccessibilityFocusedHost();
if (accessibilityFocusLayoutRestoreView != null if (newAccessibilityFocusedView == null) {
&& accessibilityFocusLayoutRestoreView.isAttachedToWindow()) { if (accessibilityFocusLayoutRestoreView != null
final AccessibilityNodeProvider provider = && accessibilityFocusLayoutRestoreView.isAttachedToWindow()) {
accessibilityFocusLayoutRestoreView.getAccessibilityNodeProvider(); final AccessibilityNodeProvider provider =
if (accessibilityFocusLayoutRestoreNode != null && provider != null) { accessibilityFocusLayoutRestoreView.getAccessibilityNodeProvider();
final int virtualViewId = AccessibilityNodeInfo.getVirtualDescendantId( if (accessibilityFocusLayoutRestoreNode != null && provider != null) {
accessibilityFocusLayoutRestoreNode.getSourceNodeId()); final int virtualViewId = AccessibilityNodeInfo.getVirtualDescendantId(
provider.performAction(virtualViewId, accessibilityFocusLayoutRestoreNode.getSourceNodeId());
AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS, null); provider.performAction(virtualViewId,
} else { AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS, null);
accessibilityFocusLayoutRestoreView.requestAccessibilityFocus(); } else {
} accessibilityFocusLayoutRestoreView.requestAccessibilityFocus();
} else if (accessibilityFocusPosition != INVALID_POSITION) { }
// Bound the position within the visible children. } else if (accessibilityFocusPosition != INVALID_POSITION) {
final int position = MathUtils.constrain( // Bound the position within the visible children.
accessibilityFocusPosition - mFirstPosition, 0, getChildCount() - 1); final int position = MathUtils.constrain(
final View restoreView = getChildAt(position); accessibilityFocusPosition - mFirstPosition, 0,
if (restoreView != null) { getChildCount() - 1);
restoreView.requestAccessibilityFocus(); final View restoreView = getChildAt(position);
if (restoreView != null) {
restoreView.requestAccessibilityFocus();
}
} }
} }
} }