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