diff options
author | Joe Onorato <joeo@android.com> | 2010-10-27 13:08:05 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2010-10-27 13:08:05 -0700 |
commit | 08c2c99e74b424cc3efe98f62a9c9abc90200ce3 (patch) | |
tree | 4288190d4602af5833ecf2f61d5d19d5b57d54df | |
parent | 3f89426152a67d6178c9d3533b0bb43dd20f3006 (diff) | |
parent | ec8345a13fe23db9f481d82bc14ce597c02c4e0f (diff) | |
download | android_packages_apps_Trebuchet-08c2c99e74b424cc3efe98f62a9c9abc90200ce3.tar.gz android_packages_apps_Trebuchet-08c2c99e74b424cc3efe98f62a9c9abc90200ce3.tar.bz2 android_packages_apps_Trebuchet-08c2c99e74b424cc3efe98f62a9c9abc90200ce3.zip |
am ec8345a1: When the launcher is paused and we reload stuff in the background, we need to re-re-load it in onResume.
-rw-r--r-- | src/com/android/launcher2/Launcher.java | 40 | ||||
-rw-r--r-- | src/com/android/launcher2/LauncherModel.java | 15 |
2 files changed, 51 insertions, 4 deletions
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java index 96934e82e..b361ab5c1 100644 --- a/src/com/android/launcher2/Launcher.java +++ b/src/com/android/launcher2/Launcher.java @@ -195,6 +195,7 @@ public final class Launcher extends Activity private boolean mPaused = true; private boolean mRestoring; private boolean mWaitingForResult; + private boolean mOnResumeNeedsLoad; private Bundle mSavedInstanceState; @@ -585,19 +586,19 @@ public final class Launcher extends Activity @Override protected void onResume() { super.onResume(); - mPaused = false; - - if (mRestoring) { + if (mRestoring || mOnResumeNeedsLoad) { mWorkspaceLoading = true; mModel.startLoader(this, true); mRestoring = false; + mOnResumeNeedsLoad = false; } } @Override protected void onPause() { super.onPause(); + mPaused = true; dismissPreview(mPreviousView); dismissPreview(mNextView); mDragController.cancelDrag(); @@ -2127,6 +2128,30 @@ public final class Launcher extends Activity } /** + * If the activity is currently paused, signal that we need to re-run the loader + * in onResume. + * + * This needs to be called from incoming places where resources might have been loaded + * while we are paused. That is becaues the Configuration might be wrong + * when we're not running, and if it comes back to what it was when we + * were paused, we are not restarted. + * + * Implementation of the method from LauncherModel.Callbacks. + * + * @return true if we are currently paused. The caller might be able to + * skip some work in that case since we will come back again. + */ + public boolean setLoadOnResume() { + if (mPaused) { + Log.i(TAG, "setLoadOnResume"); + mOnResumeNeedsLoad = true; + return true; + } else { + return false; + } + } + + /** * Implementation of the method from LauncherModel.Callbacks. */ public int getCurrentWorkspaceScreen() { @@ -2170,6 +2195,8 @@ public final class Launcher extends Activity */ public void bindItems(ArrayList<ItemInfo> shortcuts, int start, int end) { + setLoadOnResume(); + final Workspace workspace = mWorkspace; for (int i=start; i<end; i++) { @@ -2207,6 +2234,7 @@ public final class Launcher extends Activity * Implementation of the method from LauncherModel.Callbacks. */ public void bindFolders(HashMap<Long, FolderInfo> folders) { + setLoadOnResume(); sFolders.clear(); sFolders.putAll(folders); } @@ -2217,6 +2245,8 @@ public final class Launcher extends Activity * Implementation of the method from LauncherModel.Callbacks. */ public void bindAppWidget(LauncherAppWidgetInfo item) { + setLoadOnResume(); + final long start = DEBUG_WIDGETS ? SystemClock.uptimeMillis() : 0; if (DEBUG_WIDGETS) { Log.d(TAG, "bindAppWidget: " + item); @@ -2253,6 +2283,8 @@ public final class Launcher extends Activity * Implementation of the method from LauncherModel.Callbacks. */ public void finishBindingItems() { + setLoadOnResume(); + if (mSavedState != null) { if (!mWorkspace.hasFocus()) { mWorkspace.getChildAt(mWorkspace.getCurrentScreen()).requestFocus(); @@ -2298,6 +2330,7 @@ public final class Launcher extends Activity * Implementation of the method from LauncherModel.Callbacks. */ public void bindAppsAdded(ArrayList<ApplicationInfo> apps) { + setLoadOnResume(); removeDialog(DIALOG_CREATE_SHORTCUT); mAllAppsGrid.addApps(apps); } @@ -2308,6 +2341,7 @@ public final class Launcher extends Activity * Implementation of the method from LauncherModel.Callbacks. */ public void bindAppsUpdated(ArrayList<ApplicationInfo> apps) { + setLoadOnResume(); removeDialog(DIALOG_CREATE_SHORTCUT); mWorkspace.updateShortcuts(apps); mAllAppsGrid.updateApps(apps); diff --git a/src/com/android/launcher2/LauncherModel.java b/src/com/android/launcher2/LauncherModel.java index cb19fe37f..b819510af 100644 --- a/src/com/android/launcher2/LauncherModel.java +++ b/src/com/android/launcher2/LauncherModel.java @@ -96,6 +96,7 @@ public class LauncherModel extends BroadcastReceiver { private Bitmap mDefaultIcon; public interface Callbacks { + public boolean setLoadOnResume(); public int getCurrentWorkspaceScreen(); public void startBinding(); public void bindItems(ArrayList<ItemInfo> shortcuts, int start, int end); @@ -349,7 +350,19 @@ public class LauncherModel extends BroadcastReceiver { String[] packages = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST); enqueuePackageUpdated(new PackageUpdatedTask(PackageUpdatedTask.OP_ADD, packages)); // Then, rebind everything. - startLoader(mApp, false); + boolean runLoader = true; + if (mCallbacks != null) { + Callbacks callbacks = mCallbacks.get(); + if (callbacks != null) { + // If they're paused, we can skip loading, because they'll do it again anyway + if (callbacks.setLoadOnResume()) { + runLoader = false; + } + } + } + if (runLoader) { + startLoader(mApp, false); + } } else if (Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE.equals(action)) { String[] packages = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST); |