summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopMixedTransitionHandler.kt16
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopMixedTransitionHandlerTest.kt64
2 files changed, 52 insertions, 28 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopMixedTransitionHandler.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopMixedTransitionHandler.kt
index 36904fb5a05f..7764688695f7 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopMixedTransitionHandler.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopMixedTransitionHandler.kt
@@ -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
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopMixedTransitionHandlerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopMixedTransitionHandlerTest.kt
index 267bbb6c51e8..49a7e2951a7e 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopMixedTransitionHandlerTest.kt
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopMixedTransitionHandlerTest.kt
@@ -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
+ }
+ }
}