Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6270a0ea authored by Tony Wickham's avatar Tony Wickham
Browse files

When dragging past first or last state, don't reinit target

Example bug:
1. Swipe up to overview and let go
2. Swipe all the way to the top of the screen, past where all apps stops
3. Swipe down

Before this change, you get reset in NORMAL state instead of OVERVIEW.

By ensuring that getTargetState() checks the drag direction before
returning a new state, we guarantee we only re-init in the case that the
state is actually changing. Otherwise it's possible to change the state
to one that is impossible, such as NORMAL when swiping up from ALL APPS.

Change-Id: I19913dded9c94228d06289780b6400e99403f378
parent b3ad0edc
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -60,12 +60,13 @@ public class LandscapeStatesTouchController extends PortraitStatesTouchControlle

    @Override
    protected LauncherState getTargetState(LauncherState fromState, boolean isDragTowardPositive) {
        if (fromState == ALL_APPS) {
        if (fromState == ALL_APPS && !isDragTowardPositive) {
            // Should swipe down go to OVERVIEW instead?
            return TouchInteractionService.isConnected() ?
                    mLauncher.getStateManager().getLastState() : NORMAL;
        } else {
        } else if (isDragTowardPositive) {
            return ALL_APPS;
        }
        return fromState;
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -140,7 +140,7 @@ public class PortraitStatesTouchController extends AbstractStateChangeTouchContr

    @Override
    protected LauncherState getTargetState(LauncherState fromState, boolean isDragTowardPositive) {
        if (fromState == ALL_APPS) {
        if (fromState == ALL_APPS && !isDragTowardPositive) {
            // Should swipe down go to OVERVIEW instead?
            return TouchInteractionService.isConnected() ?
                    mLauncher.getStateManager().getLastState() : NORMAL;
+4 −0
Original line number Diff line number Diff line
@@ -124,6 +124,10 @@ public abstract class AbstractStateChangeTouchController extends AnimatorListene
        return mLauncher.getAllAppsController().getShiftRange();
    }

    /**
     * Returns the state to go to from fromState given the drag direction. If there is no state in
     * that direction, returns fromState.
     */
    protected abstract LauncherState getTargetState(LauncherState fromState,
            boolean isDragTowardPositive);

+6 −1
Original line number Diff line number Diff line
@@ -54,7 +54,12 @@ public class AllAppsSwipeController extends AbstractStateChangeTouchController {

    @Override
    protected LauncherState getTargetState(LauncherState fromState, boolean isDragTowardPositive) {
        return fromState == ALL_APPS ? NORMAL : ALL_APPS;
        if (fromState == NORMAL && isDragTowardPositive) {
            return ALL_APPS;
        } else if (fromState == ALL_APPS && !isDragTowardPositive) {
            return NORMAL;
        }
        return fromState;
    }

    @Override