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

Commit b36305a7 authored by mattsziklay's avatar mattsziklay
Browse files

Add tests for Desktop Multi Instance features.

Adds tests for Intents launched via New Window and Manage Windows
options in the Desktop Handle Menu.

Bug: 336289597
Test: atest
Flag: com.android.window.flags.enable_desktop_windowing_multi_instance_features
Change-Id: Ie2beab9e2205b2e7e48c3b048ea916b5804d5b1d
parent dcbe9fbb
Loading
Loading
Loading
Loading
+103 −0
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ import android.graphics.Point
import android.graphics.PointF
import android.graphics.Rect
import android.os.Binder
import android.os.Bundle
import android.os.Handler
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
@@ -2936,6 +2937,108 @@ class DesktopTasksControllerTest : ShellTestCase() {
    assertThat(wctArgument.value.hierarchyOps).isEmpty()
  }

  @Test
  @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MULTI_INSTANCE_FEATURES)
  fun newWindow_fromFullscreenOpensInSplit() {
    setUpLandscapeDisplay()
    val task = setUpFullscreenTask()
    val optionsCaptor = ArgumentCaptor.forClass(Bundle::class.java)
    runOpenNewWindow(task)
    verify(splitScreenController)
      .startIntent(any(), anyInt(), any(), any(),
        optionsCaptor.capture(), anyOrNull())
    assertThat(ActivityOptions.fromBundle(optionsCaptor.value).launchWindowingMode)
      .isEqualTo(WINDOWING_MODE_MULTI_WINDOW)
  }

  @Test
  @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MULTI_INSTANCE_FEATURES)
  fun newWindow_fromSplitOpensInSplit() {
    setUpLandscapeDisplay()
    val task = setUpSplitScreenTask()
    val optionsCaptor = ArgumentCaptor.forClass(Bundle::class.java)
    runOpenNewWindow(task)
    verify(splitScreenController)
      .startIntent(
        any(), anyInt(), any(), any(),
        optionsCaptor.capture(), anyOrNull()
      )
    assertThat(ActivityOptions.fromBundle(optionsCaptor.value).launchWindowingMode)
      .isEqualTo(WINDOWING_MODE_MULTI_WINDOW)
  }

  @Test
  @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MULTI_INSTANCE_FEATURES)
  fun newWindow_fromFreeformAddsNewWindow() {
    setUpLandscapeDisplay()
    val task = setUpFreeformTask()
    val wctCaptor = ArgumentCaptor.forClass(WindowContainerTransaction::class.java)
    runOpenNewWindow(task)
    verify(transitions).startTransition(anyInt(), wctCaptor.capture(), anyOrNull())
    assertThat(ActivityOptions.fromBundle(wctCaptor.value.hierarchyOps[0].launchOptions)
      .launchWindowingMode).isEqualTo(WINDOWING_MODE_FREEFORM)
  }

  private fun runOpenNewWindow(task: RunningTaskInfo) {
    markTaskVisible(task)
    task.baseActivity = mock(ComponentName::class.java)
    task.isFocused = true
    runningTasks.add(task)
    controller.openNewWindow(task)
  }

  @Test
  @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MULTI_INSTANCE_FEATURES)
  fun openInstance_fromFullscreenOpensInSplit() {
    setUpLandscapeDisplay()
    val task = setUpFullscreenTask()
    val taskToRequest = setUpFreeformTask()
    val optionsCaptor = ArgumentCaptor.forClass(Bundle::class.java)
    runOpenInstance(task, taskToRequest.taskId)
    verify(splitScreenController)
      .startTask(anyInt(), anyInt(), optionsCaptor.capture(), anyOrNull())
    assertThat(ActivityOptions.fromBundle(optionsCaptor.value).launchWindowingMode)
      .isEqualTo(WINDOWING_MODE_MULTI_WINDOW)
  }

  @Test
  @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MULTI_INSTANCE_FEATURES)
  fun openInstance_fromSplitOpensInSplit() {
    setUpLandscapeDisplay()
    val task = setUpSplitScreenTask()
    val taskToRequest = setUpFreeformTask()
    val optionsCaptor = ArgumentCaptor.forClass(Bundle::class.java)
    runOpenInstance(task, taskToRequest.taskId)
    verify(splitScreenController)
      .startTask(anyInt(), anyInt(), optionsCaptor.capture(), anyOrNull())
    assertThat(ActivityOptions.fromBundle(optionsCaptor.value).launchWindowingMode)
      .isEqualTo(WINDOWING_MODE_MULTI_WINDOW)
  }

  @Test
  @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MULTI_INSTANCE_FEATURES)
  fun openInstance_fromFreeformAddsNewWindow() {
    setUpLandscapeDisplay()
    val task = setUpFreeformTask()
    val taskToRequest = setUpFreeformTask()
    val wctCaptor = ArgumentCaptor.forClass(WindowContainerTransaction::class.java)
    runOpenInstance(task, taskToRequest.taskId)
    verify(transitions).startTransition(anyInt(), wctCaptor.capture(), anyOrNull())
    assertThat(ActivityOptions.fromBundle(wctCaptor.value.hierarchyOps[0].launchOptions)
      .launchWindowingMode).isEqualTo(WINDOWING_MODE_FREEFORM)
  }

  private fun runOpenInstance(
    callingTask: RunningTaskInfo,
    requestedTaskId: Int
  ) {
    markTaskVisible(callingTask)
    callingTask.baseActivity = mock(ComponentName::class.java)
    callingTask.isFocused = true
    runningTasks.add(callingTask)
    controller.openInstance(callingTask, requestedTaskId)
  }

  @Test
  fun toggleBounds_togglesToStableBounds() {
    val bounds = Rect(0, 0, 100, 100)