Merge "Fix bug with rotating in the middle of split select staging animation" into tm-qpr-dev

This commit is contained in:
Jeremy Sim
2023-03-01 18:53:00 +00:00
committed by Android (Google) Code Review
4 changed files with 20 additions and 1 deletions
@@ -53,4 +53,9 @@ public class SplitScreenSelectState extends OverviewState {
return SplitAnimationTimings.ABORT_DURATION;
}
}
@Override
public boolean shouldPreserveDataStateOnReapply() {
return true;
}
}
@@ -4578,7 +4578,6 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
return true;
}
/** TODO(b/181707736) More gracefully handle exiting split selection state */
@SuppressLint("WrongCall")
protected void resetFromSplitSelectionState() {
if (mSplitSelectSource != null || mSplitHiddenTaskViewIndex != -1) {
@@ -70,4 +70,12 @@ public interface BaseState<T extends BaseState> {
default boolean showTaskThumbnailSplash() {
return false;
}
/**
* For this state, whether member variables and other forms of data state should be preserved
* or wiped when the state is reapplied. (See {@link StateManager#reapplyState()})
*/
default boolean shouldPreserveDataStateOnReapply() {
return false;
}
}
@@ -184,6 +184,13 @@ public class StateManager<STATE_TYPE extends BaseState<STATE_TYPE>> {
public void reapplyState(boolean cancelCurrentAnimation) {
boolean wasInAnimation = mConfig.currentAnimation != null;
if (cancelCurrentAnimation) {
// Animation canceling can trigger a cleanup routine, causing problems when we are in a
// launcher state that relies on member variable data. So if we are in one of those
// states, accelerate the current animation to its end point rather than canceling it
// outright.
if (mState.shouldPreserveDataStateOnReapply() && mConfig.currentAnimation != null) {
mConfig.currentAnimation.end();
}
mAtomicAnimationFactory.cancelAllStateElementAnimation();
cancelAnimation();
}