Merge "Cancel manual animation if LauncherState changes during drag." into 24D1-dev

This commit is contained in:
Treehugger Robot
2024-05-31 19:27:25 +00:00
committed by Android (Google) Code Review
5 changed files with 21 additions and 10 deletions

View File

@@ -19,7 +19,7 @@ import static com.android.app.animation.Interpolators.DECELERATE_3;
import static com.android.launcher3.AbstractFloatingView.TYPE_ALL;
import static com.android.launcher3.AbstractFloatingView.TYPE_ALL_APPS_EDU;
import static com.android.launcher3.LauncherAnimUtils.SUCCESS_TRANSITION_PROGRESS;
import static com.android.launcher3.LauncherAnimUtils.newCancelListener;
import static com.android.launcher3.LauncherAnimUtils.newSingleUseCancelListener;
import static com.android.launcher3.LauncherState.ALL_APPS;
import static com.android.launcher3.LauncherState.NORMAL;
import static com.android.launcher3.MotionEventsUtils.isTrackpadMotionEvent;
@@ -165,7 +165,7 @@ public class NavBarToHomeTouchController implements TouchController,
topView.addHintCloseAnim(mPullbackDistance, PULLBACK_INTERPOLATOR, builder);
}
mCurrentAnimation = builder.createPlaybackController();
mCurrentAnimation.getTarget().addListener(newCancelListener(this::clearState));
mCurrentAnimation.getTarget().addListener(newSingleUseCancelListener(this::clearState));
}
private void clearState() {

View File

@@ -18,7 +18,7 @@ package com.android.launcher3.uioverrides.touchcontrollers;
import static com.android.app.animation.Interpolators.ACCELERATE_DECELERATE;
import static com.android.launcher3.LauncherAnimUtils.VIEW_BACKGROUND_COLOR;
import static com.android.launcher3.LauncherAnimUtils.newCancelListener;
import static com.android.launcher3.LauncherAnimUtils.newSingleUseCancelListener;
import static com.android.launcher3.LauncherState.ALL_APPS;
import static com.android.launcher3.LauncherState.HINT_STATE;
import static com.android.launcher3.LauncherState.NORMAL;
@@ -226,7 +226,7 @@ public class NoButtonNavbarToOverviewTouchController extends PortraitStatesTouch
return;
}
mNormalToHintOverviewScrimAnimator = null;
mCurrentAnimation.getTarget().addListener(newCancelListener(() ->
mCurrentAnimation.getTarget().addListener(newSingleUseCancelListener(() ->
mLauncher.getStateManager().goToState(OVERVIEW, true, forSuccessCallback(() -> {
mOverviewResistYAnim = AnimatorControllerWithResistance
.createRecentsResistanceFromOverviewAnim(mLauncher, null)

View File

@@ -111,7 +111,7 @@ public class NoButtonQuickSwitchTouchController implements TouchController,
private final float mMotionPauseMinDisplacement;
private final LauncherRecentsView mRecentsView;
protected final AnimatorListener mClearStateOnCancelListener =
newCancelListener(this::clearState);
newCancelListener(this::clearState, /* isSingleUse = */ false);
private boolean mNoIntercept;
private LauncherState mStartState;

View File

@@ -220,17 +220,28 @@ public class LauncherAnimUtils {
/**
* Utility method to create an {@link AnimatorListener} which executes a callback on animation
* cancel.
* cancel. Once the cancel has been dispatched, this listener will no longer be called.
*/
public static AnimatorListener newCancelListener(Runnable callback) {
return new AnimatorListenerAdapter() {
public static AnimatorListener newSingleUseCancelListener(Runnable callback) {
return newCancelListener(callback, true);
}
/**
* Utility method to create an {@link AnimatorListener} which executes a callback on animation
* cancel.
*
* @param isSingleUse {@code true} means the callback will be called at most once
*/
public static AnimatorListener newCancelListener(Runnable callback, boolean isSingleUse) {
return new AnimatorListenerAdapter() {
boolean mDispatched = false;
@Override
public void onAnimationCancel(Animator animation) {
if (!mDispatched) {
mDispatched = true;
if (isSingleUse) {
mDispatched = true;
}
callback.run();
}
}

View File

@@ -57,7 +57,7 @@ public abstract class AbstractStateChangeTouchController
protected final SingleAxisSwipeDetector.Direction mSwipeDirection;
protected final AnimatorListener mClearStateOnCancelListener =
newCancelListener(this::clearState);
newCancelListener(this::clearState, /* isSingleUse = */ false);
private final FlingBlockCheck mFlingBlockCheck = new FlingBlockCheck();
protected int mStartContainerType;