1 /* 2 * Copyright (C) 2022 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.go; 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 25 import com.android.keyguard.KeyguardViewController; 26 import com.android.systemui.ScreenDecorationsModule; 27 import com.android.systemui.accessibility.AccessibilityModule; 28 import com.android.systemui.accessibility.SystemActionsModule; 29 import com.android.systemui.accessibility.data.repository.AccessibilityRepositoryModule; 30 import com.android.systemui.battery.BatterySaverModule; 31 import com.android.systemui.biometrics.dagger.BiometricsModule; 32 import com.android.systemui.clipboardoverlay.dagger.ClipboardOverlayOverrideModule; 33 import com.android.systemui.communal.posturing.dagger.NoopPosturingModule; 34 import com.android.systemui.dagger.GlobalRootComponent; 35 import com.android.systemui.dagger.ReferenceSystemUIModule; 36 import com.android.systemui.dagger.SysUISingleton; 37 import com.android.systemui.display.ui.viewmodel.ConnectingDisplayViewModel; 38 import com.android.systemui.dock.DockManager; 39 import com.android.systemui.dock.DockManagerImpl; 40 import com.android.systemui.doze.DozeHost; 41 import com.android.systemui.emergency.EmergencyGestureModule; 42 import com.android.systemui.keyguard.ui.view.layout.blueprints.KeyguardBlueprintModule; 43 import com.android.systemui.keyguard.ui.view.layout.sections.KeyguardSectionsModule; 44 import com.android.systemui.media.dagger.MediaModule; 45 import com.android.systemui.media.muteawait.MediaMuteAwaitConnectionCli; 46 import com.android.systemui.media.nearby.NearbyMediaDevicesManager; 47 import com.android.systemui.navigationbar.NavigationBarControllerModule; 48 import com.android.systemui.navigationbar.gestural.GestureModule; 49 import com.android.systemui.plugins.qs.QSFactory; 50 import com.android.systemui.power.dagger.PowerModule; 51 import com.android.systemui.qs.dagger.QSModule; 52 import com.android.systemui.qs.tileimpl.QSFactoryImpl; 53 import com.android.systemui.recents.Recents; 54 import com.android.systemui.recents.RecentsImplementation; 55 import com.android.systemui.recents.RecentsModule; 56 import com.android.systemui.rotationlock.RotationLockModule; 57 import com.android.systemui.screenshot.ReferenceScreenshotModule; 58 import com.android.systemui.settings.MultiUserUtilsModule; 59 import com.android.systemui.settings.UserTracker; 60 import com.android.systemui.settings.brightness.dagger.BrightnessSliderModule; 61 import com.android.systemui.shade.NotificationShadeWindowControllerImpl; 62 import com.android.systemui.shade.ShadeModule; 63 import com.android.systemui.statusbar.CommandQueue; 64 import com.android.systemui.statusbar.NotificationLockscreenUserManager; 65 import com.android.systemui.statusbar.NotificationLockscreenUserManagerImpl; 66 import com.android.systemui.statusbar.NotificationShadeWindowController; 67 import com.android.systemui.statusbar.dagger.StartCentralSurfacesModule; 68 import com.android.systemui.statusbar.notification.dagger.ReferenceNotificationsModule; 69 import com.android.systemui.statusbar.notification.headsup.HeadsUpModule; 70 import com.android.systemui.statusbar.phone.DozeServiceHost; 71 import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; 72 import com.android.systemui.statusbar.phone.dagger.StatusBarPhoneModule; 73 import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragmentStartableModule; 74 import com.android.systemui.statusbar.policy.AospPolicyModule; 75 import com.android.systemui.statusbar.policy.DeviceProvisionedController; 76 import com.android.systemui.statusbar.policy.DeviceProvisionedControllerImpl; 77 import com.android.systemui.statusbar.policy.IndividualSensorPrivacyController; 78 import com.android.systemui.statusbar.policy.IndividualSensorPrivacyControllerImpl; 79 import com.android.systemui.statusbar.policy.SensorPrivacyController; 80 import com.android.systemui.statusbar.policy.SensorPrivacyControllerImpl; 81 import com.android.systemui.toast.ToastModule; 82 import com.android.systemui.unfold.SysUIUnfoldStartableModule; 83 import com.android.systemui.volume.dagger.VolumeModule; 84 import com.android.systemui.wallpapers.dagger.WallpaperModule; 85 86 import dagger.Binds; 87 import dagger.Module; 88 import dagger.Provides; 89 90 import javax.inject.Named; 91 92 /** 93 * A dagger module for overriding the default implementations of injected System UI components on 94 * Android Go. This is forked from {@link ReferenceSystemUIModule} 95 */ 96 @Module(includes = { 97 AccessibilityModule.class, 98 AccessibilityRepositoryModule.class, 99 AospPolicyModule.class, 100 BatterySaverModule.class, 101 BiometricsModule.class, 102 BrightnessSliderModule.class, 103 ClipboardOverlayOverrideModule.class, 104 CollapsedStatusBarFragmentStartableModule.class, 105 ConnectingDisplayViewModel.StartableModule.class, 106 EmergencyGestureModule.class, 107 GestureModule.class, 108 HeadsUpModule.class, 109 KeyguardBlueprintModule.class, 110 KeyguardSectionsModule.class, 111 MediaModule.class, 112 MediaMuteAwaitConnectionCli.StartableModule.class, 113 MultiUserUtilsModule.class, 114 NavigationBarControllerModule.class, 115 NearbyMediaDevicesManager.StartableModule.class, 116 NoopPosturingModule.class, 117 PowerModule.class, 118 QSModule.class, 119 RecentsModule.class, 120 ReferenceNotificationsModule.class, 121 ReferenceScreenshotModule.class, 122 RotationLockModule.class, 123 ScreenDecorationsModule.class, 124 ShadeModule.class, 125 StatusBarPhoneModule.class, 126 StartCentralSurfacesModule.class, 127 SystemActionsModule.class, 128 SysUIUnfoldStartableModule.class, 129 ToastModule.class, 130 WallpaperModule.class, 131 VolumeModule.class, 132 }) 133 public abstract class SystemUIGoModule { 134 135 @Binds bindGlobalRootComponent( SystemUIGoGlobalRootComponent globalRootComponent)136 abstract GlobalRootComponent bindGlobalRootComponent( 137 SystemUIGoGlobalRootComponent globalRootComponent); 138 139 @SysUISingleton 140 @Provides 141 @Named(LEAK_REPORT_EMAIL_NAME) provideLeakReportEmail()142 static String provideLeakReportEmail() { 143 return "buganizer-system+700073@google.com"; 144 } 145 146 @Binds bindNotificationLockscreenUserManager( NotificationLockscreenUserManagerImpl notificationLockscreenUserManager)147 abstract NotificationLockscreenUserManager bindNotificationLockscreenUserManager( 148 NotificationLockscreenUserManagerImpl notificationLockscreenUserManager); 149 150 @Provides 151 @SysUISingleton provideSensorPrivacyController( SensorPrivacyManager sensorPrivacyManager)152 static SensorPrivacyController provideSensorPrivacyController( 153 SensorPrivacyManager sensorPrivacyManager) { 154 SensorPrivacyController spC = new SensorPrivacyControllerImpl(sensorPrivacyManager); 155 spC.init(); 156 return spC; 157 } 158 159 @Provides 160 @SysUISingleton provideIndividualSensorPrivacyController( SensorPrivacyManager sensorPrivacyManager, UserTracker userTracker)161 static IndividualSensorPrivacyController provideIndividualSensorPrivacyController( 162 SensorPrivacyManager sensorPrivacyManager, UserTracker userTracker) { 163 IndividualSensorPrivacyController ispC = new IndividualSensorPrivacyControllerImpl( 164 sensorPrivacyManager, userTracker); 165 ispC.init(); 166 return ispC; 167 } 168 169 @Binds 170 @SysUISingleton bindQSFactory(QSFactoryImpl qsFactoryImpl)171 public abstract QSFactory bindQSFactory(QSFactoryImpl qsFactoryImpl); 172 173 @Binds bindDockManager(DockManagerImpl dockManager)174 abstract DockManager bindDockManager(DockManagerImpl dockManager); 175 176 @SysUISingleton 177 @Provides 178 @Named(ALLOW_NOTIFICATION_LONG_PRESS_NAME) provideAllowNotificationLongPress()179 static boolean provideAllowNotificationLongPress() { 180 return true; 181 } 182 183 @Provides 184 @SysUISingleton provideRecents(Context context, RecentsImplementation recentsImplementation, CommandQueue commandQueue)185 static Recents provideRecents(Context context, RecentsImplementation recentsImplementation, 186 CommandQueue commandQueue) { 187 return new Recents(context, recentsImplementation, commandQueue); 188 } 189 190 @SysUISingleton 191 @Provides bindDeviceProvisionedController( DeviceProvisionedControllerImpl deviceProvisionedController)192 static DeviceProvisionedController bindDeviceProvisionedController( 193 DeviceProvisionedControllerImpl deviceProvisionedController) { 194 deviceProvisionedController.init(); 195 return deviceProvisionedController; 196 } 197 198 @Binds bindKeyguardViewController( StatusBarKeyguardViewManager statusBarKeyguardViewManager)199 abstract KeyguardViewController bindKeyguardViewController( 200 StatusBarKeyguardViewManager statusBarKeyguardViewManager); 201 202 @Binds bindNotificationShadeController( NotificationShadeWindowControllerImpl notificationShadeWindowController)203 abstract NotificationShadeWindowController bindNotificationShadeController( 204 NotificationShadeWindowControllerImpl notificationShadeWindowController); 205 206 @Binds provideDozeHost(DozeServiceHost dozeServiceHost)207 abstract DozeHost provideDozeHost(DozeServiceHost dozeServiceHost); 208 } 209