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

Commit 34b535c7 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Don't wait for thumbnails to update if updatedThumbnails are empty" into main

parents 9e3fbf16 8b692c35
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -24,7 +24,7 @@ import kotlinx.coroutines.flow.first

class RecentsViewModel(
    private val recentsTasksRepository: RecentTasksRepository,
    private val recentsViewData: RecentsViewData
    private val recentsViewData: RecentsViewData,
) {
    fun refreshAllTaskData() {
        recentsTasksRepository.getAllTaskData(true)
@@ -58,7 +58,8 @@ class RecentsViewModel(
        recentsViewData.thumbnailSplashProgress.value = taskThumbnailSplashAlpha
    }

    suspend fun waitForThumbnailsToUpdate(updatedThumbnails: Map<Int, ThumbnailData>) {
    suspend fun waitForThumbnailsToUpdate(updatedThumbnails: Map<Int, ThumbnailData>?) {
        if (updatedThumbnails.isNullOrEmpty()) return
        combine(
                updatedThumbnails.map {
                    recentsTasksRepository.getThumbnailById(it.key).filter { thumbnailData ->
+1 −3
Original line number Diff line number Diff line
@@ -49,9 +49,7 @@ class RecentsViewModelHelper(private val recentsViewModel: RecentsViewModel) {
        recentsViewModel.setRunningTaskShowScreenshot(true)
        viewAttachedScope.launch {
            recentsViewModel.waitForRunningTaskShowScreenshotToUpdate()
            if (updatedThumbnails != null) {
            recentsViewModel.waitForThumbnailsToUpdate(updatedThumbnails)
            }
            ViewUtils.postFrameDrawn(taskView, onFinishRunnable)
        }
    }
+49 −0
Original line number Diff line number Diff line
@@ -70,6 +70,55 @@ class RecentsViewModelTest {
        assertThat(thumbnailDataFlow2.first()).isNull()
    }

    @Test
    fun updatesRunningTaskShowScreenshot() = runTest {
        systemUnderTest.setRunningTaskShowScreenshot(true)
        systemUnderTest.waitForRunningTaskShowScreenshotToUpdate()
    }

    @Test
    fun waitForThumbnailsToUpdate() = runTest {
        // Given taskRepository with visible 2 tasks containing thumbnailData
        val thumbnailData1 = createThumbnailData().apply { snapshotId = 1 }
        val thumbnailData2 = createThumbnailData().apply { snapshotId = 2 }
        tasksRepository.seedTasks(tasks)
        tasksRepository.seedThumbnailData(mapOf(1 to thumbnailData1, 2 to thumbnailData2))
        systemUnderTest.updateVisibleTasks(listOf(1, 2))

        val thumbnailDataFlow1 = tasksRepository.getThumbnailById(1)
        val thumbnailDataFlow2 = tasksRepository.getThumbnailById(2)

        // Then getThumbnailById should initially contains correct thumbnailData
        assertThat(thumbnailDataFlow1.first()).isEqualTo(thumbnailData1)
        assertThat(thumbnailDataFlow2.first()).isEqualTo(thumbnailData2)

        // When thumbnailData is updated in taskRepository
        tasksRepository.seedThumbnailData(
            mapOf(1 to thumbnailData1, 2 to createThumbnailData().apply { snapshotId = 3 })
        )
        // setVisibleTasks forces FakeTasksRepository to update the flows returned by
        // getThumbnailById
        tasksRepository.setVisibleTasks(listOf(1, 2))

        // Then wait for thumbnailData should complete, and the previous getThumbnailById flow
        // should return updated values
        systemUnderTest.waitForThumbnailsToUpdate(
            mapOf(2 to createThumbnailData().apply { snapshotId = 3 })
        )
        assertThat(thumbnailDataFlow1.first()).isEqualTo(thumbnailData1)
        assertThat(thumbnailDataFlow2.first()?.snapshotId).isEqualTo(3)
    }

    @Test
    fun waitForThumbnailsToUpdate_emptyMap() = runTest {
        systemUnderTest.waitForThumbnailsToUpdate(emptyMap())
    }

    @Test
    fun waitForThumbnailsToUpdate_null() = runTest {
        systemUnderTest.waitForThumbnailsToUpdate(null)
    }

    private fun createTaskWithId(taskId: Int) =
        Task(Task.TaskKey(taskId, 0, Intent(), ComponentName("", ""), 0, 2000)).apply {
            colorBackground = Color.argb(taskId, taskId, taskId, taskId)