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

Commit 33674ac9 authored by Orhan Uysal's avatar Orhan Uysal Committed by Android (Google) Code Review
Browse files

Merge "Filter out empty desks from persistence." into main

parents 9d1699b5 cb02fd59
Loading
Loading
Loading
Loading
+35 −19
Original line number Diff line number Diff line
@@ -124,6 +124,15 @@ class DesktopPersistentRepository(private val dataStore: DataStore<DesktopPersis
                        userId,
                        DesktopRepositoryState.getDefaultInstance(),
                    )
                if (isEmptyDesk(freeformTasksInZOrder)) {
                    persistentRepositories
                        .toBuilder()
                        .putDesktopRepoByUser(
                            userId,
                            currentRepository.toBuilder().removeDesktop(desktopId).build(),
                        )
                        .build()
                } else {
                    val desktop =
                        getDesktop(currentRepository, desktopId)
                            .toBuilder()
@@ -140,10 +149,14 @@ class DesktopPersistentRepository(private val dataStore: DataStore<DesktopPersis
                        .toBuilder()
                        .putDesktopRepoByUser(
                            userId,
                        currentRepository.toBuilder().putDesktop(desktopId, desktop.build()).build(),
                            currentRepository
                                .toBuilder()
                                .putDesktop(desktopId, desktop.build())
                                .build(),
                        )
                        .build()
                }
            }
        } catch (exception: Exception) {
            Log.e(
                TAG,
@@ -191,7 +204,8 @@ class DesktopPersistentRepository(private val dataStore: DataStore<DesktopPersis
        } catch (exception: Exception) {
            Log.e(
                TAG,
                "Error in removing user related data, data is stored in a file named $DESKTOP_REPOSITORIES_DATASTORE_FILE",
                "Error in removing user related data, data is " +
                    "stored in a file named $DESKTOP_REPOSITORIES_DATASTORE_FILE",
                exception,
            )
        }
@@ -204,6 +218,8 @@ class DesktopPersistentRepository(private val dataStore: DataStore<DesktopPersis
            Desktop.newBuilder().setDesktopId(desktopId).setDisplayId(DEFAULT_DISPLAY).build(),
        )

    private fun isEmptyDesk(freeformTasksInZOrder: ArrayList<Int>) = freeformTasksInZOrder.isEmpty()

    companion object {
        private const val TAG = "DesktopPersistenceRepo"
        private const val DESKTOP_REPOSITORIES_DATASTORE_FILE = "desktop_persistent_repositories.pb"
@@ -285,12 +301,12 @@ class DesktopPersistentRepository(private val dataStore: DataStore<DesktopPersis
        private fun createDesktopTask(
            taskId: Int,
            state: DesktopTaskState = DesktopTaskState.VISIBLE,
            tiling_state: DesktopTaskTilingState = DesktopTaskTilingState.NONE,
            tilingState: DesktopTaskTilingState = DesktopTaskTilingState.NONE,
        ): DesktopTask =
            DesktopTask.newBuilder()
                .setTaskId(taskId)
                .setDesktopTaskState(state)
                .setDesktopTaskTilingState(tiling_state)
                .setDesktopTaskTilingState(tilingState)
                .build()
    }
}
+51 −18
Original line number Diff line number Diff line
@@ -82,7 +82,7 @@ class DesktopPersistentRepositoryTest : ShellTestCase() {
    fun readRepository_returnsCorrectDesktop() {
        runTest(StandardTestDispatcher()) {
            val task = createDesktopTask(1)
            val desk = createDesktop(task)
            val desk = createDesktop(ArrayList(listOf(task)))
            val repositoryState =
                DesktopRepositoryState.newBuilder().putDesktop(DEFAULT_DESKTOP_ID, desk)
            val desktopPersistentRepositories =
@@ -102,7 +102,7 @@ class DesktopPersistentRepositoryTest : ShellTestCase() {
        runTest(StandardTestDispatcher()) {
            // Create a basic repository state
            val task = createDesktopTask(1)
            val desktopPersistentRepositories = createRepositoryWithOneDesk(task)
            val desktopPersistentRepositories = createRepositoryWithOneDesk(ArrayList(listOf(task)))
            testDatastore.updateData { desktopPersistentRepositories }
            // Create a new state to be initialized
            val visibleTasks = ArraySet(listOf(1, 2))
@@ -130,16 +130,17 @@ class DesktopPersistentRepositoryTest : ShellTestCase() {
        runTest(StandardTestDispatcher()) {
            // Create a basic repository state
            val task = createDesktopTask(1)
            val desktopPersistentRepositories = createRepositoryWithOneDesk(task)
            val desktopPersistentRepositories = createRepositoryWithOneDesk(ArrayList(listOf(task)))
            testDatastore.updateData { desktopPersistentRepositories }
            // Create a new state to be initialized
            val visibleTasks = ArraySet(listOf(1, 2))
            val freeformTasksInZOrder = ArrayList(listOf(1, 2))

            // Update with new state
            datastoreRepository.addOrUpdateDesktop(
                visibleTasks = visibleTasks,
                minimizedTasks = ArraySet(),
                freeformTasksInZOrder = ArrayList(),
                freeformTasksInZOrder = freeformTasksInZOrder,
                userId = DEFAULT_USER_ID,
                leftTiledTask = 1,
                rightTiledTask = null,
@@ -155,7 +156,7 @@ class DesktopPersistentRepositoryTest : ShellTestCase() {
            datastoreRepository.addOrUpdateDesktop(
                visibleTasks = visibleTasks,
                minimizedTasks = ArraySet(),
                freeformTasksInZOrder = ArrayList(),
                freeformTasksInZOrder = freeformTasksInZOrder,
                userId = DEFAULT_USER_ID,
                leftTiledTask = null,
                rightTiledTask = 2,
@@ -173,7 +174,7 @@ class DesktopPersistentRepositoryTest : ShellTestCase() {
    fun removeUsers_removesUsersData() {
        runTest(StandardTestDispatcher()) {
            val task = createDesktopTask(1)
            val desktopPersistentRepositories = createRepositoryWithOneDesk(task)
            val desktopPersistentRepositories = createRepositoryWithOneDesk(ArrayList(listOf(task)))
            testDatastore.updateData { desktopPersistentRepositories }
            // Create a new state to be initialized
            val visibleTasks = ArraySet(listOf(1))
@@ -212,7 +213,7 @@ class DesktopPersistentRepositoryTest : ShellTestCase() {
    fun addOrUpdateTask_changeTaskStateToMinimize_taskStateIsMinimized() {
        runTest(StandardTestDispatcher()) {
            val task = createDesktopTask(1)
            val desktopPersistentRepositories = createRepositoryWithOneDesk(task)
            val desktopPersistentRepositories = createRepositoryWithOneDesk(ArrayList(listOf(task)))
            testDatastore.updateData { desktopPersistentRepositories }
            // Create a new state to be initialized
            val visibleTasks = ArraySet(listOf(1))
@@ -238,8 +239,38 @@ class DesktopPersistentRepositoryTest : ShellTestCase() {
    @Test
    fun removeTask_previouslyAddedTaskIsRemoved() {
        runTest(StandardTestDispatcher()) {
            val task1 = createDesktopTask(1)
            val task2 = createDesktopTask(2)
            val desktopPersistentRepositories =
                createRepositoryWithOneDesk(ArrayList(listOf(task1, task2)))
            testDatastore.updateData { desktopPersistentRepositories }
            // Create a new state to be initialized
            val visibleTasks = ArraySet(listOf(1))
            val minimizedTasks = ArraySet<Int>()
            val freeformTasksInZOrder = ArrayList<Int>(listOf(1))

            // Update with new state
            datastoreRepository.addOrUpdateDesktop(
                visibleTasks = visibleTasks,
                minimizedTasks = minimizedTasks,
                freeformTasksInZOrder = freeformTasksInZOrder,
                userId = DEFAULT_USER_ID,
                leftTiledTask = null,
                rightTiledTask = null,
            )

            val actualDesktop = datastoreRepository.readDesktop(DEFAULT_USER_ID, DEFAULT_DESKTOP_ID)
            assertThat(actualDesktop?.tasksByTaskIdMap).hasSize(1)
            assertThat(actualDesktop?.getZOrderedTasks(0)).isEqualTo(1)
        }
    }

    @Test
    fun addOrUpdateTask_addEmptyDesktop_noOp() {
        runTest(StandardTestDispatcher()) {
            // Create a basic repository state
            val task = createDesktopTask(1)
            val desktopPersistentRepositories = createRepositoryWithOneDesk(task)
            val desktopPersistentRepositories = createRepositoryWithOneDesk(ArrayList(listOf(task)))
            testDatastore.updateData { desktopPersistentRepositories }
            // Create a new state to be initialized
            val visibleTasks = ArraySet<Int>()
@@ -257,8 +288,7 @@ class DesktopPersistentRepositoryTest : ShellTestCase() {
            )

            val actualDesktop = datastoreRepository.readDesktop(DEFAULT_USER_ID, DEFAULT_DESKTOP_ID)
            assertThat(actualDesktop?.tasksByTaskIdMap).isEmpty()
            assertThat(actualDesktop?.zOrderedTasksList).isEmpty()
            assertThat(actualDesktop?.tasksByTaskIdMap).isNull()
        }
    }

@@ -268,8 +298,10 @@ class DesktopPersistentRepositoryTest : ShellTestCase() {
        const val USER_ID_2 = 2000
        const val DEFAULT_DESKTOP_ID = 0

        fun createRepositoryWithOneDesk(task: DesktopTask): DesktopPersistentRepositories {
            val desk = createDesktop(task)
        fun createRepositoryWithOneDesk(
            tasks: ArrayList<DesktopTask>
        ): DesktopPersistentRepositories {
            val desk = createDesktop(tasks)
            val repositoryState =
                DesktopRepositoryState.newBuilder().putDesktop(DEFAULT_DESKTOP_ID, desk)
            val desktopPersistentRepositories =
@@ -279,12 +311,13 @@ class DesktopPersistentRepositoryTest : ShellTestCase() {
            return desktopPersistentRepositories
        }

        fun createDesktop(task: DesktopTask): Desktop? =
            Desktop.newBuilder()
                .setDisplayId(DEFAULT_DISPLAY)
                .addZOrderedTasks(task.taskId)
                .putTasksByTaskId(task.taskId, task)
                .build()
        fun createDesktop(tasks: ArrayList<DesktopTask>): Desktop? {
            val desktopBuilder = Desktop.newBuilder().setDisplayId(DEFAULT_DISPLAY)
            tasks.forEach { task ->
                desktopBuilder.addZOrderedTasks(task.taskId).putTasksByTaskId(task.taskId, task)
            }
            return desktopBuilder.build()
        }

        fun createDesktopTask(
            taskId: Int,