Apply root task for launch activity animation.

When launch task embedded, the opening targets will includes the root
task and other TaskFragments, so the animation should choose the root
task as the animating target.

Bug: 279542263
Test: manual, launch task embedded task from notification shade several
times.

Change-Id: I90278e22580b9afb356ab68057bd187f9d59dbc7
This commit is contained in:
wilsonshih
2023-05-09 12:03:39 +00:00
parent c58528f3f4
commit 79a8730958

View File

@@ -508,6 +508,26 @@ class ActivityLaunchAnimator(
startAnimation(apps, nonApps, callback)
}
private fun findRootTaskIfPossible(
apps: Array<out RemoteAnimationTarget>?
): RemoteAnimationTarget? {
if (apps == null) {
return null
}
var candidate: RemoteAnimationTarget? = null
for (it in apps) {
if (it.mode == RemoteAnimationTarget.MODE_OPENING) {
if (it.taskInfo != null && !it.hasAnimatingParent) {
return it
}
if (candidate == null) {
candidate = it
}
}
}
return candidate
}
private fun startAnimation(
apps: Array<out RemoteAnimationTarget>?,
nonApps: Array<out RemoteAnimationTarget>?,
@@ -517,8 +537,7 @@ class ActivityLaunchAnimator(
Log.d(TAG, "Remote animation started")
}
val window = apps?.firstOrNull { it.mode == RemoteAnimationTarget.MODE_OPENING }
val window = findRootTaskIfPossible(apps)
if (window == null) {
Log.i(TAG, "Aborting the animation as no window is opening")
removeTimeout()