summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoe Onorato <joeo@android.com>2010-10-27 13:08:05 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2010-10-27 13:08:05 -0700
commit08c2c99e74b424cc3efe98f62a9c9abc90200ce3 (patch)
tree4288190d4602af5833ecf2f61d5d19d5b57d54df
parent3f89426152a67d6178c9d3533b0bb43dd20f3006 (diff)
parentec8345a13fe23db9f481d82bc14ce597c02c4e0f (diff)
downloadandroid_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.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 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);