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

Commit 873264c7 authored by Tony Wickham's avatar Tony Wickham
Browse files

Fix quick scrub skipping more than one page

There was a race condition where we were getting onQuickScrubProgress
before onQuickScrubStart. If we got enough of those, we were jumping
some pages before the block is set in onQuickScrubStart (which also adds
its own page jump). Now we don't send any onQuickScrubProgress() to
QuickScrubController until we have sent onQuickScrubStart()

Bug: 118636260
Change-Id: I60084850b0b1baad34112ab5945fce81cc3a3c53
parent 7b3c12f9
Loading
Loading
Loading
Loading
+8 −9
Original line number Diff line number Diff line
@@ -27,7 +27,6 @@ import static com.android.quickstep.QuickScrubController.QUICK_SWITCH_FROM_APP_S
import static com.android.quickstep.TouchConsumer.INTERACTION_NORMAL;
import static com.android.quickstep.TouchConsumer.INTERACTION_QUICK_SCRUB;
import static com.android.quickstep.views.RecentsView.UPDATE_SYSUI_FLAGS_THRESHOLD;

import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
@@ -50,7 +49,9 @@ import android.view.View;
import android.view.ViewTreeObserver.OnDrawListener;
import android.view.WindowManager;
import android.view.animation.Interpolator;

import androidx.annotation.AnyThread;
import androidx.annotation.UiThread;
import androidx.annotation.WorkerThread;
import com.android.launcher3.AbstractFloatingView;
import com.android.launcher3.BaseDraggingActivity;
import com.android.launcher3.DeviceProfile;
@@ -90,10 +91,6 @@ import com.android.systemui.shared.system.WindowCallbacksCompat;
import java.util.StringJoiner;
import java.util.function.BiFunction;

import androidx.annotation.AnyThread;
import androidx.annotation.UiThread;
import androidx.annotation.WorkerThread;

@TargetApi(Build.VERSION_CODES.O)
public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> {
    private static final String TAG = WindowTransformSwipeHandler.class.getSimpleName();
@@ -143,6 +140,9 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> {
            STATE_ACTIVITY_MULTIPLIER_COMPLETE | STATE_LAUNCHER_STARTED
                    | STATE_APP_CONTROLLER_RECEIVED | STATE_SCREENSHOT_CAPTURED;

    private static final int QUICK_SCRUB_START_UI_STATE = STATE_LAUNCHER_STARTED
            | STATE_QUICK_SCRUB_START | STATE_APP_CONTROLLER_RECEIVED;

    // For debugging, keep in sync with above states
    private static final String[] STATES = new String[] {
            "STATE_LAUNCHER_PRESENT",
@@ -325,8 +325,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> {
                | STATE_SCALED_CONTROLLER_APP,
                this::notifyTransitionCancelled);

        mStateCallback.addCallback(STATE_LAUNCHER_STARTED | STATE_QUICK_SCRUB_START
                        | STATE_APP_CONTROLLER_RECEIVED, this::onQuickScrubStartUi);
        mStateCallback.addCallback(QUICK_SCRUB_START_UI_STATE, this::onQuickScrubStartUi);
        mStateCallback.addCallback(STATE_LAUNCHER_STARTED | STATE_QUICK_SCRUB_START
                | STATE_SCALED_CONTROLLER_RECENTS, this::onFinishedTransitionToQuickScrub);
        mStateCallback.addCallback(STATE_LAUNCHER_STARTED | STATE_CURRENT_TASK_FINISHED
@@ -1026,7 +1025,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> {
    public void onQuickScrubProgress(float progress) {
        mCurrentQuickScrubProgress = progress;
        if (Looper.myLooper() != Looper.getMainLooper() || mQuickScrubController == null
                || mQuickScrubBlocked) {
                || mQuickScrubBlocked || !mStateCallback.hasStates(QUICK_SCRUB_START_UI_STATE)) {
            return;
        }
        mQuickScrubController.onQuickScrubProgress(progress);