summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--quickstep/src/com/android/launcher3/uioverrides/AllAppsState.java5
-rw-r--r--quickstep/src/com/android/launcher3/uioverrides/TwoStepSwipeController.java9
-rw-r--r--src/com/android/launcher3/Launcher.java3
-rw-r--r--src/com/android/launcher3/LauncherState.java5
-rw-r--r--src/com/android/launcher3/LauncherStateManager.java15
5 files changed, 34 insertions, 3 deletions
diff --git a/quickstep/src/com/android/launcher3/uioverrides/AllAppsState.java b/quickstep/src/com/android/launcher3/uioverrides/AllAppsState.java
index 20ee547ac..6395473a6 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/AllAppsState.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/AllAppsState.java
@@ -85,4 +85,9 @@ public class AllAppsState extends LauncherState {
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 bdae2d6fc..3a3b51d29 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/TwoStepSwipeController.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/TwoStepSwipeController.java
@@ -93,6 +93,7 @@ public class TwoStepSwipeController extends AnimatorListenerAdapter
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 @@ public class TwoStepSwipeController extends AnimatorListenerAdapter
// 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 @@ public class TwoStepSwipeController extends AnimatorListenerAdapter
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 4b2e4321d..2a5f45399 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -1608,8 +1608,9 @@ public class Launcher extends BaseActivity
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 4f65d1989..670f57997 100644
--- a/src/com/android/launcher3/LauncherState.java
+++ b/src/com/android/launcher3/LauncherState.java
@@ -170,6 +170,11 @@ public class LauncherState {
};
}
+ 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 bc4ac8b5f..c590953fe 100644
--- a/src/com/android/launcher3/LauncherStateManager.java
+++ b/src/com/android/launcher3/LauncherStateManager.java
@@ -66,7 +66,7 @@ import com.android.launcher3.uioverrides.UiFactory;
* - 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 @@ public class LauncherStateManager {
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 @@ public class LauncherStateManager {
}
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.
*/