Implement extra large tile tiles on large font size
This increases the size of the large tiles when the font scaling is past a threshold
Test: manually
Flag: com.android.systemui.qs_ui_refactor_compose_fragment
Bug: 331601141
Change-Id: I63c0d7c4d70cd5d193951f75d3d7e9fce5e0e791
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/ui/compose/EditTileListStateTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/ui/compose/EditTileListStateTest.kt
index 3910903..ae7c44e 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/ui/compose/EditTileListStateTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/ui/compose/EditTileListStateTest.kt
@@ -35,7 +35,7 @@
@SmallTest
@RunWith(AndroidJUnit4::class)
class EditTileListStateTest : SysuiTestCase() {
- private val underTest = EditTileListState(TestEditTiles, 4)
+ private val underTest = EditTileListState(TestEditTiles, columns = 4, largeTilesSpan = 2)
@Test
fun startDrag_listHasSpacers() {
diff --git a/packages/SystemUI/res/values-sw600dp-port/config.xml b/packages/SystemUI/res/values-sw600dp-port/config.xml
index f556b97..53d921b 100644
--- a/packages/SystemUI/res/values-sw600dp-port/config.xml
+++ b/packages/SystemUI/res/values-sw600dp-port/config.xml
@@ -33,6 +33,9 @@
<!-- The number of columns in the infinite grid QuickSettings -->
<integer name="quick_settings_infinite_grid_num_columns">6</integer>
+ <!-- The maximum width of large tiles in the infinite grid QuickSettings -->
+ <integer name="quick_settings_infinite_grid_tile_max_width">3</integer>
+
<integer name="power_menu_lite_max_columns">2</integer>
<integer name="power_menu_lite_max_rows">3</integer>
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index 0854eb4..48af82a 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -79,6 +79,9 @@
<!-- The number of columns in the infinite grid QuickSettings -->
<integer name="quick_settings_infinite_grid_num_columns">4</integer>
+ <!-- The maximum width of large tiles in the infinite grid QuickSettings -->
+ <integer name="quick_settings_infinite_grid_tile_max_width">4</integer>
+
<!-- The number of columns in the Dual Shade QuickSettings -->
<integer name="quick_settings_dual_shade_num_columns">4</integer>
diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/data/repository/LargeTileSpanRepository.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/data/repository/LargeTileSpanRepository.kt
new file mode 100644
index 0000000..5883403
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/panels/data/repository/LargeTileSpanRepository.kt
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.qs.panels.data.repository
+
+import android.content.res.Resources
+import com.android.systemui.common.ui.data.repository.ConfigurationRepository
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.dagger.qualifiers.Application
+import com.android.systemui.dagger.qualifiers.Main
+import com.android.systemui.res.R
+import com.android.systemui.util.kotlin.emitOnStart
+import javax.inject.Inject
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.flow.SharingStarted
+import kotlinx.coroutines.flow.StateFlow
+import kotlinx.coroutines.flow.distinctUntilChanged
+import kotlinx.coroutines.flow.mapLatest
+import kotlinx.coroutines.flow.stateIn
+
+@OptIn(ExperimentalCoroutinesApi::class)
+@SysUISingleton
+class LargeTileSpanRepository
+@Inject
+constructor(
+ @Application scope: CoroutineScope,
+ @Main private val resources: Resources,
+ configurationRepository: ConfigurationRepository,
+) {
+ val span: StateFlow<Int> =
+ configurationRepository.onConfigurationChange
+ .emitOnStart()
+ .mapLatest {
+ if (resources.configuration.fontScale >= FONT_SCALE_THRESHOLD) {
+ resources.getInteger(R.integer.quick_settings_infinite_grid_tile_max_width)
+ } else {
+ 2
+ }
+ }
+ .distinctUntilChanged()
+ .stateIn(scope, SharingStarted.WhileSubscribed(), 2)
+
+ private companion object {
+ const val FONT_SCALE_THRESHOLD = 2f
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/domain/interactor/IconTilesInteractor.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/domain/interactor/IconTilesInteractor.kt
index ec61a0d..23c79f5 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/panels/domain/interactor/IconTilesInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/panels/domain/interactor/IconTilesInteractor.kt
@@ -21,12 +21,14 @@
import com.android.systemui.log.LogBuffer
import com.android.systemui.log.core.LogLevel
import com.android.systemui.qs.panels.data.repository.DefaultLargeTilesRepository
+import com.android.systemui.qs.panels.data.repository.LargeTileSpanRepository
import com.android.systemui.qs.panels.shared.model.PanelsLog
import com.android.systemui.qs.pipeline.domain.interactor.CurrentTilesInteractor
import com.android.systemui.qs.pipeline.shared.TileSpec
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.SharingStarted
+import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.stateIn
@@ -38,6 +40,7 @@
private val repo: DefaultLargeTilesRepository,
private val currentTilesInteractor: CurrentTilesInteractor,
private val preferencesInteractor: QSPreferencesInteractor,
+ largeTilesSpanRepo: LargeTileSpanRepository,
@PanelsLog private val logBuffer: LogBuffer,
@Application private val applicationScope: CoroutineScope,
) {
@@ -46,6 +49,8 @@
.onEach { logChange(it) }
.stateIn(applicationScope, SharingStarted.Eagerly, repo.defaultLargeTiles)
+ val largeTilesSpan: StateFlow<Int> = largeTilesSpanRepo.span
+
fun isIconTile(spec: TileSpec): Boolean = !largeTilesSpecs.value.contains(spec)
fun setLargeTiles(specs: Set<TileSpec>) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/EditTileListState.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/EditTileListState.kt
index 74fa0fe..c729c7c 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/EditTileListState.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/EditTileListState.kt
@@ -37,13 +37,17 @@
fun rememberEditListState(
tiles: List<SizedTile<EditTileViewModel>>,
columns: Int,
+ largeTilesSpan: Int,
): EditTileListState {
- return remember(tiles, columns) { EditTileListState(tiles, columns) }
+ return remember(tiles, columns) { EditTileListState(tiles, columns, largeTilesSpan) }
}
/** Holds the temporary state of the tile list during a drag movement where we move tiles around. */
-class EditTileListState(tiles: List<SizedTile<EditTileViewModel>>, private val columns: Int) :
- DragAndDropState {
+class EditTileListState(
+ tiles: List<SizedTile<EditTileViewModel>>,
+ private val columns: Int,
+ private val largeTilesSpan: Int,
+) : DragAndDropState {
private val _draggedCell = mutableStateOf<SizedTile<EditTileViewModel>?>(null)
override val draggedCell
get() = _draggedCell.value
@@ -86,7 +90,7 @@
if (fromIndex != -1) {
val cell = _tiles.removeAt(fromIndex)
cell as TileGridCell
- _tiles.add(fromIndex, cell.copy(width = if (cell.isIcon) 2 else 1))
+ _tiles.add(fromIndex, cell.copy(width = if (cell.isIcon) largeTilesSpan else 1))
regenerateGrid(fromIndex)
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/infinitegrid/EditTile.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/infinitegrid/EditTile.kt
index b5cec12..931e1cf 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/infinitegrid/EditTile.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/infinitegrid/EditTile.kt
@@ -173,6 +173,7 @@
listState: EditTileListState,
otherTiles: List<SizedTile<EditTileViewModel>>,
columns: Int,
+ largeTilesSpan: Int,
modifier: Modifier,
onRemoveTile: (TileSpec) -> Unit,
onSetTiles: (List<TileSpec>) -> Unit,
@@ -230,7 +231,14 @@
}
}
- CurrentTilesGrid(listState, selectionState, columns, onResize, onSetTiles)
+ CurrentTilesGrid(
+ listState,
+ selectionState,
+ columns,
+ largeTilesSpan,
+ onResize,
+ onSetTiles,
+ )
// Hide available tiles when dragging
AnimatedVisibility(
@@ -273,7 +281,7 @@
) {
Box(
contentAlignment = Alignment.Center,
- modifier = modifier.fillMaxWidth().height(EditModeTileDefaults.EditGridHeaderHeight),
+ modifier = modifier.fillMaxWidth().wrapContentHeight(),
) {
content()
}
@@ -300,6 +308,7 @@
listState: EditTileListState,
selectionState: MutableSelectionState,
columns: Int,
+ largeTilesSpan: Int,
onResize: (TileSpec, toIcon: Boolean) -> Unit,
onSetTiles: (List<TileSpec>) -> Unit,
) {
@@ -340,7 +349,8 @@
}
.testTag(CURRENT_TILES_GRID_TEST_TAG),
) {
- EditTiles(cells, columns, listState, selectionState, coroutineScope) { spec ->
+ EditTiles(cells, columns, listState, selectionState, coroutineScope, largeTilesSpan) { spec
+ ->
// Toggle the current size of the tile
currentListState.isIcon(spec)?.let { onResize(spec, !it) }
}
@@ -425,6 +435,7 @@
dragAndDropState: DragAndDropState,
selectionState: MutableSelectionState,
coroutineScope: CoroutineScope,
+ largeTilesSpan: Int,
onToggleSize: (spec: TileSpec) -> Unit,
) {
items(
@@ -456,6 +467,7 @@
onToggleSize = onToggleSize,
coroutineScope = coroutineScope,
bounceableInfo = cells.bounceableInfo(index, columns),
+ largeTilesSpan = largeTilesSpan,
modifier = Modifier.animateItem(),
)
}
@@ -472,6 +484,7 @@
selectionState: MutableSelectionState,
onToggleSize: (spec: TileSpec) -> Unit,
coroutineScope: CoroutineScope,
+ largeTilesSpan: Int,
bounceableInfo: BounceableInfo,
modifier: Modifier = Modifier,
) {
@@ -514,8 +527,11 @@
.fillMaxWidth()
.onSizeChanged {
// Grab the size before the bounceable to get the idle width
- val min = if (cell.isIcon) it.width else (it.width - padding) / 2
- val max = if (cell.isIcon) (it.width * 2) + padding else it.width
+ val totalPadding = (largeTilesSpan - 1) * padding
+ val min =
+ if (cell.isIcon) it.width else (it.width - totalPadding) / largeTilesSpan
+ val max =
+ if (cell.isIcon) (it.width * largeTilesSpan) + totalPadding else it.width
tileWidths = TileWidths(it.width, min, max)
}
.bounceable(
@@ -554,15 +570,13 @@
val targetValue = if (cell.isIcon) 0f else 1f
val animatedProgress = remember { Animatable(targetValue) }
- if (selected) {
- val resizingState = selectionState.resizingState
- LaunchedEffect(targetValue, resizingState) {
- if (resizingState == null) {
- animatedProgress.animateTo(targetValue)
- } else {
- snapshotFlow { resizingState.progression }
- .collectLatest { animatedProgress.snapTo(it) }
- }
+ val resizingState = selectionState.resizingState?.takeIf { selected }
+ LaunchedEffect(targetValue, resizingState) {
+ if (resizingState == null) {
+ animatedProgress.animateTo(targetValue)
+ } else {
+ snapshotFlow { resizingState.progression }
+ .collectLatest { animatedProgress.snapTo(it) }
}
}
@@ -705,7 +719,6 @@
private object EditModeTileDefaults {
const val PLACEHOLDER_ALPHA = .3f
- val EditGridHeaderHeight = 60.dp
val CurrentTilesGridPadding = 8.dp
@Composable
diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/infinitegrid/InfiniteGridLayout.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/infinitegrid/InfiniteGridLayout.kt
index 5ac2ad0..29ff171 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/infinitegrid/InfiniteGridLayout.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/infinitegrid/InfiniteGridLayout.kt
@@ -79,7 +79,8 @@
}
val columns = columnsWithMediaViewModel.columns
- val sizedTiles = tiles.map { SizedTileImpl(it, it.spec.width()) }
+ val largeTilesSpan by iconTilesViewModel.largeTilesSpanState
+ val sizedTiles = tiles.map { SizedTileImpl(it, it.spec.width(largeTilesSpan)) }
val bounceables =
remember(sizedTiles) { List(sizedTiles.size) { BounceableTileViewModel() } }
val squishiness by viewModel.squishinessViewModel.squishiness.collectAsStateWithLifecycle()
@@ -129,21 +130,23 @@
viewModel.columnsWithMediaViewModelFactory.createWithoutMediaTracking()
}
val columns = columnsViewModel.columns
+ val largeTilesSpan by iconTilesViewModel.largeTilesSpanState
val largeTiles by iconTilesViewModel.largeTiles.collectAsStateWithLifecycle()
// Non-current tiles should always be displayed as icon tiles.
val sizedTiles =
- remember(tiles, largeTiles) {
+ remember(tiles, largeTiles, largeTilesSpan) {
tiles.map {
SizedTileImpl(
it,
- if (!it.isCurrent || !largeTiles.contains(it.tileSpec)) 1 else 2,
+ if (!it.isCurrent || !largeTiles.contains(it.tileSpec)) 1
+ else largeTilesSpan,
)
}
}
val (currentTiles, otherTiles) = sizedTiles.partition { it.tile.isCurrent }
- val currentListState = rememberEditListState(currentTiles, columns)
+ val currentListState = rememberEditListState(currentTiles, columns, largeTilesSpan)
DefaultEditTileGrid(
listState = currentListState,
otherTiles = otherTiles,
@@ -154,6 +157,7 @@
onResize = iconTilesViewModel::resize,
onStopEditing = onStopEditing,
onReset = viewModel::showResetDialog,
+ largeTilesSpan = largeTilesSpan,
)
}
@@ -171,7 +175,7 @@
.map { it.flatten().map { it.tile } }
}
- private fun TileSpec.width(): Int {
- return if (iconTilesViewModel.isIconTile(this)) 1 else 2
+ private fun TileSpec.width(largeSize: Int = iconTilesViewModel.largeTilesSpan.value): Int {
+ return if (iconTilesViewModel.isIconTile(this)) 1 else largeSize
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/selection/ResizingState.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/selection/ResizingState.kt
index 9552aa9..41c3de5 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/selection/ResizingState.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/selection/ResizingState.kt
@@ -22,7 +22,7 @@
import androidx.compose.runtime.setValue
import com.android.systemui.qs.panels.ui.compose.selection.ResizingDefaults.RESIZING_THRESHOLD
-class ResizingState(private val widths: TileWidths, private val onResize: () -> Unit) {
+class ResizingState(val widths: TileWidths, private val onResize: () -> Unit) {
/** Total drag offset of this resize operation. */
private var totalOffset by mutableFloatStateOf(0f)
diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/viewmodel/DynamicIconTilesViewModel.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/viewmodel/DynamicIconTilesViewModel.kt
index 9feaab8..a9d673a 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/viewmodel/DynamicIconTilesViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/viewmodel/DynamicIconTilesViewModel.kt
@@ -17,9 +17,13 @@
package com.android.systemui.qs.panels.ui.viewmodel
import com.android.systemui.lifecycle.ExclusiveActivatable
+import com.android.systemui.lifecycle.Hydrator
import com.android.systemui.qs.panels.domain.interactor.DynamicIconTilesInteractor
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
+import kotlinx.coroutines.awaitCancellation
+import kotlinx.coroutines.coroutineScope
+import kotlinx.coroutines.launch
/** View model to resize QS tiles down to icons when removed from the current tiles. */
class DynamicIconTilesViewModel
@@ -28,10 +32,21 @@
interactorFactory: DynamicIconTilesInteractor.Factory,
iconTilesViewModel: IconTilesViewModel,
) : IconTilesViewModel by iconTilesViewModel, ExclusiveActivatable() {
+ private val hydrator = Hydrator("DynamicIconTilesViewModel")
private val interactor = interactorFactory.create()
+ val largeTilesSpanState =
+ hydrator.hydratedStateOf(
+ traceName = "largeTilesSpan",
+ source = iconTilesViewModel.largeTilesSpan,
+ )
+
override suspend fun onActivated(): Nothing {
- interactor.activate()
+ coroutineScope {
+ launch { hydrator.activate() }
+ launch { interactor.activate() }
+ awaitCancellation()
+ }
}
@AssistedFactory
diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/viewmodel/IconTilesViewModel.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/viewmodel/IconTilesViewModel.kt
index 4e698ed..b8c5fbb 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/viewmodel/IconTilesViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/viewmodel/IconTilesViewModel.kt
@@ -25,6 +25,8 @@
interface IconTilesViewModel {
val largeTiles: StateFlow<Set<TileSpec>>
+ val largeTilesSpan: StateFlow<Int>
+
fun isIconTile(spec: TileSpec): Boolean
fun resize(spec: TileSpec, toIcon: Boolean)
@@ -34,6 +36,7 @@
class IconTilesViewModelImpl @Inject constructor(private val interactor: IconTilesInteractor) :
IconTilesViewModel {
override val largeTiles = interactor.largeTilesSpecs
+ override val largeTilesSpan = interactor.largeTilesSpan
override fun isIconTile(spec: TileSpec): Boolean = interactor.isIconTile(spec)
diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/viewmodel/QuickQuickSettingsViewModel.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/viewmodel/QuickQuickSettingsViewModel.kt
index 33ce551..adc4e4b 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/viewmodel/QuickQuickSettingsViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/viewmodel/QuickQuickSettingsViewModel.kt
@@ -70,18 +70,21 @@
source = quickQuickSettingsRowInteractor.rows,
)
+ private val largeTilesSpan by
+ hydrator.hydratedStateOf(
+ traceName = "largeTilesSpan",
+ source = iconTilesViewModel.largeTilesSpan,
+ )
+
private val currentTiles by
hydrator.hydratedStateOf(traceName = "currentTiles", source = tilesInteractor.currentTiles)
val tileViewModels by derivedStateOf {
currentTiles
- .map { SizedTileImpl(TileViewModel(it.tile, it.spec), it.spec.width) }
+ .map { SizedTileImpl(TileViewModel(it.tile, it.spec), it.spec.width()) }
.let { splitInRowsSequence(it, columns).take(rows).toList().flatten() }
}
- private val TileSpec.width: Int
- get() = if (largeTiles.contains(this)) 2 else 1
-
override suspend fun onActivated(): Nothing {
coroutineScope {
launch { hydrator.activate() }
@@ -95,4 +98,6 @@
interface Factory {
fun create(): QuickQuickSettingsViewModel
}
+
+ private fun TileSpec.width(): Int = if (largeTiles.contains(this)) largeTilesSpan else 1
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/panels/ui/compose/DragAndDropTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/panels/ui/compose/DragAndDropTest.kt
index 8a6df1c..d88d69d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/panels/ui/compose/DragAndDropTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/panels/ui/compose/DragAndDropTest.kt
@@ -63,6 +63,7 @@
listState = listState,
otherTiles = listOf(),
columns = 4,
+ largeTilesSpan = 4,
modifier = Modifier.fillMaxSize(),
onRemoveTile = {},
onSetTiles = onSetTiles,
@@ -75,7 +76,7 @@
@Test
fun draggedTile_shouldDisappear() {
var tiles by mutableStateOf(TestEditTiles)
- val listState = EditTileListState(tiles, 4)
+ val listState = EditTileListState(tiles, columns = 4, largeTilesSpan = 2)
composeRule.setContent {
EditTileGridUnderTest(listState) {
tiles = it.map { tileSpec -> createEditTile(tileSpec.spec) }
@@ -101,7 +102,7 @@
@Test
fun draggedTile_shouldChangePosition() {
var tiles by mutableStateOf(TestEditTiles)
- val listState = EditTileListState(tiles, 4)
+ val listState = EditTileListState(tiles, columns = 4, largeTilesSpan = 2)
composeRule.setContent {
EditTileGridUnderTest(listState) {
tiles = it.map { tileSpec -> createEditTile(tileSpec.spec) }
@@ -128,7 +129,7 @@
@Test
fun draggedTileOut_shouldBeRemoved() {
var tiles by mutableStateOf(TestEditTiles)
- val listState = EditTileListState(tiles, 4)
+ val listState = EditTileListState(tiles, columns = 4, largeTilesSpan = 2)
composeRule.setContent {
EditTileGridUnderTest(listState) {
tiles = it.map { tileSpec -> createEditTile(tileSpec.spec) }
@@ -153,7 +154,7 @@
@Test
fun draggedNewTileIn_shouldBeAdded() {
var tiles by mutableStateOf(TestEditTiles)
- val listState = EditTileListState(tiles, 4)
+ val listState = EditTileListState(tiles, columns = 4, largeTilesSpan = 2)
composeRule.setContent {
EditTileGridUnderTest(listState) {
tiles = it.map { tileSpec -> createEditTile(tileSpec.spec) }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/panels/ui/compose/ResizingTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/panels/ui/compose/ResizingTest.kt
index d9c1d99..fac5ecb 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/panels/ui/compose/ResizingTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/panels/ui/compose/ResizingTest.kt
@@ -62,6 +62,7 @@
listState = listState,
otherTiles = listOf(),
columns = 4,
+ largeTilesSpan = 4,
modifier = Modifier.fillMaxSize(),
onRemoveTile = {},
onSetTiles = {},
@@ -74,7 +75,7 @@
@Test
fun toggleIconTile_shouldBeLarge() {
var tiles by mutableStateOf(TestEditTiles)
- val listState = EditTileListState(tiles, 4)
+ val listState = EditTileListState(tiles, columns = 4, largeTilesSpan = 2)
composeRule.setContent {
EditTileGridUnderTest(listState) { spec, toIcon -> tiles = tiles.resize(spec, toIcon) }
}
@@ -90,7 +91,7 @@
@Test
fun toggleLargeTile_shouldBeIcon() {
var tiles by mutableStateOf(TestEditTiles)
- val listState = EditTileListState(tiles, 4)
+ val listState = EditTileListState(tiles, columns = 4, largeTilesSpan = 2)
composeRule.setContent {
EditTileGridUnderTest(listState) { spec, toIcon -> tiles = tiles.resize(spec, toIcon) }
}
@@ -106,7 +107,7 @@
@Test
fun resizedLarge_shouldBeIcon() {
var tiles by mutableStateOf(TestEditTiles)
- val listState = EditTileListState(tiles, 4)
+ val listState = EditTileListState(tiles, columns = 4, largeTilesSpan = 2)
composeRule.setContent {
EditTileGridUnderTest(listState) { spec, toIcon -> tiles = tiles.resize(spec, toIcon) }
}
@@ -126,7 +127,7 @@
@Test
fun resizedIcon_shouldBeLarge() {
var tiles by mutableStateOf(TestEditTiles)
- val listState = EditTileListState(tiles, 4)
+ val listState = EditTileListState(tiles, columns = 4, largeTilesSpan = 2)
composeRule.setContent {
EditTileGridUnderTest(listState) { spec, toIcon -> tiles = tiles.resize(spec, toIcon) }
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/data/repository/LargeTileSpanRepositoryKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/data/repository/LargeTileSpanRepositoryKosmos.kt
new file mode 100644
index 0000000..a977121
--- /dev/null
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/data/repository/LargeTileSpanRepositoryKosmos.kt
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.qs.panels.data.repository
+
+import android.content.res.mainResources
+import com.android.systemui.common.ui.data.repository.configurationRepository
+import com.android.systemui.kosmos.Kosmos
+import com.android.systemui.kosmos.applicationCoroutineScope
+
+val Kosmos.largeTileSpanRepository by
+ Kosmos.Fixture {
+ LargeTileSpanRepository(applicationCoroutineScope, mainResources, configurationRepository)
+ }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/domain/interactor/IconTilesInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/domain/interactor/IconTilesInteractorKosmos.kt
index 0c62d0e..8d4db8b 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/domain/interactor/IconTilesInteractorKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/domain/interactor/IconTilesInteractorKosmos.kt
@@ -20,6 +20,7 @@
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.log.core.FakeLogBuffer
import com.android.systemui.qs.panels.data.repository.defaultLargeTilesRepository
+import com.android.systemui.qs.panels.data.repository.largeTileSpanRepository
import com.android.systemui.qs.pipeline.domain.interactor.currentTilesInteractor
val Kosmos.iconTilesInteractor by
@@ -28,7 +29,8 @@
defaultLargeTilesRepository,
currentTilesInteractor,
qsPreferencesInteractor,
+ largeTileSpanRepository,
FakeLogBuffer.Factory.create(),
- applicationCoroutineScope
+ applicationCoroutineScope,
)
}