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

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

Change-Id: I321507bda3f22ad4aa228a9a15235e576cdf703a
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Jeremy Sim
2023-03-01 19:35:02 +00:00
committed by Automerger Merge Worker
4 changed files with 20 additions and 1 deletions

View File

@@ -53,4 +53,9 @@ public class SplitScreenSelectState extends OverviewState {
return SplitAnimationTimings.ABORT_DURATION;
}
}
@Override
public boolean shouldPreserveDataStateOnReapply() {
return true;
}
}

View File

@@ -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) {

View File

@@ -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;
}
}

View File

@@ -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();
}