Loading quickstep/src/com/android/quickstep/recents/data/RecentTasksRepository.kt +6 −0 Original line number Diff line number Diff line Loading @@ -41,4 +41,10 @@ interface RecentTasksRepository { * populated e.g. icons/thumbnails etc. */ fun setVisibleTasks(visibleTaskIdList: List<Int>) /** * Override [ThumbnailData] with a map of taskId to [ThumbnailData]. The override only applies * if the tasks are already visible, and will be invalidated when tasks become invisible. */ fun setThumbnailOverride(thumbnailOverride: Map<Int, ThumbnailData>) } quickstep/src/com/android/quickstep/recents/data/TasksRepository.kt +13 −4 Original line number Diff line number Diff line Loading @@ -45,15 +45,18 @@ class TasksRepository( private val _taskData = groupedTaskData.map { groupTaskList -> groupTaskList.flatMap { it.tasks } } private val visibleTaskIds = MutableStateFlow(emptySet<Int>()) private val thumbnailOverride = MutableStateFlow(mapOf<Int, ThumbnailData>()) private val taskData: Flow<List<Task>> = combine(_taskData, getThumbnailQueryResults(), getIconQueryResults()) { combine(_taskData, getThumbnailQueryResults(), getIconQueryResults(), thumbnailOverride) { tasks, thumbnailQueryResults, iconQueryResults -> iconQueryResults, thumbnailOverride -> tasks.forEach { task -> // Add retrieved thumbnails + remove unnecessary thumbnails task.thumbnail = thumbnailQueryResults[task.key.id] // Add retrieved thumbnails + remove unnecessary thumbnails (e.g. invisible) task.thumbnail = thumbnailOverride[task.key.id] ?: thumbnailQueryResults[task.key.id] // TODO(b/352331675) don't load icons for DesktopTaskView // Add retrieved icons + remove unnecessary icons Loading @@ -79,6 +82,12 @@ class TasksRepository( override fun setVisibleTasks(visibleTaskIdList: List<Int>) { this.visibleTaskIds.value = visibleTaskIdList.toSet() setThumbnailOverride(thumbnailOverride.value) } override fun setThumbnailOverride(thumbnailOverride: Map<Int, ThumbnailData>) { this.thumbnailOverride.value = thumbnailOverride.filterKeys(this.visibleTaskIds.value::contains).toMap() } /** Flow wrapper for [TaskThumbnailDataSource.getThumbnailInBackground] api */ Loading quickstep/src/com/android/quickstep/recents/viewmodel/RecentsViewData.kt +6 −0 Original line number Diff line number Diff line Loading @@ -36,4 +36,10 @@ class RecentsViewData { val tintAmount = MutableStateFlow(0f) val thumbnailSplashProgress = MutableStateFlow(0f) // A list of taskIds that are associated with a RecentsAnimationController. */ val runningTaskIds = MutableStateFlow(emptySet<Int>()) // Whether we should use static screenshot instead of live tile for taskIds in [runningTaskIds] val runningTaskShowScreenshot = MutableStateFlow(false) } quickstep/src/com/android/quickstep/recents/viewmodel/RecentsViewModel.kt +35 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,10 @@ package com.android.quickstep.recents.viewmodel import com.android.quickstep.recents.data.RecentTasksRepository import com.android.systemui.shared.recents.model.ThumbnailData import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.first class RecentsViewModel( private val recentsTasksRepository: RecentTasksRepository, Loading Loading @@ -53,4 +57,35 @@ class RecentsViewModel( fun updateThumbnailSplashProgress(taskThumbnailSplashAlpha: Float) { recentsViewData.thumbnailSplashProgress.value = taskThumbnailSplashAlpha } fun setThumbnailOverride(thumbnailOverride: Map<Int, ThumbnailData>) { recentsTasksRepository.setThumbnailOverride(thumbnailOverride) } suspend fun waitForThumbnailsToUpdate(updatedThumbnails: Map<Int, ThumbnailData>) { combine( updatedThumbnails.map { recentsTasksRepository.getThumbnailById(it.key).filter { thumbnailData -> thumbnailData == it.value } } ) {} .first() } suspend fun waitForRunningTaskShowScreenshotToUpdate() { recentsViewData.runningTaskShowScreenshot.filter { it }.first() } fun onReset() { updateVisibleTasks(emptyList()) } fun updateRunningTask(taskIds: Set<Int>) { recentsViewData.runningTaskIds.value = taskIds } fun setRunningTaskShowScreenshot(showScreenshot: Boolean) { recentsViewData.runningTaskShowScreenshot.value = showScreenshot } } quickstep/src/com/android/quickstep/task/thumbnail/TaskThumbnailUiState.kt +0 −2 Original line number Diff line number Diff line Loading @@ -45,5 +45,3 @@ sealed class TaskThumbnailUiState { val size: Point, ) } data class TaskThumbnail(val taskId: Int, val isRunning: Boolean) Loading
quickstep/src/com/android/quickstep/recents/data/RecentTasksRepository.kt +6 −0 Original line number Diff line number Diff line Loading @@ -41,4 +41,10 @@ interface RecentTasksRepository { * populated e.g. icons/thumbnails etc. */ fun setVisibleTasks(visibleTaskIdList: List<Int>) /** * Override [ThumbnailData] with a map of taskId to [ThumbnailData]. The override only applies * if the tasks are already visible, and will be invalidated when tasks become invisible. */ fun setThumbnailOverride(thumbnailOverride: Map<Int, ThumbnailData>) }
quickstep/src/com/android/quickstep/recents/data/TasksRepository.kt +13 −4 Original line number Diff line number Diff line Loading @@ -45,15 +45,18 @@ class TasksRepository( private val _taskData = groupedTaskData.map { groupTaskList -> groupTaskList.flatMap { it.tasks } } private val visibleTaskIds = MutableStateFlow(emptySet<Int>()) private val thumbnailOverride = MutableStateFlow(mapOf<Int, ThumbnailData>()) private val taskData: Flow<List<Task>> = combine(_taskData, getThumbnailQueryResults(), getIconQueryResults()) { combine(_taskData, getThumbnailQueryResults(), getIconQueryResults(), thumbnailOverride) { tasks, thumbnailQueryResults, iconQueryResults -> iconQueryResults, thumbnailOverride -> tasks.forEach { task -> // Add retrieved thumbnails + remove unnecessary thumbnails task.thumbnail = thumbnailQueryResults[task.key.id] // Add retrieved thumbnails + remove unnecessary thumbnails (e.g. invisible) task.thumbnail = thumbnailOverride[task.key.id] ?: thumbnailQueryResults[task.key.id] // TODO(b/352331675) don't load icons for DesktopTaskView // Add retrieved icons + remove unnecessary icons Loading @@ -79,6 +82,12 @@ class TasksRepository( override fun setVisibleTasks(visibleTaskIdList: List<Int>) { this.visibleTaskIds.value = visibleTaskIdList.toSet() setThumbnailOverride(thumbnailOverride.value) } override fun setThumbnailOverride(thumbnailOverride: Map<Int, ThumbnailData>) { this.thumbnailOverride.value = thumbnailOverride.filterKeys(this.visibleTaskIds.value::contains).toMap() } /** Flow wrapper for [TaskThumbnailDataSource.getThumbnailInBackground] api */ Loading
quickstep/src/com/android/quickstep/recents/viewmodel/RecentsViewData.kt +6 −0 Original line number Diff line number Diff line Loading @@ -36,4 +36,10 @@ class RecentsViewData { val tintAmount = MutableStateFlow(0f) val thumbnailSplashProgress = MutableStateFlow(0f) // A list of taskIds that are associated with a RecentsAnimationController. */ val runningTaskIds = MutableStateFlow(emptySet<Int>()) // Whether we should use static screenshot instead of live tile for taskIds in [runningTaskIds] val runningTaskShowScreenshot = MutableStateFlow(false) }
quickstep/src/com/android/quickstep/recents/viewmodel/RecentsViewModel.kt +35 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,10 @@ package com.android.quickstep.recents.viewmodel import com.android.quickstep.recents.data.RecentTasksRepository import com.android.systemui.shared.recents.model.ThumbnailData import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.first class RecentsViewModel( private val recentsTasksRepository: RecentTasksRepository, Loading Loading @@ -53,4 +57,35 @@ class RecentsViewModel( fun updateThumbnailSplashProgress(taskThumbnailSplashAlpha: Float) { recentsViewData.thumbnailSplashProgress.value = taskThumbnailSplashAlpha } fun setThumbnailOverride(thumbnailOverride: Map<Int, ThumbnailData>) { recentsTasksRepository.setThumbnailOverride(thumbnailOverride) } suspend fun waitForThumbnailsToUpdate(updatedThumbnails: Map<Int, ThumbnailData>) { combine( updatedThumbnails.map { recentsTasksRepository.getThumbnailById(it.key).filter { thumbnailData -> thumbnailData == it.value } } ) {} .first() } suspend fun waitForRunningTaskShowScreenshotToUpdate() { recentsViewData.runningTaskShowScreenshot.filter { it }.first() } fun onReset() { updateVisibleTasks(emptyList()) } fun updateRunningTask(taskIds: Set<Int>) { recentsViewData.runningTaskIds.value = taskIds } fun setRunningTaskShowScreenshot(showScreenshot: Boolean) { recentsViewData.runningTaskShowScreenshot.value = showScreenshot } }
quickstep/src/com/android/quickstep/task/thumbnail/TaskThumbnailUiState.kt +0 −2 Original line number Diff line number Diff line Loading @@ -45,5 +45,3 @@ sealed class TaskThumbnailUiState { val size: Point, ) } data class TaskThumbnail(val taskId: Int, val isRunning: Boolean)