Fix bug with rotating in the middle of split select staging animation

This patch fixes a bug where a user could cause a crash by rotating the device in the middle of the split staging animation.

The bug arose because:
1) Normally, when you rotate the device, reapplyState() is called to refresh the UI. This reloads the state, cancels any animations that happen to be running at the time, and generally works fine in most cases.
2) When animations are canceled within Overview, we also call RecentsView#reset() to clean up loose ends and prevent bugs.
3) Unlike other states, the split select state is unique because it is a transient state that holds the user's choices temporarily. If that information was cleared -- by reset() -- before it loads, it will crash.

Fixed by creating a new function in SplitScreenSelectState, onStateReapplied(), that is called when a reload is occurring. It makes sure that animations do not get canceled by calling end() to accelerate them to completion before the reloading occurs.

Fixes: 249819567
Test: Manual
Change-Id: I70c4651bcb5df81edd25f6e58e21520ebb391d01
This commit is contained in:
Jeremy Sim
2023-02-22 13:35:50 -08:00
parent 6d3658dd0c
commit 8477226a3d
4 changed files with 20 additions and 2 deletions

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