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

Commit c7f357b1 authored by Toshiki Kikuchi's avatar Toshiki Kikuchi Committed by Android (Google) Code Review
Browse files

Merge "Include background task relaunch in isFullscreenRelaunch() filter" into main

parents 8305c9f3 da6f322c
Loading
Loading
Loading
Loading
+12 −7
Original line number Diff line number Diff line
@@ -2797,7 +2797,7 @@ class DesktopTasksController(
            TransitionUtil.isOpeningType(request.type) &&
            taskRepository.isActiveTask(triggerTask.taskId))

    /** Returns whether a visible fullscreen task is being relaunched on the same display or not. */
    /** Returns whether a fullscreen task is being relaunched on the same display or not. */
    private fun isFullscreenRelaunch(
        triggerTask: RunningTaskInfo,
        @WindowManager.TransitionType requestType: Int,
@@ -2809,7 +2809,6 @@ class DesktopTasksController(
        return triggerTask.isFullscreen &&
            TransitionUtil.isOpeningType(requestType) &&
            existingTask.isFullscreen &&
            existingTask.isVisible &&
            existingTask.displayId == triggerTask.displayId
    }

@@ -3246,21 +3245,27 @@ class DesktopTasksController(
        task: RunningTaskInfo,
        @WindowManager.TransitionType requestType: Int,
    ): Boolean {
        val isDesktopFirst = rootTaskDisplayAreaOrganizer.isDisplayDesktopFirst(task.displayId)
        if (
            DesktopExperienceFlags.ENABLE_DESKTOP_FIRST_FULLSCREEN_REFOCUS_BUGFIX.isTrue &&
                isDesktopFirst &&
                isFullscreenRelaunch(task, requestType)
        ) {
            logV("shouldFullscreenTaskLaunchSwitchToDesktop: no switch as fullscreen relaunch")
            logV(
                "shouldFullscreenTaskLaunchSwitchToDesktop: no switch as fullscreen relaunch on" +
                    " desktop-first display#%s",
                task.displayId,
            )
            return false
        }

        val isAnyDeskActive = isAnyDeskActive(task.displayId)
        val forceEnterDesktop = forceEnterDesktop(task.displayId)
        logV(
            "shouldFullscreenTaskLaunchSwitchToDesktop, isAnyDeskActive=%s, forceEnterDesktop=%s",
            "shouldFullscreenTaskLaunchSwitchToDesktop, isAnyDeskActive=%s, isDesktopFirst=%s",
            isAnyDeskActive,
            forceEnterDesktop,
            isDesktopFirst,
        )
        return isAnyDeskActive || forceEnterDesktop
        return isAnyDeskActive || isDesktopFirst
    }

    /**
+56 −2
Original line number Diff line number Diff line
@@ -6775,15 +6775,69 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_FIRST_FULLSCREEN_REFOCUS_BUGFIX)
    fun handleRequest_fullscreenTaskRelaunch_returnNull() {
    @EnableFlags(
        Flags.FLAG_ENABLE_DESKTOP_FIRST_FULLSCREEN_REFOCUS_BUGFIX,
        Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND,
    )
    fun handleRequest_fullscreenTaskRelaunch_desktopFirst_returnNull() {
        val tda = rootTaskDisplayAreaOrganizer.getDisplayAreaInfo(DEFAULT_DISPLAY)!!
        tda.configuration.windowConfiguration.windowingMode = WINDOWING_MODE_FREEFORM
        val task = setUpFullscreenTask()
        // Deactivate desk as fullscreen task is visible on top.
        taskRepository.getActiveDeskId(DEFAULT_DISPLAY)?.let { taskRepository.setDeskInactive(it) }

        val result = controller.handleRequest(Binder(), createTransition(task, type = TRANSIT_OPEN))

        assertNull(result, "Should not handle request")
    }

    @Test
    @EnableFlags(
        Flags.FLAG_ENABLE_DESKTOP_FIRST_FULLSCREEN_REFOCUS_BUGFIX,
        Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND,
    )
    fun handleRequest_backgroundFullscreenTaskRelaunch_desktopFirst_returnNull() {
        val tda = rootTaskDisplayAreaOrganizer.getDisplayAreaInfo(DEFAULT_DISPLAY)!!
        tda.configuration.windowConfiguration.windowingMode = WINDOWING_MODE_FREEFORM
        val task = setUpFullscreenTask(visible = false)

        val result = controller.handleRequest(Binder(), createTransition(task, type = TRANSIT_OPEN))

        assertNull(result, "Should not handle request")
    }

    @Test
    @EnableFlags(
        Flags.FLAG_ENABLE_DESKTOP_FIRST_FULLSCREEN_REFOCUS_BUGFIX,
        Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND,
    )
    fun handleRequest_fullscreenTaskRelaunch_touchFirst_returnNull() {
        val tda = rootTaskDisplayAreaOrganizer.getDisplayAreaInfo(DEFAULT_DISPLAY)!!
        tda.configuration.windowConfiguration.windowingMode = WINDOWING_MODE_FULLSCREEN
        val task = setUpFullscreenTask()
        // Deactivate desk as fullscreen task is visible on top.
        taskRepository.getActiveDeskId(DEFAULT_DISPLAY)?.let { taskRepository.setDeskInactive(it) }

        val result = controller.handleRequest(Binder(), createTransition(task, type = TRANSIT_OPEN))

        assertNull(result, "Should not handle request")
    }

    @Test
    @EnableFlags(
        Flags.FLAG_ENABLE_DESKTOP_FIRST_FULLSCREEN_REFOCUS_BUGFIX,
        Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND,
    )
    fun handleRequest_backgroundFullscreenTaskRelaunch_touchFirst_moveToDesk() {
        val tda = rootTaskDisplayAreaOrganizer.getDisplayAreaInfo(DEFAULT_DISPLAY)!!
        tda.configuration.windowConfiguration.windowingMode = WINDOWING_MODE_FULLSCREEN
        val task = setUpFullscreenTask(visible = false)

        val result = controller.handleRequest(Binder(), createTransition(task, type = TRANSIT_OPEN))

        verify(desksOrganizer).moveTaskToDesk(result!!, DEFAULT_DISPLAY, task)
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODALS_POLICY)
    fun moveFocusedTaskToDesktop_noDisplayActivity_doesNothing() {