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

Commit 9b4300a9 authored by Ivan Tkachenko's avatar Ivan Tkachenko
Browse files

Fix failing tests with desktop wallpaper flag enabled

- Fixed failing tests in  `DesktopTasksControllerTest`
- Tested with and without `enable_desktop_windowing_wallpaper_activity` flag

Bug: 348657161
Test: atest WMShellUnitTests:DesktopTasksControllerTest
Flag: com.android.window.flags.enable_desktop_windowing_wallpaper_activity
Change-Id: I10ec810abe7d9ccef89f2abf4fd37a3cfef47ebe
parent 8e6236d7
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -975,7 +975,7 @@ class DesktopTasksController(
        if (!desktopModeTaskRepository.isDesktopModeShowing(task.displayId)) {
            KtProtoLog.d(
                WM_SHELL_DESKTOP_MODE,
                "DesktopTasksController: switch freeform task to fullscreen oon transition" +
                "DesktopTasksController: bring desktop tasks to front on transition" +
                    " taskId=%d",
                task.taskId
            )
+158 −22
Original line number Diff line number Diff line
@@ -439,14 +439,15 @@ class DesktopTasksControllerTest : ShellTestCase() {
  }

  @Test
  fun showDesktopApps_dontReorderMinimizedTask() {
  @DisableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY)
  fun showDesktopApps_desktopWallpaperDisabled_dontReorderMinimizedTask() {
    val homeTask = setUpHomeTask()
    val freeformTask = setUpFreeformTask()
    val minimizedTask = setUpFreeformTask()

    markTaskHidden(freeformTask)
    markTaskHidden(minimizedTask)
    desktopModeTaskRepository.minimizeTask(DEFAULT_DISPLAY, minimizedTask.taskId)

    controller.showDesktopApps(DEFAULT_DISPLAY, RemoteTransition(TestRemoteTransition()))

    val wct = getLatestWct(type = TRANSIT_TO_FRONT, handlerClass = OneShotRemoteHandler::class.java)
@@ -456,6 +457,26 @@ class DesktopTasksControllerTest : ShellTestCase() {
    wct.assertReorderAt(index = 1, freeformTask, toTop = true)
  }

  @Test
  @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY)
  fun showDesktopApps_desktopWallpaperEnabled_dontReorderMinimizedTask() {
    setUpHomeTask()
    val freeformTask = setUpFreeformTask()
    val minimizedTask = setUpFreeformTask()

    markTaskHidden(freeformTask)
    markTaskHidden(minimizedTask)
    desktopModeTaskRepository.minimizeTask(DEFAULT_DISPLAY, minimizedTask.taskId)
    controller.showDesktopApps(DEFAULT_DISPLAY, RemoteTransition(TestRemoteTransition()))

    val wct = getLatestWct(type = TRANSIT_TO_FRONT, handlerClass = OneShotRemoteHandler::class.java)
    assertThat(wct.hierarchyOps).hasSize(2)
    // Add desktop wallpaper activity
    wct.assertPendingIntentAt(index = 0, desktopWallpaperIntent)
    // Reorder freeform task to top, don't reorder the minimized task
    wct.assertReorderAt(index = 1, freeformTask, toTop = true)
  }

  @Test
  fun getVisibleTaskCount_noTasks_returnsZero() {
    assertThat(controller.getVisibleTaskCount(DEFAULT_DISPLAY)).isEqualTo(0)
@@ -645,16 +666,33 @@ class DesktopTasksControllerTest : ShellTestCase() {
  }

  @Test
  fun moveToDesktop_nonRunningTask_launchesInFreeform() {
  @DisableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY)
  fun moveToDesktop_desktopWallpaperDisabled_nonRunningTask_launchesInFreeform() {
    val task = createTaskInfo(1)
    whenever(shellTaskOrganizer.getRunningTaskInfo(anyInt())).thenReturn(null)
    whenever(recentTasksController.findTaskInBackground(anyInt())).thenReturn(task)

    val task = createTaskInfo(1)
    controller.moveToDesktop(task.taskId, transitionSource = UNKNOWN)

    with(getLatestEnterDesktopWct()) {
      assertLaunchTaskAt(0, task.taskId, WINDOWING_MODE_FREEFORM)
    }
  }

  @Test
  @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY)
  fun moveToDesktop_desktopWallpaperEnabled_nonRunningTask_launchesInFreeform() {
    val task = createTaskInfo(1)
    whenever(shellTaskOrganizer.getRunningTaskInfo(anyInt())).thenReturn(null)
    whenever(recentTasksController.findTaskInBackground(anyInt())).thenReturn(task)

    controller.moveToDesktop(task.taskId, transitionSource = UNKNOWN)

    with(getLatestEnterDesktopWct()) {
      assertLaunchTaskAt(0, task.taskId, WINDOWING_MODE_FREEFORM)
      // Add desktop wallpaper activity
      assertPendingIntentAt(index = 0, desktopWallpaperIntent)
      // Launch task
      assertLaunchTaskAt(index = 1, task.taskId, WINDOWING_MODE_FREEFORM)
    }
  }

@@ -776,21 +814,44 @@ class DesktopTasksControllerTest : ShellTestCase() {
  }

  @Test
  fun moveToDesktop_bringsTasksOverLimit_dontShowBackTask() {
  @DisableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY)
  fun moveToDesktop_desktopWallpaperDisabled_bringsTasksOver_dontShowBackTask() {
    val taskLimit = desktopTasksLimiter.getMaxTaskLimit()
    val homeTask = setUpHomeTask()
    val freeformTasks = (1..taskLimit).map { _ -> setUpFreeformTask() }
    val newTask = setUpFullscreenTask()
    val homeTask = setUpHomeTask()

    controller.moveToDesktop(newTask, transitionSource = UNKNOWN)

    val wct = getLatestEnterDesktopWct()
    assertThat(wct.hierarchyOps.size).isEqualTo(taskLimit + 1) // visible tasks + home
    wct.assertReorderAt(0, homeTask)
    for (i in 1..<taskLimit) { // Skipping freeformTasks[0]
      wct.assertReorderAt(index = i, task = freeformTasks[i])
    wct.assertReorderSequenceInRange(
      range = 1..<(taskLimit + 1),
      *freeformTasks.drop(1).toTypedArray(), // Skipping freeformTasks[0]
      newTask
    )
  }
    wct.assertReorderAt(taskLimit, newTask)

  @Test
  @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY)
  fun moveToDesktop_desktopWallpaperEnabled_bringsTasksOverLimit_dontShowBackTask() {
    val taskLimit = desktopTasksLimiter.getMaxTaskLimit()
    val freeformTasks = (1..taskLimit).map { _ -> setUpFreeformTask() }
    val newTask = setUpFullscreenTask()
    setUpHomeTask()

    controller.moveToDesktop(newTask, transitionSource = UNKNOWN)

    val wct = getLatestEnterDesktopWct()
    assertThat(wct.hierarchyOps.size).isEqualTo(taskLimit + 1) // visible tasks + wallpaper
    // Add desktop wallpaper activity
    wct.assertPendingIntentAt(0, desktopWallpaperIntent)
    wct.assertReorderSequenceInRange(
      range = 1..<(taskLimit + 1),
      *freeformTasks.drop(1).toTypedArray(), // Skipping freeformTasks[0]
      newTask
    )
  }

  @Test
@@ -1109,41 +1170,106 @@ class DesktopTasksControllerTest : ShellTestCase() {
  }

  @Test
  fun handleRequest_freeformTask_freeformNotVisible_reorderedToTop() {
  @DisableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY)
  fun handleRequest_freeformTask_desktopWallpaperDisabled_freeformNotVisible_reorderedToTop() {
    assumeTrue(ENABLE_SHELL_TRANSITIONS)

    val freeformTask1 = setUpFreeformTask()
    val freeformTask2 = createFreeformTask()

    markTaskHidden(freeformTask1)
    val result =
        controller.handleRequest(Binder(), createTransition(freeformTask2, type = TRANSIT_TO_FRONT))

    assertNotNull(result, "Should handle request")
    assertThat(result.hierarchyOps?.size).isEqualTo(2)
    result.assertReorderAt(1, freeformTask2, toTop = true)
  }

  @Test
  @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY)
  fun handleRequest_freeformTask_desktopWallpaperEnabled_freeformNotVisible_reorderedToTop() {
    assumeTrue(ENABLE_SHELL_TRANSITIONS)

    val freeformTask1 = setUpFreeformTask()
    val freeformTask2 = createFreeformTask()

    markTaskHidden(freeformTask1)
    val result =
      controller.handleRequest(Binder(), createTransition(freeformTask2, type = TRANSIT_TO_FRONT))

    assertThat(result?.hierarchyOps?.size).isEqualTo(2)
    result!!.assertReorderAt(1, freeformTask2, toTop = true)
    assertNotNull(result, "Should handle request")
    assertThat(result.hierarchyOps?.size).isEqualTo(3)
    // Add desktop wallpaper activity
    result.assertPendingIntentAt(0, desktopWallpaperIntent)
    // Bring active desktop tasks to front
    result.assertReorderAt(1, freeformTask1, toTop = true)
    // Bring new task to front
    result.assertReorderAt(2, freeformTask2, toTop = true)
  }

  @Test
  fun handleRequest_freeformTask_noOtherTasks_reorderedToTop() {
  @DisableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY)
  fun handleRequest_freeformTask_desktopWallpaperDisabled_noOtherTasks_reorderedToTop() {
    assumeTrue(ENABLE_SHELL_TRANSITIONS)

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

    assertThat(result?.hierarchyOps?.size).isEqualTo(1)
    result!!.assertReorderAt(0, task, toTop = true)
    assertNotNull(result, "Should handle request")
    assertThat(result.hierarchyOps?.size).isEqualTo(1)
    result.assertReorderAt(0, task, toTop = true)
  }

  @Test
  fun handleRequest_freeformTask_freeformOnOtherDisplayOnly_reorderedToTop() {
  @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY)
  fun handleRequest_freeformTask_desktopWallpaperEnabled_noOtherTasks_reorderedToTop() {
    assumeTrue(ENABLE_SHELL_TRANSITIONS)

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

    assertNotNull(result, "Should handle request")
    assertThat(result.hierarchyOps?.size).isEqualTo(2)
    // Add desktop wallpaper activity
    result.assertPendingIntentAt(0, desktopWallpaperIntent)
    // Bring new task to front
    result.assertReorderAt(1, task, toTop = true)
  }

  @Test
  @DisableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY)
  fun handleRequest_freeformTask_dskWallpaperDisabled_freeformOnOtherDisplayOnly_reorderedToTop() {
    assumeTrue(ENABLE_SHELL_TRANSITIONS)

    val taskDefaultDisplay = createFreeformTask(displayId = DEFAULT_DISPLAY)
    // Second display task
    createFreeformTask(displayId = SECOND_DISPLAY)

    val result = controller.handleRequest(Binder(), createTransition(taskDefaultDisplay))

    assertNotNull(result, "Should handle request")
    assertThat(result.hierarchyOps?.size).isEqualTo(1)
    result.assertReorderAt(0, taskDefaultDisplay, toTop = true)
  }

  @Test
  @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY)
  fun handleRequest_freeformTask_dskWallpaperEnabled_freeformOnOtherDisplayOnly_reorderedToTop() {
    assumeTrue(ENABLE_SHELL_TRANSITIONS)

    val taskDefaultDisplay = createFreeformTask(displayId = DEFAULT_DISPLAY)
    val taskSecondDisplay = createFreeformTask(displayId = SECOND_DISPLAY)
    // Second display task
    createFreeformTask(displayId = SECOND_DISPLAY)

    val result = controller.handleRequest(Binder(), createTransition(taskDefaultDisplay))
    assertThat(result?.hierarchyOps?.size).isEqualTo(1)
    result!!.assertReorderAt(0, taskDefaultDisplay, toTop = true)

    assertNotNull(result, "Should handle request")
    assertThat(result.hierarchyOps?.size).isEqualTo(2)
    // Add desktop wallpaper activity
    result.assertPendingIntentAt(0, desktopWallpaperIntent)
    // Bring new task to front
    result.assertReorderAt(1, taskDefaultDisplay, toTop = true)
  }

  @Test
@@ -2041,6 +2167,16 @@ private fun WindowContainerTransaction.assertReorderSequence(vararg tasks: Runni
  }
}

/** Checks if the reorder hierarchy operations in [range] correspond to [tasks] list */
private fun WindowContainerTransaction.assertReorderSequenceInRange(
  range: IntRange,
  vararg tasks: RunningTaskInfo
) {
  assertThat(hierarchyOps.slice(range).map { it.type to it.container })
    .containsExactlyElementsIn(tasks.map { HIERARCHY_OP_TYPE_REORDER to it.token.asBinder() })
    .inOrder()
}

private fun WindowContainerTransaction.assertRemoveAt(index: Int, token: WindowContainerToken) {
  assertIndexInBounds(index)
  val op = hierarchyOps[index]