• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2023 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.display
18 
19 import android.hardware.display.DisplayManager
20 import android.os.Handler
21 import com.android.app.displaylib.DisplayLibBackground
22 import com.android.app.displaylib.DisplayLibComponent
23 import com.android.app.displaylib.PerDisplayRepository
24 import com.android.app.displaylib.createDisplayLibComponent
25 import com.android.systemui.CoreStartable
26 import com.android.systemui.dagger.SysUISingleton
27 import com.android.systemui.dagger.qualifiers.Background
28 import com.android.systemui.display.data.repository.DeviceStateRepository
29 import com.android.systemui.display.data.repository.DeviceStateRepositoryImpl
30 import com.android.systemui.display.data.repository.DisplayRepository
31 import com.android.systemui.display.data.repository.DisplayRepositoryImpl
32 import com.android.systemui.display.data.repository.DisplayWindowPropertiesRepository
33 import com.android.systemui.display.data.repository.DisplayWindowPropertiesRepositoryImpl
34 import com.android.systemui.display.data.repository.DisplaysWithDecorationsRepository
35 import com.android.systemui.display.data.repository.DisplaysWithDecorationsRepositoryImpl
36 import com.android.systemui.display.data.repository.FocusedDisplayRepository
37 import com.android.systemui.display.data.repository.FocusedDisplayRepositoryImpl
38 import com.android.systemui.display.data.repository.PerDisplayRepoDumpHelper
39 import com.android.systemui.display.domain.interactor.ConnectedDisplayInteractor
40 import com.android.systemui.display.domain.interactor.ConnectedDisplayInteractorImpl
41 import com.android.systemui.display.domain.interactor.DisplayWindowPropertiesInteractorModule
42 import com.android.systemui.display.domain.interactor.RearDisplayStateInteractor
43 import com.android.systemui.display.domain.interactor.RearDisplayStateInteractorImpl
44 import com.android.systemui.statusbar.core.StatusBarConnectedDisplays
45 import dagger.Binds
46 import dagger.Lazy
47 import dagger.Module
48 import dagger.Provides
49 import dagger.multibindings.ClassKey
50 import dagger.multibindings.IntoMap
51 import kotlinx.coroutines.CoroutineDispatcher
52 import kotlinx.coroutines.CoroutineScope
53 
54 /** Module binding display related classes. */
55 @Module(includes = [DisplayWindowPropertiesInteractorModule::class, DisplayLibModule::class])
56 interface DisplayModule {
57     @Binds
bindConnectedDisplayInteractornull58     fun bindConnectedDisplayInteractor(
59         provider: ConnectedDisplayInteractorImpl
60     ): ConnectedDisplayInteractor
61 
62     @Binds
63     fun bindRearDisplayStateInteractor(
64         provider: RearDisplayStateInteractorImpl
65     ): RearDisplayStateInteractor
66 
67     @Binds fun bindsDisplayRepository(displayRepository: DisplayRepositoryImpl): DisplayRepository
68 
69     @Binds
70     fun bindsDeviceStateRepository(
71         deviceStateRepository: DeviceStateRepositoryImpl
72     ): DeviceStateRepository
73 
74     @Binds
75     fun bindsFocusedDisplayRepository(
76         focusedDisplayRepository: FocusedDisplayRepositoryImpl
77     ): FocusedDisplayRepository
78 
79     @Binds
80     fun displayWindowPropertiesRepository(
81         impl: DisplayWindowPropertiesRepositoryImpl
82     ): DisplayWindowPropertiesRepository
83 
84     @Binds
85     fun displaysWithDecorationsRepository(
86         impl: DisplaysWithDecorationsRepositoryImpl
87     ): DisplaysWithDecorationsRepository
88 
89     @Binds
90     fun dumpRegistrationLambda(helper: PerDisplayRepoDumpHelper): PerDisplayRepository.InitCallback
91 
92     @Binds
93     @DisplayLibBackground
94     fun bindDisplayLibBackground(@Background bgScope: CoroutineScope): CoroutineScope
95 
96     companion object {
97         @Provides
98         @SysUISingleton
99         @IntoMap
100         @ClassKey(DisplayWindowPropertiesRepository::class)
101         fun displayWindowPropertiesRepoAsCoreStartable(
102             repoLazy: Lazy<DisplayWindowPropertiesRepositoryImpl>
103         ): CoreStartable {
104             return if (StatusBarConnectedDisplays.isEnabled) {
105                 return repoLazy.get()
106             } else {
107                 CoreStartable.NOP
108             }
109         }
110     }
111 }
112 
113 /** Module to bind the DisplayRepository from displaylib to the systemui dagger graph. */
114 @Module
115 object DisplayLibModule {
116     @Provides
117     @SysUISingleton
displayLibComponentnull118     fun displayLibComponent(
119         displayManager: DisplayManager,
120         @Background backgroundHandler: Handler,
121         @Background bgApplicationScope: CoroutineScope,
122         @Background backgroundCoroutineDispatcher: CoroutineDispatcher,
123     ): DisplayLibComponent {
124         return createDisplayLibComponent(
125             displayManager,
126             backgroundHandler,
127             bgApplicationScope,
128             backgroundCoroutineDispatcher,
129         )
130     }
131 
132     @Provides
133     @SysUISingleton
providesDisplayRepositoryFromLibnull134     fun providesDisplayRepositoryFromLib(
135         displayLibComponent: DisplayLibComponent
136     ): com.android.app.displaylib.DisplayRepository {
137         return displayLibComponent.displayRepository
138     }
139 }
140