summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationController.java8
-rw-r--r--libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationRunner.java8
-rw-r--r--services/core/java/com/android/server/wm/AppTransitionController.java18
-rw-r--r--services/core/java/com/android/server/wm/NonAppWindowAnimationAdapter.java33
-rw-r--r--services/core/java/com/android/server/wm/WallpaperAnimationAdapter.java6
5 files changed, 47 insertions, 26 deletions
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationController.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationController.java
index 535dac1a5101..3c7d2de6165f 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationController.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationController.java
@@ -16,9 +16,13 @@
package androidx.window.extensions.embedding;
+import static android.view.WindowManager.TRANSIT_OLD_ACTIVITY_CLOSE;
+import static android.view.WindowManager.TRANSIT_OLD_ACTIVITY_OPEN;
+import static android.view.WindowManager.TRANSIT_OLD_TASK_CLOSE;
import static android.view.WindowManager.TRANSIT_OLD_TASK_FRAGMENT_CHANGE;
import static android.view.WindowManager.TRANSIT_OLD_TASK_FRAGMENT_CLOSE;
import static android.view.WindowManager.TRANSIT_OLD_TASK_FRAGMENT_OPEN;
+import static android.view.WindowManager.TRANSIT_OLD_TASK_OPEN;
import android.util.Log;
import android.view.RemoteAnimationAdapter;
@@ -45,8 +49,12 @@ class TaskFragmentAnimationController {
final RemoteAnimationDefinition definition = new RemoteAnimationDefinition();
final RemoteAnimationAdapter animationAdapter =
new RemoteAnimationAdapter(mRemoteRunner, 0, 0, true /* changeNeedsSnapshot */);
+ definition.addRemoteAnimation(TRANSIT_OLD_ACTIVITY_OPEN, animationAdapter);
definition.addRemoteAnimation(TRANSIT_OLD_TASK_FRAGMENT_OPEN, animationAdapter);
+ definition.addRemoteAnimation(TRANSIT_OLD_TASK_OPEN, animationAdapter);
+ definition.addRemoteAnimation(TRANSIT_OLD_ACTIVITY_CLOSE, animationAdapter);
definition.addRemoteAnimation(TRANSIT_OLD_TASK_FRAGMENT_CLOSE, animationAdapter);
+ definition.addRemoteAnimation(TRANSIT_OLD_TASK_CLOSE, animationAdapter);
definition.addRemoteAnimation(TRANSIT_OLD_TASK_FRAGMENT_CHANGE, animationAdapter);
mOrganizer.registerRemoteAnimations(definition);
}
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationRunner.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationRunner.java
index 412559e34070..8c8ef92b80dc 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationRunner.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationRunner.java
@@ -17,9 +17,13 @@
package androidx.window.extensions.embedding;
import static android.view.RemoteAnimationTarget.MODE_CLOSING;
+import static android.view.WindowManager.TRANSIT_OLD_ACTIVITY_CLOSE;
+import static android.view.WindowManager.TRANSIT_OLD_ACTIVITY_OPEN;
+import static android.view.WindowManager.TRANSIT_OLD_TASK_CLOSE;
import static android.view.WindowManager.TRANSIT_OLD_TASK_FRAGMENT_CHANGE;
import static android.view.WindowManager.TRANSIT_OLD_TASK_FRAGMENT_CLOSE;
import static android.view.WindowManager.TRANSIT_OLD_TASK_FRAGMENT_OPEN;
+import static android.view.WindowManager.TRANSIT_OLD_TASK_OPEN;
import android.animation.Animator;
import android.animation.ValueAnimator;
@@ -155,9 +159,13 @@ class TaskFragmentAnimationRunner extends IRemoteAnimationRunner.Stub {
@WindowManager.TransitionOldType int transit,
@NonNull RemoteAnimationTarget[] targets) {
switch (transit) {
+ case TRANSIT_OLD_ACTIVITY_OPEN:
case TRANSIT_OLD_TASK_FRAGMENT_OPEN:
+ case TRANSIT_OLD_TASK_OPEN:
return createOpenAnimationAdapters(targets);
+ case TRANSIT_OLD_ACTIVITY_CLOSE:
case TRANSIT_OLD_TASK_FRAGMENT_CLOSE:
+ case TRANSIT_OLD_TASK_CLOSE:
return createCloseAnimationAdapters(targets);
case TRANSIT_OLD_TASK_FRAGMENT_CHANGE:
return createChangeAnimationAdapters(targets);
diff --git a/services/core/java/com/android/server/wm/AppTransitionController.java b/services/core/java/com/android/server/wm/AppTransitionController.java
index f94777339fae..df9a6d21113e 100644
--- a/services/core/java/com/android/server/wm/AppTransitionController.java
+++ b/services/core/java/com/android/server/wm/AppTransitionController.java
@@ -65,7 +65,10 @@ import static com.android.server.wm.ActivityTaskManagerInternal.APP_TRANSITION_S
import static com.android.server.wm.ActivityTaskManagerInternal.APP_TRANSITION_SPLASH_SCREEN;
import static com.android.server.wm.ActivityTaskManagerInternal.APP_TRANSITION_WINDOWS_DRAWN;
import static com.android.server.wm.AppTransition.isNormalTransit;
+import static com.android.server.wm.NonAppWindowAnimationAdapter.shouldAttachNavBarToApp;
+import static com.android.server.wm.NonAppWindowAnimationAdapter.shouldStartNonAppWindowAnimationsForKeyguardExit;
import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITION;
+import static com.android.server.wm.WallpaperAnimationAdapter.shouldStartWallpaperAnimation;
import static com.android.server.wm.WindowContainer.AnimationFlags.PARENTS;
import static com.android.server.wm.WindowManagerDebugConfig.SHOW_LIGHT_TRANSACTIONS;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
@@ -529,18 +532,9 @@ public class AppTransitionController {
// Having {@code transit} of those types doesn't mean it will contain non-app windows, but
// non-app windows will only be included with those transition types. And we don't currently
// have any use case of those for TaskFragment transition.
- // @see NonAppWindowAnimationAdapter#startNonAppWindowAnimations
- if (transit == TRANSIT_OLD_KEYGUARD_GOING_AWAY
- || transit == TRANSIT_OLD_KEYGUARD_GOING_AWAY_ON_WALLPAPER
- || transit == TRANSIT_OLD_TASK_OPEN || transit == TRANSIT_OLD_TASK_TO_FRONT
- || transit == TRANSIT_OLD_WALLPAPER_CLOSE) {
- return true;
- }
-
- // Check if the wallpaper is going to participate in the transition. We don't want to have
- // the client to animate the wallpaper windows.
- // @see WallpaperAnimationAdapter#startWallpaperAnimations
- return mDisplayContent.mWallpaperController.isWallpaperVisible();
+ return shouldStartNonAppWindowAnimationsForKeyguardExit(transit)
+ || shouldAttachNavBarToApp(mService, mDisplayContent, transit)
+ || shouldStartWallpaperAnimation(mDisplayContent);
}
/**
diff --git a/services/core/java/com/android/server/wm/NonAppWindowAnimationAdapter.java b/services/core/java/com/android/server/wm/NonAppWindowAnimationAdapter.java
index 9f28509c56bd..7c35a2163d6d 100644
--- a/services/core/java/com/android/server/wm/NonAppWindowAnimationAdapter.java
+++ b/services/core/java/com/android/server/wm/NonAppWindowAnimationAdapter.java
@@ -69,25 +69,32 @@ class NonAppWindowAnimationAdapter implements AnimationAdapter {
long durationHint, long statusBarTransitionDelay,
ArrayList<NonAppWindowAnimationAdapter> adaptersOut) {
final ArrayList<RemoteAnimationTarget> targets = new ArrayList<>();
- if (transit == TRANSIT_OLD_KEYGUARD_GOING_AWAY
- || transit == TRANSIT_OLD_KEYGUARD_GOING_AWAY_ON_WALLPAPER) {
+ if (shouldStartNonAppWindowAnimationsForKeyguardExit(transit)) {
startNonAppWindowAnimationsForKeyguardExit(
service, durationHint, statusBarTransitionDelay, targets, adaptersOut);
- } else if (transit == TRANSIT_OLD_TASK_OPEN || transit == TRANSIT_OLD_TASK_TO_FRONT
- || transit == TRANSIT_OLD_WALLPAPER_CLOSE) {
- final boolean shouldAttachNavBarToApp =
- displayContent.getDisplayPolicy().shouldAttachNavBarToAppDuringTransition()
- && service.getRecentsAnimationController() == null
- && displayContent.getFadeRotationAnimationController() == null;
- if (shouldAttachNavBarToApp) {
- startNavigationBarWindowAnimation(
- displayContent, durationHint, statusBarTransitionDelay, targets,
- adaptersOut);
- }
+ } else if (shouldAttachNavBarToApp(service, displayContent, transit)) {
+ startNavigationBarWindowAnimation(
+ displayContent, durationHint, statusBarTransitionDelay, targets,
+ adaptersOut);
}
return targets.toArray(new RemoteAnimationTarget[targets.size()]);
}
+ static boolean shouldStartNonAppWindowAnimationsForKeyguardExit(
+ @WindowManager.TransitionOldType int transit) {
+ return transit == TRANSIT_OLD_KEYGUARD_GOING_AWAY
+ || transit == TRANSIT_OLD_KEYGUARD_GOING_AWAY_ON_WALLPAPER;
+ }
+
+ static boolean shouldAttachNavBarToApp(WindowManagerService service,
+ DisplayContent displayContent, @WindowManager.TransitionOldType int transit) {
+ return (transit == TRANSIT_OLD_TASK_OPEN || transit == TRANSIT_OLD_TASK_TO_FRONT
+ || transit == TRANSIT_OLD_WALLPAPER_CLOSE)
+ && displayContent.getDisplayPolicy().shouldAttachNavBarToAppDuringTransition()
+ && service.getRecentsAnimationController() == null
+ && displayContent.getFadeRotationAnimationController() == null;
+ }
+
/**
* Creates and starts remote animations for all the visible non app windows.
*
diff --git a/services/core/java/com/android/server/wm/WallpaperAnimationAdapter.java b/services/core/java/com/android/server/wm/WallpaperAnimationAdapter.java
index 26527233aef0..4a5a20e57804 100644
--- a/services/core/java/com/android/server/wm/WallpaperAnimationAdapter.java
+++ b/services/core/java/com/android/server/wm/WallpaperAnimationAdapter.java
@@ -69,7 +69,7 @@ class WallpaperAnimationAdapter implements AnimationAdapter {
long durationHint, long statusBarTransitionDelay,
Consumer<WallpaperAnimationAdapter> animationCanceledRunnable,
ArrayList<WallpaperAnimationAdapter> adaptersOut) {
- if (!displayContent.mWallpaperController.isWallpaperVisible()) {
+ if (!shouldStartWallpaperAnimation(displayContent)) {
ProtoLog.d(WM_DEBUG_REMOTE_ANIMATIONS,
"\tWallpaper of display=%s is not visible", displayContent);
return new RemoteAnimationTarget[0];
@@ -87,6 +87,10 @@ class WallpaperAnimationAdapter implements AnimationAdapter {
return targets.toArray(new RemoteAnimationTarget[targets.size()]);
}
+ static boolean shouldStartWallpaperAnimation(DisplayContent displayContent) {
+ return displayContent.mWallpaperController.isWallpaperVisible();
+ }
+
/**
* Create a remote animation target for this animation adapter.
*/