summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> 2025-01-31 10:58:57 -0800
committer Android (Google) Code Review <android-gerrit@google.com> 2025-01-31 10:58:57 -0800
commit264792d0c8968b5b5ec3fb8016624829810cdd82 (patch)
tree55f4a7aa71d5b4fda17be83962ae88ba672f440c
parent51b40f072af65a96a560241c93859c9da9028a4b (diff)
parent03f9c385bdbe9b059cf5800c9c0340c9169d5def (diff)
Merge "Relax home-task assertion in end-drag-to-desktop transition" into main
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandler.kt13
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandlerTest.kt56
2 files changed, 57 insertions, 12 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandler.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandler.kt
index cc3d86c0c056..2ac76f319d32 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandler.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandler.kt
@@ -959,9 +959,16 @@ constructor(
super.setupEndDragToDesktop(info, startTransaction, finishTransaction)
val state = requireTransitionState()
- val homeLeash = state.homeChange?.leash ?: error("Expects home leash to be non-null")
- // Hide home on finish to prevent flickering when wallpaper activity flag is enabled
- finishTransaction.hide(homeLeash)
+ val homeLeash = state.homeChange?.leash
+ if (homeLeash == null) {
+ ProtoLog.e(
+ ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE,
+ "DragToDesktop: home leash is null",
+ )
+ } else {
+ // Hide home on finish to prevent flickering when wallpaper activity flag is enabled
+ finishTransaction.hide(homeLeash)
+ }
// Setup freeform tasks before animation
state.freeformTaskChanges.forEach { change ->
val startScale = FREEFORM_TASKS_INITIAL_SCALE
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandlerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandlerTest.kt
index 33dc1aadf548..25246d9984c3 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandlerTest.kt
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandlerTest.kt
@@ -477,6 +477,40 @@ class DragToDesktopTransitionHandlerTest : ShellTestCase() {
}
@Test
+ fun mergeAnimation_endTransition_springHandler_noStartHomeChange_doesntCrash() {
+ whenever(dragAnimator.computeCurrentVelocity()).thenReturn(PointF())
+ val playingFinishTransaction = mock<SurfaceControl.Transaction>()
+ val mergedStartTransaction = mock<SurfaceControl.Transaction>()
+ val mergedFinishTransaction = mock<SurfaceControl.Transaction>()
+ val finishCallback = mock<Transitions.TransitionFinishCallback>()
+ val task = createTask()
+ val startTransition = startDrag(
+ springHandler, task, finishTransaction = playingFinishTransaction, homeChange = null)
+ springHandler.onTaskResizeAnimationListener = mock()
+
+ springHandler.mergeAnimation(
+ transition = mock<IBinder>(),
+ info =
+ createTransitionInfo(
+ type = TRANSIT_DESKTOP_MODE_END_DRAG_TO_DESKTOP,
+ draggedTask = task,
+ ),
+ startT = mergedStartTransaction,
+ finishT = mergedFinishTransaction,
+ mergeTarget = startTransition,
+ finishCallback = finishCallback,
+ )
+
+ // Should show dragged task layer in start and finish transaction
+ verify(mergedStartTransaction).show(draggedTaskLeash)
+ verify(playingFinishTransaction).show(draggedTaskLeash)
+ // Should update the dragged task layer
+ verify(mergedStartTransaction).setLayer(eq(draggedTaskLeash), anyInt())
+ // Should merge animation
+ verify(finishCallback).onTransitionFinished(null)
+ }
+
+ @Test
fun propertyValue_returnsSystemPropertyValue() {
val name = "property_name"
val value = 10f
@@ -589,6 +623,7 @@ class DragToDesktopTransitionHandlerTest : ShellTestCase() {
handler: DragToDesktopTransitionHandler,
task: RunningTaskInfo = createTask(),
finishTransaction: SurfaceControl.Transaction = mock(),
+ homeChange: TransitionInfo.Change? = createHomeChange(),
): IBinder {
whenever(dragAnimator.position).thenReturn(PointF())
// Simulate transition is started and is ready to animate.
@@ -599,6 +634,7 @@ class DragToDesktopTransitionHandlerTest : ShellTestCase() {
createTransitionInfo(
type = TRANSIT_DESKTOP_MODE_START_DRAG_TO_DESKTOP,
draggedTask = task,
+ homeChange = homeChange,
),
startTransaction = mock(),
finishTransaction = finishTransaction,
@@ -684,16 +720,12 @@ class DragToDesktopTransitionHandlerTest : ShellTestCase() {
}
}
- private fun createTransitionInfo(type: Int, draggedTask: RunningTaskInfo) =
+ private fun createTransitionInfo(
+ type: Int,
+ draggedTask: RunningTaskInfo,
+ homeChange: TransitionInfo.Change? = createHomeChange()) =
TransitionInfo(type, /* flags= */ 0).apply {
- addChange( // Home.
- TransitionInfo.Change(mock(), homeTaskLeash).apply {
- parent = null
- taskInfo =
- TestRunningTaskInfoBuilder().setActivityType(ACTIVITY_TYPE_HOME).build()
- flags = flags or FLAG_IS_WALLPAPER
- }
- )
+ homeChange?.let { addChange(it) }
addChange( // Dragged Task.
TransitionInfo.Change(mock(), draggedTaskLeash).apply {
parent = null
@@ -709,6 +741,12 @@ class DragToDesktopTransitionHandlerTest : ShellTestCase() {
)
}
+ private fun createHomeChange() = TransitionInfo.Change(mock(), homeTaskLeash).apply {
+ parent = null
+ taskInfo = TestRunningTaskInfoBuilder().setActivityType(ACTIVITY_TYPE_HOME).build()
+ flags = flags or FLAG_IS_WALLPAPER
+ }
+
private fun systemPropertiesKey(name: String) =
"${SpringDragToDesktopTransitionHandler.SYSTEM_PROPERTIES_GROUP}.$name"
}