diff options
-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 5d45d27..444357e 100644 --- a/src/com/android/launcher2/Launcher.java +++ b/src/com/android/launcher2/Launcher.java @@ -217,6 +217,7 @@ public final class Launcher extends Activity private boolean mPaused = true; private boolean mRestoring; private boolean mWaitingForResult; + private boolean mOnResumeNeedsLoad; private Bundle mSavedInstanceState; @@ -680,13 +681,12 @@ 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; } // When we resume Launcher, a different Activity might be responsible for the app // market intent, so refresh the icon @@ -703,6 +703,7 @@ public final class Launcher extends Activity if (mNextView != null) { dismissPreview(mNextView); } + mPaused = true; mDragController.cancelDrag(); } @@ -2870,6 +2871,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() { @@ -2917,6 +2942,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++) { @@ -2954,6 +2981,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); } @@ -2964,6 +2992,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); @@ -3000,6 +3030,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.getCurrentPage()).requestFocus(); @@ -3050,6 +3082,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); if (mCustomizePagedView != null) { @@ -3065,6 +3098,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 eff5ed6..1e58ca0 100644 --- a/src/com/android/launcher2/LauncherModel.java +++ b/src/com/android/launcher2/LauncherModel.java @@ -108,6 +108,7 @@ public class LauncherModel extends BroadcastReceiver { private static int mCellCountY; public interface Callbacks { + public boolean setLoadOnResume(); public int getCurrentWorkspaceScreen(); public void startBinding(); public void bindItems(ArrayList<ItemInfo> shortcuts, int start, int end); @@ -433,7 +434,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); |