Adding a back stack to go to overview from all-apps
Change-Id: I94e7c27aa505123ddbe40ffa29b1bbc9b2748293
diff --git a/quickstep/src/com/android/launcher3/uioverrides/AllAppsState.java b/quickstep/src/com/android/launcher3/uioverrides/AllAppsState.java
index 20ee547..6395473 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/AllAppsState.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/AllAppsState.java
@@ -85,4 +85,9 @@
public float getHoseatAlpha(Launcher launcher) {
return launcher.getDeviceProfile().isVerticalBarLayout() ? 0 : 1;
}
+
+ @Override
+ public LauncherState getHistoryForState(LauncherState previousState) {
+ return previousState == OVERVIEW ? OVERVIEW : NORMAL;
+ }
}
diff --git a/quickstep/src/com/android/launcher3/uioverrides/TwoStepSwipeController.java b/quickstep/src/com/android/launcher3/uioverrides/TwoStepSwipeController.java
index bdae2d6..3a3b51d 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/TwoStepSwipeController.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/TwoStepSwipeController.java
@@ -93,6 +93,7 @@
private static final int FLAG_RECENTS_PLAN_LOADING = 1 << 3;
private static final int FLAG_OVERVIEW_DISABLED = 1 << 4;
private static final int FLAG_DISABLED_TWO_TARGETS = 1 << 5;
+ private static final int FLAG_DISABLED_BACK_TARGET = 1 << 6;
private final Launcher mLauncher;
private final SwipeDetector mDetector;
@@ -261,6 +262,12 @@
// Build current animation
mFromState = mLauncher.getStateManager().getState();
mToState = mLauncher.isInState(ALL_APPS) ? NORMAL : ALL_APPS;
+
+ if (mToState == NORMAL && mLauncher.getStateManager().getLastState() == OVERVIEW) {
+ mToState = OVERVIEW;
+ mDragPauseDetector.addDisabledFlags(FLAG_DISABLED_BACK_TARGET);
+ }
+
mTaggedAnimatorSetBuilder = new TaggedAnimatorSetBuilder();
mCurrentAnimation = mLauncher.getStateManager().createAnimationToNewWorkspace(
mToState, mTaggedAnimatorSetBuilder, maxAccuracy);
@@ -338,7 +345,7 @@
if (fling) {
logAction = Touch.FLING;
- targetState = velocity < 0 ? ALL_APPS : NORMAL;
+ targetState = velocity < 0 ? ALL_APPS : mLauncher.getStateManager().getLastState();
// snap to top or bottom using the release velocity
} else {
logAction = Touch.SWIPE;
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 4b2e432..2a5f453 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -1608,8 +1608,9 @@
if (topView != null) {
topView.onBackPressed();
} else if (!isInState(NORMAL)) {
+ LauncherState lastState = mStateManager.getLastState();
ued.logActionCommand(Action.Command.BACK, mStateManager.getState().containerType);
- mStateManager.goToState(NORMAL);
+ mStateManager.goToState(lastState);
} else {
// Back button is a no-op here, but give at least some feedback for the button press
mWorkspace.showOutlinesTemporarily();
diff --git a/src/com/android/launcher3/LauncherState.java b/src/com/android/launcher3/LauncherState.java
index 4f65d19..670f579 100644
--- a/src/com/android/launcher3/LauncherState.java
+++ b/src/com/android/launcher3/LauncherState.java
@@ -170,6 +170,11 @@
};
}
+ public LauncherState getHistoryForState(LauncherState previousState) {
+ // No history is supported
+ return NORMAL;
+ }
+
protected static void dispatchWindowStateChanged(Launcher launcher) {
launcher.getWindow().getDecorView().sendAccessibilityEvent(TYPE_WINDOW_STATE_CHANGED);
}
diff --git a/src/com/android/launcher3/LauncherStateManager.java b/src/com/android/launcher3/LauncherStateManager.java
index bc4ac8b..c590953 100644
--- a/src/com/android/launcher3/LauncherStateManager.java
+++ b/src/com/android/launcher3/LauncherStateManager.java
@@ -66,7 +66,7 @@
* - Go back with back key TODO: make this not go to workspace
* - From all apps
* - From workspace
- * - Enter and exit car mode (becuase it causes an extra configuration changed)
+ * - Enter and exit car mode (becase it causes an extra configuration changed)
* - From all apps
* - From the center workspace
* - From another workspace
@@ -82,6 +82,9 @@
private StateHandler[] mStateHandlers;
private LauncherState mState = NORMAL;
+ private LauncherState mLastStableState = NORMAL;
+ private LauncherState mCurrentStableState = NORMAL;
+
private StateListener mStateListener;
public LauncherStateManager(Launcher l) {
@@ -262,11 +265,21 @@
}
private void onStateTransitionEnd(LauncherState state) {
+ // Only change the stable states after the transitions have finished
+ if (state != mCurrentStableState) {
+ mLastStableState = state.getHistoryForState(mCurrentStableState);
+ mCurrentStableState = state;
+ }
+
mLauncher.getWorkspace().setClipChildren(!state.disablePageClipping);
mLauncher.getUserEventDispatcher().resetElapsedContainerMillis();
mLauncher.finishAutoCancelActionMode();
}
+ public LauncherState getLastState() {
+ return mLastStableState;
+ }
+
/**
* Cancels the current animation.
*/