OSDN Git Service

Bind the workspace synchronously if started on -1 screen.
authorDerek Prothro <dprothro@google.com>
Tue, 10 Dec 2013 19:00:37 +0000 (14:00 -0500)
committerDerek Prothro <dprothro@google.com>
Tue, 10 Dec 2013 20:05:41 +0000 (15:05 -0500)
Previously, LoaderTask would be run asynchronously to bind
the workspace when started on -1 which would cause the user's
wallpaper to briefly flash when rotating the device on -1.

Bug: 11802691
Change-Id: I3a1a7a32fa28a81e041a283a93d808d5a8884133

src/com/android/launcher3/Launcher.java
src/com/android/launcher3/LauncherModel.java

index e2301ba..9aaee5a 100644 (file)
@@ -456,7 +456,7 @@ public class Launcher extends Activity
             if (DISABLE_SYNCHRONOUS_BINDING_CURRENT_PAGE || sPausedFromUserAction) {
                 // If the user leaves launcher, then we should just load items asynchronously when
                 // they return.
-                mModel.startLoader(true, -1);
+                mModel.startLoader(true, PagedView.INVALID_RESTORE_PAGE);
             } else {
                 // We only load the page synchronously if the user rotates (or triggers a
                 // configuration change) while launcher is in the foreground
@@ -914,7 +914,7 @@ public class Launcher extends Activity
         sPausedFromUserAction = false;
         if (mRestoring || mOnResumeNeedsLoad) {
             mWorkspaceLoading = true;
-            mModel.startLoader(true, -1);
+            mModel.startLoader(true, PagedView.INVALID_RESTORE_PAGE);
             mRestoring = false;
             mOnResumeNeedsLoad = false;
         }
index a69617a..03511a4 100644 (file)
@@ -75,6 +75,7 @@ public class LauncherModel extends BroadcastReceiver {
     public static final boolean UPGRADE_USE_MORE_APPS_FOLDER = false;
 
     private static final int ITEMS_CHUNK = 6; // batch size for the workspace icons
+    private static final long INVALID_SCREEN_ID = -1L;
     private final boolean mAppsCanBeOnRemoveableStorage;
 
     private final LauncherAppState mApp;
@@ -1158,7 +1159,7 @@ public class LauncherModel extends BroadcastReceiver {
             }
         }
         if (runLoader) {
-            startLoader(false, -1);
+            startLoader(false, PagedView.INVALID_RESTORE_PAGE);
         }
     }
 
@@ -1192,7 +1193,8 @@ public class LauncherModel extends BroadcastReceiver {
                 // also, don't downgrade isLaunching if we're already running
                 isLaunching = isLaunching || stopLoaderLocked();
                 mLoaderTask = new LoaderTask(mApp.getContext(), isLaunching);
-                if (synchronousBindPage > -1 && mAllAppsLoaded && mWorkspaceLoaded) {
+                if (synchronousBindPage != PagedView.INVALID_RESTORE_PAGE
+                        && mAllAppsLoaded && mWorkspaceLoaded) {
                     mLoaderTask.runBindSynchronousPage(synchronousBindPage);
                 } else {
                     sWorkerThread.setPriority(Thread.NORM_PRIORITY);
@@ -1360,7 +1362,7 @@ public class LauncherModel extends BroadcastReceiver {
         }
 
         void runBindSynchronousPage(int synchronousBindPage) {
-            if (synchronousBindPage < 0) {
+            if (synchronousBindPage == PagedView.INVALID_RESTORE_PAGE) {
                 // Ensure that we have a valid page index to load synchronously
                 throw new RuntimeException("Should not call runBindSynchronousPage() without " +
                         "valid page index");
@@ -2245,16 +2247,17 @@ public class LauncherModel extends BroadcastReceiver {
                 orderedScreenIds.addAll(sBgWorkspaceScreens);
             }
 
-            final boolean isLoadingSynchronously = (synchronizeBindPage > -1);
+            final boolean isLoadingSynchronously =
+                    synchronizeBindPage != PagedView.INVALID_RESTORE_PAGE;
             int currScreen = isLoadingSynchronously ? synchronizeBindPage :
                 oldCallbacks.getCurrentWorkspaceScreen();
             if (currScreen >= orderedScreenIds.size()) {
                 // There may be no workspace screens (just hotseat items and an empty page).
-                currScreen = -1;
+                currScreen = PagedView.INVALID_RESTORE_PAGE;
             }
             final int currentScreen = currScreen;
-            final long currentScreenId =
-                    currentScreen < 0 ? -1 : orderedScreenIds.get(currentScreen);
+            final long currentScreenId = currentScreen < 0
+                    ? INVALID_SCREEN_ID : orderedScreenIds.get(currentScreen);
 
             // Load all the items that are on the current page first (and in the process, unbind
             // all the existing workspace items before we call startBinding() below.
@@ -2299,7 +2302,7 @@ public class LauncherModel extends BroadcastReceiver {
                 r = new Runnable() {
                     public void run() {
                         Callbacks callbacks = tryGetCallbacks(oldCallbacks);
-                        if (callbacks != null && currentScreen >= 0) {
+                        if (callbacks != null && currentScreen != PagedView.INVALID_RESTORE_PAGE) {
                             callbacks.onPageBoundSynchronously(currentScreen);
                         }
                     }