[automerge] Update taskbar resume alignment anim if launcher state changes in the middle 2p: cd6abc19a8

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/16693156

Change-Id: I5fe6e2e1492df3467ae3bc6880ff308e03a401dd
Merged-In: Ie0c6140e14186e41c7e4748dc745f87349b084fe
This commit is contained in:
Presubmit Automerger Backend
2022-01-24 16:56:23 +00:00
committed by Tony Wickham
2 changed files with 99 additions and 54 deletions

View File

@@ -207,59 +207,10 @@ import java.util.function.Supplier;
private Animator onStateChangeApplied(int changedFlags, long duration, boolean start) {
AnimatorSet animatorSet = new AnimatorSet();
if (hasAnyFlag(changedFlags, FLAG_RESUMED)) {
boolean isResumed = isResumed();
ObjectAnimator anim = mIconAlignmentForResumedState
.animateToValue(isResumed && goingToUnstashedLauncherState()
? 1 : 0)
.setDuration(duration);
anim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
mIsAnimatingToLauncherViaResume = false;
}
@Override
public void onAnimationStart(Animator animation) {
mIsAnimatingToLauncherViaResume = isResumed;
TaskbarStashController stashController = mControllers.taskbarStashController;
stashController.updateStateForFlag(FLAG_IN_APP, !isResumed);
stashController.applyState(duration);
}
});
animatorSet.play(anim);
}
if (hasAnyFlag(changedFlags, FLAG_RECENTS_ANIMATION_RUNNING)) {
boolean isRecentsAnimationRunning = isRecentsAnimationRunning();
Animator animator = mIconAlignmentForGestureState
.animateToValue(isRecentsAnimationRunning && goingToUnstashedLauncherState()
? 1 : 0);
if (isRecentsAnimationRunning) {
animator.setDuration(duration);
}
animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
mIsAnimatingToLauncherViaGesture = false;
}
@Override
public void onAnimationStart(Animator animation) {
mIsAnimatingToLauncherViaGesture = isRecentsAnimationRunning();
}
});
animatorSet.play(animator);
}
if (hasAnyFlag(changedFlags, FLAG_RESUMED | FLAG_RECENTS_ANIMATION_RUNNING)) {
boolean goingToLauncher = hasAnyFlag(FLAG_RESUMED | FLAG_RECENTS_ANIMATION_RUNNING);
animatorSet.play(mTaskbarBackgroundAlpha.animateToValue(goingToLauncher ? 0 : 1)
.setDuration(duration));
}
// Add the state animation first to ensure FLAG_IN_STASHED_LAUNCHER_STATE is set and we can
// determine whether goingToUnstashedLauncherStateChanged.
boolean wasGoingToUnstashedLauncherState = goingToUnstashedLauncherState();
if (hasAnyFlag(changedFlags, FLAG_TRANSITION_STATE_RUNNING)) {
boolean committed = !hasAnyFlag(FLAG_TRANSITION_STATE_RUNNING);
playStateTransitionAnim(animatorSet, duration, committed);
@@ -270,6 +221,76 @@ import java.util.function.Supplier;
applyState(0 /* duration */);
}
}
boolean goingToUnstashedLauncherStateChanged = wasGoingToUnstashedLauncherState
!= goingToUnstashedLauncherState();
boolean launcherStateChangedDuringAnimToResumeAlignment =
mIconAlignmentForResumedState.isAnimating() && goingToUnstashedLauncherStateChanged;
if (hasAnyFlag(changedFlags, FLAG_RESUMED)
|| launcherStateChangedDuringAnimToResumeAlignment) {
boolean isResumed = isResumed();
float toAlignmentForResumedState = isResumed && goingToUnstashedLauncherState() ? 1 : 0;
// If we're already animating to the value, just leave it be instead of restarting it.
if (!mIconAlignmentForResumedState.isAnimatingToValue(toAlignmentForResumedState)) {
ObjectAnimator resumeAlignAnim = mIconAlignmentForResumedState
.animateToValue(toAlignmentForResumedState)
.setDuration(duration);
resumeAlignAnim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
mIsAnimatingToLauncherViaResume = false;
}
@Override
public void onAnimationStart(Animator animation) {
mIsAnimatingToLauncherViaResume = isResumed;
TaskbarStashController stashController =
mControllers.taskbarStashController;
stashController.updateStateForFlag(FLAG_IN_APP, !isResumed);
stashController.applyState(duration);
}
});
animatorSet.play(resumeAlignAnim);
}
}
boolean launcherStateChangedDuringAnimToGestureAlignment =
mIconAlignmentForGestureState.isAnimating() && goingToUnstashedLauncherStateChanged;
if (hasAnyFlag(changedFlags, FLAG_RECENTS_ANIMATION_RUNNING)
|| launcherStateChangedDuringAnimToGestureAlignment) {
boolean isRecentsAnimationRunning = isRecentsAnimationRunning();
float toAlignmentForGestureState = isRecentsAnimationRunning
&& goingToUnstashedLauncherState() ? 1 : 0;
// If we're already animating to the value, just leave it be instead of restarting it.
if (!mIconAlignmentForGestureState.isAnimatingToValue(toAlignmentForGestureState)) {
Animator gestureAlignAnim = mIconAlignmentForGestureState
.animateToValue(toAlignmentForGestureState);
if (isRecentsAnimationRunning) {
gestureAlignAnim.setDuration(duration);
}
gestureAlignAnim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
mIsAnimatingToLauncherViaGesture = false;
}
@Override
public void onAnimationStart(Animator animation) {
mIsAnimatingToLauncherViaGesture = isRecentsAnimationRunning();
}
});
animatorSet.play(gestureAlignAnim);
}
}
if (hasAnyFlag(changedFlags, FLAG_RESUMED | FLAG_RECENTS_ANIMATION_RUNNING)) {
boolean goingToLauncher = hasAnyFlag(FLAG_RESUMED | FLAG_RECENTS_ANIMATION_RUNNING);
animatorSet.play(mTaskbarBackgroundAlpha.animateToValue(goingToLauncher ? 0 : 1)
.setDuration(duration));
}
if (start) {
animatorSet.start();
@@ -310,8 +331,11 @@ import java.util.function.Supplier;
animatorSet.play(stashAnimator);
}
animatorSet.play(mIconAlignmentForLauncherState.animateToValue(toAlignment)
.setDuration(duration));
// If we're already animating to the value, just leave it be instead of restarting it.
if (!mIconAlignmentForLauncherState.isAnimatingToValue(toAlignment)) {
animatorSet.play(mIconAlignmentForLauncherState.animateToValue(toAlignment)
.setDuration(duration));
}
}
private boolean isResumed() {

View File

@@ -42,6 +42,8 @@ public class AnimatedFloat {
private final Runnable mUpdateCallback;
private ObjectAnimator mValueAnimator;
// Only non-null when an animation is playing to this value.
private Float mEndValue;
public float value;
@@ -67,10 +69,18 @@ public class AnimatedFloat {
cancelAnimation();
mValueAnimator = ObjectAnimator.ofFloat(this, VALUE, start, end);
mValueAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animator) {
if (mValueAnimator == animator) {
mEndValue = end;
}
}
@Override
public void onAnimationEnd(Animator animator) {
if (mValueAnimator == animator) {
mValueAnimator = null;
mEndValue = null;
}
}
});
@@ -103,4 +113,15 @@ public class AnimatedFloat {
public ObjectAnimator getCurrentAnimation() {
return mValueAnimator;
}
public boolean isAnimating() {
return mValueAnimator != null;
}
/**
* Returns whether we are currently animating, and the animation's end value matches the given.
*/
public boolean isAnimatingToValue(float endValue) {
return isAnimating() && mEndValue != null && mEndValue == endValue;
}
}