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 import android.os.Handler; 25 26 import com.android.internal.logging.UiEventLogger; 27 import com.android.keyguard.KeyguardViewController; 28 import com.android.systemui.dagger.GlobalRootComponent; 29 import com.android.systemui.dagger.ReferenceSystemUIModule; 30 import com.android.systemui.dagger.SysUISingleton; 31 import com.android.systemui.dagger.qualifiers.Main; 32 import com.android.systemui.dock.DockManager; 33 import com.android.systemui.dock.DockManagerImpl; 34 import com.android.systemui.doze.DozeHost; 35 import com.android.systemui.globalactions.ShutdownUiModule; 36 import com.android.systemui.media.dagger.MediaModule; 37 import com.android.systemui.navigationbar.gestural.GestureModule; 38 import com.android.systemui.plugins.qs.QSFactory; 39 import com.android.systemui.plugins.statusbar.StatusBarStateController; 40 import com.android.systemui.power.dagger.PowerModule; 41 import com.android.systemui.qs.dagger.QSModule; 42 import com.android.systemui.qs.tileimpl.QSFactoryImpl; 43 import com.android.systemui.recents.Recents; 44 import com.android.systemui.recents.RecentsImplementation; 45 import com.android.systemui.screenshot.ReferenceScreenshotModule; 46 import com.android.systemui.settings.dagger.MultiUserUtilsModule; 47 import com.android.systemui.shade.NotificationShadeWindowControllerImpl; 48 import com.android.systemui.shade.ShadeExpansionStateManager; 49 import com.android.systemui.shade.ShadeModule; 50 import com.android.systemui.statusbar.CommandQueue; 51 import com.android.systemui.statusbar.NotificationLockscreenUserManager; 52 import com.android.systemui.statusbar.NotificationLockscreenUserManagerImpl; 53 import com.android.systemui.statusbar.NotificationShadeWindowController; 54 import com.android.systemui.statusbar.dagger.StartCentralSurfacesModule; 55 import com.android.systemui.statusbar.events.StatusBarEventsModule; 56 import com.android.systemui.statusbar.notification.collection.provider.VisualStabilityProvider; 57 import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManager; 58 import com.android.systemui.statusbar.phone.DozeServiceHost; 59 import com.android.systemui.statusbar.phone.HeadsUpManagerPhone; 60 import com.android.systemui.statusbar.phone.KeyguardBypassController; 61 import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; 62 import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper; 63 import com.android.systemui.statusbar.policy.AospPolicyModule; 64 import com.android.systemui.statusbar.policy.ConfigurationController; 65 import com.android.systemui.statusbar.policy.DeviceProvisionedController; 66 import com.android.systemui.statusbar.policy.DeviceProvisionedControllerImpl; 67 import com.android.systemui.statusbar.policy.HeadsUpManager; 68 import com.android.systemui.statusbar.policy.HeadsUpManagerLogger; 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.volume.dagger.VolumeModule; 74 import com.android.systemui.wallpapers.dagger.WallpaperModule; 75 76 import javax.inject.Named; 77 78 import dagger.Binds; 79 import dagger.Module; 80 import dagger.Provides; 81 82 /** 83 * A dagger module for overriding the default implementations of injected System UI components on 84 * Android Go. This is forked from {@link ReferenceSystemUIModule} 85 */ 86 @Module(includes = { 87 AospPolicyModule.class, 88 GestureModule.class, 89 MediaModule.class, 90 MultiUserUtilsModule.class, 91 PowerModule.class, 92 QSModule.class, 93 ReferenceScreenshotModule.class, 94 ShadeModule.class, 95 ShutdownUiModule.class, 96 StartCentralSurfacesModule.class, 97 StatusBarEventsModule.class, 98 WallpaperModule.class, 99 VolumeModule.class 100 }) 101 public abstract class SystemUIGoModule { 102 103 @Binds bindGlobalRootComponent( SystemUIGoGlobalRootComponent globalRootComponent)104 abstract GlobalRootComponent bindGlobalRootComponent( 105 SystemUIGoGlobalRootComponent globalRootComponent); 106 107 @SysUISingleton 108 @Provides 109 @Named(LEAK_REPORT_EMAIL_NAME) provideLeakReportEmail()110 static String provideLeakReportEmail() { 111 return "buganizer-system+700073@google.com"; 112 } 113 114 @Binds bindNotificationLockscreenUserManager( NotificationLockscreenUserManagerImpl notificationLockscreenUserManager)115 abstract NotificationLockscreenUserManager bindNotificationLockscreenUserManager( 116 NotificationLockscreenUserManagerImpl notificationLockscreenUserManager); 117 118 @Provides 119 @SysUISingleton provideSensorPrivacyController( SensorPrivacyManager sensorPrivacyManager)120 static SensorPrivacyController provideSensorPrivacyController( 121 SensorPrivacyManager sensorPrivacyManager) { 122 SensorPrivacyController spC = new SensorPrivacyControllerImpl(sensorPrivacyManager); 123 spC.init(); 124 return spC; 125 } 126 127 @Provides 128 @SysUISingleton provideIndividualSensorPrivacyController( SensorPrivacyManager sensorPrivacyManager)129 static IndividualSensorPrivacyController provideIndividualSensorPrivacyController( 130 SensorPrivacyManager sensorPrivacyManager) { 131 IndividualSensorPrivacyController ispC = new IndividualSensorPrivacyControllerImpl( 132 sensorPrivacyManager); 133 ispC.init(); 134 return ispC; 135 } 136 137 @Binds 138 @SysUISingleton bindQSFactory(QSFactoryImpl qsFactoryImpl)139 public abstract QSFactory bindQSFactory(QSFactoryImpl qsFactoryImpl); 140 141 @Binds bindDockManager(DockManagerImpl dockManager)142 abstract DockManager bindDockManager(DockManagerImpl dockManager); 143 144 @SysUISingleton 145 @Provides 146 @Named(ALLOW_NOTIFICATION_LONG_PRESS_NAME) provideAllowNotificationLongPress()147 static boolean provideAllowNotificationLongPress() { 148 return true; 149 } 150 151 @SysUISingleton 152 @Provides provideHeadsUpManagerPhone( Context context, HeadsUpManagerLogger headsUpManagerLogger, StatusBarStateController statusBarStateController, KeyguardBypassController bypassController, GroupMembershipManager groupManager, VisualStabilityProvider visualStabilityProvider, ConfigurationController configurationController, @Main Handler handler, AccessibilityManagerWrapper accessibilityManagerWrapper, UiEventLogger uiEventLogger, ShadeExpansionStateManager shadeExpansionStateManager)153 static HeadsUpManagerPhone provideHeadsUpManagerPhone( 154 Context context, 155 HeadsUpManagerLogger headsUpManagerLogger, 156 StatusBarStateController statusBarStateController, 157 KeyguardBypassController bypassController, 158 GroupMembershipManager groupManager, 159 VisualStabilityProvider visualStabilityProvider, 160 ConfigurationController configurationController, 161 @Main Handler handler, 162 AccessibilityManagerWrapper accessibilityManagerWrapper, 163 UiEventLogger uiEventLogger, 164 ShadeExpansionStateManager shadeExpansionStateManager) { 165 return new HeadsUpManagerPhone( 166 context, 167 headsUpManagerLogger, 168 statusBarStateController, 169 bypassController, 170 groupManager, 171 visualStabilityProvider, 172 configurationController, 173 handler, 174 accessibilityManagerWrapper, 175 uiEventLogger, 176 shadeExpansionStateManager 177 ); 178 } 179 180 @Binds bindHeadsUpManagerPhone(HeadsUpManagerPhone headsUpManagerPhone)181 abstract HeadsUpManager bindHeadsUpManagerPhone(HeadsUpManagerPhone headsUpManagerPhone); 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