From 873264c71b9433cd4e259a0790506f5114070f44 Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Mon, 12 Nov 2018 16:39:24 -0800 Subject: [PATCH] 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 --- .../quickstep/WindowTransformSwipeHandler.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java b/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java index a604da03e6..b0d7ff37ed 100644 --- a/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java +++ b/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java @@ -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 { private static final String TAG = WindowTransformSwipeHandler.class.getSimpleName(); @@ -143,6 +140,9 @@ public class WindowTransformSwipeHandler { 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 { | 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 { 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);