Loading packages/SystemUI/src/com/android/systemui/qs/panels/data/repository/IconTilesRepository.kt +12 −24 Original line number Diff line number Diff line Loading @@ -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() } } packages/SystemUI/src/com/android/systemui/qs/panels/domain/interactor/IconTilesInteractor.kt +2 −3 Original line number Diff line number Diff line Loading @@ -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) } packages/SystemUI/src/com/android/systemui/qs/panels/domain/interactor/InfiniteGridConsistencyInteractor.kt +1 −2 Original line number Diff line number Diff line Loading @@ -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 Loading packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/InfiniteGridLayout.kt +3 −6 Original line number Diff line number Diff line Loading @@ -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) Loading @@ -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)) ) } Loading @@ -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, Loading packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/PartitionedGridLayout.kt +12 −11 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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() Loading @@ -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) Loading Loading @@ -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, ) Loading @@ -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, ) Loading Loading @@ -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 = Loading @@ -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 Loading
packages/SystemUI/src/com/android/systemui/qs/panels/data/repository/IconTilesRepository.kt +12 −24 Original line number Diff line number Diff line Loading @@ -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() } }
packages/SystemUI/src/com/android/systemui/qs/panels/domain/interactor/IconTilesInteractor.kt +2 −3 Original line number Diff line number Diff line Loading @@ -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) }
packages/SystemUI/src/com/android/systemui/qs/panels/domain/interactor/InfiniteGridConsistencyInteractor.kt +1 −2 Original line number Diff line number Diff line Loading @@ -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 Loading
packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/InfiniteGridLayout.kt +3 −6 Original line number Diff line number Diff line Loading @@ -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) Loading @@ -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)) ) } Loading @@ -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, Loading
packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/PartitionedGridLayout.kt +12 −11 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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() Loading @@ -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) Loading Loading @@ -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, ) Loading @@ -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, ) Loading Loading @@ -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 = Loading @@ -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