Add per-display RemoteAnimation overrides and flag to disable snapshots
This CL adds a display-level fallback for remoteanimation overrides
and a property to RemoteAnimationAdapter specifying whether it needs
a snapshot for change transitions or not.
During a mode-change, this check for an override and then asks it
whether it needs a snapshot before creating one.
Bug: 113252739
Test: Added AppChangeTransitionTests
Change-Id: I47c933bd08fe512dc6cf029607819e2c908ab4cd
diff --git a/services/core/java/com/android/server/wm/AppTransitionController.java b/services/core/java/com/android/server/wm/AppTransitionController.java
index 49308b8..8f0a7c0 100644
--- a/services/core/java/com/android/server/wm/AppTransitionController.java
+++ b/services/core/java/com/android/server/wm/AppTransitionController.java
@@ -76,6 +76,7 @@
private final WindowManagerService mService;
private final DisplayContent mDisplayContent;
private final WallpaperController mWallpaperControllerLocked;
+ private RemoteAnimationDefinition mRemoteAnimationDefinition = null;
private final SparseIntArray mTempTransitionReasons = new SparseIntArray();
@@ -85,6 +86,10 @@
mWallpaperControllerLocked = mDisplayContent.mWallpaperController;
}
+ void registerRemoteAnimations(RemoteAnimationDefinition definition) {
+ mRemoteAnimationDefinition = definition;
+ }
+
/**
* Handle application transition for given display.
*/
@@ -216,6 +221,21 @@
return mainWindow != null ? mainWindow.mAttrs : null;
}
+ RemoteAnimationAdapter getRemoteAnimationOverride(AppWindowToken animLpToken, int transit,
+ ArraySet<Integer> activityTypes) {
+ final RemoteAnimationDefinition definition = animLpToken.getRemoteAnimationDefinition();
+ if (definition != null) {
+ final RemoteAnimationAdapter adapter = definition.getAdapter(transit, activityTypes);
+ if (adapter != null) {
+ return adapter;
+ }
+ }
+ if (mRemoteAnimationDefinition == null) {
+ return null;
+ }
+ return mRemoteAnimationDefinition.getAdapter(transit, activityTypes);
+ }
+
/**
* Overrides the pending transition with the remote animation defined for the transition in the
* set of defined remote animations in the app window token.
@@ -229,11 +249,8 @@
if (animLpToken == null) {
return;
}
- final RemoteAnimationDefinition definition = animLpToken.getRemoteAnimationDefinition();
- if (definition == null) {
- return;
- }
- final RemoteAnimationAdapter adapter = definition.getAdapter(transit, activityTypes);
+ final RemoteAnimationAdapter adapter =
+ getRemoteAnimationOverride(animLpToken, transit, activityTypes);
if (adapter != null) {
animLpToken.getDisplayContent().mAppTransition.overridePendingAppTransitionRemote(
adapter);