Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6aaf2855 authored by Sergey Pinkevich's avatar Sergey Pinkevich
Browse files

Reparenting task in DesktopMixedTransitionHandler for minimize change

Relax condition to get launch change to prevent early quitting and call applyMinimizeChangeReparenting method

Bug: 360329773
Flag: com.android.window.flags.enable_desktop_opening_deeplink_minimize_animation_bugfix
Test: DesktopMixedTransitionHandlerTest

Change-Id: I8617bab9cf9dd545b689f9ef7676ddd1e675b9e5
parent 0602ba64
Loading
Loading
Loading
Loading
+15 −6
Original line number Diff line number Diff line
@@ -452,6 +452,11 @@ class DesktopMixedTransitionHandler(
    private fun findTaskChange(info: TransitionInfo, taskId: Int): TransitionInfo.Change? =
        info.changes.firstOrNull { change -> change.taskInfo?.taskId == taskId }

    private fun findLaunchChange(info: TransitionInfo): TransitionInfo.Change? =
        info.changes.firstOrNull { change ->
            change.mode == TRANSIT_OPEN && change.taskInfo != null && change.taskInfo!!.isFreeform
        }

    private fun findDesktopTaskLaunchChange(
        info: TransitionInfo,
        launchTaskId: Int?,
@@ -459,14 +464,18 @@ class DesktopMixedTransitionHandler(
        return if (launchTaskId != null) {
            // Launching a known task (probably from background or moving to front), so
            // specifically look for it.
            findTaskChange(info, launchTaskId)
            val launchChange = findTaskChange(info, launchTaskId)
            if (
                DesktopModeFlags.ENABLE_DESKTOP_OPENING_DEEPLINK_MINIMIZE_ANIMATION_BUGFIX.isTrue &&
                    launchChange == null
            ) {
                findLaunchChange(info)
            } else {
            // Launching a new task, so the first opening freeform task.
            info.changes.firstOrNull { change ->
                change.mode == TRANSIT_OPEN &&
                    change.taskInfo != null &&
                    change.taskInfo!!.isFreeform
                launchChange
            }
        } else {
            // Launching a new task, so the first opening freeform task.
            findLaunchChange(info)
        }
    }

+32 −0
Original line number Diff line number Diff line
@@ -430,6 +430,38 @@ class DesktopMixedTransitionHandlerTest : ShellTestCase() {
            .reparentToDisplayArea(anyInt(), eq(minimizeChange.leash), any())
    }

    @Test
    @EnableFlags(
        Flags.FLAG_ENABLE_DESKTOP_APP_LAUNCH_TRANSITIONS_BUGFIX,
        Flags.FLAG_ENABLE_DESKTOP_OPENING_DEEPLINK_MINIMIZE_ANIMATION_BUGFIX,
    )
    fun startAndAnimateLaunchTransition_withMinimizeChange_wrongTaskId_reparentsMinimizeChange() {
        val wct = WindowContainerTransaction()
        val launchingTask = createTask(WINDOWING_MODE_FREEFORM)
        val minimizingTask = createTask(WINDOWING_MODE_FREEFORM)
        val launchTaskChange = createChange(launchingTask, mode = TRANSIT_OPEN)
        val minimizeChange = createChange(minimizingTask)
        val transition = Binder()
        whenever(transitions.startTransition(eq(TRANSIT_OPEN), eq(wct), anyOrNull()))
            .thenReturn(transition)

        mixedHandler.startLaunchTransition(
            transitionType = TRANSIT_OPEN,
            wct = wct,
            taskId = Int.MAX_VALUE,
            minimizingTaskId = minimizingTask.taskId,
        )
        mixedHandler.startAnimation(
            transition,
            createCloseTransitionInfo(TRANSIT_OPEN, listOf(launchTaskChange, minimizeChange)),
            SurfaceControl.Transaction(),
            SurfaceControl.Transaction(),
        ) {}

        verify(rootTaskDisplayAreaOrganizer)
            .reparentToDisplayArea(anyInt(), eq(minimizeChange.leash), any())
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_APP_LAUNCH_TRANSITIONS_BUGFIX)
    fun startAnimation_pendingTransition_noLaunchChange_returnsFalse() {