summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/com/android/launcher2/Launcher.java40
-rw-r--r--src/com/android/launcher2/LauncherModel.java15
2 files changed, 51 insertions, 4 deletions
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index 5d45d2714..444357ebc 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 eff5ed63b..1e58ca0e4 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);