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.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.os.Handler; 24 import android.os.PowerManager; 25 26 import androidx.annotation.Nullable; 27 28 import com.android.keyguard.KeyguardViewController; 29 import com.android.systemui.broadcast.BroadcastDispatcher; 30 import com.android.systemui.dagger.qualifiers.Background; 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.plugins.qs.QSFactory; 36 import com.android.systemui.plugins.statusbar.StatusBarStateController; 37 import com.android.systemui.power.EnhancedEstimates; 38 import com.android.systemui.power.EnhancedEstimatesImpl; 39 import com.android.systemui.qs.dagger.QSModule; 40 import com.android.systemui.qs.tileimpl.QSFactoryImpl; 41 import com.android.systemui.recents.Recents; 42 import com.android.systemui.recents.RecentsImplementation; 43 import com.android.systemui.stackdivider.DividerModule; 44 import com.android.systemui.statusbar.CommandQueue; 45 import com.android.systemui.statusbar.NotificationLockscreenUserManager; 46 import com.android.systemui.statusbar.NotificationLockscreenUserManagerImpl; 47 import com.android.systemui.statusbar.notification.NotificationEntryManager; 48 import com.android.systemui.statusbar.phone.DozeServiceHost; 49 import com.android.systemui.statusbar.phone.HeadsUpManagerPhone; 50 import com.android.systemui.statusbar.phone.KeyguardBypassController; 51 import com.android.systemui.statusbar.phone.KeyguardEnvironmentImpl; 52 import com.android.systemui.statusbar.phone.NotificationGroupManager; 53 import com.android.systemui.statusbar.phone.ShadeController; 54 import com.android.systemui.statusbar.phone.ShadeControllerImpl; 55 import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; 56 import com.android.systemui.statusbar.policy.BatteryController; 57 import com.android.systemui.statusbar.policy.BatteryControllerImpl; 58 import com.android.systemui.statusbar.policy.ConfigurationController; 59 import com.android.systemui.statusbar.policy.DeviceProvisionedController; 60 import com.android.systemui.statusbar.policy.DeviceProvisionedControllerImpl; 61 import com.android.systemui.statusbar.policy.HeadsUpManager; 62 63 import javax.inject.Named; 64 import javax.inject.Singleton; 65 66 import dagger.Binds; 67 import dagger.Module; 68 import dagger.Provides; 69 70 /** 71 * A dagger module for injecting default implementations of components of System UI that may be 72 * overridden by the System UI implementation. 73 */ 74 @Module(includes = {DividerModule.class, QSModule.class}) 75 public abstract class SystemUIDefaultModule { 76 77 @Singleton 78 @Provides 79 @Named(LEAK_REPORT_EMAIL_NAME) 80 @Nullable provideLeakReportEmail()81 static String provideLeakReportEmail() { 82 return null; 83 } 84 85 @Binds bindEnhancedEstimates(EnhancedEstimatesImpl enhancedEstimates)86 abstract EnhancedEstimates bindEnhancedEstimates(EnhancedEstimatesImpl enhancedEstimates); 87 88 @Binds bindNotificationLockscreenUserManager( NotificationLockscreenUserManagerImpl notificationLockscreenUserManager)89 abstract NotificationLockscreenUserManager bindNotificationLockscreenUserManager( 90 NotificationLockscreenUserManagerImpl notificationLockscreenUserManager); 91 92 @Provides 93 @Singleton provideBatteryController(Context context, EnhancedEstimates enhancedEstimates, PowerManager powerManager, BroadcastDispatcher broadcastDispatcher, @Main Handler mainHandler, @Background Handler bgHandler)94 static BatteryController provideBatteryController(Context context, 95 EnhancedEstimates enhancedEstimates, PowerManager powerManager, 96 BroadcastDispatcher broadcastDispatcher, @Main Handler mainHandler, 97 @Background Handler bgHandler) { 98 BatteryController bC = new BatteryControllerImpl(context, enhancedEstimates, powerManager, 99 broadcastDispatcher, mainHandler, bgHandler); 100 bC.init(); 101 return bC; 102 } 103 104 @Binds 105 @Singleton bindQSFactory(QSFactoryImpl qsFactoryImpl)106 public abstract QSFactory bindQSFactory(QSFactoryImpl qsFactoryImpl); 107 108 @Binds bindDockManager(DockManagerImpl dockManager)109 abstract DockManager bindDockManager(DockManagerImpl dockManager); 110 111 @Binds bindKeyguardEnvironment( KeyguardEnvironmentImpl keyguardEnvironment)112 abstract NotificationEntryManager.KeyguardEnvironment bindKeyguardEnvironment( 113 KeyguardEnvironmentImpl keyguardEnvironment); 114 115 @Binds provideShadeController(ShadeControllerImpl shadeController)116 abstract ShadeController provideShadeController(ShadeControllerImpl shadeController); 117 118 @Singleton 119 @Provides 120 @Named(ALLOW_NOTIFICATION_LONG_PRESS_NAME) provideAllowNotificationLongPress()121 static boolean provideAllowNotificationLongPress() { 122 return true; 123 } 124 125 @Singleton 126 @Provides provideHeadsUpManagerPhone( Context context, StatusBarStateController statusBarStateController, KeyguardBypassController bypassController, NotificationGroupManager groupManager, ConfigurationController configurationController)127 static HeadsUpManagerPhone provideHeadsUpManagerPhone( 128 Context context, 129 StatusBarStateController statusBarStateController, 130 KeyguardBypassController bypassController, 131 NotificationGroupManager groupManager, 132 ConfigurationController configurationController) { 133 return new HeadsUpManagerPhone(context, statusBarStateController, bypassController, 134 groupManager, configurationController); 135 } 136 137 @Binds bindHeadsUpManagerPhone(HeadsUpManagerPhone headsUpManagerPhone)138 abstract HeadsUpManager bindHeadsUpManagerPhone(HeadsUpManagerPhone headsUpManagerPhone); 139 140 @Provides 141 @Singleton provideRecents(Context context, RecentsImplementation recentsImplementation, CommandQueue commandQueue)142 static Recents provideRecents(Context context, RecentsImplementation recentsImplementation, 143 CommandQueue commandQueue) { 144 return new Recents(context, recentsImplementation, commandQueue); 145 } 146 147 @Binds bindDeviceProvisionedController( DeviceProvisionedControllerImpl deviceProvisionedController)148 abstract DeviceProvisionedController bindDeviceProvisionedController( 149 DeviceProvisionedControllerImpl deviceProvisionedController); 150 151 @Binds bindKeyguardViewController( StatusBarKeyguardViewManager statusBarKeyguardViewManager)152 abstract KeyguardViewController bindKeyguardViewController( 153 StatusBarKeyguardViewManager statusBarKeyguardViewManager); 154 155 @Binds provideDozeHost(DozeServiceHost dozeServiceHost)156 abstract DozeHost provideDozeHost(DozeServiceHost dozeServiceHost); 157 } 158