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

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

Merge "Update logic of icon only repo" into main

parents d20b53cf d31b6875
Loading
Loading
Loading
Loading
+12 −24
Original line number Diff line number Diff line
@@ -19,38 +19,26 @@ package com.android.systemui.qs.panels.data.repository
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.qs.pipeline.shared.TileSpec
import javax.inject.Inject
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow

/** Repository for retrieving the list of [TileSpec] to be displayed as icons. */
/** Repository for checking if a tile should be displayed as an icon. */
interface IconTilesRepository {
    val iconTilesSpecs: StateFlow<Set<TileSpec>>
    fun isIconTile(spec: TileSpec): Boolean
}

@SysUISingleton
class IconTilesRepositoryImpl @Inject constructor() : IconTilesRepository {

    private val _iconTilesSpecs =
        MutableStateFlow(
    override fun isIconTile(spec: TileSpec): Boolean {
        return !LARGE_TILES.contains(spec)
    }

    companion object {
        private val LARGE_TILES =
            setOf(
                TileSpec.create("airplane"),
                TileSpec.create("battery"),
                TileSpec.create("cameratoggle"),
                TileSpec.create("cast"),
                TileSpec.create("color_correction"),
                TileSpec.create("inversion"),
                TileSpec.create("saver"),
                TileSpec.create("internet"),
                TileSpec.create("bt"),
                TileSpec.create("dnd"),
                TileSpec.create("flashlight"),
                TileSpec.create("location"),
                TileSpec.create("mictoggle"),
                TileSpec.create("nfc"),
                TileSpec.create("night"),
                TileSpec.create("rotation")
            )
                TileSpec.create("cast"),
            )

    /** Set of toggleable tiles that are suitable for being shown as an icon. */
    override val iconTilesSpecs: StateFlow<Set<TileSpec>> = _iconTilesSpecs.asStateFlow()
    }
}
+2 −3
Original line number Diff line number Diff line
@@ -20,10 +20,9 @@ import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.qs.panels.data.repository.IconTilesRepository
import com.android.systemui.qs.pipeline.shared.TileSpec
import javax.inject.Inject
import kotlinx.coroutines.flow.StateFlow

/** Interactor for retrieving the list of [TileSpec] to be displayed as icons. */
@SysUISingleton
class IconTilesInteractor @Inject constructor(repo: IconTilesRepository) {
    val iconTilesSpecs: StateFlow<Set<TileSpec>> = repo.iconTilesSpecs
class IconTilesInteractor @Inject constructor(private val repo: IconTilesRepository) {
    fun isIconTile(spec: TileSpec): Boolean = repo.isIconTile(spec)
}
+1 −2
Original line number Diff line number Diff line
@@ -38,14 +38,13 @@ constructor(
    override fun reconcileTiles(tiles: List<TileSpec>): List<TileSpec> {
        val newTiles: MutableList<TileSpec> = mutableListOf()
        val row = TileRow<TileSpec>(columns = gridSizeInteractor.columns.value)
        val iconTilesSet = iconTilesInteractor.iconTilesSpecs.value
        val tilesQueue =
            ArrayDeque(
                tiles.map {
                    SizedTile(
                        it,
                        width =
                            if (iconTilesSet.contains(it)) {
                            if (iconTilesInteractor.isIconTile(it)) {
                                1
                            } else {
                                2
+3 −6
Original line number Diff line number Diff line
@@ -52,15 +52,13 @@ constructor(
            tiles.forEach { it.startListening(token) }
            onDispose { tiles.forEach { it.stopListening(token) } }
        }
        val iconTilesSpecs by iconTilesViewModel.iconTilesSpecs.collectAsStateWithLifecycle()
        val columns by gridSizeViewModel.columns.collectAsStateWithLifecycle()

        TileLazyGrid(modifier = modifier, columns = GridCells.Fixed(columns)) {
            items(
                tiles.size,
                span = { index ->
                    val iconOnly = iconTilesSpecs.contains(tiles[index].spec)
                    if (iconOnly) {
                    if (iconTilesViewModel.isIconTile(tiles[index].spec)) {
                        GridItemSpan(1)
                    } else {
                        GridItemSpan(2)
@@ -69,7 +67,7 @@ constructor(
            ) { index ->
                Tile(
                    tile = tiles[index],
                    iconOnly = iconTilesSpecs.contains(tiles[index].spec),
                    iconOnly = iconTilesViewModel.isIconTile(tiles[index].spec),
                    modifier = Modifier.height(dimensionResource(id = R.dimen.qs_tile_height))
                )
            }
@@ -83,12 +81,11 @@ constructor(
        onAddTile: (TileSpec, Int) -> Unit,
        onRemoveTile: (TileSpec) -> Unit,
    ) {
        val iconOnlySpecs by iconTilesViewModel.iconTilesSpecs.collectAsStateWithLifecycle()
        val columns by gridSizeViewModel.columns.collectAsStateWithLifecycle()

        DefaultEditTileGrid(
            tiles = tiles,
            iconOnlySpecs = iconOnlySpecs,
            isIconOnly = iconTilesViewModel::isIconTile,
            columns = GridCells.Fixed(columns),
            modifier = modifier,
            onAddTile = onAddTile,
+12 −11
Original line number Diff line number Diff line
@@ -38,7 +38,6 @@ import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.dimensionResource
@@ -66,12 +65,11 @@ class PartitionedGridLayout @Inject constructor(private val viewModel: Partition
            tiles.forEach { it.startListening(token) }
            onDispose { tiles.forEach { it.stopListening(token) } }
        }
        val iconTilesSpecs by viewModel.iconTilesSpecs.collectAsStateWithLifecycle()
        val columns by viewModel.columns.collectAsStateWithLifecycle()
        val showLabels by viewModel.showLabels.collectAsStateWithLifecycle()
        val largeTileHeight = tileHeight()
        val iconTileHeight = tileHeight(showLabels)
        val (smallTiles, largeTiles) = tiles.partition { iconTilesSpecs.contains(it.spec) }
        val (smallTiles, largeTiles) = tiles.partition { viewModel.isIconTile(it.spec) }

        TileLazyGrid(modifier = modifier, columns = GridCells.Fixed(columns)) {
            // Large tiles
@@ -103,7 +101,6 @@ class PartitionedGridLayout @Inject constructor(private val viewModel: Partition
        onAddTile: (TileSpec, Int) -> Unit,
        onRemoveTile: (TileSpec) -> Unit
    ) {
        val iconOnlySpecs by viewModel.iconTilesSpecs.collectAsStateWithLifecycle()
        val columns by viewModel.columns.collectAsStateWithLifecycle()
        val showLabels by viewModel.showLabels.collectAsStateWithLifecycle()

@@ -111,8 +108,6 @@ class PartitionedGridLayout @Inject constructor(private val viewModel: Partition
        val addTileToEnd: (TileSpec) -> Unit by rememberUpdatedState {
            onAddTile(it, CurrentTilesInteractor.POSITION_AT_END)
        }
        val isIconOnly: (TileSpec) -> Boolean =
            remember(iconOnlySpecs) { { tileSpec: TileSpec -> tileSpec in iconOnlySpecs } }
        val largeTileHeight = tileHeight()
        val iconTileHeight = tileHeight(showLabels)
        val tilePadding = dimensionResource(R.dimen.qs_tile_margin_vertical)
@@ -151,7 +146,7 @@ class PartitionedGridLayout @Inject constructor(private val viewModel: Partition
                iconTileHeight = iconTileHeight,
                tilePadding = tilePadding,
                onRemoveTile = onRemoveTile,
                isIconOnly = isIconOnly,
                isIconOnly = viewModel::isIconTile,
                columns = columns,
                showLabels = showLabels,
            )
@@ -161,7 +156,7 @@ class PartitionedGridLayout @Inject constructor(private val viewModel: Partition
                iconTileHeight = iconTileHeight,
                tilePadding = tilePadding,
                addTileToEnd = addTileToEnd,
                isIconOnly = isIconOnly,
                isIconOnly = viewModel::isIconTile,
                showLabels = showLabels,
                columns = columns,
            )
@@ -232,7 +227,7 @@ class PartitionedGridLayout @Inject constructor(private val viewModel: Partition
        val largeGridHeight = gridHeight(largeTiles.size, largeTileHeight, columns / 2, tilePadding)
        val smallGridHeight = gridHeight(smallTiles.size, iconTileHeight, columns, tilePadding)
        val largeGridHeightCustom =
            gridHeight(tilesCustom.size, largeTileHeight, columns / 2, tilePadding)
            gridHeight(tilesCustom.size, iconTileHeight, columns, tilePadding)

        // Add up the height of all three grids and add padding in between
        val gridHeight =
@@ -257,8 +252,14 @@ class PartitionedGridLayout @Inject constructor(private val viewModel: Partition
                )
                fillUpRow(nTiles = smallTiles.size, columns = columns)

                // Custom tiles, all large
                editTiles(tilesCustom, ClickAction.ADD, addTileToEnd, isIconOnly)
                // Custom tiles, all icons
                editTiles(
                    tilesCustom,
                    ClickAction.ADD,
                    addTileToEnd,
                    isIconOnly,
                    showLabels = showLabels
                )
            }
        }
    }
Loading