mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-20 11:18:21 +00:00
Fix some issues with haptic
- Don't have double haptic on quick scrub - Correctly check interpolated progress to determine final state, so that it always aligns with the haptic (i.e. passing the haptic means letting go will go to the new state) Bug: 109709720 Change-Id: I702bb76a4c15f932f923e81a14cc49f6a9126cb8
This commit is contained in:
@@ -241,16 +241,16 @@ public abstract class TaskViewTouchController<T extends BaseDraggingActivity>
|
||||
if (blockedFling) {
|
||||
fling = false;
|
||||
}
|
||||
float progress = mCurrentAnimation.getProgressFraction();
|
||||
float interpolatedProgress = mCurrentAnimation.getInterpolator().getInterpolation(progress);
|
||||
if (fling) {
|
||||
logAction = Touch.FLING;
|
||||
boolean goingUp = velocity < 0;
|
||||
goingToEnd = goingUp == mCurrentAnimationIsGoingUp;
|
||||
} else {
|
||||
logAction = Touch.SWIPE;
|
||||
goingToEnd = mCurrentAnimation.getProgressFraction() > SUCCESS_TRANSITION_PROGRESS;
|
||||
goingToEnd = interpolatedProgress > SUCCESS_TRANSITION_PROGRESS;
|
||||
}
|
||||
|
||||
float progress = mCurrentAnimation.getProgressFraction();
|
||||
long animationDuration = SwipeDetector.calculateDuration(
|
||||
velocity, goingToEnd ? (1 - progress) : progress);
|
||||
if (blockedFling && !goingToEnd) {
|
||||
|
||||
@@ -575,7 +575,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> {
|
||||
final boolean passed = mCurrentShift.value >= MIN_PROGRESS_FOR_OVERVIEW;
|
||||
if (passed != mPassedOverviewThreshold) {
|
||||
mPassedOverviewThreshold = passed;
|
||||
if (mRecentsView != null) {
|
||||
if (mInteractionType == INTERACTION_NORMAL && mRecentsView != null) {
|
||||
mRecentsView.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY,
|
||||
HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING);
|
||||
}
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
*/
|
||||
package com.android.launcher3.anim;
|
||||
|
||||
import static com.android.launcher3.anim.Interpolators.LINEAR;
|
||||
|
||||
import android.animation.Animator;
|
||||
import android.animation.Animator.AnimatorListener;
|
||||
import android.animation.AnimatorListenerAdapter;
|
||||
@@ -72,7 +74,7 @@ public abstract class AnimatorPlaybackController implements ValueAnimator.Animat
|
||||
mOnCancelRunnable = onCancelRunnable;
|
||||
|
||||
mAnimationPlayer = ValueAnimator.ofFloat(0, 1);
|
||||
mAnimationPlayer.setInterpolator(Interpolators.LINEAR);
|
||||
mAnimationPlayer.setInterpolator(LINEAR);
|
||||
mAnimationPlayer.addListener(new OnAnimationEndDispatcher());
|
||||
mAnimationPlayer.addUpdateListener(this);
|
||||
|
||||
@@ -107,6 +109,10 @@ public abstract class AnimatorPlaybackController implements ValueAnimator.Animat
|
||||
return mDuration;
|
||||
}
|
||||
|
||||
public TimeInterpolator getInterpolator() {
|
||||
return mAnim.getInterpolator() != null ? mAnim.getInterpolator() : LINEAR;
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts playing the animation forward from current position.
|
||||
*/
|
||||
|
||||
@@ -354,6 +354,8 @@ public abstract class AbstractStateChangeTouchController
|
||||
|
||||
final LauncherState targetState;
|
||||
final float progress = mCurrentAnimation.getProgressFraction();
|
||||
final float interpolatedProgress = mCurrentAnimation.getInterpolator()
|
||||
.getInterpolation(progress);
|
||||
if (fling) {
|
||||
targetState =
|
||||
Float.compare(Math.signum(velocity), Math.signum(mProgressMultiplier)) == 0
|
||||
@@ -362,7 +364,7 @@ public abstract class AbstractStateChangeTouchController
|
||||
} else {
|
||||
float successProgress = mToState == ALL_APPS
|
||||
? MIN_PROGRESS_TO_ALL_APPS : SUCCESS_TRANSITION_PROGRESS;
|
||||
targetState = (progress > successProgress) ? mToState : mFromState;
|
||||
targetState = (interpolatedProgress > successProgress) ? mToState : mFromState;
|
||||
}
|
||||
|
||||
final float endProgress;
|
||||
|
||||
Reference in New Issue
Block a user