Merge changes from topic "revert_task_content_view" into main

* changes:
  Revert "Add TaskContentView parent to TaskThumbnailViewHeader and TTV"
  Revert "Remove redundant FrameLayout from task_header_view.xml"
This commit is contained in:
Alex Chau
2025-03-21 04:14:36 -07:00
committed by Android (Google) Code Review
30 changed files with 556 additions and 827 deletions
@@ -35,7 +35,6 @@ import com.android.launcher3.util.UserIconInfo
import com.android.quickstep.TaskOverlayFactory
import com.android.quickstep.TaskOverlayFactory.TaskOverlay
import com.android.quickstep.recents.di.RecentsDependencies
import com.android.quickstep.task.thumbnail.TaskContentView
import com.android.quickstep.task.thumbnail.TaskThumbnailView
import com.android.quickstep.views.RecentsView
import com.android.quickstep.views.TaskContainer
@@ -199,7 +198,6 @@ class TaskViewItemInfoTest {
return TaskContainer(
taskView,
task,
mock<TaskContentView>(),
if (enableRefactorTaskThumbnail()) mock<TaskThumbnailView>()
else mock<TaskThumbnailViewDeprecated>(),
mock<TaskViewIcon>(),
@@ -19,120 +19,33 @@ package com.android.quickstep.recents.ui.mapper
import android.graphics.Bitmap
import android.graphics.Color
import android.graphics.drawable.ShapeDrawable
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import android.platform.test.flag.junit.SetFlagsRule
import android.view.Surface
import android.view.View
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.android.launcher3.Flags
import com.android.quickstep.recents.ui.viewmodel.TaskData
import com.android.quickstep.task.thumbnail.TaskHeaderUiState
import com.android.quickstep.task.thumbnail.TaskThumbnailUiState
import com.android.quickstep.task.thumbnail.TaskThumbnailUiState.LiveTile
import com.android.quickstep.task.thumbnail.TaskThumbnailUiState.Snapshot
import com.android.quickstep.task.thumbnail.TaskThumbnailUiState.ThumbnailHeader
import com.android.systemui.shared.recents.model.ThumbnailData
import com.google.common.truth.Truth.assertThat
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
class TaskUiStateMapperTest {
@get:Rule val mSetFlagsRule = SetFlagsRule()
/** TaskHeaderUiState */
@Test
fun taskData_isNull_returns_HideHeader() {
fun taskData_isNull_returns_Uninitialized() {
val result =
TaskUiStateMapper.toTaskHeaderState(
TaskUiStateMapper.toTaskThumbnailUiState(
taskData = null,
isLiveTile = false,
hasHeader = false,
clickCloseListener = null,
)
assertThat(result).isEqualTo(TaskHeaderUiState.HideHeader)
}
@DisableFlags(Flags.FLAG_ENABLE_DESKTOP_EXPLODED_VIEW)
@Test
fun explodedFlagDisabled_returnsHideHeader() {
val inputs =
listOf(
TASK_DATA,
TASK_DATA.copy(thumbnailData = null),
TASK_DATA.copy(isLocked = true),
TASK_DATA.copy(title = null),
)
val closeCallback = View.OnClickListener {}
val expected = TaskHeaderUiState.HideHeader
inputs.forEach { taskData ->
val result =
TaskUiStateMapper.toTaskHeaderState(
taskData = taskData,
hasHeader = true,
clickCloseListener = closeCallback,
)
assertThat(result).isEqualTo(expected)
}
}
@EnableFlags(Flags.FLAG_ENABLE_DESKTOP_EXPLODED_VIEW)
@Test
fun taskData_hasHeader_and_taskData_returnsShowHeader() {
val inputs =
listOf(
TASK_DATA,
TASK_DATA.copy(thumbnailData = null),
TASK_DATA.copy(isLocked = true),
TASK_DATA.copy(title = null),
)
val closeCallback = View.OnClickListener {}
val expected =
TaskHeaderUiState.ShowHeader(
header =
TaskHeaderUiState.ThumbnailHeader(
TASK_ICON,
TASK_TITLE_DESCRIPTION,
closeCallback,
)
)
inputs.forEach { taskData ->
val result =
TaskUiStateMapper.toTaskHeaderState(
taskData = taskData,
hasHeader = true,
clickCloseListener = closeCallback,
)
assertThat(result).isEqualTo(expected)
}
}
@EnableFlags(Flags.FLAG_ENABLE_DESKTOP_EXPLODED_VIEW)
@Test
fun taskData_hasHeader_emptyTaskData_returns_HideHeader() {
val inputs =
listOf(
TASK_DATA.copy(icon = null),
TASK_DATA.copy(titleDescription = null),
TASK_DATA.copy(icon = null, titleDescription = null),
)
inputs.forEach { taskData ->
val result =
TaskUiStateMapper.toTaskHeaderState(
taskData = taskData,
hasHeader = true,
clickCloseListener = {},
)
assertThat(result).isEqualTo(TaskHeaderUiState.HideHeader)
}
}
/** TaskThumbnailUiState */
@Test
fun taskData_isNull_returns_Uninitialized() {
val result = TaskUiStateMapper.toTaskThumbnailUiState(taskData = null, isLiveTile = false)
assertThat(result).isEqualTo(TaskThumbnailUiState.Uninitialized)
}
@@ -142,20 +55,79 @@ class TaskUiStateMapperTest {
listOf(TASK_DATA, TASK_DATA.copy(thumbnailData = null), TASK_DATA.copy(isLocked = true))
inputs.forEach { input ->
val result =
TaskUiStateMapper.toTaskThumbnailUiState(taskData = input, isLiveTile = true)
assertThat(result).isEqualTo(LiveTile)
TaskUiStateMapper.toTaskThumbnailUiState(
taskData = input,
isLiveTile = true,
hasHeader = false,
clickCloseListener = null,
)
assertThat(result).isEqualTo(LiveTile.WithoutHeader)
}
}
@EnableFlags(Flags.FLAG_ENABLE_DESKTOP_EXPLODED_VIEW)
@Test
fun taskData_isLiveTileWithHeader_returns_LiveTileWithHeader() {
val inputs =
listOf(
TASK_DATA,
TASK_DATA.copy(thumbnailData = null),
TASK_DATA.copy(isLocked = true),
TASK_DATA.copy(title = null),
)
val closeCallback = View.OnClickListener {}
val expected =
LiveTile.WithHeader(
header = ThumbnailHeader(TASK_ICON, TASK_TITLE_DESCRIPTION, closeCallback)
)
inputs.forEach { taskData ->
val result =
TaskUiStateMapper.toTaskThumbnailUiState(
taskData = taskData,
isLiveTile = true,
hasHeader = true,
clickCloseListener = closeCallback,
)
assertThat(result).isEqualTo(expected)
}
}
@EnableFlags(Flags.FLAG_ENABLE_DESKTOP_EXPLODED_VIEW)
@Test
fun taskData_isLiveTileWithHeader_missingHeaderData_returns_LiveTileWithoutHeader() {
val inputs =
listOf(
TASK_DATA.copy(icon = null),
TASK_DATA.copy(titleDescription = null),
TASK_DATA.copy(icon = null, titleDescription = null),
)
inputs.forEach { taskData ->
val result =
TaskUiStateMapper.toTaskThumbnailUiState(
taskData = taskData,
isLiveTile = true,
hasHeader = true,
clickCloseListener = {},
)
assertThat(result).isEqualTo(LiveTile.WithoutHeader)
}
}
@Test
fun taskData_isStaticTile_returns_SnapshotSplash() {
val result =
TaskUiStateMapper.toTaskThumbnailUiState(taskData = TASK_DATA, isLiveTile = false)
TaskUiStateMapper.toTaskThumbnailUiState(
taskData = TASK_DATA,
isLiveTile = false,
hasHeader = false,
clickCloseListener = null,
)
val expected =
TaskThumbnailUiState.SnapshotSplash(
snapshot =
Snapshot(
Snapshot.WithoutHeader(
backgroundColor = TASK_BACKGROUND_COLOR,
bitmap = TASK_THUMBNAIL,
thumbnailRotation = Surface.ROTATION_0,
@@ -166,12 +138,72 @@ class TaskUiStateMapperTest {
assertThat(result).isEqualTo(expected)
}
@EnableFlags(Flags.FLAG_ENABLE_DESKTOP_EXPLODED_VIEW)
@Test
fun taskData_isStaticTile_withHeader_returns_SnapshotSplashWithHeader() {
val inputs = listOf(TASK_DATA, TASK_DATA.copy(title = null))
val closeCallback = View.OnClickListener {}
val expected =
TaskThumbnailUiState.SnapshotSplash(
snapshot =
Snapshot.WithHeader(
backgroundColor = TASK_BACKGROUND_COLOR,
bitmap = TASK_THUMBNAIL,
thumbnailRotation = Surface.ROTATION_0,
header = ThumbnailHeader(TASK_ICON, TASK_TITLE_DESCRIPTION, closeCallback),
),
splash = TASK_ICON,
)
inputs.forEach { taskData ->
val result =
TaskUiStateMapper.toTaskThumbnailUiState(
taskData = taskData,
isLiveTile = false,
hasHeader = true,
clickCloseListener = closeCallback,
)
assertThat(result).isEqualTo(expected)
}
}
@EnableFlags(Flags.FLAG_ENABLE_DESKTOP_EXPLODED_VIEW)
@Test
fun taskData_isStaticTile_missingHeaderData_returns_SnapshotSplashWithoutHeader() {
val inputs =
listOf(
TASK_DATA.copy(titleDescription = null, icon = null),
TASK_DATA.copy(titleDescription = null),
TASK_DATA.copy(icon = null),
)
val expected =
Snapshot.WithoutHeader(
backgroundColor = TASK_BACKGROUND_COLOR,
thumbnailRotation = Surface.ROTATION_0,
bitmap = TASK_THUMBNAIL,
)
inputs.forEach { taskData ->
val result =
TaskUiStateMapper.toTaskThumbnailUiState(
taskData = taskData,
isLiveTile = false,
hasHeader = true,
clickCloseListener = {},
)
assertThat(result).isInstanceOf(TaskThumbnailUiState.SnapshotSplash::class.java)
result as TaskThumbnailUiState.SnapshotSplash
assertThat(result.snapshot).isEqualTo(expected)
}
}
@Test
fun taskData_thumbnailIsNull_returns_BackgroundOnly() {
val result =
TaskUiStateMapper.toTaskThumbnailUiState(
taskData = TASK_DATA.copy(thumbnailData = null),
isLiveTile = false,
hasHeader = false,
clickCloseListener = null,
)
val expected = TaskThumbnailUiState.BackgroundOnly(TASK_BACKGROUND_COLOR)
@@ -184,6 +216,8 @@ class TaskUiStateMapperTest {
TaskUiStateMapper.toTaskThumbnailUiState(
taskData = TASK_DATA.copy(isLocked = true),
isLiveTile = false,
hasHeader = false,
clickCloseListener = null,
)
val expected = TaskThumbnailUiState.BackgroundOnly(TASK_BACKGROUND_COLOR)