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
This commit is contained in:
Tony Wickham 2018-11-12 16:39:24 -08:00
parent 7b3c12f90e
commit 873264c71b
1 changed files with 8 additions and 9 deletions

View File

@ -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);