• 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.statusbar.phone
18 
19 import android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR
20 import com.android.systemui.dagger.SysUISingleton
21 import com.android.systemui.dagger.qualifiers.Background
22 import com.android.systemui.display.data.repository.DisplayRepository
23 import com.android.systemui.display.data.repository.DisplayWindowPropertiesRepository
24 import com.android.systemui.display.data.repository.PerDisplayStore
25 import com.android.systemui.display.data.repository.SingleDisplayStore
26 import com.android.systemui.statusbar.core.StatusBarConnectedDisplays
27 import com.android.systemui.statusbar.data.repository.StatusBarPerDisplayStoreImpl
28 import javax.inject.Inject
29 import kotlinx.coroutines.CoroutineScope
30 
31 /** Provides per display instances of [AutoHideController] */
32 interface AutoHideControllerStore : PerDisplayStore<AutoHideController>
33 
34 @SysUISingleton
35 class MultiDisplayAutoHideControllerStore
36 @Inject
37 constructor(
38     @Background backgroundApplicationScope: CoroutineScope,
39     displayRepository: DisplayRepository,
40     private val displayWindowPropertiesRepository: DisplayWindowPropertiesRepository,
41     private val autoHideControllerFactory: AutoHideControllerImpl.Factory,
42 ) :
43     AutoHideControllerStore,
44     StatusBarPerDisplayStoreImpl<AutoHideController>(
45         backgroundApplicationScope,
46         displayRepository,
47     ) {
48 
49     init {
50         StatusBarConnectedDisplays.unsafeAssertInNewMode()
51     }
52 
createInstanceForDisplaynull53     override fun createInstanceForDisplay(displayId: Int): AutoHideController? {
54         val displayWindowProperties =
55             displayWindowPropertiesRepository.get(displayId, TYPE_STATUS_BAR) ?: return null
56         return autoHideControllerFactory.create(displayWindowProperties.context)
57     }
58 
onDisplayRemovalActionnull59     override suspend fun onDisplayRemovalAction(instance: AutoHideController) {
60         instance.stop()
61     }
62 
63     override val instanceClass = AutoHideController::class.java
64 }
65 
66 @SysUISingleton
67 class SingleDisplayAutoHideControllerStore
68 @Inject
69 constructor(defaultController: AutoHideController) :
70     AutoHideControllerStore,
<lambda>null71     PerDisplayStore<AutoHideController> by SingleDisplayStore(defaultController) {
72 
73     init {
74         StatusBarConnectedDisplays.assertInLegacyMode()
75     }
76 }
77