• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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