• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2024 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.systemui.qs.panels.data.repository
18 
19 import android.content.res.Resources
20 import com.android.systemui.common.ui.data.repository.ConfigurationRepository
21 import com.android.systemui.dagger.SysUISingleton
22 import com.android.systemui.dagger.qualifiers.Application
23 import com.android.systemui.res.R
24 import com.android.systemui.shade.ShadeDisplayAware
25 import com.android.systemui.util.kotlin.emitOnStart
26 import javax.inject.Inject
27 import kotlinx.coroutines.CoroutineScope
28 import kotlinx.coroutines.flow.SharingStarted
29 import kotlinx.coroutines.flow.StateFlow
30 import kotlinx.coroutines.flow.distinctUntilChanged
31 import kotlinx.coroutines.flow.mapLatest
32 import kotlinx.coroutines.flow.stateIn
33 
34 @SysUISingleton
35 class LargeTileSpanRepository
36 @Inject
37 constructor(
38     @Application scope: CoroutineScope,
39     @ShadeDisplayAware private val resources: Resources,
40     @ShadeDisplayAware configurationRepository: ConfigurationRepository,
41 ) {
42     val span: StateFlow<Int> =
43         configurationRepository.onConfigurationChange
44             .emitOnStart()
<lambda>null45             .mapLatest {
46                 if (resources.configuration.fontScale >= FONT_SCALE_THRESHOLD) {
47                     resources.getInteger(R.integer.quick_settings_infinite_grid_tile_max_width)
48                 } else {
49                     2
50                 }
51             }
52             .distinctUntilChanged()
53             .stateIn(scope, SharingStarted.WhileSubscribed(), 2)
54 
55     private companion object {
56         const val FONT_SCALE_THRESHOLD = 2f
57     }
58 }
59