Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopRepository.kt +6 −8 Original line number Diff line number Diff line Loading @@ -30,7 +30,6 @@ import androidx.core.util.valueIterator import com.android.internal.protolog.ProtoLog import com.android.window.flags.Flags import com.android.wm.shell.desktopmode.persistence.DesktopPersistentRepository import com.android.wm.shell.desktopmode.persistence.DesktopTask import com.android.wm.shell.desktopmode.persistence.DesktopTaskState import com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE import com.android.wm.shell.shared.annotations.ShellMainThread Loading Loading @@ -124,7 +123,8 @@ class DesktopRepository ( if (!Flags.enableDesktopWindowingPersistence()) return // TODO: b/365962554 - Handle the case that user moves to desktop before it's initialized mainCoroutineScope.launch { val desktop = persistentRepository.readDesktop() val desktop = persistentRepository.readDesktop() ?: return@launch val maxTasks = DesktopModeStatus.getMaxTaskLimit(context).takeIf { it > 0 } ?: desktop.zOrderedTasksCount Loading @@ -132,13 +132,11 @@ class DesktopRepository ( desktop.zOrderedTasksList // Reverse it so we initialize the repo from bottom to top. .reversed() .map { taskId -> desktop.tasksByTaskIdMap.getOrDefault( taskId, DesktopTask.getDefaultInstance() ) .mapNotNull { taskId -> desktop.tasksByTaskIdMap[taskId]?.takeIf { it.desktopTaskState == DesktopTaskState.VISIBLE } } .filter { task -> task.desktopTaskState == DesktopTaskState.VISIBLE } .take(maxTasks) .forEach { task -> addOrMoveFreeformTaskToTop(desktop.displayId, task.taskId) Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/persistence/DesktopPersistentRepository.kt +6 −7 Original line number Diff line number Diff line Loading @@ -73,15 +73,14 @@ class DesktopPersistentRepository( */ private suspend fun getDesktopRepositoryState( userId: Int = DEFAULT_USER_ID ): DesktopRepositoryState = ): DesktopRepositoryState? = try { dataStoreFlow .first() .desktopRepoByUserMap .getOrDefault(userId, DesktopRepositoryState.getDefaultInstance()) .desktopRepoByUserMap[userId] } catch (e: Exception) { Log.e(TAG, "Unable to read from datastore", e) DesktopRepositoryState.getDefaultInstance() null } /** Loading @@ -91,13 +90,13 @@ class DesktopPersistentRepository( suspend fun readDesktop( userId: Int = DEFAULT_USER_ID, desktopId: Int = DEFAULT_DESKTOP_ID, ): Desktop = ): Desktop? = try { val repository = getDesktopRepositoryState(userId) repository.getDesktopOrThrow(desktopId) repository?.getDesktopOrThrow(desktopId) } catch (e: Exception) { Log.e(TAG, "Unable to get desktop info from persistent repository", e) Desktop.getDefaultInstance() null } /** Adds or updates a desktop stored in the datastore */ Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/persistence/DesktopPersistentRepositoryTest.kt +5 −5 Original line number Diff line number Diff line Loading @@ -115,8 +115,8 @@ class DesktopPersistentRepositoryTest : ShellTestCase() { freeformTasksInZOrder = freeformTasksInZOrder) val actualDesktop = datastoreRepository.readDesktop(DEFAULT_USER_ID, DEFAULT_DESKTOP_ID) assertThat(actualDesktop.tasksByTaskIdMap).hasSize(2) assertThat(actualDesktop.getZOrderedTasks(0)).isEqualTo(2) assertThat(actualDesktop?.tasksByTaskIdMap).hasSize(2) assertThat(actualDesktop?.getZOrderedTasks(0)).isEqualTo(2) } } Loading @@ -138,7 +138,7 @@ class DesktopPersistentRepositoryTest : ShellTestCase() { freeformTasksInZOrder = freeformTasksInZOrder) val actualDesktop = datastoreRepository.readDesktop(DEFAULT_USER_ID, DEFAULT_DESKTOP_ID) assertThat(actualDesktop.tasksByTaskIdMap[task.taskId]?.desktopTaskState) assertThat(actualDesktop?.tasksByTaskIdMap?.get(task.taskId)?.desktopTaskState) .isEqualTo(DesktopTaskState.MINIMIZED) } } Loading @@ -161,8 +161,8 @@ class DesktopPersistentRepositoryTest : ShellTestCase() { freeformTasksInZOrder = freeformTasksInZOrder) val actualDesktop = datastoreRepository.readDesktop(DEFAULT_USER_ID, DEFAULT_DESKTOP_ID) assertThat(actualDesktop.tasksByTaskIdMap).isEmpty() assertThat(actualDesktop.zOrderedTasksList).isEmpty() assertThat(actualDesktop?.tasksByTaskIdMap).isEmpty() assertThat(actualDesktop?.zOrderedTasksList).isEmpty() } } Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopRepository.kt +6 −8 Original line number Diff line number Diff line Loading @@ -30,7 +30,6 @@ import androidx.core.util.valueIterator import com.android.internal.protolog.ProtoLog import com.android.window.flags.Flags import com.android.wm.shell.desktopmode.persistence.DesktopPersistentRepository import com.android.wm.shell.desktopmode.persistence.DesktopTask import com.android.wm.shell.desktopmode.persistence.DesktopTaskState import com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE import com.android.wm.shell.shared.annotations.ShellMainThread Loading Loading @@ -124,7 +123,8 @@ class DesktopRepository ( if (!Flags.enableDesktopWindowingPersistence()) return // TODO: b/365962554 - Handle the case that user moves to desktop before it's initialized mainCoroutineScope.launch { val desktop = persistentRepository.readDesktop() val desktop = persistentRepository.readDesktop() ?: return@launch val maxTasks = DesktopModeStatus.getMaxTaskLimit(context).takeIf { it > 0 } ?: desktop.zOrderedTasksCount Loading @@ -132,13 +132,11 @@ class DesktopRepository ( desktop.zOrderedTasksList // Reverse it so we initialize the repo from bottom to top. .reversed() .map { taskId -> desktop.tasksByTaskIdMap.getOrDefault( taskId, DesktopTask.getDefaultInstance() ) .mapNotNull { taskId -> desktop.tasksByTaskIdMap[taskId]?.takeIf { it.desktopTaskState == DesktopTaskState.VISIBLE } } .filter { task -> task.desktopTaskState == DesktopTaskState.VISIBLE } .take(maxTasks) .forEach { task -> addOrMoveFreeformTaskToTop(desktop.displayId, task.taskId) Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/persistence/DesktopPersistentRepository.kt +6 −7 Original line number Diff line number Diff line Loading @@ -73,15 +73,14 @@ class DesktopPersistentRepository( */ private suspend fun getDesktopRepositoryState( userId: Int = DEFAULT_USER_ID ): DesktopRepositoryState = ): DesktopRepositoryState? = try { dataStoreFlow .first() .desktopRepoByUserMap .getOrDefault(userId, DesktopRepositoryState.getDefaultInstance()) .desktopRepoByUserMap[userId] } catch (e: Exception) { Log.e(TAG, "Unable to read from datastore", e) DesktopRepositoryState.getDefaultInstance() null } /** Loading @@ -91,13 +90,13 @@ class DesktopPersistentRepository( suspend fun readDesktop( userId: Int = DEFAULT_USER_ID, desktopId: Int = DEFAULT_DESKTOP_ID, ): Desktop = ): Desktop? = try { val repository = getDesktopRepositoryState(userId) repository.getDesktopOrThrow(desktopId) repository?.getDesktopOrThrow(desktopId) } catch (e: Exception) { Log.e(TAG, "Unable to get desktop info from persistent repository", e) Desktop.getDefaultInstance() null } /** Adds or updates a desktop stored in the datastore */ Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/persistence/DesktopPersistentRepositoryTest.kt +5 −5 Original line number Diff line number Diff line Loading @@ -115,8 +115,8 @@ class DesktopPersistentRepositoryTest : ShellTestCase() { freeformTasksInZOrder = freeformTasksInZOrder) val actualDesktop = datastoreRepository.readDesktop(DEFAULT_USER_ID, DEFAULT_DESKTOP_ID) assertThat(actualDesktop.tasksByTaskIdMap).hasSize(2) assertThat(actualDesktop.getZOrderedTasks(0)).isEqualTo(2) assertThat(actualDesktop?.tasksByTaskIdMap).hasSize(2) assertThat(actualDesktop?.getZOrderedTasks(0)).isEqualTo(2) } } Loading @@ -138,7 +138,7 @@ class DesktopPersistentRepositoryTest : ShellTestCase() { freeformTasksInZOrder = freeformTasksInZOrder) val actualDesktop = datastoreRepository.readDesktop(DEFAULT_USER_ID, DEFAULT_DESKTOP_ID) assertThat(actualDesktop.tasksByTaskIdMap[task.taskId]?.desktopTaskState) assertThat(actualDesktop?.tasksByTaskIdMap?.get(task.taskId)?.desktopTaskState) .isEqualTo(DesktopTaskState.MINIMIZED) } } Loading @@ -161,8 +161,8 @@ class DesktopPersistentRepositoryTest : ShellTestCase() { freeformTasksInZOrder = freeformTasksInZOrder) val actualDesktop = datastoreRepository.readDesktop(DEFAULT_USER_ID, DEFAULT_DESKTOP_ID) assertThat(actualDesktop.tasksByTaskIdMap).isEmpty() assertThat(actualDesktop.zOrderedTasksList).isEmpty() assertThat(actualDesktop?.tasksByTaskIdMap).isEmpty() assertThat(actualDesktop?.zOrderedTasksList).isEmpty() } } Loading