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