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

Commit 447a7bde authored by Olivier St-Onge's avatar Olivier St-Onge Committed by Android (Google) Code Review
Browse files

Merge "Implement position based animations for tile grid" into main

parents dbb483a3 b1c347ef
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -67,19 +67,25 @@ class IconTilesInteractorTest : SysuiTestCase() {
            }
        }

    @OptIn(ExperimentalCoroutinesApi::class)
    @Test
    fun resize_updatesSharedPreferences() =
        with(kosmos) {
            testScope.runTest {
                qsPreferencesRepository.setLargeTilesSpecs(setOf())
                runCurrent()

                val latest by collectLastValue(qsPreferencesRepository.largeTilesSpecs)
                val spec = TileSpec.create("large")

                // Assert that the tile is added to the large tiles after resizing
                underTest.resize(spec, toIcon = false)
                underTest.resize(spec)
                runCurrent()
                assertThat(latest).contains(spec)

                // Assert that the tile is removed from the large tiles after resizing
                underTest.resize(spec, toIcon = true)
                underTest.resize(spec)
                runCurrent()
                assertThat(latest).doesNotContain(spec)
            }
        }
+23 −16
Original line number Diff line number Diff line
@@ -22,6 +22,8 @@ import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.common.shared.model.Icon
import com.android.systemui.common.shared.model.Text
import com.android.systemui.qs.panels.shared.model.SizedTile
import com.android.systemui.qs.panels.shared.model.SizedTileImpl
import com.android.systemui.qs.panels.ui.viewmodel.EditTileViewModel
import com.android.systemui.qs.pipeline.shared.TileSpec
import com.google.common.truth.Truth.assertThat
@@ -37,15 +39,15 @@ class DragAndDropStateTest : SysuiTestCase() {
    @Test
    fun isMoving_returnsCorrectValue() {
        // Asserts no tiles is moving
        TestEditTiles.forEach { assertThat(underTest.isMoving(it.tileSpec)).isFalse() }
        TestEditTiles.forEach { assertThat(underTest.isMoving(it.tile.tileSpec)).isFalse() }

        // Start the drag movement
        underTest.onStarted(TestEditTiles[0])

        // Assert that the correct tile is marked as moving
        TestEditTiles.forEach {
            assertThat(underTest.isMoving(it.tileSpec))
                .isEqualTo(TestEditTiles[0].tileSpec == it.tileSpec)
            assertThat(underTest.isMoving(it.tile.tileSpec))
                .isEqualTo(TestEditTiles[0].tile.tileSpec == it.tile.tileSpec)
        }
    }

@@ -55,11 +57,11 @@ class DragAndDropStateTest : SysuiTestCase() {
        underTest.onStarted(TestEditTiles[0])

        // Move the tile to the end of the list
        underTest.onMoved(listState.tiles[5].tileSpec)
        underTest.onMoved(listState.tiles[5].tile.tileSpec)
        assertThat(underTest.currentPosition()).isEqualTo(5)

        // Move the tile to the middle of the list
        underTest.onMoved(listState.tiles[2].tileSpec)
        underTest.onMoved(listState.tiles[2].tile.tileSpec)
        assertThat(underTest.currentPosition()).isEqualTo(2)
    }

@@ -69,13 +71,13 @@ class DragAndDropStateTest : SysuiTestCase() {
        underTest.onStarted(TestEditTiles[0])

        // Move the tile to the end of the list
        underTest.onMoved(listState.tiles[5].tileSpec)
        underTest.onMoved(listState.tiles[5].tile.tileSpec)

        // Drop the tile
        underTest.onDrop()

        // Asserts no tiles is moving
        TestEditTiles.forEach { assertThat(underTest.isMoving(it.tileSpec)).isFalse() }
        TestEditTiles.forEach { assertThat(underTest.isMoving(it.tile.tileSpec)).isFalse() }
    }

    @Test
@@ -87,19 +89,24 @@ class DragAndDropStateTest : SysuiTestCase() {
        underTest.movedOutOfBounds()

        // Asserts the moving tile is not current
        assertThat(listState.tiles.firstOrNull { it.tileSpec == TestEditTiles[0].tileSpec })
        assertThat(
                listState.tiles.firstOrNull { it.tile.tileSpec == TestEditTiles[0].tile.tileSpec }
            )
            .isNull()
    }

    companion object {
        private fun createEditTile(tileSpec: String): EditTileViewModel {
            return EditTileViewModel(
        private fun createEditTile(tileSpec: String): SizedTile<EditTileViewModel> {
            return SizedTileImpl(
                EditTileViewModel(
                    tileSpec = TileSpec.create(tileSpec),
                    icon = Icon.Resource(0, null),
                    label = Text.Loaded("unused"),
                    appName = null,
                    isCurrent = true,
                    availableEditActions = emptySet(),
                ),
                1,
            )
        }

+20 −12
Original line number Diff line number Diff line
@@ -21,6 +21,8 @@ import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.common.shared.model.Icon
import com.android.systemui.common.shared.model.Text
import com.android.systemui.qs.panels.shared.model.SizedTile
import com.android.systemui.qs.panels.shared.model.SizedTileImpl
import com.android.systemui.qs.panels.ui.viewmodel.EditTileViewModel
import com.android.systemui.qs.pipeline.shared.TileSpec
import com.google.common.truth.Truth.assertThat
@@ -35,7 +37,7 @@ class EditTileListStateTest : SysuiTestCase() {
    @Test
    fun movingNonExistentTile_tileAdded() {
        val newTile = createEditTile("other_tile", false)
        underTest.move(newTile, TestEditTiles[0].tileSpec)
        underTest.move(newTile, TestEditTiles[0].tile.tileSpec)

        assertThat(underTest.tiles[0]).isEqualTo(newTile)
        assertThat(underTest.tiles.subList(1, underTest.tiles.size))
@@ -51,7 +53,7 @@ class EditTileListStateTest : SysuiTestCase() {

    @Test
    fun movingTileToItself_listUnchanged() {
        underTest.move(TestEditTiles[0], TestEditTiles[0].tileSpec)
        underTest.move(TestEditTiles[0], TestEditTiles[0].tile.tileSpec)

        assertThat(underTest.tiles).containsExactly(*TestEditTiles.toTypedArray())
    }
@@ -59,7 +61,7 @@ class EditTileListStateTest : SysuiTestCase() {
    @Test
    fun movingTileToSameSection_listUpdates() {
        // Move tile at index 0 to index 1. Tile 0 should remain current.
        underTest.move(TestEditTiles[0], TestEditTiles[1].tileSpec)
        underTest.move(TestEditTiles[0], TestEditTiles[1].tile.tileSpec)

        // Assert the tiles 0 and 1 have changed places.
        assertThat(underTest.tiles[0]).isEqualTo(TestEditTiles[1])
@@ -72,21 +74,27 @@ class EditTileListStateTest : SysuiTestCase() {

    fun removingTile_listUpdates() {
        // Remove tile at index 0
        underTest.remove(TestEditTiles[0].tileSpec)
        underTest.remove(TestEditTiles[0].tile.tileSpec)

        // Assert the tile was removed
        assertThat(underTest.tiles).containsExactly(*TestEditTiles.subList(1, 6).toTypedArray())
    }

    companion object {
        private fun createEditTile(tileSpec: String, isCurrent: Boolean): EditTileViewModel {
            return EditTileViewModel(
        private fun createEditTile(
            tileSpec: String,
            isCurrent: Boolean
        ): SizedTile<EditTileViewModel> {
            return SizedTileImpl(
                EditTileViewModel(
                    tileSpec = TileSpec.create(tileSpec),
                    icon = Icon.Resource(0, null),
                    label = Text.Loaded("unused"),
                    appName = null,
                    isCurrent = isCurrent,
                    availableEditActions = emptySet(),
                ),
                1,
            )
        }

+4 −4
Original line number Diff line number Diff line
@@ -19,7 +19,7 @@ package com.android.systemui.qs.panels.ui.compose
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.qs.panels.shared.model.SizedTile
import com.android.systemui.qs.panels.shared.model.SizedTileImpl
import com.android.systemui.qs.panels.ui.viewmodel.MockTileViewModel
import com.android.systemui.qs.pipeline.shared.TileSpec
import com.google.common.truth.Truth.assertThat
@@ -72,10 +72,10 @@ class PaginatableGridLayoutTest : SysuiTestCase() {
    }

    companion object {
        fun extraLargeTile() = SizedTile(MockTileViewModel(TileSpec.create("XLarge")), 3)
        fun extraLargeTile() = SizedTileImpl(MockTileViewModel(TileSpec.create("XLarge")), 3)

        fun largeTile() = SizedTile(MockTileViewModel(TileSpec.create("large")), 2)
        fun largeTile() = SizedTileImpl(MockTileViewModel(TileSpec.create("large")), 2)

        fun smallTile() = SizedTile(MockTileViewModel(TileSpec.create("small")), 1)
        fun smallTile() = SizedTileImpl(MockTileViewModel(TileSpec.create("small")), 1)
    }
}
+3 −3
Original line number Diff line number Diff line
@@ -40,15 +40,15 @@ constructor(
    @Application private val applicationScope: CoroutineScope
) {

    private val largeTilesSpecs =
    val largeTilesSpecs =
        preferencesInteractor.largeTilesSpecs
            .onEach { logChange(it) }
            .stateIn(applicationScope, SharingStarted.Eagerly, repo.defaultLargeTiles)

    fun isIconTile(spec: TileSpec): Boolean = !largeTilesSpecs.value.contains(spec)

    fun resize(spec: TileSpec, toIcon: Boolean) {
        if (toIcon) {
    fun resize(spec: TileSpec) {
        if (largeTilesSpecs.value.contains(spec)) {
            preferencesInteractor.setLargeTilesSpecs(largeTilesSpecs.value - spec)
        } else {
            preferencesInteractor.setLargeTilesSpecs(largeTilesSpecs.value + spec)
Loading