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.dagger; 18 19 import static com.android.systemui.Dependency.TIME_TICK_HANDLER_NAME; 20 21 import android.annotation.Nullable; 22 import android.annotation.SuppressLint; 23 import android.app.INotificationManager; 24 import android.content.Context; 25 import android.content.SharedPreferences; 26 import android.content.om.OverlayManager; 27 import android.hardware.display.AmbientDisplayConfiguration; 28 import android.hardware.display.ColorDisplayManager; 29 import android.os.Handler; 30 import android.os.HandlerThread; 31 import android.os.Looper; 32 import android.os.ServiceManager; 33 import android.os.UserHandle; 34 import android.view.Choreographer; 35 import android.view.IWindowManager; 36 import android.view.LayoutInflater; 37 38 import com.android.internal.logging.MetricsLogger; 39 import com.android.internal.util.NotificationMessagingUtil; 40 import com.android.internal.widget.LockPatternUtils; 41 import com.android.keyguard.KeyguardUpdateMonitor; 42 import com.android.keyguard.ViewMediatorCallback; 43 import com.android.settingslib.bluetooth.LocalBluetoothManager; 44 import com.android.systemui.Prefs; 45 import com.android.systemui.R; 46 import com.android.systemui.accessibility.AccessibilityButtonModeObserver; 47 import com.android.systemui.accessibility.AccessibilityButtonTargetsObserver; 48 import com.android.systemui.accessibility.ModeSwitchesController; 49 import com.android.systemui.accessibility.floatingmenu.AccessibilityFloatingMenuController; 50 import com.android.systemui.broadcast.BroadcastDispatcher; 51 import com.android.systemui.broadcast.logging.BroadcastDispatcherLogger; 52 import com.android.systemui.dagger.qualifiers.Background; 53 import com.android.systemui.dagger.qualifiers.Main; 54 import com.android.systemui.doze.AlwaysOnDisplayPolicy; 55 import com.android.systemui.dump.DumpManager; 56 import com.android.systemui.keyguard.KeyguardViewMediator; 57 import com.android.systemui.qs.ReduceBrightColorsController; 58 import com.android.systemui.settings.UserTracker; 59 import com.android.systemui.shared.system.ActivityManagerWrapper; 60 import com.android.systemui.shared.system.DevicePolicyManagerWrapper; 61 import com.android.systemui.shared.system.TaskStackChangeListeners; 62 import com.android.systemui.shared.system.WindowManagerWrapper; 63 import com.android.systemui.statusbar.connectivity.NetworkController; 64 import com.android.systemui.statusbar.phone.AutoHideController; 65 import com.android.systemui.statusbar.phone.ConfigurationControllerImpl; 66 import com.android.systemui.statusbar.policy.ConfigurationController; 67 import com.android.systemui.statusbar.policy.DataSaverController; 68 import com.android.systemui.theme.ThemeOverlayApplier; 69 import com.android.systemui.util.leak.LeakDetector; 70 import com.android.systemui.util.settings.SecureSettings; 71 72 import java.util.concurrent.Executor; 73 74 import javax.inject.Named; 75 76 import dagger.Module; 77 import dagger.Provides; 78 79 /** 80 * Provides dependencies for the root component of sysui injection. 81 * 82 * Only SystemUI owned classes and instances should go in here. Other, framework-owned classes 83 * should go in {@link FrameworkServicesModule}. 84 * 85 * See SystemUI/docs/dagger.md 86 */ 87 @Module(includes = {NightDisplayListenerModule.class}) 88 public class DependencyProvider { 89 90 /** */ 91 @Provides 92 @SysUISingleton 93 @Named(TIME_TICK_HANDLER_NAME) provideTimeTickHandler()94 public Handler provideTimeTickHandler() { 95 HandlerThread thread = new HandlerThread("TimeTick"); 96 thread.start(); 97 return new Handler(thread.getLooper()); 98 } 99 100 /** */ 101 @Provides 102 @Main provideSharePreferences(Context context)103 public SharedPreferences provideSharePreferences(Context context) { 104 return Prefs.get(context); 105 } 106 107 /** */ 108 @Provides provideAmbientDisplayConfiguration(Context context)109 public AmbientDisplayConfiguration provideAmbientDisplayConfiguration(Context context) { 110 return new AmbientDisplayConfiguration(context); 111 } 112 113 /** */ 114 @Provides provideHandler()115 public Handler provideHandler() { 116 return new Handler(); 117 } 118 119 /** */ 120 @Provides 121 @SysUISingleton provideDataSaverController(NetworkController networkController)122 public DataSaverController provideDataSaverController(NetworkController networkController) { 123 return networkController.getDataSaverController(); 124 } 125 126 @Provides 127 @SysUISingleton provideINotificationManager()128 public INotificationManager provideINotificationManager() { 129 return INotificationManager.Stub.asInterface( 130 ServiceManager.getService(Context.NOTIFICATION_SERVICE)); 131 } 132 133 /** */ 134 @Provides 135 @SysUISingleton providerLayoutInflater(Context context)136 public LayoutInflater providerLayoutInflater(Context context) { 137 return LayoutInflater.from(context); 138 } 139 140 /** */ 141 @Provides 142 @SysUISingleton provideLeakDetector(DumpManager dumpManager)143 public LeakDetector provideLeakDetector(DumpManager dumpManager) { 144 return LeakDetector.create(dumpManager); 145 } 146 147 @SuppressLint("MissingPermission") 148 @SysUISingleton 149 @Provides 150 @Nullable provideLocalBluetoothController(Context context, @Background Handler bgHandler)151 static LocalBluetoothManager provideLocalBluetoothController(Context context, 152 @Background Handler bgHandler) { 153 return LocalBluetoothManager.create(context, bgHandler, UserHandle.ALL); 154 } 155 156 /** */ 157 @Provides 158 @SysUISingleton provideMetricsLogger()159 public MetricsLogger provideMetricsLogger() { 160 return new MetricsLogger(); 161 } 162 163 /** */ 164 @SysUISingleton 165 @Provides provideThemeOverlayManager(Context context, @Background Executor bgExecutor, @Main Executor mainExecutor, OverlayManager overlayManager, DumpManager dumpManager)166 static ThemeOverlayApplier provideThemeOverlayManager(Context context, 167 @Background Executor bgExecutor, 168 @Main Executor mainExecutor, 169 OverlayManager overlayManager, 170 DumpManager dumpManager) { 171 return new ThemeOverlayApplier(overlayManager, bgExecutor, mainExecutor, 172 context.getString(R.string.launcher_overlayable_package), 173 context.getString(R.string.themepicker_overlayable_package), dumpManager); 174 } 175 176 /** */ 177 @Provides 178 @SysUISingleton provideAccessibilityFloatingMenuController( Context context, AccessibilityButtonTargetsObserver accessibilityButtonTargetsObserver, AccessibilityButtonModeObserver accessibilityButtonModeObserver, KeyguardUpdateMonitor keyguardUpdateMonitor)179 public AccessibilityFloatingMenuController provideAccessibilityFloatingMenuController( 180 Context context, AccessibilityButtonTargetsObserver accessibilityButtonTargetsObserver, 181 AccessibilityButtonModeObserver accessibilityButtonModeObserver, 182 KeyguardUpdateMonitor keyguardUpdateMonitor) { 183 return new AccessibilityFloatingMenuController(context, accessibilityButtonTargetsObserver, 184 accessibilityButtonModeObserver, keyguardUpdateMonitor); 185 } 186 187 /** */ 188 @Provides 189 @SysUISingleton provideConfigurationController(Context context)190 public ConfigurationController provideConfigurationController(Context context) { 191 return new ConfigurationControllerImpl(context); 192 } 193 194 /** */ 195 @SysUISingleton 196 @Provides provideAutoHideController(Context context, @Main Handler mainHandler, IWindowManager iWindowManager)197 public AutoHideController provideAutoHideController(Context context, 198 @Main Handler mainHandler, IWindowManager iWindowManager) { 199 return new AutoHideController(context, mainHandler, iWindowManager); 200 } 201 202 /** */ 203 @SysUISingleton 204 @Provides provideReduceBrightColorsListener( @ackground Handler bgHandler, UserTracker userTracker, ColorDisplayManager colorDisplayManager, SecureSettings secureSettings)205 public ReduceBrightColorsController provideReduceBrightColorsListener( 206 @Background Handler bgHandler, UserTracker userTracker, 207 ColorDisplayManager colorDisplayManager, SecureSettings secureSettings) { 208 return new ReduceBrightColorsController(userTracker, bgHandler, 209 colorDisplayManager, secureSettings); 210 } 211 212 @Provides 213 @SysUISingleton provideActivityManagerWrapper()214 public ActivityManagerWrapper provideActivityManagerWrapper() { 215 return ActivityManagerWrapper.getInstance(); 216 } 217 218 /** */ 219 @Provides 220 @SysUISingleton provideTaskStackChangeListeners()221 public TaskStackChangeListeners provideTaskStackChangeListeners() { 222 return TaskStackChangeListeners.getInstance(); 223 } 224 225 /** Provides and initializes the {#link BroadcastDispatcher} for SystemUI */ 226 @Provides 227 @SysUISingleton providesBroadcastDispatcher( Context context, @Background Looper backgroundLooper, @Background Executor backgroundExecutor, DumpManager dumpManager, BroadcastDispatcherLogger logger, UserTracker userTracker )228 public BroadcastDispatcher providesBroadcastDispatcher( 229 Context context, 230 @Background Looper backgroundLooper, 231 @Background Executor backgroundExecutor, 232 DumpManager dumpManager, 233 BroadcastDispatcherLogger logger, 234 UserTracker userTracker 235 ) { 236 BroadcastDispatcher bD = new BroadcastDispatcher(context, backgroundLooper, 237 backgroundExecutor, dumpManager, logger, userTracker); 238 bD.initialize(); 239 return bD; 240 } 241 242 /** */ 243 @Provides 244 @SysUISingleton provideDevicePolicyManagerWrapper()245 public DevicePolicyManagerWrapper provideDevicePolicyManagerWrapper() { 246 return DevicePolicyManagerWrapper.getInstance(); 247 } 248 249 /** */ 250 @Provides 251 @SysUISingleton provideLockPatternUtils(Context context)252 public LockPatternUtils provideLockPatternUtils(Context context) { 253 return new LockPatternUtils(context); 254 } 255 256 /** */ 257 @Provides 258 @SysUISingleton provideAlwaysOnDisplayPolicy(Context context)259 public AlwaysOnDisplayPolicy provideAlwaysOnDisplayPolicy(Context context) { 260 return new AlwaysOnDisplayPolicy(context); 261 } 262 263 /***/ 264 @Provides provideNotificationMessagingUtil(Context context)265 public NotificationMessagingUtil provideNotificationMessagingUtil(Context context) { 266 return new NotificationMessagingUtil(context); 267 } 268 269 /** */ 270 @Provides providesViewMediatorCallback(KeyguardViewMediator viewMediator)271 public ViewMediatorCallback providesViewMediatorCallback(KeyguardViewMediator viewMediator) { 272 return viewMediator.getViewMediatorCallback(); 273 } 274 275 /** */ 276 @Provides providesWindowManagerWrapper()277 public WindowManagerWrapper providesWindowManagerWrapper() { 278 return WindowManagerWrapper.getInstance(); 279 } 280 281 /** */ 282 @Provides 283 @SysUISingleton providesChoreographer()284 public Choreographer providesChoreographer() { 285 return Choreographer.getInstance(); 286 } 287 288 /** */ 289 @Provides 290 @SysUISingleton providesModeSwitchesController(Context context)291 public ModeSwitchesController providesModeSwitchesController(Context context) { 292 return new ModeSwitchesController(context); 293 } 294 } 295