From fe17dd475b064f3e5dfbb0ba9e447ea325920c7d Mon Sep 17 00:00:00 2001 From: Sergey Pinkevich Date: Wed, 26 Feb 2025 14:40:53 +0000 Subject: [PATCH] Change launch change requirement within DesktopAppLaunchAnimatorHelper Add freeform check and update logs Return early instead of crashing if a launch change is not available Bug: 395495925 Flag: NONE only adding logs, not change of actual code Test: DesktopAppLaunchAnimatorHelperTest Change-Id: I0d51c563a26e7d6020222cb84757e0ea8d561d69 --- .../desktop/DesktopAppLaunchAnimatorHelper.kt | 23 +++++++++---------- .../desktop/DesktopAppLaunchTransition.kt | 4 ++++ .../taskbar/TaskbarActivityContext.java | 1 + .../DesktopAppLaunchAnimatorHelperTest.kt | 15 ++++++++++++ 4 files changed, 31 insertions(+), 12 deletions(-) diff --git a/quickstep/src/com/android/launcher3/desktop/DesktopAppLaunchAnimatorHelper.kt b/quickstep/src/com/android/launcher3/desktop/DesktopAppLaunchAnimatorHelper.kt index 688018b14f..1438edf8ef 100644 --- a/quickstep/src/com/android/launcher3/desktop/DesktopAppLaunchAnimatorHelper.kt +++ b/quickstep/src/com/android/launcher3/desktop/DesktopAppLaunchAnimatorHelper.kt @@ -64,18 +64,13 @@ class DesktopAppLaunchAnimatorHelper( fun createAnimators(info: TransitionInfo, finishCallback: (Animator) -> Unit): List { val launchChange = getLaunchChange(info) - requireNotNull(launchChange) { - val changesString = + if (launchChange == null) { + val tasksInfo = info.changes.joinToString(", ") { change -> - "Change: mode=${change.mode}, " + - "taskId=${change.taskInfo?.id}, " + - "isFreeform=${change.taskInfo?.isFreeform}" + "${change.taskInfo?.taskId}:${change.taskInfo?.isFreeform}" } - Log.e( - TAG, - "No launch change found: Transition type=${info.type}, changes=$changesString", - ) - "expected an app launch Change" + Log.e(TAG, "No launch change found: Transition info=$info, tasks state=$tasksInfo") + return emptyList() } val transaction = transactionSupplier.get() @@ -105,10 +100,14 @@ class DesktopAppLaunchAnimatorHelper( } private fun getLaunchChange(info: TransitionInfo): Change? = - info.changes.firstOrNull { change -> change.mode in LAUNCH_CHANGE_MODES } + info.changes.firstOrNull { change -> + change.mode in LAUNCH_CHANGE_MODES && change.taskInfo?.isFreeform == true + } private fun getMinimizeChange(info: TransitionInfo): Change? = - info.changes.firstOrNull { change -> change.mode == TRANSIT_TO_BACK } + info.changes.firstOrNull { change -> + change.mode == TRANSIT_TO_BACK && change.taskInfo?.isFreeform == true + } private fun getTrampolineCloseChange(info: TransitionInfo): Change? { if ( diff --git a/quickstep/src/com/android/launcher3/desktop/DesktopAppLaunchTransition.kt b/quickstep/src/com/android/launcher3/desktop/DesktopAppLaunchTransition.kt index 79072a6441..5a8934b9f5 100644 --- a/quickstep/src/com/android/launcher3/desktop/DesktopAppLaunchTransition.kt +++ b/quickstep/src/com/android/launcher3/desktop/DesktopAppLaunchTransition.kt @@ -84,6 +84,10 @@ constructor( if (animators.isEmpty()) finishedCallback.run() } animators += animatorHelper.createAnimators(info, animatorFinishedCallback) + if (animators.isEmpty()) { + finishedCallback.run() + return + } animators.forEach { it.start() } } diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java index 0d9a0d2970..b5ee8c8adf 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java @@ -1574,6 +1574,7 @@ public class TaskbarActivityContext extends BaseTaskbarContext { public boolean canUnminimizeDesktopTask(int taskId) { BubbleTextView.RunningAppState runningAppState = mControllers.taskbarRecentAppsController.getRunningAppState(taskId); + Log.d(TAG, "Task id=" + taskId + ", Running app state=" + runningAppState); return runningAppState == RunningAppState.MINIMIZED && DesktopModeFlags.ENABLE_DESKTOP_APP_LAUNCH_ALTTAB_TRANSITIONS_BUGFIX.isTrue(); } diff --git a/quickstep/tests/src/com/android/quickstep/desktop/DesktopAppLaunchAnimatorHelperTest.kt b/quickstep/tests/src/com/android/quickstep/desktop/DesktopAppLaunchAnimatorHelperTest.kt index b4d9f5b396..47108e0572 100644 --- a/quickstep/tests/src/com/android/quickstep/desktop/DesktopAppLaunchAnimatorHelperTest.kt +++ b/quickstep/tests/src/com/android/quickstep/desktop/DesktopAppLaunchAnimatorHelperTest.kt @@ -92,6 +92,21 @@ class DesktopAppLaunchAnimatorHelperTest { assertLaunchAnimator(actual[0]) } + @Test + fun noLaunchTransition_returnsEmptyAnimatorsList() { + val pipChange = + TransitionInfo.Change(mock(), mock()).apply { + mode = WindowManager.TRANSIT_PIP + taskInfo = TASK_INFO_FREEFORM + } + val transitionInfo = TransitionInfo(WindowManager.TRANSIT_NONE, 0) + transitionInfo.addChange(pipChange) + + val actual = helper.createAnimators(transitionInfo, finishCallback = {}) + + assertThat(actual).hasSize(0) + } + @Test fun minimizeTransition_returnsLaunchAndMinimizeAnimator() { val openChange =