diff --git a/quickstep/src/com/android/launcher3/uioverrides/AllAppsState.java b/quickstep/src/com/android/launcher3/uioverrides/AllAppsState.java index 20ee547acba61788d6886d7287c1ac9662130ee1..6395473a6c198cbb91722890f82309dab4c86625 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 bdae2d6fc3ce62de12e2d1f45a9fbcf022fc9c1d..3a3b51d29d6710e130dc49a60946e14cec8239b8 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 4b2e4321d314c63b9c9e2d55d45cb0ce41ecad09..2a5f45399bb285623039e07e94a8560d437eee0e 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 4f65d1989285340c37a4f5a9487c770d2b50077c..670f57997a0c0f17d4102b6b6c395e9d5fbb1e36 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 bc4ac8b5f6083853f2a2d9a5fa8018eecd67444c..c590953fe146740f59b350fb5922181c57a0deb5 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. */