OSDN Git Service

Add null-check for workspace/hotseat.
authorJun Mukai <mukai@google.com>
Wed, 17 Jun 2015 17:58:59 +0000 (10:58 -0700)
committerJun Mukai <mukai@google.com>
Wed, 17 Jun 2015 18:26:54 +0000 (11:26 -0700)
I assumed that they are non-null, but reportedly it was wrong.
This method can be invoked before the views are fully initialized.
Also hotseat can be null as far as I see setupViews(), therefore
null-check and 'importance stored' flag check should be done
separately.

Bug: 21779078
Change-Id: I3f17226f887c38adf2b1fb7ee2a016e00ffc0eb4

src/com/android/launcher3/Launcher.java

index 9989abb..3596b71 100644 (file)
@@ -554,32 +554,44 @@ public class Launcher extends Activity
     public boolean setLauncherCallbacks(LauncherCallbacks callbacks) {
         mLauncherCallbacks = callbacks;
         mLauncherCallbacks.setLauncherSearchCallback(new Launcher.LauncherSearchCallbacks() {
-            private boolean mImportanceStored = false;
+            private boolean mWorkspaceImportanceStored = false;
+            private boolean mHotseatImportanceStored = false;
             private int mWorkspaceImportanceForAccessibility =
                 View.IMPORTANT_FOR_ACCESSIBILITY_AUTO;
             private int mHotseatImportanceForAccessibility = View.IMPORTANT_FOR_ACCESSIBILITY_AUTO;
 
             @Override
             public void onSearchOverlayOpened() {
-                if (mImportanceStored) {
+                if (mWorkspaceImportanceStored || mHotseatImportanceStored) {
                     return;
                 }
                 // The underlying workspace and hotseat are temporarily suppressed by the search
                 // overlay. So they sholudn't be accessible.
-                mWorkspaceImportanceForAccessibility = mWorkspace.getImportantForAccessibility();
-                mHotseatImportanceForAccessibility = mHotseat.getImportantForAccessibility();
-                mWorkspace.setImportantForAccessibility(
-                    View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
-                mHotseat.setImportantForAccessibility(
-                    View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
-                mImportanceStored = true;
+                if (mWorkspace != null) {
+                    mWorkspaceImportanceForAccessibility =
+                            mWorkspace.getImportantForAccessibility();
+                    mWorkspace.setImportantForAccessibility(
+                            View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
+                    mWorkspaceImportanceStored = true;
+                }
+                if (mHotseat != null) {
+                    mHotseatImportanceForAccessibility = mHotseat.getImportantForAccessibility();
+                    mHotseat.setImportantForAccessibility(
+                            View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
+                    mHotseatImportanceStored = true;
+                }
             }
 
             @Override
             public void onSearchOverlayClosed() {
-                mWorkspace.setImportantForAccessibility(mWorkspaceImportanceForAccessibility);
-                mHotseat.setImportantForAccessibility(mHotseatImportanceForAccessibility);
-                mImportanceStored = false;
+                if (mWorkspaceImportanceStored && mWorkspace != null) {
+                    mWorkspace.setImportantForAccessibility(mWorkspaceImportanceForAccessibility);
+                }
+                if (mHotseatImportanceStored && mHotseat != null) {
+                    mHotseat.setImportantForAccessibility(mHotseatImportanceForAccessibility);
+                }
+                mWorkspaceImportanceStored = false;
+                mHotseatImportanceStored = false;
             }
         });
         return true;