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