1 /*
2  * Copyright (C) 2019 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;
18 
19 import static com.android.systemui.Dependency.ALLOW_NOTIFICATION_LONG_PRESS_NAME;
20 import static com.android.systemui.Dependency.LEAK_REPORT_EMAIL_NAME;
21 
22 import android.content.Context;
23 import android.hardware.SensorPrivacyManager;
24 import android.window.DisplayAreaOrganizer;
25 
26 import com.android.keyguard.KeyguardViewController;
27 import com.android.keyguard.dagger.KeyguardDisplayModule;
28 import com.android.systemui.biometrics.dagger.BiometricsModule;
29 import com.android.systemui.car.CarDeviceProvisionedController;
30 import com.android.systemui.car.CarDeviceProvisionedControllerImpl;
31 import com.android.systemui.car.decor.CarPrivacyChipDecorProviderFactory;
32 import com.android.systemui.car.decor.CarPrivacyChipViewController;
33 import com.android.systemui.car.drivemode.DriveModeModule;
34 import com.android.systemui.car.keyguard.CarKeyguardViewController;
35 import com.android.systemui.car.notification.NotificationShadeWindowControllerImpl;
36 import com.android.systemui.car.statusbar.DozeServiceHost;
37 import com.android.systemui.car.users.CarMultiUserUtilsModule;
38 import com.android.systemui.car.volume.CarVolumeModule;
39 import com.android.systemui.car.wm.activity.window.ActivityWindowModule;
40 import com.android.systemui.dagger.GlobalRootComponent;
41 import com.android.systemui.dagger.SysUISingleton;
42 import com.android.systemui.dagger.qualifiers.Main;
43 import com.android.systemui.decor.PrivacyDotDecorProviderFactory;
44 import com.android.systemui.display.ui.viewmodel.ConnectingDisplayViewModel;
45 import com.android.systemui.dock.DockManager;
46 import com.android.systemui.dock.DockManagerImpl;
47 import com.android.systemui.doze.DozeHost;
48 import com.android.systemui.media.muteawait.MediaMuteAwaitConnectionCli;
49 import com.android.systemui.media.nearby.NearbyMediaDevicesManager;
50 import com.android.systemui.navigationbar.NoopNavigationBarControllerModule;
51 import com.android.systemui.navigationbar.gestural.GestureModule;
52 import com.android.systemui.plugins.qs.QSFactory;
53 import com.android.systemui.power.dagger.PowerModule;
54 import com.android.systemui.qs.dagger.QSModule;
55 import com.android.systemui.qs.tileimpl.QSFactoryImpl;
56 import com.android.systemui.recents.Recents;
57 import com.android.systemui.recents.RecentsImplementation;
58 import com.android.systemui.recents.RecentsModule;
59 import com.android.systemui.screenshot.ReferenceScreenshotModule;
60 import com.android.systemui.shade.ShadeEmptyImplModule;
61 import com.android.systemui.statusbar.CommandQueue;
62 import com.android.systemui.statusbar.NotificationLockscreenUserManager;
63 import com.android.systemui.statusbar.NotificationLockscreenUserManagerImpl;
64 import com.android.systemui.statusbar.NotificationShadeWindowController;
65 import com.android.systemui.statusbar.events.PrivacyDotViewController;
66 import com.android.systemui.statusbar.policy.AospPolicyModule;
67 import com.android.systemui.statusbar.policy.DeviceProvisionedController;
68 import com.android.systemui.statusbar.policy.HeadsUpEmptyImplModule;
69 import com.android.systemui.statusbar.policy.IndividualSensorPrivacyController;
70 import com.android.systemui.statusbar.policy.IndividualSensorPrivacyControllerImpl;
71 import com.android.systemui.statusbar.policy.SensorPrivacyController;
72 import com.android.systemui.statusbar.policy.SensorPrivacyControllerImpl;
73 import com.android.systemui.unfold.SysUIUnfoldStartableModule;
74 import com.android.systemui.wallpapers.dagger.NoopWallpaperModule;
75 
76 import dagger.Binds;
77 import dagger.Module;
78 import dagger.Provides;
79 
80 import java.util.concurrent.Executor;
81 
82 import javax.inject.Named;
83 
84 @Module(
85         includes = {
86                 ActivityWindowModule.class,
87                 AospPolicyModule.class,
88                 BiometricsModule.class,
89                 CarMultiUserUtilsModule.class,
90                 CarVolumeModule.class,
91                 ConnectingDisplayViewModel.StartableModule.class,
92                 DriveModeModule.class,
93                 GestureModule.class,
94                 HeadsUpEmptyImplModule.class,
95                 KeyguardDisplayModule.class,
96                 MediaMuteAwaitConnectionCli.StartableModule.class,
97                 NearbyMediaDevicesManager.StartableModule.class,
98                 NoopNavigationBarControllerModule.class,
99                 NoopWallpaperModule.class,
100                 PowerModule.class,
101                 QSModule.class,
102                 RecentsModule.class,
103                 ReferenceScreenshotModule.class,
104                 ScreenDecorationsModule.class,
105                 ShadeEmptyImplModule.class,
106                 SysUIUnfoldStartableModule.class,
107         }
108 )
109 abstract class CarSystemUIModule {
110 
111     @SysUISingleton
112     @Provides
113     @Named(ALLOW_NOTIFICATION_LONG_PRESS_NAME)
provideAllowNotificationLongPress()114     static boolean provideAllowNotificationLongPress() {
115         return false;
116     }
117 
118     @SysUISingleton
119     @Provides
120     @Named(LEAK_REPORT_EMAIL_NAME)
provideLeakReportEmail()121     static String provideLeakReportEmail() {
122         return "buganizer-system+181579@google.com";
123     }
124 
125     @Provides
126     @SysUISingleton
provideRecents(Context context, RecentsImplementation recentsImplementation, CommandQueue commandQueue)127     static Recents provideRecents(Context context, RecentsImplementation recentsImplementation,
128             CommandQueue commandQueue) {
129         return new Recents(context, recentsImplementation, commandQueue);
130     }
131 
132     @Provides
133     @SysUISingleton
provideDisplayAreaOrganizer(@ain Executor executor)134     static DisplayAreaOrganizer provideDisplayAreaOrganizer(@Main Executor executor) {
135         return new DisplayAreaOrganizer(executor);
136     }
137 
138     @Binds
bindNotificationLockscreenUserManager( NotificationLockscreenUserManagerImpl notificationLockscreenUserManager)139     abstract NotificationLockscreenUserManager bindNotificationLockscreenUserManager(
140             NotificationLockscreenUserManagerImpl notificationLockscreenUserManager);
141 
142     @Provides
143     @SysUISingleton
provideSensorPrivacyController( SensorPrivacyManager sensorPrivacyManager)144     static SensorPrivacyController provideSensorPrivacyController(
145             SensorPrivacyManager sensorPrivacyManager) {
146         SensorPrivacyController spC = new SensorPrivacyControllerImpl(sensorPrivacyManager);
147         spC.init();
148         return spC;
149     }
150 
151     @Provides
152     @SysUISingleton
provideIndividualSensorPrivacyController( SensorPrivacyManager sensorPrivacyManager)153     static IndividualSensorPrivacyController provideIndividualSensorPrivacyController(
154             SensorPrivacyManager sensorPrivacyManager) {
155         IndividualSensorPrivacyController spC = new IndividualSensorPrivacyControllerImpl(
156                 sensorPrivacyManager);
157         spC.init();
158         return spC;
159     }
160 
161     @Binds
162     @SysUISingleton
bindQSFactory(QSFactoryImpl qsFactoryImpl)163     public abstract QSFactory bindQSFactory(QSFactoryImpl qsFactoryImpl);
164 
165     @Binds
bindDockManager(DockManagerImpl dockManager)166     abstract DockManager bindDockManager(DockManagerImpl dockManager);
167 
168     @Binds
bindGlobalRootComponent( CarGlobalRootComponent globalRootComponent)169     abstract GlobalRootComponent bindGlobalRootComponent(
170             CarGlobalRootComponent globalRootComponent);
171 
172     @Binds
bindKeyguardViewController( CarKeyguardViewController carKeyguardViewController)173     abstract KeyguardViewController bindKeyguardViewController(
174             CarKeyguardViewController carKeyguardViewController);
175 
176     @Binds
bindNotificationShadeController( NotificationShadeWindowControllerImpl notificationPanelViewController)177     abstract NotificationShadeWindowController bindNotificationShadeController(
178             NotificationShadeWindowControllerImpl notificationPanelViewController);
179 
180     @Provides
bindDeviceProvisionedController( CarDeviceProvisionedControllerImpl deviceProvisionedController)181     static DeviceProvisionedController bindDeviceProvisionedController(
182             CarDeviceProvisionedControllerImpl deviceProvisionedController) {
183         deviceProvisionedController.init();
184         return deviceProvisionedController;
185     }
186 
187     @Binds
bindCarDeviceProvisionedController( CarDeviceProvisionedControllerImpl deviceProvisionedController)188     abstract CarDeviceProvisionedController bindCarDeviceProvisionedController(
189             CarDeviceProvisionedControllerImpl deviceProvisionedController);
190 
191     @Binds
bindDozeHost(DozeServiceHost dozeServiceHost)192     abstract DozeHost bindDozeHost(DozeServiceHost dozeServiceHost);
193 
194     @Binds
providePrivacyDotViewController( CarPrivacyChipViewController carPrivacyChipViewController)195     abstract PrivacyDotViewController providePrivacyDotViewController(
196             CarPrivacyChipViewController carPrivacyChipViewController);
197 
198     @Binds
providePrivacyDotDecorProviderFactory( CarPrivacyChipDecorProviderFactory carPrivacyDotDecorProviderFactory)199     abstract PrivacyDotDecorProviderFactory providePrivacyDotDecorProviderFactory(
200             CarPrivacyChipDecorProviderFactory carPrivacyDotDecorProviderFactory);
201 }
202