diff options
| author | 2024-06-28 08:07:53 -0400 | |
|---|---|---|
| committer | 2024-07-09 13:40:40 -0400 | |
| commit | 5accf6870a7c07bc2940c7b0e9fec738f2dfe86c (patch) | |
| tree | cffd3755a1db60c0b894b1fb58524c4200dc85e0 | |
| parent | d7e6d1b0a78fa3ac318d1b0817887732d2652a67 (diff) | |
Implement resizable tiles in edit mode
Currently resizable with a double tap. Also saves the list of large tiles to the shared preferences.
Bug: 350984160
Test: QSPreferencesRepositoryTest
Test: IconTilesInteractorTest
Flag: com.android.systemui.qs_ui_refactor
Change-Id: Iffd81c7ce79a339294268bc7b725521d7997c0eb
25 files changed, 370 insertions, 133 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/data/repository/QSPreferencesRepositoryTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/data/repository/QSPreferencesRepositoryTest.kt index 8ac5b6c09e73..dda9cd5529a5 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/data/repository/QSPreferencesRepositoryTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/data/repository/QSPreferencesRepositoryTest.kt @@ -24,6 +24,7 @@ import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.coroutines.collectLastValue import com.android.systemui.kosmos.testScope +import com.android.systemui.qs.pipeline.shared.TileSpec import com.android.systemui.settings.userFileManager import com.android.systemui.testKosmos import com.android.systemui.user.data.repository.fakeUserRepository @@ -40,6 +41,70 @@ class QSPreferencesRepositoryTest : SysuiTestCase() { private val underTest = with(kosmos) { qsPreferencesRepository } @Test + fun largeTilesSpecs_updatesFromSharedPreferences() = + with(kosmos) { + testScope.runTest { + val latest by collectLastValue(underTest.largeTilesSpecs) + assertThat(latest).isEqualTo(defaultLargeTilesRepository.defaultLargeTiles) + + val newSet = setOf("tileA", "tileB") + setLargeTilesSpecsInSharedPreferences(newSet) + assertThat(latest).isEqualTo(newSet.toTileSpecs()) + } + } + + @Test + fun largeTilesSpecs_updatesFromUserChange() = + with(kosmos) { + testScope.runTest { + fakeUserRepository.setUserInfos(USERS) + val latest by collectLastValue(underTest.largeTilesSpecs) + + fakeUserRepository.setSelectedUserInfo(PRIMARY_USER) + val newSet = setOf("tileA", "tileB") + setLargeTilesSpecsInSharedPreferences(newSet) + + fakeUserRepository.setSelectedUserInfo(ANOTHER_USER) + setLargeTilesSpecsInSharedPreferences(emptySet()) + + fakeUserRepository.setSelectedUserInfo(PRIMARY_USER) + assertThat(latest).isEqualTo(newSet.toTileSpecs()) + } + } + + @Test + fun setLargeTilesSpecs_inSharedPreferences() { + val setA = setOf("tileA", "tileB") + underTest.setLargeTilesSpecs(setA.toTileSpecs()) + assertThat(getLargeTilesSpecsFromSharedPreferences()).isEqualTo(setA) + + val setB = setOf("tileA", "tileB") + underTest.setLargeTilesSpecs(setB.toTileSpecs()) + assertThat(getLargeTilesSpecsFromSharedPreferences()).isEqualTo(setB) + } + + @Test + fun setLargeTilesSpecs_forDifferentUser() = + with(kosmos) { + testScope.runTest { + fakeUserRepository.setUserInfos(USERS) + + fakeUserRepository.setSelectedUserInfo(PRIMARY_USER) + val setA = setOf("tileA", "tileB") + underTest.setLargeTilesSpecs(setA.toTileSpecs()) + assertThat(getLargeTilesSpecsFromSharedPreferences()).isEqualTo(setA) + + fakeUserRepository.setSelectedUserInfo(ANOTHER_USER) + val setB = setOf("tileA", "tileB") + underTest.setLargeTilesSpecs(setB.toTileSpecs()) + assertThat(getLargeTilesSpecsFromSharedPreferences()).isEqualTo(setB) + + fakeUserRepository.setSelectedUserInfo(PRIMARY_USER) + assertThat(getLargeTilesSpecsFromSharedPreferences()).isEqualTo(setA) + } + } + + @Test fun showLabels_updatesFromSharedPreferences() = with(kosmos) { testScope.runTest { @@ -109,6 +174,14 @@ class QSPreferencesRepositoryTest : SysuiTestCase() { ) } + private fun setLargeTilesSpecsInSharedPreferences(specs: Set<String>) { + getSharedPreferences().edit().putStringSet(LARGE_TILES_SPECS_KEY, specs).apply() + } + + private fun getLargeTilesSpecsFromSharedPreferences(): Set<String> { + return getSharedPreferences().getStringSet(LARGE_TILES_SPECS_KEY, emptySet())!! + } + private fun setShowLabelsInSharedPreferences(value: Boolean) { getSharedPreferences().edit().putBoolean(ICON_LABELS_KEY, value).apply() } @@ -117,8 +190,13 @@ class QSPreferencesRepositoryTest : SysuiTestCase() { return getSharedPreferences().getBoolean(ICON_LABELS_KEY, defaultValue) } + private fun Set<String>.toTileSpecs(): Set<TileSpec> { + return map { TileSpec.create(it) }.toSet() + } + companion object { private const val ICON_LABELS_KEY = "show_icon_labels" + private const val LARGE_TILES_SPECS_KEY = "large_tiles_specs" private const val PRIMARY_USER_ID = 0 private val PRIMARY_USER = UserInfo(PRIMARY_USER_ID, "user 0", UserInfo.FLAG_MAIN) private const val ANOTHER_USER_ID = 1 diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/domain/interactor/GridConsistencyInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/domain/interactor/GridConsistencyInteractorTest.kt index b206f56f95a6..56b3679b6835 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/domain/interactor/GridConsistencyInteractorTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/domain/interactor/GridConsistencyInteractorTest.kt @@ -20,9 +20,9 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.kosmos.testScope -import com.android.systemui.qs.panels.data.repository.IconTilesRepository +import com.android.systemui.qs.panels.data.repository.DefaultLargeTilesRepository +import com.android.systemui.qs.panels.data.repository.defaultLargeTilesRepository import com.android.systemui.qs.panels.data.repository.gridLayoutTypeRepository -import com.android.systemui.qs.panels.data.repository.iconTilesRepository import com.android.systemui.qs.panels.shared.model.InfiniteGridLayoutType import com.android.systemui.qs.panels.shared.model.PartitionedGridLayoutType import com.android.systemui.qs.pipeline.data.repository.tileSpecRepository @@ -42,22 +42,17 @@ import org.junit.runner.RunWith @RunWith(AndroidJUnit4::class) class GridConsistencyInteractorTest : SysuiTestCase() { - private val iconOnlyTiles = - setOf( - TileSpec.create("smallA"), - TileSpec.create("smallB"), - TileSpec.create("smallC"), - TileSpec.create("smallD"), - TileSpec.create("smallE"), - ) - private val kosmos = testKosmos().apply { - iconTilesRepository = - object : IconTilesRepository { - override fun isIconTile(spec: TileSpec): Boolean { - return iconOnlyTiles.contains(spec) - } + defaultLargeTilesRepository = + object : DefaultLargeTilesRepository { + override val defaultLargeTiles = + setOf( + TileSpec.create("largeA"), + TileSpec.create("largeB"), + TileSpec.create("largeC"), + TileSpec.create("largeD"), + ) } } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/domain/interactor/IconTilesInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/domain/interactor/IconTilesInteractorTest.kt new file mode 100644 index 000000000000..c3a5df06e2a4 --- /dev/null +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/domain/interactor/IconTilesInteractorTest.kt @@ -0,0 +1,86 @@ +/* + * 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.domain.interactor + +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.filters.SmallTest +import com.android.systemui.SysuiTestCase +import com.android.systemui.coroutines.collectLastValue +import com.android.systemui.kosmos.testScope +import com.android.systemui.qs.panels.data.repository.DefaultLargeTilesRepository +import com.android.systemui.qs.panels.data.repository.defaultLargeTilesRepository +import com.android.systemui.qs.panels.data.repository.qsPreferencesRepository +import com.android.systemui.qs.pipeline.shared.TileSpec +import com.android.systemui.testKosmos +import com.google.common.truth.Truth.assertThat +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.test.runCurrent +import kotlinx.coroutines.test.runTest +import org.junit.Test +import org.junit.runner.RunWith + +@SmallTest +@RunWith(AndroidJUnit4::class) +class IconTilesInteractorTest : SysuiTestCase() { + private val kosmos = + testKosmos().apply { + defaultLargeTilesRepository = + object : DefaultLargeTilesRepository { + override val defaultLargeTiles: Set<TileSpec> = setOf(TileSpec.create("large")) + } + } + private val underTest = with(kosmos) { iconTilesInteractor } + + @Test + fun isIconTile_returnsCorrectValue() { + assertThat(underTest.isIconTile(TileSpec.create("large"))).isFalse() + assertThat(underTest.isIconTile(TileSpec.create("small"))).isTrue() + } + + @OptIn(ExperimentalCoroutinesApi::class) + @Test + fun isIconTile_updatesFromSharedPreferences() = + with(kosmos) { + testScope.runTest { + // Assert that new tile defaults to icon + assertThat(underTest.isIconTile(TileSpec.create("newTile"))).isTrue() + + qsPreferencesRepository.setLargeTilesSpecs(setOf(TileSpec.create("newTile"))) + runCurrent() + + // Assert that the new tile was added to the large tiles set + assertThat(underTest.isIconTile(TileSpec.create("newTile"))).isFalse() + } + } + + @Test + fun resize_updatesSharedPreferences() = + with(kosmos) { + testScope.runTest { + 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) + assertThat(latest).contains(spec) + + // Assert that the tile is removed from the large tiles after resizing + underTest.resize(spec, toIcon = true) + assertThat(latest).doesNotContain(spec) + } + } +} diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/domain/interactor/InfiniteGridConsistencyInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/domain/interactor/InfiniteGridConsistencyInteractorTest.kt index 1e2e82ffeca5..ea51398e6256 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/domain/interactor/InfiniteGridConsistencyInteractorTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/domain/interactor/InfiniteGridConsistencyInteractorTest.kt @@ -20,8 +20,8 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.kosmos.testScope -import com.android.systemui.qs.panels.data.repository.IconTilesRepository -import com.android.systemui.qs.panels.data.repository.iconTilesRepository +import com.android.systemui.qs.panels.data.repository.DefaultLargeTilesRepository +import com.android.systemui.qs.panels.data.repository.defaultLargeTilesRepository import com.android.systemui.qs.pipeline.shared.TileSpec import com.android.systemui.testKosmos import com.google.common.truth.Truth.assertThat @@ -33,21 +33,17 @@ import org.junit.runner.RunWith @RunWith(AndroidJUnit4::class) class InfiniteGridConsistencyInteractorTest : SysuiTestCase() { - private val iconOnlyTiles = - setOf( - TileSpec.create("smallA"), - TileSpec.create("smallB"), - TileSpec.create("smallC"), - TileSpec.create("smallD"), - TileSpec.create("smallE"), - ) private val kosmos = testKosmos().apply { - iconTilesRepository = - object : IconTilesRepository { - override fun isIconTile(spec: TileSpec): Boolean { - return iconOnlyTiles.contains(spec) - } + defaultLargeTilesRepository = + object : DefaultLargeTilesRepository { + override val defaultLargeTiles: Set<TileSpec> = + setOf( + TileSpec.create("largeA"), + TileSpec.create("largeB"), + TileSpec.create("largeC"), + TileSpec.create("largeD"), + ) } } private val underTest = with(kosmos) { infiniteGridConsistencyInteractor } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/ui/compose/InfiniteGridLayoutTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/ui/compose/InfiniteGridLayoutTest.kt index 914a09597d65..53384afb66be 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/ui/compose/InfiniteGridLayoutTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/ui/compose/InfiniteGridLayoutTest.kt @@ -20,8 +20,8 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.kosmos.testScope -import com.android.systemui.qs.panels.data.repository.IconTilesRepository -import com.android.systemui.qs.panels.data.repository.iconTilesRepository +import com.android.systemui.qs.panels.data.repository.DefaultLargeTilesRepository +import com.android.systemui.qs.panels.data.repository.defaultLargeTilesRepository import com.android.systemui.qs.panels.ui.viewmodel.MockTileViewModel import com.android.systemui.qs.panels.ui.viewmodel.fixedColumnsSizeViewModel import com.android.systemui.qs.panels.ui.viewmodel.iconTilesViewModel @@ -37,11 +37,9 @@ import org.junit.runner.RunWith class InfiniteGridLayoutTest : SysuiTestCase() { private val kosmos = testKosmos().apply { - iconTilesRepository = - object : IconTilesRepository { - override fun isIconTile(spec: TileSpec): Boolean { - return spec.spec.startsWith("small") - } + defaultLargeTilesRepository = + object : DefaultLargeTilesRepository { + override val defaultLargeTiles: Set<TileSpec> = setOf(TileSpec.create("large")) } } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/ui/compose/PartitionedGridLayoutTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/ui/compose/PartitionedGridLayoutTest.kt index 3354b4d4116b..55b7454fa2c1 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/ui/compose/PartitionedGridLayoutTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/ui/compose/PartitionedGridLayoutTest.kt @@ -20,8 +20,8 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.kosmos.testScope -import com.android.systemui.qs.panels.data.repository.IconTilesRepository -import com.android.systemui.qs.panels.data.repository.iconTilesRepository +import com.android.systemui.qs.panels.data.repository.DefaultLargeTilesRepository +import com.android.systemui.qs.panels.data.repository.defaultLargeTilesRepository import com.android.systemui.qs.panels.ui.viewmodel.MockTileViewModel import com.android.systemui.qs.panels.ui.viewmodel.iconTilesViewModel import com.android.systemui.qs.panels.ui.viewmodel.partitionedGridViewModel @@ -37,11 +37,9 @@ import org.junit.runner.RunWith class PartitionedGridLayoutTest : SysuiTestCase() { private val kosmos = testKosmos().apply { - iconTilesRepository = - object : IconTilesRepository { - override fun isIconTile(spec: TileSpec): Boolean { - return spec.spec.startsWith("small") - } + defaultLargeTilesRepository = + object : DefaultLargeTilesRepository { + override val defaultLargeTiles: Set<TileSpec> = setOf(TileSpec.create("large")) } } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/ui/viewmodel/QuickQuickSettingsViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/ui/viewmodel/QuickQuickSettingsViewModelTest.kt index d36a81bcfd23..56156a8e6e61 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/ui/viewmodel/QuickQuickSettingsViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/ui/viewmodel/QuickQuickSettingsViewModelTest.kt @@ -24,8 +24,8 @@ import com.android.systemui.coroutines.collectLastValue import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.testCase import com.android.systemui.kosmos.testScope -import com.android.systemui.qs.panels.data.repository.IconTilesRepository -import com.android.systemui.qs.panels.data.repository.iconTilesRepository +import com.android.systemui.qs.panels.data.repository.DefaultLargeTilesRepository +import com.android.systemui.qs.panels.data.repository.defaultLargeTilesRepository import com.android.systemui.qs.pipeline.domain.interactor.currentTilesInteractor import com.android.systemui.qs.pipeline.shared.TileSpec import com.android.systemui.res.R @@ -40,18 +40,6 @@ import org.junit.runner.RunWith @RunWith(AndroidJUnit4::class) class QuickQuickSettingsViewModelTest : SysuiTestCase() { - private val kosmos = - testKosmos().apply { - iconTilesRepository = - object : IconTilesRepository { - override fun isIconTile(spec: TileSpec): Boolean { - return spec.spec.startsWith(PREFIX_SMALL) - } - } - } - - private val underTest = kosmos.quickQuickSettingsViewModel - private val tiles = listOf( "$PREFIX_SMALL:1", @@ -66,6 +54,17 @@ class QuickQuickSettingsViewModelTest : SysuiTestCase() { ) .map(TileSpec::create) + private val kosmos = + testKosmos().apply { + defaultLargeTilesRepository = + object : DefaultLargeTilesRepository { + override val defaultLargeTiles: Set<TileSpec> = + tiles.filter { it.spec.startsWith(PREFIX_LARGE) }.toSet() + } + } + + private val underTest = kosmos.quickQuickSettingsViewModel + @Before fun setUp() { kosmos.setTiles(tiles) diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/dagger/PanelsModule.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/dagger/PanelsModule.kt index ff20707c1922..78f4b4b32237 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/panels/dagger/PanelsModule.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/panels/dagger/PanelsModule.kt @@ -19,18 +19,17 @@ package com.android.systemui.qs.panels.dagger import com.android.systemui.dagger.SysUISingleton import com.android.systemui.log.LogBuffer import com.android.systemui.log.LogBufferFactory +import com.android.systemui.qs.panels.data.repository.DefaultLargeTilesRepository +import com.android.systemui.qs.panels.data.repository.DefaultLargeTilesRepositoryImpl import com.android.systemui.qs.panels.data.repository.GridLayoutTypeRepository import com.android.systemui.qs.panels.data.repository.GridLayoutTypeRepositoryImpl -import com.android.systemui.qs.panels.data.repository.IconTilesRepository -import com.android.systemui.qs.panels.data.repository.IconTilesRepositoryImpl import com.android.systemui.qs.panels.domain.interactor.GridTypeConsistencyInteractor import com.android.systemui.qs.panels.domain.interactor.InfiniteGridConsistencyInteractor import com.android.systemui.qs.panels.domain.interactor.NoopGridConsistencyInteractor -import com.android.systemui.qs.panels.shared.model.GridConsistencyLog import com.android.systemui.qs.panels.shared.model.GridLayoutType -import com.android.systemui.qs.panels.shared.model.IconLabelVisibilityLog import com.android.systemui.qs.panels.shared.model.InfiniteGridLayoutType import com.android.systemui.qs.panels.shared.model.PaginatedGridLayoutType +import com.android.systemui.qs.panels.shared.model.PanelsLog import com.android.systemui.qs.panels.shared.model.PartitionedGridLayoutType import com.android.systemui.qs.panels.shared.model.StretchedGridLayoutType import com.android.systemui.qs.panels.ui.compose.GridLayout @@ -53,7 +52,10 @@ import javax.inject.Named @Module interface PanelsModule { - @Binds fun bindIconTilesRepository(impl: IconTilesRepositoryImpl): IconTilesRepository + @Binds + fun bindDefaultLargeTilesSpecsRepository( + impl: DefaultLargeTilesRepositoryImpl + ): DefaultLargeTilesRepository @Binds fun bindGridLayoutTypeRepository(impl: GridLayoutTypeRepositoryImpl): GridLayoutTypeRepository @@ -87,16 +89,9 @@ interface PanelsModule { companion object { @Provides @SysUISingleton - @GridConsistencyLog - fun providesGridConsistencyLog(factory: LogBufferFactory): LogBuffer { - return factory.create("GridConsistencyLog", 50) - } - - @Provides - @SysUISingleton - @IconLabelVisibilityLog - fun providesIconTileLabelVisibilityLog(factory: LogBufferFactory): LogBuffer { - return factory.create("IconLabelVisibilityLog", 50) + @PanelsLog + fun providesPanelsLog(factory: LogBufferFactory): LogBuffer { + return factory.create("PanelsLog", 50) } @Provides diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/data/repository/IconTilesRepository.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/data/repository/DefaultLargeTilesRepository.kt index 095bdf2ff5bd..9a1671df60e9 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/panels/data/repository/IconTilesRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/panels/data/repository/DefaultLargeTilesRepository.kt @@ -20,25 +20,18 @@ import com.android.systemui.dagger.SysUISingleton import com.android.systemui.qs.pipeline.shared.TileSpec import javax.inject.Inject -/** Repository for checking if a tile should be displayed as an icon. */ -interface IconTilesRepository { - fun isIconTile(spec: TileSpec): Boolean +/** Repository for the default set of [TileSpec] that should be displayed as large tiles. */ +interface DefaultLargeTilesRepository { + val defaultLargeTiles: Set<TileSpec> } @SysUISingleton -class IconTilesRepositoryImpl @Inject constructor() : IconTilesRepository { - - override fun isIconTile(spec: TileSpec): Boolean { - return !LARGE_TILES.contains(spec) - } - - companion object { - private val LARGE_TILES = - setOf( - TileSpec.create("internet"), - TileSpec.create("bt"), - TileSpec.create("dnd"), - TileSpec.create("cast"), - ) - } +class DefaultLargeTilesRepositoryImpl @Inject constructor() : DefaultLargeTilesRepository { + override val defaultLargeTiles = + setOf( + TileSpec.create("internet"), + TileSpec.create("bt"), + TileSpec.create("dnd"), + TileSpec.create("cast"), + ) } diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/data/repository/QSPreferencesRepository.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/data/repository/QSPreferencesRepository.kt index f3e5b8f0c214..971598dea0bd 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/panels/data/repository/QSPreferencesRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/panels/data/repository/QSPreferencesRepository.kt @@ -20,6 +20,7 @@ import android.content.Context import android.content.SharedPreferences import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Background +import com.android.systemui.qs.pipeline.shared.TileSpec import com.android.systemui.settings.UserFileManager import com.android.systemui.user.data.repository.UserRepository import com.android.systemui.util.kotlin.SharedPreferencesExt.observe @@ -40,6 +41,7 @@ class QSPreferencesRepository constructor( private val userFileManager: UserFileManager, private val userRepository: UserRepository, + private val defaultLargeTilesRepository: DefaultLargeTilesRepository, @Background private val backgroundDispatcher: CoroutineDispatcher, ) { /** Whether to show the labels on icon tiles for the current user. */ @@ -51,6 +53,23 @@ constructor( } .flowOn(backgroundDispatcher) + /** Set of [TileSpec] to display as large tiles for the current user. */ + val largeTilesSpecs: Flow<Set<TileSpec>> = + userRepository.selectedUserInfo + .flatMapLatest { userInfo -> + val prefs = getSharedPrefs(userInfo.id) + prefs.observe().emitOnStart().map { + prefs + .getStringSet( + LARGE_TILES_SPECS_KEY, + defaultLargeTilesRepository.defaultLargeTiles.map { it.spec }.toSet() + ) + ?.map { TileSpec.create(it) } + ?.toSet() ?: defaultLargeTilesRepository.defaultLargeTiles + } + } + .flowOn(backgroundDispatcher) + /** Sets for the current user whether to show the labels on icon tiles. */ fun setShowLabels(showLabels: Boolean) { with(getSharedPrefs(userRepository.getSelectedUserInfo().id)) { @@ -58,6 +77,13 @@ constructor( } } + /** Sets for the current user the set of [TileSpec] to display as large tiles. */ + fun setLargeTilesSpecs(specs: Set<TileSpec>) { + with(getSharedPrefs(userRepository.getSelectedUserInfo().id)) { + edit().putStringSet(LARGE_TILES_SPECS_KEY, specs.map { it.spec }.toSet()).apply() + } + } + private fun getSharedPrefs(userId: Int): SharedPreferences { return userFileManager.getSharedPreferences( FILE_NAME, @@ -68,6 +94,7 @@ constructor( companion object { private const val ICON_LABELS_KEY = "show_icon_labels" + private const val LARGE_TILES_SPECS_KEY = "large_tiles_specs" const val FILE_NAME = "quick_settings_prefs" } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/domain/interactor/GridConsistencyInteractor.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/domain/interactor/GridConsistencyInteractor.kt index 7732092d6bcf..a2e7ea6fe797 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/panels/domain/interactor/GridConsistencyInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/panels/domain/interactor/GridConsistencyInteractor.kt @@ -20,8 +20,8 @@ import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.log.LogBuffer import com.android.systemui.log.core.LogLevel -import com.android.systemui.qs.panels.shared.model.GridConsistencyLog import com.android.systemui.qs.panels.shared.model.GridLayoutType +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 @@ -39,7 +39,7 @@ constructor( private val consistencyInteractors: Map<GridLayoutType, @JvmSuppressWildcards GridTypeConsistencyInteractor>, private val defaultConsistencyInteractor: GridTypeConsistencyInteractor, - @GridConsistencyLog private val logBuffer: LogBuffer, + @PanelsLog private val logBuffer: LogBuffer, @Application private val applicationScope: CoroutineScope, ) { fun start() { diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/domain/interactor/IconLabelVisibilityInteractor.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/domain/interactor/IconLabelVisibilityInteractor.kt index 6a899b07b2a0..fe4012787394 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/panels/domain/interactor/IconLabelVisibilityInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/panels/domain/interactor/IconLabelVisibilityInteractor.kt @@ -20,7 +20,7 @@ import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.log.LogBuffer import com.android.systemui.log.core.LogLevel -import com.android.systemui.qs.panels.shared.model.IconLabelVisibilityLog +import com.android.systemui.qs.panels.shared.model.PanelsLog import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.SharingStarted @@ -33,7 +33,7 @@ class IconLabelVisibilityInteractor @Inject constructor( private val preferencesInteractor: QSPreferencesInteractor, - @IconLabelVisibilityLog private val logBuffer: LogBuffer, + @PanelsLog private val logBuffer: LogBuffer, @Application scope: CoroutineScope, ) { val showLabels: StateFlow<Boolean> = 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 524ea8b70100..b18358cedde7 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 @@ -17,12 +17,54 @@ package com.android.systemui.qs.panels.domain.interactor import com.android.systemui.dagger.SysUISingleton -import com.android.systemui.qs.panels.data.repository.IconTilesRepository +import com.android.systemui.dagger.qualifiers.Application +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.shared.model.PanelsLog 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.onEach +import kotlinx.coroutines.flow.stateIn -/** Interactor for retrieving the list of [TileSpec] to be displayed as icons. */ +/** Interactor for retrieving the list of [TileSpec] to be displayed as icons and resizing icons. */ @SysUISingleton -class IconTilesInteractor @Inject constructor(private val repo: IconTilesRepository) { - fun isIconTile(spec: TileSpec): Boolean = repo.isIconTile(spec) +class IconTilesInteractor +@Inject +constructor( + repo: DefaultLargeTilesRepository, + private val preferencesInteractor: QSPreferencesInteractor, + @PanelsLog private val logBuffer: LogBuffer, + @Application private val applicationScope: CoroutineScope +) { + + private 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) { + preferencesInteractor.setLargeTilesSpecs(largeTilesSpecs.value - spec) + } else { + preferencesInteractor.setLargeTilesSpecs(largeTilesSpecs.value + spec) + } + } + + private fun logChange(specs: Set<TileSpec>) { + logBuffer.log( + LOG_BUFFER_LARGE_TILES_SPECS_CHANGE_TAG, + LogLevel.DEBUG, + { str1 = specs.toString() }, + { "Large tiles change: $str1" } + ) + } + + private companion object { + const val LOG_BUFFER_LARGE_TILES_SPECS_CHANGE_TAG = "LargeTilesSpecsChange" + } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/domain/interactor/QSPreferencesInteractor.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/domain/interactor/QSPreferencesInteractor.kt index 811be80d23fa..854e23f16a13 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/panels/domain/interactor/QSPreferencesInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/panels/domain/interactor/QSPreferencesInteractor.kt @@ -18,14 +18,20 @@ package com.android.systemui.qs.panels.domain.interactor import com.android.systemui.dagger.SysUISingleton import com.android.systemui.qs.panels.data.repository.QSPreferencesRepository +import com.android.systemui.qs.pipeline.shared.TileSpec import javax.inject.Inject import kotlinx.coroutines.flow.Flow @SysUISingleton class QSPreferencesInteractor @Inject constructor(private val repo: QSPreferencesRepository) { val showLabels: Flow<Boolean> = repo.showLabels + val largeTilesSpecs: Flow<Set<TileSpec>> = repo.largeTilesSpecs fun setShowLabels(showLabels: Boolean) { repo.setShowLabels(showLabels) } + + fun setLargeTilesSpecs(specs: Set<TileSpec>) { + repo.setLargeTilesSpecs(specs) + } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/shared/model/IconLabelVisibilityLog.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/shared/model/IconLabelVisibilityLog.kt deleted file mode 100644 index c92234c3e535..000000000000 --- a/packages/SystemUI/src/com/android/systemui/qs/panels/shared/model/IconLabelVisibilityLog.kt +++ /dev/null @@ -1,24 +0,0 @@ -/* - * 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.shared.model - -import javax.inject.Qualifier - -@Qualifier -@MustBeDocumented -@Retention(AnnotationRetention.RUNTIME) -annotation class IconLabelVisibilityLog() diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/shared/model/GridConsistencyLog.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/shared/model/PanelsLog.kt index 884cde35a1aa..50cb3869f79e 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/panels/shared/model/GridConsistencyLog.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/panels/shared/model/PanelsLog.kt @@ -18,7 +18,4 @@ package com.android.systemui.qs.panels.shared.model import javax.inject.Qualifier -@Qualifier -@MustBeDocumented -@Retention(AnnotationRetention.RUNTIME) -annotation class GridConsistencyLog() +@Qualifier @MustBeDocumented @Retention(AnnotationRetention.RUNTIME) annotation class PanelsLog() diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/DragAndDropState.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/DragAndDropState.kt index 007ec3a911e1..295a998e7500 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/DragAndDropState.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/DragAndDropState.kt @@ -149,11 +149,13 @@ fun Modifier.dragAndDropTileList( fun Modifier.dragAndDropTileSource( tileSpec: TileSpec, onTap: (TileSpec) -> Unit, + onDoubleTap: (TileSpec) -> Unit, dragAndDropState: DragAndDropState ): Modifier { return dragAndDropSource { detectTapGestures( onTap = { onTap(tileSpec) }, + onDoubleTap = { onDoubleTap(tileSpec) }, onLongPress = { dragAndDropState.onStarted(tileSpec) diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/InfiniteGridLayout.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/InfiniteGridLayout.kt index ea97f0de2bb8..ada774db1c6e 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/InfiniteGridLayout.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/InfiniteGridLayout.kt @@ -22,6 +22,7 @@ import androidx.compose.foundation.lazy.grid.GridItemSpan import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState import androidx.compose.ui.Modifier import androidx.compose.ui.res.dimensionResource import androidx.lifecycle.compose.collectAsStateWithLifecycle @@ -76,14 +77,18 @@ constructor( onRemoveTile: (TileSpec) -> Unit, ) { val columns by gridSizeViewModel.columns.collectAsStateWithLifecycle() + val isIcon: (TileSpec) -> Boolean by rememberUpdatedState { tileSpec -> + iconTilesViewModel.isIconTile(tileSpec) + } DefaultEditTileGrid( tiles = tiles, - isIconOnly = iconTilesViewModel::isIconTile, + isIconOnly = isIcon, columns = GridCells.Fixed(columns), modifier = modifier, onAddTile = onAddTile, onRemoveTile = onRemoveTile, + onResize = iconTilesViewModel::resize, ) } diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/PartitionedGridLayout.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/PartitionedGridLayout.kt index 092ad44d289b..8ca91d89439b 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/PartitionedGridLayout.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/PartitionedGridLayout.kt @@ -122,6 +122,9 @@ class PartitionedGridLayout @Inject constructor(private val viewModel: Partition val addTileToEnd: (TileSpec) -> Unit by rememberUpdatedState { onAddTile(it, CurrentTilesInteractor.POSITION_AT_END) } + val onDoubleTap: (TileSpec) -> Unit by rememberUpdatedState { tileSpec -> + viewModel.resize(tileSpec, !viewModel.isIconTile(tileSpec)) + } val largeTileHeight = tileHeight() val iconTileHeight = tileHeight(showLabels) val tilePadding = dimensionResource(R.dimen.qs_tile_margin_vertical) @@ -161,6 +164,7 @@ class PartitionedGridLayout @Inject constructor(private val viewModel: Partition tilePadding = tilePadding, onAdd = onAddTile, onRemove = onRemoveTile, + onDoubleTap = onDoubleTap, isIconOnly = viewModel::isIconTile, columns = columns, showLabels = showLabels, @@ -173,6 +177,7 @@ class PartitionedGridLayout @Inject constructor(private val viewModel: Partition tilePadding = tilePadding, addTileToEnd = addTileToEnd, onRemove = onRemoveTile, + onDoubleTap = onDoubleTap, isIconOnly = viewModel::isIconTile, showLabels = showLabels, columns = columns, @@ -203,6 +208,7 @@ class PartitionedGridLayout @Inject constructor(private val viewModel: Partition tilePadding: Dp, onAdd: (TileSpec, Int) -> Unit, onRemove: (TileSpec) -> Unit, + onDoubleTap: (TileSpec) -> Unit, isIconOnly: (TileSpec) -> Boolean, showLabels: Boolean, columns: Int, @@ -224,6 +230,7 @@ class PartitionedGridLayout @Inject constructor(private val viewModel: Partition tiles = largeTiles, clickAction = ClickAction.REMOVE, onClick = onRemove, + onDoubleTap = onDoubleTap, isIconOnly = { false }, dragAndDropState = dragAndDropState, acceptDrops = { !isIconOnly(it) }, @@ -244,6 +251,7 @@ class PartitionedGridLayout @Inject constructor(private val viewModel: Partition tiles = smallTiles, clickAction = ClickAction.REMOVE, onClick = onRemove, + onDoubleTap = onDoubleTap, isIconOnly = { true }, showLabels = showLabels, dragAndDropState = dragAndDropState, @@ -263,6 +271,7 @@ class PartitionedGridLayout @Inject constructor(private val viewModel: Partition tilePadding: Dp, addTileToEnd: (TileSpec) -> Unit, onRemove: (TileSpec) -> Unit, + onDoubleTap: (TileSpec) -> Unit, isIconOnly: (TileSpec) -> Boolean, showLabels: Boolean, columns: Int, @@ -296,6 +305,7 @@ class PartitionedGridLayout @Inject constructor(private val viewModel: Partition largeTiles, ClickAction.ADD, addTileToEnd, + onDoubleTap, isIconOnly, dragAndDropState, acceptDrops = { true }, @@ -308,6 +318,7 @@ class PartitionedGridLayout @Inject constructor(private val viewModel: Partition smallTiles, ClickAction.ADD, addTileToEnd, + onDoubleTap, isIconOnly, showLabels = showLabels, dragAndDropState = dragAndDropState, @@ -321,6 +332,7 @@ class PartitionedGridLayout @Inject constructor(private val viewModel: Partition tilesCustom, ClickAction.ADD, addTileToEnd, + onDoubleTap, isIconOnly, showLabels = showLabels, dragAndDropState = dragAndDropState, diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/StretchedGridLayout.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/StretchedGridLayout.kt index 4a9010270ac5..770d44124025 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/StretchedGridLayout.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/StretchedGridLayout.kt @@ -104,6 +104,7 @@ constructor( modifier = modifier, onAddTile = onAddTile, onRemoveTile = onRemoveTile, + onResize = iconTilesViewModel::resize, ) } diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/Tile.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/Tile.kt index 0bb4cfa327a9..7a2d8bd1ad06 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/Tile.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/Tile.kt @@ -270,6 +270,7 @@ fun DefaultEditTileGrid( modifier: Modifier, onAddTile: (TileSpec, Int) -> Unit, onRemoveTile: (TileSpec) -> Unit, + onResize: (TileSpec, Boolean) -> Unit, ) { val currentListState = rememberEditListState(tiles) val dragAndDropState = rememberDragAndDropState(currentListState) @@ -289,6 +290,9 @@ fun DefaultEditTileGrid( val onDropRemove: (TileSpec, Int) -> Unit by rememberUpdatedState { tileSpec, _ -> onRemoveTile(tileSpec) } + val onDoubleTap: (TileSpec) -> Unit by rememberUpdatedState { tileSpec -> + onResize(tileSpec, !isIconOnly(tileSpec)) + } TileLazyGrid( modifier = modifier.dragAndDropTileList(dragAndDropState, { true }, onDropAdd), @@ -301,6 +305,7 @@ fun DefaultEditTileGrid( currentTiles, ClickAction.REMOVE, onRemoveTile, + onDoubleTap, isIconOnly, indicatePosition = true, dragAndDropState = dragAndDropState, @@ -314,6 +319,7 @@ fun DefaultEditTileGrid( otherTilesStock, ClickAction.ADD, addTileToEnd, + onDoubleTap, isIconOnly, dragAndDropState = dragAndDropState, acceptDrops = { true }, @@ -328,6 +334,7 @@ fun DefaultEditTileGrid( otherTilesCustom, ClickAction.ADD, addTileToEnd, + onDoubleTap, isIconOnly, dragAndDropState = dragAndDropState, acceptDrops = { true }, @@ -340,6 +347,7 @@ fun LazyGridScope.editTiles( tiles: List<EditTileViewModel>, clickAction: ClickAction, onClick: (TileSpec) -> Unit, + onDoubleTap: (TileSpec) -> Unit, isIconOnly: (TileSpec) -> Boolean, dragAndDropState: DragAndDropState, acceptDrops: (TileSpec) -> Boolean, @@ -386,6 +394,7 @@ fun LazyGridScope.editTiles( .dragAndDropTileSource( viewModel.tileSpec, onClick, + onDoubleTap, dragAndDropState, ) ) 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 117c85c9c3ba..8d2d74af5835 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 @@ -23,10 +23,14 @@ import javax.inject.Inject interface IconTilesViewModel { fun isIconTile(spec: TileSpec): Boolean + + fun resize(spec: TileSpec, toIcon: Boolean) } @SysUISingleton class IconTilesViewModelImpl @Inject constructor(private val interactor: IconTilesInteractor) : IconTilesViewModel { override fun isIconTile(spec: TileSpec): Boolean = interactor.isIconTile(spec) + + override fun resize(spec: TileSpec, toIcon: Boolean) = interactor.resize(spec, toIcon) } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/data/repository/IconTilesRepositoryKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/data/repository/DefaultLargeTilesRepositoryKosmos.kt index e40152aa588f..92ac08949add 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/data/repository/IconTilesRepositoryKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/data/repository/DefaultLargeTilesRepositoryKosmos.kt @@ -18,4 +18,5 @@ package com.android.systemui.qs.panels.data.repository import com.android.systemui.kosmos.Kosmos -var Kosmos.iconTilesRepository: IconTilesRepository by Kosmos.Fixture { IconTilesRepositoryImpl() } +var Kosmos.defaultLargeTilesRepository: DefaultLargeTilesRepository by + Kosmos.Fixture { DefaultLargeTilesRepositoryImpl() } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/data/repository/QSPreferencesRepositoryKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/data/repository/QSPreferencesRepositoryKosmos.kt index 39ae5eb44c65..513d4e418a41 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/data/repository/QSPreferencesRepositoryKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/data/repository/QSPreferencesRepositoryKosmos.kt @@ -22,4 +22,11 @@ import com.android.systemui.settings.userFileManager import com.android.systemui.user.data.repository.userRepository val Kosmos.qsPreferencesRepository by - Kosmos.Fixture { QSPreferencesRepository(userFileManager, userRepository, testDispatcher) } + Kosmos.Fixture { + QSPreferencesRepository( + userFileManager, + userRepository, + defaultLargeTilesRepository, + testDispatcher + ) + } 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 eaa702f9f6da..76dccdb95637 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 @@ -17,6 +17,16 @@ package com.android.systemui.qs.panels.domain.interactor import com.android.systemui.kosmos.Kosmos -import com.android.systemui.qs.panels.data.repository.iconTilesRepository +import com.android.systemui.kosmos.applicationCoroutineScope +import com.android.systemui.log.core.FakeLogBuffer +import com.android.systemui.qs.panels.data.repository.defaultLargeTilesRepository -val Kosmos.iconTilesInteractor by Kosmos.Fixture { IconTilesInteractor(iconTilesRepository) } +val Kosmos.iconTilesInteractor by + Kosmos.Fixture { + IconTilesInteractor( + defaultLargeTilesRepository, + qsPreferencesInteractor, + FakeLogBuffer.Factory.create(), + applicationCoroutineScope + ) + } |