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

Commit f4c52eab authored by Graciela Putri's avatar Graciela Putri Committed by Android (Google) Code Review
Browse files

Merge "Cascade freeform tasks if not visible" into main

parents 49e8ac3e 98384602
Loading
Loading
Loading
Loading
+26 −11
Original line number Diff line number Diff line
@@ -1045,6 +1045,17 @@ class DesktopTasksController(
            wct.reorder(task.token, true)
            return wct
        }
        // If task is already visible, it must have been handled already and added to desktop mode.
        // Cascade task only if it's not visible yet.
        if (DesktopModeFlags.CASCADING_WINDOWS.isEnabled(context)
                && !taskRepository.isVisibleTask(task.taskId)) {
            val displayLayout = displayController.getDisplayLayout(task.displayId)
            if (displayLayout != null) {
                val initialBounds = Rect(task.configuration.windowConfiguration.bounds)
                cascadeWindow(task, initialBounds, displayLayout)
                wct.setBounds(task.token, initialBounds)
            }
        }
        if (useDesktopOverrideDensity()) {
            wct.setDensityDpi(task.token, DESKTOP_DENSITY_OVERRIDE)
        }
@@ -1134,18 +1145,9 @@ class DesktopTasksController(
        }

        if (DesktopModeFlags.CASCADING_WINDOWS.isEnabled(context)) {
            val stableBounds = Rect()
            displayLayout.getStableBoundsForDesktopMode(stableBounds)

            val activeTasks = taskRepository
                .getActiveNonMinimizedOrderedTasks(taskInfo.displayId)
            activeTasks.firstOrNull()?.let { activeTask ->
                shellTaskOrganizer.getRunningTaskInfo(activeTask)?.let {
                    cascadeWindow(context.resources, stableBounds,
                        it.configuration.windowConfiguration.bounds, initialBounds)
                }
            }
            cascadeWindow(taskInfo, initialBounds, displayLayout)
        }

        if (canChangeTaskPosition(taskInfo)) {
            wct.setBounds(taskInfo.token, initialBounds)
        }
@@ -1180,6 +1182,19 @@ class DesktopTasksController(
        }
    }

    private fun cascadeWindow(task: TaskInfo, bounds: Rect, displayLayout: DisplayLayout) {
        val stableBounds = Rect()
        displayLayout.getStableBoundsForDesktopMode(stableBounds)

        val activeTasks = taskRepository.getActiveNonMinimizedOrderedTasks(task.displayId)
        activeTasks.firstOrNull()?.let { activeTask ->
            shellTaskOrganizer.getRunningTaskInfo(activeTask)?.let {
                cascadeWindow(context.resources, stableBounds,
                    it.configuration.windowConfiguration.bounds, bounds)
            }
        }
    }

    /**
     * Adds split screen changes to a transaction. Note that bounds are not reset here due to
     * animation; see {@link onDesktopSplitSelectAnimComplete}
+41 −3
Original line number Diff line number Diff line
@@ -639,6 +639,41 @@ class DesktopTasksControllerTest : ShellTestCase() {
    assertThat(finalBounds).isEqualTo(Rect())
  }

  @Test
  @EnableFlags(Flags.FLAG_ENABLE_CASCADING_WINDOWS)
  fun handleRequest_newFreeformTaskLaunch_cascadeApplied() {
    assumeTrue(ENABLE_SHELL_TRANSITIONS)
    setUpLandscapeDisplay()
    val stableBounds = Rect()
    displayLayout.getStableBoundsForDesktopMode(stableBounds)

    setUpFreeformTask(bounds = DEFAULT_LANDSCAPE_BOUNDS)
    val freeformTask = setUpFreeformTask(bounds = DEFAULT_LANDSCAPE_BOUNDS, active = false)

    val wct = controller.handleRequest(Binder(), createTransition(freeformTask))

    assertNotNull(wct, "should handle request")
    val finalBounds = findBoundsChange(wct, freeformTask)
    assertThat(stableBounds.getDesktopTaskPosition(finalBounds!!))
      .isEqualTo(DesktopTaskPosition.BottomRight)
  }

  @Test
  @EnableFlags(Flags.FLAG_ENABLE_CASCADING_WINDOWS)
  fun handleRequest_freeformTaskAlreadyExistsInDesktopMode_cascadeNotApplied() {
    assumeTrue(ENABLE_SHELL_TRANSITIONS)
    setUpLandscapeDisplay()
    val stableBounds = Rect()
    displayLayout.getStableBoundsForDesktopMode(stableBounds)

    setUpFreeformTask(bounds = DEFAULT_LANDSCAPE_BOUNDS)
    val freeformTask = setUpFreeformTask(bounds = DEFAULT_LANDSCAPE_BOUNDS)

    val wct = controller.handleRequest(Binder(), createTransition(freeformTask))

    assertNull(wct, "should not handle request")
  }

  @Test
  @EnableFlags(Flags.FLAG_ENABLE_CASCADING_WINDOWS)
  fun addMoveToDesktopChanges_positionBottomRight() {
@@ -2816,14 +2851,17 @@ class DesktopTasksControllerTest : ShellTestCase() {

  private fun setUpFreeformTask(
      displayId: Int = DEFAULT_DISPLAY,
      bounds: Rect? = null
      bounds: Rect? = null,
      active: Boolean = true
  ): RunningTaskInfo {
    val task = createFreeformTask(displayId, bounds)
    val activityInfo = ActivityInfo()
    task.topActivityInfo = activityInfo
    whenever(shellTaskOrganizer.getRunningTaskInfo(task.taskId)).thenReturn(task)
    if (active) {
      taskRepository.addActiveTask(displayId, task.taskId)
      taskRepository.updateTaskVisibility(displayId, task.taskId, visible = true)
    }
    taskRepository.addOrMoveFreeformTaskToTop(displayId, task.taskId)
    runningTasks.add(task)
    return task