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

Commit ead2a355 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Desktop: check wallpaper to know if last window is closing" into main

parents f2290c21 a0ba0e12
Loading
Loading
Loading
Loading
+10 −6
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.os.Handler
import android.os.IBinder
import android.view.SurfaceControl
import android.view.WindowManager
import android.view.WindowManager.TRANSIT_CLOSE
import android.view.WindowManager.TRANSIT_OPEN
import android.window.DesktopModeFlags
import android.window.TransitionInfo
@@ -197,8 +198,9 @@ class DesktopMixedTransitionHandler(
            logW("Should have closing desktop task")
            return false
        }
        if (isLastDesktopTask(closeChange)) {
            // Dispatch close desktop task animation to the default transition handlers.
        if (isWallpaperActivityClosing(info)) {
            // If the wallpaper activity is closing then the desktop is closing, animate the closing
            // desktop by dispatching to other transition handlers.
            return dispatchCloseLastDesktopTaskAnimation(
                transition,
                info,
@@ -419,10 +421,12 @@ class DesktopMixedTransitionHandler(
        ) != null
    }

    private fun isLastDesktopTask(change: TransitionInfo.Change): Boolean =
        change.taskInfo?.let {
            desktopUserRepositories.getProfile(it.userId).getExpandedTaskCount(it.displayId) == 1
        } ?: false
    private fun isWallpaperActivityClosing(info: TransitionInfo) =
        info.changes.any { change ->
            change.mode == TRANSIT_CLOSE &&
                change.taskInfo != null &&
                DesktopWallpaperActivity.isWallpaperTask(change.taskInfo!!)
        }

    private fun findCloseDesktopTaskChange(info: TransitionInfo): TransitionInfo.Change? {
        if (info.type != WindowManager.TRANSIT_CLOSE) return null
+42 −22
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD
import android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM
import android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN
import android.app.WindowConfiguration.WindowingMode
import android.content.Intent
import android.os.Binder
import android.os.Handler
import android.os.IBinder
@@ -36,7 +37,9 @@ import android.view.WindowManager.TRANSIT_NONE
import android.view.WindowManager.TRANSIT_OPEN
import android.view.WindowManager.TRANSIT_TO_BACK
import android.view.WindowManager.TransitionType
import android.window.IWindowContainerToken
import android.window.TransitionInfo
import android.window.WindowContainerToken
import android.window.WindowContainerTransaction
import androidx.test.filters.SmallTest
import com.android.internal.jank.Cuj.CUJ_DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE
@@ -188,7 +191,7 @@ class DesktopMixedTransitionHandlerTest : ShellTestCase() {
    fun startAnimation_withoutClosingDesktopTask_returnsFalse() {
        val transition = mock<IBinder>()
        val transitionInfo =
            createTransitionInfo(
            createCloseTransitionInfo(
                changeMode = TRANSIT_OPEN,
                task = createTask(WINDOWING_MODE_FREEFORM)
            )
@@ -213,8 +216,7 @@ class DesktopMixedTransitionHandlerTest : ShellTestCase() {
    fun startAnimation_withClosingDesktopTask_callsCloseTaskHandler() {
        val wct = WindowContainerTransaction()
        val transition = mock<IBinder>()
        val transitionInfo = createTransitionInfo(task = createTask(WINDOWING_MODE_FREEFORM))
        whenever(desktopRepository.getExpandedTaskCount(any())).thenReturn(2)
        val transitionInfo = createCloseTransitionInfo(task = createTask(WINDOWING_MODE_FREEFORM))
        whenever(
                closeDesktopTaskTransitionHandler.startAnimation(any(), any(), any(), any(), any())
            )
@@ -243,8 +245,8 @@ class DesktopMixedTransitionHandlerTest : ShellTestCase() {
    fun startAnimation_withClosingLastDesktopTask_dispatchesTransition() {
        val wct = WindowContainerTransaction()
        val transition = mock<IBinder>()
        val transitionInfo = createTransitionInfo(task = createTask(WINDOWING_MODE_FREEFORM))
        whenever(desktopRepository.getExpandedTaskCount(any())).thenReturn(1)
        val transitionInfo = createCloseTransitionInfo(
            task = createTask(WINDOWING_MODE_FREEFORM), withWallpaper = true)
        whenever(transitions.dispatchTransition(any(), any(), any(), any(), any(), any()))
            .thenReturn(mock())
        whenever(transitions.startTransition(WindowManager.TRANSIT_CLOSE, wct, mixedHandler))
@@ -355,7 +357,7 @@ class DesktopMixedTransitionHandlerTest : ShellTestCase() {
        val otherChange = createChange(createTask(WINDOWING_MODE_FREEFORM))
        mixedHandler.startAnimation(
            transition,
            createTransitionInfo(
            createCloseTransitionInfo(
                TRANSIT_OPEN,
                listOf(launchTaskChange, otherChange)
            ),
@@ -395,7 +397,7 @@ class DesktopMixedTransitionHandlerTest : ShellTestCase() {
        val immersiveChange = createChange(immersiveTask)
        mixedHandler.startAnimation(
            transition,
            createTransitionInfo(
            createCloseTransitionInfo(
                TRANSIT_OPEN,
                listOf(launchTaskChange, immersiveChange)
            ),
@@ -437,7 +439,7 @@ class DesktopMixedTransitionHandlerTest : ShellTestCase() {
        )
        mixedHandler.startAnimation(
            transition,
            createTransitionInfo(
            createCloseTransitionInfo(
                TRANSIT_OPEN,
                listOf(launchTaskChange)
            ),
@@ -471,7 +473,7 @@ class DesktopMixedTransitionHandlerTest : ShellTestCase() {
        )
        mixedHandler.startAnimation(
            transition,
            createTransitionInfo(
            createCloseTransitionInfo(
                TRANSIT_OPEN,
                listOf(launchTaskChange, minimizeChange)
            ),
@@ -505,7 +507,7 @@ class DesktopMixedTransitionHandlerTest : ShellTestCase() {

        val started = mixedHandler.startAnimation(
            transition,
            createTransitionInfo(
            createCloseTransitionInfo(
                TRANSIT_OPEN,
                listOf(nonLaunchTaskChange)
            ),
@@ -535,7 +537,7 @@ class DesktopMixedTransitionHandlerTest : ShellTestCase() {

        val started = mixedHandler.startAnimation(
            transition,
            createTransitionInfo(
            createCloseTransitionInfo(
                TRANSIT_OPEN,
                listOf(createChange(task, mode = TRANSIT_OPEN))
            ),
@@ -569,7 +571,7 @@ class DesktopMixedTransitionHandlerTest : ShellTestCase() {
        val openingChange = createChange(openingTask, mode = TRANSIT_OPEN)
        val started = mixedHandler.startAnimation(
            transition,
            createTransitionInfo(
            createCloseTransitionInfo(
                TRANSIT_OPEN,
                listOf(immersiveChange, openingChange)
            ),
@@ -604,7 +606,7 @@ class DesktopMixedTransitionHandlerTest : ShellTestCase() {
        )
        mixedHandler.startAnimation(
            transition,
            createTransitionInfo(
            createCloseTransitionInfo(
                TRANSIT_OPEN,
                listOf(launchTaskChange)
            ),
@@ -640,7 +642,7 @@ class DesktopMixedTransitionHandlerTest : ShellTestCase() {
        )
        mixedHandler.startAnimation(
            transition,
            createTransitionInfo(
            createCloseTransitionInfo(
                TRANSIT_OPEN,
                listOf(launchTaskChange, minimizeChange)
            ),
@@ -670,7 +672,7 @@ class DesktopMixedTransitionHandlerTest : ShellTestCase() {
        val launchTaskChange = createChange(launchingTask)
        mixedHandler.startAnimation(
            transition,
            createTransitionInfo(
            createCloseTransitionInfo(
                TRANSIT_OPEN,
                listOf(launchTaskChange)
            ),
@@ -727,7 +729,7 @@ class DesktopMixedTransitionHandlerTest : ShellTestCase() {
        val started = mixedHandler.startAnimation(
            transition = transition,
            info =
                createTransitionInfo(
                createCloseTransitionInfo(
                TRANSIT_TO_BACK,
                listOf(minimizingTaskChange)
            ),
@@ -766,7 +768,7 @@ class DesktopMixedTransitionHandlerTest : ShellTestCase() {
        mixedHandler.startAnimation(
            transition = transition,
            info =
            createTransitionInfo(
            createCloseTransitionInfo(
                TRANSIT_TO_BACK,
                listOf(minimizingTaskChange)
            ),
@@ -786,12 +788,12 @@ class DesktopMixedTransitionHandlerTest : ShellTestCase() {
            )
    }

    private fun createTransitionInfo(
        type: Int = WindowManager.TRANSIT_CLOSE,
    private fun createCloseTransitionInfo(
        changeMode: Int = WindowManager.TRANSIT_CLOSE,
        task: RunningTaskInfo
        task: RunningTaskInfo,
        withWallpaper: Boolean = false,
    ): TransitionInfo =
        TransitionInfo(type, 0 /* flags */).apply {
        TransitionInfo(WindowManager.TRANSIT_CLOSE, 0 /* flags */).apply {
            addChange(
                TransitionInfo.Change(mock(), closingTaskLeash).apply {
                    mode = changeMode
@@ -799,9 +801,18 @@ class DesktopMixedTransitionHandlerTest : ShellTestCase() {
                    taskInfo = task
                }
            )
            if (withWallpaper) {
                addChange(
                    TransitionInfo.Change(/* container= */ mock(), /* leash= */ mock()).apply {
                        mode = WindowManager.TRANSIT_CLOSE
                        parent = null
                        taskInfo = createWallpaperTask()
                    }
                )
            }
        }

    private fun createTransitionInfo(
    private fun createCloseTransitionInfo(
        @TransitionType type: Int,
        changes: List<TransitionInfo.Change> = emptyList()
    ): TransitionInfo = TransitionInfo(type, /* flags= */ 0).apply {
@@ -822,4 +833,13 @@ class DesktopMixedTransitionHandlerTest : ShellTestCase() {
            .setActivityType(ACTIVITY_TYPE_STANDARD)
            .setWindowingMode(windowingMode)
            .build()

    private fun createWallpaperTask() =
        RunningTaskInfo().apply {
            token = WindowContainerToken(mock<IWindowContainerToken>())
            baseIntent =
                Intent().apply {
                    component = DesktopWallpaperActivity.wallpaperActivityComponent
                }
        }
}