Fix taskbar stash misalignment when going from app to overview

Keep taskbar unaligned with hotseat if we're stashing anyway

Test: Swipe up from app with taskbar present to overview, check frame by frame to ensure icons morph directly into the handle instead of above it
Fixes: 208697792
Change-Id: If3238286b3383e75eb71fbd3b97d34bb3b44340b
This commit is contained in:
Tony Wickham 2021-12-01 15:55:04 -08:00
parent 3d206ca917
commit f1951ce1f7
2 changed files with 17 additions and 2 deletions

View File

@ -121,6 +121,7 @@ import java.util.function.Supplier;
// If going home, align the icons to hotseat
AnimatorSet animatorSet = new AnimatorSet();
// Update stashed flags first to ensure goingToUnstashedLauncherState() returns correctly.
TaskbarStashController stashController = mControllers.taskbarStashController;
stashController.updateStateForFlag(FLAG_IN_STASHED_LAUNCHER_STATE,
toState.isTaskbarStashed());
@ -195,7 +196,8 @@ import java.util.function.Supplier;
if (hasAnyFlag(changedFlags, FLAG_RESUMED)) {
boolean isResumed = isResumed();
ObjectAnimator anim = mIconAlignmentForResumedState
.animateToValue(isResumed ? 1 : 0)
.animateToValue(isResumed && goingToUnstashedLauncherState()
? 1 : 0)
.setDuration(duration);
anim.addListener(new AnimatorListenerAdapter() {
@ -219,7 +221,8 @@ import java.util.function.Supplier;
if (hasAnyFlag(changedFlags, FLAG_RECENTS_ANIMATION_RUNNING)) {
boolean isRecentsAnimationRunning = isRecentsAnimationRunning();
Animator animator = mIconAlignmentForGestureState
.animateToValue(isRecentsAnimationRunning ? 1 : 0);
.animateToValue(isRecentsAnimationRunning && goingToUnstashedLauncherState()
? 1 : 0);
if (isRecentsAnimationRunning) {
animator.setDuration(duration);
}
@ -253,6 +256,11 @@ import java.util.function.Supplier;
return animatorSet;
}
/** Returns whether we're going to a state where taskbar icons should align with launcher. */
private boolean goingToUnstashedLauncherState() {
return !mControllers.taskbarStashController.isInStashedLauncherState();
}
private void playStateTransitionAnim(boolean isTransitionStateStashed,
AnimatorSet animatorSet, long duration, boolean committed) {
TaskbarStashController controller = mControllers.taskbarStashController;

View File

@ -216,6 +216,13 @@ public class TaskbarStashController {
return hasAnyFlag(FLAGS_STASHED_IN_APP);
}
/**
* Returns whether the taskbar should be stashed in the current LauncherState.
*/
public boolean isInStashedLauncherState() {
return hasAnyFlag(FLAG_IN_STASHED_LAUNCHER_STATE) && supportsVisualStashing();
}
private boolean hasAnyFlag(int flagMask) {
return hasAnyFlag(mState, flagMask);
}