Exit overview mode after setting wallpaper

Also, create method to exit overview mode without
an animation
Bug: 10332065
Change-Id: Iaade5ccb07aefa7d19be5f07db821a69762cb1bb
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 408f61a..0a92f35 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -660,9 +660,6 @@
                 completeAddAppWidget(appWidgetId, args.container, args.screenId, null, null);
                 result = true;
                 break;
-            case REQUEST_PICK_WALLPAPER:
-                // We just wanted the activity result here so we can clear mWaitingForResult
-                break;
         }
         // Before adding this resetAddInfo(), after a shortcut was added to a workspace screen,
         // if you turned the screen off and then back while in All Apps, Launcher would not
@@ -686,7 +683,13 @@
                 addAppWidgetImpl(appWidgetId, mPendingAddInfo, null, mPendingAddWidgetInfo);
             }
             return;
+        } else if (requestCode == REQUEST_PICK_WALLPAPER) {
+            if (resultCode == RESULT_OK && mWorkspace.isInOverviewMode()) {
+                mWorkspace.exitOverviewMode(false);
+            }
+            return;
         }
+
         boolean delayExitSpringLoadedMode = false;
         boolean isWidgetDrop = (requestCode == REQUEST_PICK_APPWIDGET ||
                 requestCode == REQUEST_CREATE_APPWIDGET);
@@ -1631,7 +1634,7 @@
                     // If we are already on home, then just animate back to the workspace,
                     // otherwise, just wait until onResume to set the state back to Workspace
                     if (alreadyOnHome) {
-                        showWorkspace();
+                        showWorkspaceAndExitOverviewMode();
                     } else {
                         mOnResumeState = State.WORKSPACE;
                     }
@@ -1665,10 +1668,10 @@
         }
     }
 
-    protected void showWorkspace() {
+    protected void showWorkspaceAndExitOverviewMode() {
         showWorkspace(true);
         if (mWorkspace.isInOverviewMode()) {
-            mWorkspace.exitOverviewMode();
+            mWorkspace.exitOverviewMode(true);
         }
     }
 
@@ -2128,7 +2131,7 @@
         if (isAllAppsVisible()) {
             showWorkspace(true);
         } else if (mWorkspace.isInOverviewMode()) {
-            mWorkspace.exitOverviewMode();
+            mWorkspace.exitOverviewMode(true);
         } else if (mWorkspace.getOpenFolder() != null) {
             Folder openFolder = mWorkspace.getOpenFolder();
             if (openFolder.isEditingName()) {
@@ -2178,7 +2181,7 @@
 
         if (v instanceof CellLayout) {
             if (mWorkspace.isInOverviewMode()) {
-                mWorkspace.exitOverviewMode(mWorkspace.indexOfChild(v));
+                mWorkspace.exitOverviewMode(mWorkspace.indexOfChild(v), true);
             }
         }
 
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index 0d966f4..1818ade 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -1757,35 +1757,37 @@
     }
 
     public void enterOverviewMode() {
-        enableOverviewMode(true, -1);
+        enableOverviewMode(true, -1, true);
     }
 
-    public void exitOverviewMode() {
-        exitOverviewMode(-1);
+    public void exitOverviewMode(boolean animated) {
+        exitOverviewMode(-1, animated);
     }
 
-    public void exitOverviewMode(int snapPage) {
-        enableOverviewMode(false, snapPage);
+    public void exitOverviewMode(int snapPage, boolean animated) {
+        enableOverviewMode(false, snapPage, animated);
     }
 
-    private void enableOverviewMode(boolean enable, int snapPage) {
+    private void enableOverviewMode(boolean enable, int snapPage, boolean animated) {
         State finalState = Workspace.State.OVERVIEW;
         if (!enable) {
             finalState = Workspace.State.NORMAL;
         }
 
-        Animator workspaceAnim = getChangeStateAnimation(finalState, true, 0, snapPage);
-        workspaceAnim.addListener(new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationEnd(Animator arg0) {
-                mIsSwitchingState = false;
-            }
-            @Override
-            public void onAnimationStart(Animator arg0) {
-                mIsSwitchingState = true;
-            }
-        });
-        workspaceAnim.start();
+        Animator workspaceAnim = getChangeStateAnimation(finalState, animated, 0, snapPage);
+        if (workspaceAnim != null) {
+            workspaceAnim.addListener(new AnimatorListenerAdapter() {
+                @Override
+                public void onAnimationEnd(Animator arg0) {
+                    mIsSwitchingState = false;
+                }
+                @Override
+                public void onAnimationStart(Animator arg0) {
+                    mIsSwitchingState = true;
+                }
+            });
+            workspaceAnim.start();
+        }
     }
 
     Animator getChangeStateAnimation(final State state, boolean animated, int delay, int snapPage) {
@@ -1933,9 +1935,12 @@
             anim.setStartDelay(delay);
         } else {
             mLauncher.getOverviewPanel().setAlpha(finalOverviewPanelAlpha);
+            AlphaUpdateListener.updateVisibility(mLauncher.getOverviewPanel());
             mLauncher.getHotseat().setAlpha(finalHotseatAndPageIndicatorAlpha);
+            AlphaUpdateListener.updateVisibility(mLauncher.getHotseat());
             if (getPageIndicator() != null) {
                 getPageIndicator().setAlpha(finalHotseatAndPageIndicatorAlpha);
+                AlphaUpdateListener.updateVisibility(getPageIndicator());
             }
         }
 
@@ -1952,7 +1957,7 @@
         return anim;
     }
 
-    class AlphaUpdateListener implements AnimatorUpdateListener {
+    static class AlphaUpdateListener implements AnimatorUpdateListener {
         View view;
         public AlphaUpdateListener(View v) {
             view = v;
@@ -1960,6 +1965,10 @@
 
         @Override
         public void onAnimationUpdate(ValueAnimator arg0) {
+            updateVisibility(view);
+        }
+
+        public static void updateVisibility(View view) {
             if (view.getAlpha() < ALPHA_CUTOFF_THRESHOLD && view.getVisibility() != INVISIBLE) {
                 view.setVisibility(INVISIBLE);
             } else if (view.getAlpha() > ALPHA_CUTOFF_THRESHOLD