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