am 78fbf987: Merge "Fix occasional widget flashing" into jb-mr2-dev

* commit '78fbf9871d3c377360b209ac73b0d6bb63480612':
  Fix occasional widget flashing
This commit is contained in:
Michael Jurka
2013-04-04 11:16:00 -07:00
committed by Android Git Automerger
+86 -13
View File
@@ -250,6 +250,8 @@ public final class Launcher extends Activity
private boolean mWaitingForResult;
private boolean mOnResumeNeedsLoad;
private ArrayList<Runnable> mOnResumeCallbacks = new ArrayList<Runnable>();
// Keep track of whether the user has left launcher
private static boolean sPausedFromUserAction = false;
@@ -741,6 +743,12 @@ public final class Launcher extends Activity
mRestoring = false;
mOnResumeNeedsLoad = false;
}
// We might have postponed some bind calls until onResume (see waitUntilResume) --
// execute them here
for (int i = 0; i < mOnResumeCallbacks.size(); i++) {
mOnResumeCallbacks.get(i).run();
}
mOnResumeCallbacks.clear();
// Reset the pressed state of icons that were locked in the press state while activities
// were launching
@@ -3240,6 +3248,30 @@ public final class Launcher extends Activity
}
}
/**
* If the activity is currently paused, signal that we need to run the passed Runnable
* 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.
*/
private boolean waitUntilResume(Runnable run) {
if (mPaused) {
Log.i(TAG, "Deferring update until onResume");
mOnResumeCallbacks.add(run);
return true;
} else {
return false;
}
}
/**
* If the activity is currently paused, signal that we need to re-run the loader
* in onResume.
@@ -3281,8 +3313,12 @@ public final class Launcher extends Activity
* Implementation of the method from LauncherModel.Callbacks.
*/
public void startBinding() {
final Workspace workspace = mWorkspace;
// If we're starting binding all over again, clear any bind calls we'd postponed in
// the past (see waitUntilResume) -- we don't need them since we're starting binding
// from scratch again
mOnResumeCallbacks.clear();
final Workspace workspace = mWorkspace;
mNewShortcutAnimatePage = -1;
mNewShortcutAnimateViews.clear();
mWorkspace.clearDropTargets();
@@ -3303,8 +3339,14 @@ public final class Launcher extends Activity
*
* Implementation of the method from LauncherModel.Callbacks.
*/
public void bindItems(ArrayList<ItemInfo> shortcuts, int start, int end) {
setLoadOnResume();
public void bindItems(final ArrayList<ItemInfo> shortcuts, final int start, final int end) {
if (waitUntilResume(new Runnable() {
public void run() {
bindItems(shortcuts, start, end);
}
})) {
return;
}
// Get the list of added shortcuts and intersect them with the set of shortcuts here
Set<String> newApps = new HashSet<String>();
@@ -3361,8 +3403,14 @@ public final class Launcher extends Activity
/**
* Implementation of the method from LauncherModel.Callbacks.
*/
public void bindFolders(HashMap<Long, FolderInfo> folders) {
setLoadOnResume();
public void bindFolders(final HashMap<Long, FolderInfo> folders) {
if (waitUntilResume(new Runnable() {
public void run() {
bindFolders(folders);
}
})) {
return;
}
sFolders.clear();
sFolders.putAll(folders);
}
@@ -3372,8 +3420,14 @@ public final class Launcher extends Activity
*
* Implementation of the method from LauncherModel.Callbacks.
*/
public void bindAppWidget(LauncherAppWidgetInfo item) {
setLoadOnResume();
public void bindAppWidget(final LauncherAppWidgetInfo item) {
if (waitUntilResume(new Runnable() {
public void run() {
bindAppWidget(item);
}
})) {
return;
}
final long start = DEBUG_WIDGETS ? SystemClock.uptimeMillis() : 0;
if (DEBUG_WIDGETS) {
@@ -3414,8 +3468,13 @@ public final class Launcher extends Activity
* Implementation of the method from LauncherModel.Callbacks.
*/
public void finishBindingItems() {
setLoadOnResume();
if (waitUntilResume(new Runnable() {
public void run() {
finishBindingItems();
}
})) {
return;
}
if (mSavedState != null) {
if (!mWorkspace.hasFocus()) {
mWorkspace.getChildAt(mWorkspace.getCurrentPage()).requestFocus();
@@ -3581,8 +3640,15 @@ public final class Launcher extends Activity
*
* Implementation of the method from LauncherModel.Callbacks.
*/
public void bindAppsAdded(ArrayList<ApplicationInfo> apps) {
setLoadOnResume();
public void bindAppsAdded(final ArrayList<ApplicationInfo> apps) {
if (waitUntilResume(new Runnable() {
public void run() {
bindAppsAdded(apps);
}
})) {
return;
}
if (mAppsCustomizeContent != null) {
mAppsCustomizeContent.addApps(apps);
@@ -3594,8 +3660,15 @@ public final class Launcher extends Activity
*
* Implementation of the method from LauncherModel.Callbacks.
*/
public void bindAppsUpdated(ArrayList<ApplicationInfo> apps) {
setLoadOnResume();
public void bindAppsUpdated(final ArrayList<ApplicationInfo> apps) {
if (waitUntilResume(new Runnable() {
public void run() {
bindAppsUpdated(apps);
}
})) {
return;
}
if (mWorkspace != null) {
mWorkspace.updateShortcuts(apps);
}