Loading quickstep/res/layout/task_thumbnail.xml +1 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ <com.android.quickstep.task.thumbnail.TaskThumbnailView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/snapshot" android:layout_width="match_parent" android:layout_height="match_parent" > Loading quickstep/src/com/android/quickstep/recents/data/TasksRepository.kt +9 −3 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.quickstep.recents.data import android.graphics.drawable.Drawable import android.util.Log import com.android.launcher3.util.coroutines.DispatcherProvider import com.android.quickstep.recents.data.TaskVisualsChangedDelegate.TaskIconChangedCallback import com.android.quickstep.recents.data.TaskVisualsChangedDelegate.TaskThumbnailChangedCallback Loading Loading @@ -106,7 +107,7 @@ class TasksRepository( } } .flowOn(dispatcherProvider.io) .shareIn(recentsCoroutineScope, SharingStarted.WhileSubscribed(), replay = 1) .shareIn(recentsCoroutineScope, SharingStarted.WhileSubscribed(5000), replay = 1) override fun getAllTaskData(forceRefresh: Boolean): Flow<List<Task>> { if (forceRefresh) { Loading @@ -122,6 +123,7 @@ class TasksRepository( getTaskDataById(taskId).map { it?.thumbnail }.distinctUntilChangedBy { it?.snapshotId } override fun setVisibleTasks(visibleTaskIdList: List<Int>) { Log.d(TAG, "setVisibleTasks: $visibleTaskIdList") this.visibleTaskIds.value = visibleTaskIdList.toSet() } Loading Loading @@ -185,7 +187,7 @@ class TasksRepository( TaskIconQueryResponse( it.newDrawable().mutate(), contentDescription, title title, ) ) } Loading @@ -193,12 +195,16 @@ class TasksRepository( continuation.invokeOnCancellation { cancellableTask?.cancel() } } } companion object { private const val TAG = "TasksRepository" } } data class TaskIconQueryResponse( val icon: Drawable, val contentDescription: String, val title: String val title: String, ) private fun Task.getTaskIconQueryResponse(): TaskIconQueryResponse? { Loading quickstep/src/com/android/quickstep/recents/di/RecentsDependencies.kt +14 −12 Original line number Diff line number Diff line Loading @@ -66,7 +66,7 @@ class RecentsDependencies private constructor(private val appContext: Context) { val taskVisualsChangedDelegate = TaskVisualsChangedDelegateImpl( recentsModel, recentsModel.thumbnailCache.highResLoadingState recentsModel.thumbnailCache.highResLoadingState, ) set(TaskVisualsChangedDelegate::class.java.simpleName, taskVisualsChangedDelegate) Loading @@ -79,7 +79,7 @@ class RecentsDependencies private constructor(private val appContext: Context) { iconCache, taskVisualsChangedDelegate, recentsCoroutineScope, ProductionDispatchers ProductionDispatchers, ) } set(RecentTasksRepository::class.java.simpleName, recentTasksRepository) Loading Loading @@ -155,7 +155,8 @@ class RecentsDependencies private constructor(private val appContext: Context) { scopeId: RecentsScopeId, extras: RecentsDependenciesExtras, ): T { log("createDependency ${modelClass.simpleName} with $scopeId and $extras", Log.WARN) log("createDependency ${modelClass.simpleName} with $scopeId and $extras started", Log.WARN) log("linked scopes: ${getScope(scopeId).scopeIdsLinked}") val instance: Any = when (modelClass) { RecentTasksRepository::class.java -> { Loading @@ -166,7 +167,7 @@ class RecentsDependencies private constructor(private val appContext: Context) { iconCache, get(), get(), ProductionDispatchers ProductionDispatchers, ) } } Loading @@ -193,7 +194,7 @@ class RecentsDependencies private constructor(private val appContext: Context) { task = task, recentsViewData = inject(), recentTasksRepository = inject(), getThumbnailPositionUseCase = inject() getThumbnailPositionUseCase = inject(), ) } GetThumbnailUseCase::class.java -> GetThumbnailUseCase(taskRepository = inject()) Loading @@ -203,7 +204,7 @@ class RecentsDependencies private constructor(private val appContext: Context) { GetThumbnailPositionUseCase( deviceProfileRepository = inject(), rotationStateRepository = inject(), tasksRepository = inject() tasksRepository = inject(), ) SplashAlphaUseCase::class.java -> SplashAlphaUseCase( Loading @@ -218,7 +219,12 @@ class RecentsDependencies private constructor(private val appContext: Context) { error("Factory for ${modelClass.simpleName} not defined!") } } return instance as T return (instance as T).also { log( "createDependency ${modelClass.simpleName} with $scopeId and $extras completed", Log.WARN, ) } } private fun createScope(scopeId: RecentsScopeId): RecentsDependenciesScope { Loading Loading @@ -247,11 +253,7 @@ class RecentsDependencies private constructor(private val appContext: Context) { fun initialize(view: View): RecentsDependencies = initialize(view.context) fun initialize(context: Context): RecentsDependencies { synchronized(this) { if (!Companion::instance.isInitialized) { instance = RecentsDependencies(context.applicationContext) } } synchronized(this) { instance = RecentsDependencies(context.applicationContext) } return instance } Loading quickstep/src/com/android/quickstep/task/thumbnail/TaskThumbnailView.kt +7 −1 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.graphics.Color import android.graphics.Outline import android.graphics.Rect import android.util.AttributeSet import android.util.Log import android.view.View import android.view.ViewOutlineProvider import androidx.annotation.ColorInt Loading Loading @@ -92,6 +93,7 @@ class TaskThumbnailView : ConstraintLayout, ViewPool.Reusable { CoroutineScope(SupervisorJob() + Dispatchers.Main + CoroutineName("TaskThumbnailView")) viewModel.uiState .onEach { viewModelUiState -> Log.d(TAG, "viewModelUiState changed from $uiState to: $viewModelUiState") uiState = viewModelUiState resetViews() when (viewModelUiState) { Loading Loading @@ -211,6 +213,10 @@ class TaskThumbnailView : ConstraintLayout, ViewPool.Reusable { Utilities.mapRange( viewModel.cornerRadiusProgress.value, overviewCornerRadius, fullscreenCornerRadius fullscreenCornerRadius, ) / inheritedScale private companion object { const val TAG = "TaskThumbnailView" } } quickstep/src/com/android/quickstep/task/viewmodel/TaskThumbnailViewModel.kt +11 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.quickstep.task.viewmodel import android.annotation.ColorInt import android.app.ActivityTaskManager.INVALID_TASK_ID import android.graphics.Matrix import android.util.Log import androidx.core.graphics.ColorUtils import com.android.quickstep.recents.data.RecentTasksRepository import com.android.quickstep.recents.usecase.GetThumbnailPositionUseCase Loading Loading @@ -82,7 +83,7 @@ class TaskThumbnailViewModel( combine( task.flatMapLatest { it }.map { it?.key?.id }.distinctUntilChanged(), recentsViewData.runningTaskIds, recentsViewData.runningTaskShowScreenshot recentsViewData.runningTaskShowScreenshot, ) { taskId, runningTaskIds, runningTaskShowScreenshot -> runningTaskIds.contains(taskId) && !runningTaskShowScreenshot } Loading @@ -90,6 +91,13 @@ class TaskThumbnailViewModel( val uiState: Flow<TaskThumbnailUiState> = combine(task.flatMapLatest { it }, isLiveTile) { taskVal, isRunning -> // TODO(b/369339561) This log is firing a lot. Reduce emissions from TasksRepository // then re-enable this log. // Log.d( // TAG, // "Received task and / or live tile update. taskVal: $taskVal" // + " isRunning: $isRunning.", // ) when { taskVal == null -> Uninitialized isRunning -> LiveTile Loading @@ -103,6 +111,7 @@ class TaskThumbnailViewModel( .distinctUntilChanged() fun bind(taskId: Int) { Log.d(TAG, "bind taskId: $taskId") this.taskId = taskId task.value = tasksRepository.getTaskDataById(taskId) splashProgress.value = splashAlphaUseCase.execute(taskId) Loading Loading @@ -139,5 +148,6 @@ class TaskThumbnailViewModel( private companion object { const val MAX_SCRIM_ALPHA = 0.4f const val TAG = "TaskThumbnailViewModel" } } Loading
quickstep/res/layout/task_thumbnail.xml +1 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ <com.android.quickstep.task.thumbnail.TaskThumbnailView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/snapshot" android:layout_width="match_parent" android:layout_height="match_parent" > Loading
quickstep/src/com/android/quickstep/recents/data/TasksRepository.kt +9 −3 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.quickstep.recents.data import android.graphics.drawable.Drawable import android.util.Log import com.android.launcher3.util.coroutines.DispatcherProvider import com.android.quickstep.recents.data.TaskVisualsChangedDelegate.TaskIconChangedCallback import com.android.quickstep.recents.data.TaskVisualsChangedDelegate.TaskThumbnailChangedCallback Loading Loading @@ -106,7 +107,7 @@ class TasksRepository( } } .flowOn(dispatcherProvider.io) .shareIn(recentsCoroutineScope, SharingStarted.WhileSubscribed(), replay = 1) .shareIn(recentsCoroutineScope, SharingStarted.WhileSubscribed(5000), replay = 1) override fun getAllTaskData(forceRefresh: Boolean): Flow<List<Task>> { if (forceRefresh) { Loading @@ -122,6 +123,7 @@ class TasksRepository( getTaskDataById(taskId).map { it?.thumbnail }.distinctUntilChangedBy { it?.snapshotId } override fun setVisibleTasks(visibleTaskIdList: List<Int>) { Log.d(TAG, "setVisibleTasks: $visibleTaskIdList") this.visibleTaskIds.value = visibleTaskIdList.toSet() } Loading Loading @@ -185,7 +187,7 @@ class TasksRepository( TaskIconQueryResponse( it.newDrawable().mutate(), contentDescription, title title, ) ) } Loading @@ -193,12 +195,16 @@ class TasksRepository( continuation.invokeOnCancellation { cancellableTask?.cancel() } } } companion object { private const val TAG = "TasksRepository" } } data class TaskIconQueryResponse( val icon: Drawable, val contentDescription: String, val title: String val title: String, ) private fun Task.getTaskIconQueryResponse(): TaskIconQueryResponse? { Loading
quickstep/src/com/android/quickstep/recents/di/RecentsDependencies.kt +14 −12 Original line number Diff line number Diff line Loading @@ -66,7 +66,7 @@ class RecentsDependencies private constructor(private val appContext: Context) { val taskVisualsChangedDelegate = TaskVisualsChangedDelegateImpl( recentsModel, recentsModel.thumbnailCache.highResLoadingState recentsModel.thumbnailCache.highResLoadingState, ) set(TaskVisualsChangedDelegate::class.java.simpleName, taskVisualsChangedDelegate) Loading @@ -79,7 +79,7 @@ class RecentsDependencies private constructor(private val appContext: Context) { iconCache, taskVisualsChangedDelegate, recentsCoroutineScope, ProductionDispatchers ProductionDispatchers, ) } set(RecentTasksRepository::class.java.simpleName, recentTasksRepository) Loading Loading @@ -155,7 +155,8 @@ class RecentsDependencies private constructor(private val appContext: Context) { scopeId: RecentsScopeId, extras: RecentsDependenciesExtras, ): T { log("createDependency ${modelClass.simpleName} with $scopeId and $extras", Log.WARN) log("createDependency ${modelClass.simpleName} with $scopeId and $extras started", Log.WARN) log("linked scopes: ${getScope(scopeId).scopeIdsLinked}") val instance: Any = when (modelClass) { RecentTasksRepository::class.java -> { Loading @@ -166,7 +167,7 @@ class RecentsDependencies private constructor(private val appContext: Context) { iconCache, get(), get(), ProductionDispatchers ProductionDispatchers, ) } } Loading @@ -193,7 +194,7 @@ class RecentsDependencies private constructor(private val appContext: Context) { task = task, recentsViewData = inject(), recentTasksRepository = inject(), getThumbnailPositionUseCase = inject() getThumbnailPositionUseCase = inject(), ) } GetThumbnailUseCase::class.java -> GetThumbnailUseCase(taskRepository = inject()) Loading @@ -203,7 +204,7 @@ class RecentsDependencies private constructor(private val appContext: Context) { GetThumbnailPositionUseCase( deviceProfileRepository = inject(), rotationStateRepository = inject(), tasksRepository = inject() tasksRepository = inject(), ) SplashAlphaUseCase::class.java -> SplashAlphaUseCase( Loading @@ -218,7 +219,12 @@ class RecentsDependencies private constructor(private val appContext: Context) { error("Factory for ${modelClass.simpleName} not defined!") } } return instance as T return (instance as T).also { log( "createDependency ${modelClass.simpleName} with $scopeId and $extras completed", Log.WARN, ) } } private fun createScope(scopeId: RecentsScopeId): RecentsDependenciesScope { Loading Loading @@ -247,11 +253,7 @@ class RecentsDependencies private constructor(private val appContext: Context) { fun initialize(view: View): RecentsDependencies = initialize(view.context) fun initialize(context: Context): RecentsDependencies { synchronized(this) { if (!Companion::instance.isInitialized) { instance = RecentsDependencies(context.applicationContext) } } synchronized(this) { instance = RecentsDependencies(context.applicationContext) } return instance } Loading
quickstep/src/com/android/quickstep/task/thumbnail/TaskThumbnailView.kt +7 −1 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.graphics.Color import android.graphics.Outline import android.graphics.Rect import android.util.AttributeSet import android.util.Log import android.view.View import android.view.ViewOutlineProvider import androidx.annotation.ColorInt Loading Loading @@ -92,6 +93,7 @@ class TaskThumbnailView : ConstraintLayout, ViewPool.Reusable { CoroutineScope(SupervisorJob() + Dispatchers.Main + CoroutineName("TaskThumbnailView")) viewModel.uiState .onEach { viewModelUiState -> Log.d(TAG, "viewModelUiState changed from $uiState to: $viewModelUiState") uiState = viewModelUiState resetViews() when (viewModelUiState) { Loading Loading @@ -211,6 +213,10 @@ class TaskThumbnailView : ConstraintLayout, ViewPool.Reusable { Utilities.mapRange( viewModel.cornerRadiusProgress.value, overviewCornerRadius, fullscreenCornerRadius fullscreenCornerRadius, ) / inheritedScale private companion object { const val TAG = "TaskThumbnailView" } }
quickstep/src/com/android/quickstep/task/viewmodel/TaskThumbnailViewModel.kt +11 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.quickstep.task.viewmodel import android.annotation.ColorInt import android.app.ActivityTaskManager.INVALID_TASK_ID import android.graphics.Matrix import android.util.Log import androidx.core.graphics.ColorUtils import com.android.quickstep.recents.data.RecentTasksRepository import com.android.quickstep.recents.usecase.GetThumbnailPositionUseCase Loading Loading @@ -82,7 +83,7 @@ class TaskThumbnailViewModel( combine( task.flatMapLatest { it }.map { it?.key?.id }.distinctUntilChanged(), recentsViewData.runningTaskIds, recentsViewData.runningTaskShowScreenshot recentsViewData.runningTaskShowScreenshot, ) { taskId, runningTaskIds, runningTaskShowScreenshot -> runningTaskIds.contains(taskId) && !runningTaskShowScreenshot } Loading @@ -90,6 +91,13 @@ class TaskThumbnailViewModel( val uiState: Flow<TaskThumbnailUiState> = combine(task.flatMapLatest { it }, isLiveTile) { taskVal, isRunning -> // TODO(b/369339561) This log is firing a lot. Reduce emissions from TasksRepository // then re-enable this log. // Log.d( // TAG, // "Received task and / or live tile update. taskVal: $taskVal" // + " isRunning: $isRunning.", // ) when { taskVal == null -> Uninitialized isRunning -> LiveTile Loading @@ -103,6 +111,7 @@ class TaskThumbnailViewModel( .distinctUntilChanged() fun bind(taskId: Int) { Log.d(TAG, "bind taskId: $taskId") this.taskId = taskId task.value = tasksRepository.getTaskDataById(taskId) splashProgress.value = splashAlphaUseCase.execute(taskId) Loading Loading @@ -139,5 +148,6 @@ class TaskThumbnailViewModel( private companion object { const val MAX_SCRIM_ALPHA = 0.4f const val TAG = "TaskThumbnailViewModel" } }