From 1d74df226619101d905d872c8e609d315409695e Mon Sep 17 00:00:00 2001 From: Svetoslav Ganov Date: Sat, 28 Apr 2012 15:14:22 -0700 Subject: Fixing crash when drawing accessibility focus indicator. 1. Added a lacking null check for the accessibility node info returned by an accessibility node provider. If the provider implementation is not correct this may happen. 2. Added clearing of the current accessibility focused node when the window focus changes. Now it is cleared in every case and if it happens that accessibility is enabled when the window gets focus, the accessibility focus will be properly set. bug:6381296 Change-Id: Ieea1b07762745e6d932fc4ed4febfe77760b25b7 --- core/java/android/view/ViewRootImpl.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'core/java/android/view/ViewRootImpl.java') diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 1ee79348cfa3..1d61b8469083 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -634,6 +634,8 @@ public final class ViewRootImpl implements ViewParent, if (view.getImportantForAccessibility() == View.IMPORTANT_FOR_ACCESSIBILITY_AUTO) { view.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES); } + + setAccessibilityFocusedHost(null); } } } @@ -2326,6 +2328,9 @@ public final class ViewRootImpl implements ViewParent, if (mAccessibilityFocusedVirtualView == null) { mAccessibilityFocusedVirtualView = provider.findAccessibilitiyFocus(View.NO_ID); } + if (mAccessibilityFocusedVirtualView == null) { + return; + } mAccessibilityFocusedVirtualView.getBoundsInScreen(bounds); bounds.offset(-mAttachInfo.mWindowLeft, -mAttachInfo.mWindowTop); } @@ -2849,6 +2854,8 @@ public final class ViewRootImpl implements ViewParent, mHasHadWindowFocus = true; } + setAccessibilityFocusedHost(null); + if (mView != null && mAccessibilityManager.isEnabled()) { if (hasWindowFocus) { mView.sendAccessibilityEvent( @@ -2867,9 +2874,6 @@ public final class ViewRootImpl implements ViewParent, if (mAccessibilityFocusedHost == null) { mView.requestAccessibilityFocus(); } - } else { - // Clear accessibility focus when the window loses input focus. - setAccessibilityFocusedHost(null); } } } -- cgit v1.2.3