mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-28 07:46:55 +00:00
Disabling synchronous binding when returning home from another app while orientation has changed. (Bug 6792288)
- Fixing issue where we were reverting to the first page of the workspace after launching an application from all apps, rotating, and returning home - Enabling rotation in master. Change-Id: I291b9d76b20244e9028b6f62164430bc3606644c
This commit is contained in:
@@ -5,7 +5,6 @@
|
||||
<integer name="cell_count_y">6</integer>
|
||||
<integer name="hotseat_cell_count">7</integer>
|
||||
<integer name="hotseat_all_apps_index">3</integer>
|
||||
|
||||
<!-- DragController -->
|
||||
<integer name="config_flingToDeleteMinVelocity">-1000</integer>
|
||||
|
||||
|
||||
@@ -181,7 +181,7 @@ public final class Launcher extends Activity
|
||||
"com.android.launcher.toolbar_voice_search_icon";
|
||||
|
||||
/** The different states that Launcher can be in. */
|
||||
private enum State { WORKSPACE, APPS_CUSTOMIZE, APPS_CUSTOMIZE_SPRING_LOADED };
|
||||
private enum State { NONE, WORKSPACE, APPS_CUSTOMIZE, APPS_CUSTOMIZE_SPRING_LOADED };
|
||||
private State mState = State.WORKSPACE;
|
||||
private AnimatorSet mStateAnimation;
|
||||
private AnimatorSet mDividerAnimator;
|
||||
@@ -229,6 +229,10 @@ public final class Launcher extends Activity
|
||||
private boolean mAutoAdvanceRunning = false;
|
||||
|
||||
private Bundle mSavedState;
|
||||
// We set the state in both onCreate and then onNewIntent in some cases, which causes both
|
||||
// scroll issues (because the workspace may not have been measured yet) and extra work.
|
||||
// Instead, just save the state that we need to restore Launcher to, and commit it in onResume.
|
||||
private State mOnResumeState = State.NONE;
|
||||
|
||||
private SpannableStringBuilder mDefaultKeySsb = null;
|
||||
|
||||
@@ -239,6 +243,9 @@ public final class Launcher extends Activity
|
||||
private boolean mWaitingForResult;
|
||||
private boolean mOnResumeNeedsLoad;
|
||||
|
||||
// Keep track of whether the user has left launcher
|
||||
private static boolean sPausedFromUserAction = false;
|
||||
|
||||
private Bundle mSavedInstanceState;
|
||||
|
||||
private LauncherModel mModel;
|
||||
@@ -370,7 +377,15 @@ public final class Launcher extends Activity
|
||||
}
|
||||
|
||||
if (!mRestoring) {
|
||||
mModel.startLoader(true, mWorkspace.getCurrentPage());
|
||||
if (sPausedFromUserAction) {
|
||||
// If the user leaves launcher, then we should just load items asynchronously when
|
||||
// they return.
|
||||
mModel.startLoader(true, -1);
|
||||
} else {
|
||||
// We only load the page synchronously if the user rotates (or triggers a
|
||||
// configuration change) while launcher is in the foreground
|
||||
mModel.startLoader(true, mWorkspace.getCurrentPage());
|
||||
}
|
||||
}
|
||||
|
||||
if (!mModel.isAllAppsLoaded()) {
|
||||
@@ -391,6 +406,11 @@ public final class Launcher extends Activity
|
||||
unlockScreenOrientation(true);
|
||||
}
|
||||
|
||||
protected void onUserLeaveHint() {
|
||||
super.onUserLeaveHint();
|
||||
sPausedFromUserAction = true;
|
||||
}
|
||||
|
||||
private void updateGlobalIcons() {
|
||||
boolean searchVisible = false;
|
||||
boolean voiceVisible = false;
|
||||
@@ -676,10 +696,19 @@ public final class Launcher extends Activity
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
|
||||
// Restore the previous launcher state
|
||||
if (mOnResumeState == State.WORKSPACE) {
|
||||
showWorkspace(false);
|
||||
} else if (mOnResumeState == State.APPS_CUSTOMIZE) {
|
||||
showAllApps(false);
|
||||
}
|
||||
mOnResumeState = State.NONE;
|
||||
|
||||
// Process any items that were added while Launcher was away
|
||||
InstallShortcutReceiver.flushInstallQueue(this);
|
||||
|
||||
mPaused = false;
|
||||
sPausedFromUserAction = false;
|
||||
if (mRestoring || mOnResumeNeedsLoad) {
|
||||
mWorkspaceLoading = true;
|
||||
mModel.startLoader(true, -1);
|
||||
@@ -823,7 +852,7 @@ public final class Launcher extends Activity
|
||||
|
||||
State state = intToState(savedState.getInt(RUNTIME_STATE, State.WORKSPACE.ordinal()));
|
||||
if (state == State.APPS_CUSTOMIZE) {
|
||||
showAllApps(false);
|
||||
mOnResumeState = State.APPS_CUSTOMIZE;
|
||||
}
|
||||
|
||||
int currentScreen = savedState.getInt(RUNTIME_STATE_CURRENT_SCREEN, -1);
|
||||
@@ -1360,7 +1389,14 @@ public final class Launcher extends Activity
|
||||
|
||||
closeFolder();
|
||||
exitSpringLoadedDragMode();
|
||||
showWorkspace(alreadyOnHome);
|
||||
|
||||
// If we are already on home, then just animate back to the workspace, otherwise, just
|
||||
// wait until onResume to set the state back to Workspace
|
||||
if (alreadyOnHome) {
|
||||
showWorkspace(true);
|
||||
} else {
|
||||
mOnResumeState = State.WORKSPACE;
|
||||
}
|
||||
|
||||
final View v = getWindow().peekDecorView();
|
||||
if (v != null && v.getWindowToken() != null) {
|
||||
|
||||
@@ -1557,7 +1557,8 @@ public class LauncherModel extends BroadcastReceiver {
|
||||
return;
|
||||
}
|
||||
|
||||
final int currentScreen = (synchronizeBindPage > -1) ? synchronizeBindPage :
|
||||
final boolean isLoadingSynchronously = (synchronizeBindPage > -1);
|
||||
final int currentScreen = isLoadingSynchronously ? synchronizeBindPage :
|
||||
oldCallbacks.getCurrentWorkspaceScreen();
|
||||
|
||||
// Load all the items that are on the current page first (and in the process, unbind
|
||||
@@ -1609,10 +1610,11 @@ public class LauncherModel extends BroadcastReceiver {
|
||||
bindWorkspaceItems(oldCallbacks, currentWorkspaceItems, currentAppWidgets,
|
||||
currentFolders, null);
|
||||
|
||||
// Load all the remaining pages
|
||||
// Load all the remaining pages (if we are loading synchronously, we want to defer this
|
||||
// work until after the first render)
|
||||
mDeferredBindRunnables.clear();
|
||||
bindWorkspaceItems(oldCallbacks, otherWorkspaceItems, otherAppWidgets, otherFolders,
|
||||
mDeferredBindRunnables);
|
||||
(isLoadingSynchronously ? mDeferredBindRunnables : null));
|
||||
|
||||
// Tell the workspace that we're done binding items
|
||||
r = new Runnable() {
|
||||
@@ -1631,7 +1633,11 @@ public class LauncherModel extends BroadcastReceiver {
|
||||
mIsLoadingAndBindingWorkspace = false;
|
||||
}
|
||||
};
|
||||
mDeferredBindRunnables.add(r);
|
||||
if (isLoadingSynchronously) {
|
||||
mDeferredBindRunnables.add(r);
|
||||
} else {
|
||||
runOnMainThread(r);
|
||||
}
|
||||
}
|
||||
|
||||
private void loadAndBindAllApps() {
|
||||
|
||||
Reference in New Issue
Block a user