Merge "Check for null view root before checking for accessibility focus"
diff --git a/core/java/android/widget/GridView.java b/core/java/android/widget/GridView.java
index 4ed48ff..04b18c1 100644
--- a/core/java/android/widget/GridView.java
+++ b/core/java/android/widget/GridView.java
@@ -1335,27 +1335,30 @@
             }
 
             // Attempt to restore accessibility focus, if necessary.
-            final View newAccessibilityFocusedView = viewRootImpl.getAccessibilityFocusedHost();
-            if (newAccessibilityFocusedView == null) {
-                if (accessibilityFocusLayoutRestoreView != null
-                        && accessibilityFocusLayoutRestoreView.isAttachedToWindow()) {
-                    final AccessibilityNodeProvider provider =
-                            accessibilityFocusLayoutRestoreView.getAccessibilityNodeProvider();
-                    if (accessibilityFocusLayoutRestoreNode != null && provider != null) {
-                        final int virtualViewId = AccessibilityNodeInfo.getVirtualDescendantId(
-                                accessibilityFocusLayoutRestoreNode.getSourceNodeId());
-                        provider.performAction(virtualViewId,
-                                AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS, null);
-                    } else {
-                        accessibilityFocusLayoutRestoreView.requestAccessibilityFocus();
-                    }
-                } else if (accessibilityFocusPosition != INVALID_POSITION) {
-                    // Bound the position within the visible children.
-                    final int position = MathUtils.constrain(
-                            accessibilityFocusPosition - mFirstPosition, 0, getChildCount() - 1);
-                    final View restoreView = getChildAt(position);
-                    if (restoreView != null) {
-                        restoreView.requestAccessibilityFocus();
+            if (viewRootImpl != null) {
+                final View newAccessibilityFocusedView = viewRootImpl.getAccessibilityFocusedHost();
+                if (newAccessibilityFocusedView == null) {
+                    if (accessibilityFocusLayoutRestoreView != null
+                            && accessibilityFocusLayoutRestoreView.isAttachedToWindow()) {
+                        final AccessibilityNodeProvider provider =
+                                accessibilityFocusLayoutRestoreView.getAccessibilityNodeProvider();
+                        if (accessibilityFocusLayoutRestoreNode != null && provider != null) {
+                            final int virtualViewId = AccessibilityNodeInfo.getVirtualDescendantId(
+                                    accessibilityFocusLayoutRestoreNode.getSourceNodeId());
+                            provider.performAction(virtualViewId,
+                                    AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS, null);
+                        } else {
+                            accessibilityFocusLayoutRestoreView.requestAccessibilityFocus();
+                        }
+                    } else if (accessibilityFocusPosition != INVALID_POSITION) {
+                        // Bound the position within the visible children.
+                        final int position = MathUtils.constrain(
+                                accessibilityFocusPosition - mFirstPosition, 0,
+                                getChildCount() - 1);
+                        final View restoreView = getChildAt(position);
+                        if (restoreView != null) {
+                            restoreView.requestAccessibilityFocus();
+                        }
                     }
                 }
             }
diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java
index 63e1358..5de67c8 100644
--- a/core/java/android/widget/ListView.java
+++ b/core/java/android/widget/ListView.java
@@ -1738,27 +1738,30 @@
             }
 
             // Attempt to restore accessibility focus, if necessary.
-            final View newAccessibilityFocusedView = viewRootImpl.getAccessibilityFocusedHost();
-            if (newAccessibilityFocusedView == null) {
-                if (accessibilityFocusLayoutRestoreView != null
-                        && accessibilityFocusLayoutRestoreView.isAttachedToWindow()) {
-                    final AccessibilityNodeProvider provider =
-                            accessibilityFocusLayoutRestoreView.getAccessibilityNodeProvider();
-                    if (accessibilityFocusLayoutRestoreNode != null && provider != null) {
-                        final int virtualViewId = AccessibilityNodeInfo.getVirtualDescendantId(
-                                accessibilityFocusLayoutRestoreNode.getSourceNodeId());
-                        provider.performAction(virtualViewId,
-                                AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS, null);
-                    } else {
-                        accessibilityFocusLayoutRestoreView.requestAccessibilityFocus();
-                    }
-                } else if (accessibilityFocusPosition != INVALID_POSITION) {
-                    // Bound the position within the visible children.
-                    final int position = MathUtils.constrain(
-                            accessibilityFocusPosition - mFirstPosition, 0, getChildCount() - 1);
-                    final View restoreView = getChildAt(position);
-                    if (restoreView != null) {
-                        restoreView.requestAccessibilityFocus();
+            if (viewRootImpl != null) {
+                final View newAccessibilityFocusedView = viewRootImpl.getAccessibilityFocusedHost();
+                if (newAccessibilityFocusedView == null) {
+                    if (accessibilityFocusLayoutRestoreView != null
+                            && accessibilityFocusLayoutRestoreView.isAttachedToWindow()) {
+                        final AccessibilityNodeProvider provider =
+                                accessibilityFocusLayoutRestoreView.getAccessibilityNodeProvider();
+                        if (accessibilityFocusLayoutRestoreNode != null && provider != null) {
+                            final int virtualViewId = AccessibilityNodeInfo.getVirtualDescendantId(
+                                    accessibilityFocusLayoutRestoreNode.getSourceNodeId());
+                            provider.performAction(virtualViewId,
+                                    AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS, null);
+                        } else {
+                            accessibilityFocusLayoutRestoreView.requestAccessibilityFocus();
+                        }
+                    } else if (accessibilityFocusPosition != INVALID_POSITION) {
+                        // Bound the position within the visible children.
+                        final int position = MathUtils.constrain(
+                                accessibilityFocusPosition - mFirstPosition, 0,
+                                getChildCount() - 1);
+                        final View restoreView = getChildAt(position);
+                        if (restoreView != null) {
+                            restoreView.requestAccessibilityFocus();
+                        }
                     }
                 }
             }