blob: 248bf62230dd433e47b92b4747b6822640f4c534 [file] [log] [blame]
Jason Monk27d01a622018-12-10 15:57:09 -05001/*
Dave Mankofff4736812019-10-18 17:25:50 -04002 * Copyright (C) 2019 The Android Open Source Project
Jason Monk27d01a622018-12-10 15:57:09 -05003 *
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
Dave Mankofff4736812019-10-18 17:25:50 -040017package com.android.systemui.dagger;
Jason Monk27d01a622018-12-10 15:57:09 -050018
Jason Monk27d01a622018-12-10 15:57:09 -050019import static com.android.systemui.Dependency.TIME_TICK_HANDLER_NAME;
20
Evan Laird47dc4542019-04-24 15:10:52 -040021import android.app.INotificationManager;
Jason Monk27d01a622018-12-10 15:57:09 -050022import android.content.Context;
Dave Mankoff2aff6c32019-10-14 17:40:37 -040023import android.hardware.display.AmbientDisplayConfiguration;
Christine Franks71e003e2019-01-24 14:40:20 -080024import android.hardware.display.NightDisplayListener;
Jason Monk27d01a622018-12-10 15:57:09 -050025import android.os.Handler;
26import android.os.HandlerThread;
27import android.os.Looper;
28import android.os.Process;
29import android.os.ServiceManager;
Dave Mankoffaefb3462019-11-01 14:21:45 -040030import android.os.UserManager;
Jason Monk27d01a622018-12-10 15:57:09 -050031import android.util.DisplayMetrics;
Jason Monk27d01a622018-12-10 15:57:09 -050032import android.view.IWindowManager;
Dave Mankoffaefb3462019-11-01 14:21:45 -040033import android.view.LayoutInflater;
Jason Monk27d01a622018-12-10 15:57:09 -050034
Jason Monk27d01a622018-12-10 15:57:09 -050035import com.android.internal.logging.MetricsLogger;
36import com.android.internal.statusbar.IStatusBarService;
Dave Mankoffbb9575f2019-10-02 12:23:49 -040037import com.android.internal.widget.LockPatternUtils;
Dave Mankofff4736812019-10-18 17:25:50 -040038import com.android.systemui.dagger.qualifiers.BgHandler;
39import com.android.systemui.dagger.qualifiers.BgLooper;
40import com.android.systemui.dagger.qualifiers.MainHandler;
41import com.android.systemui.dagger.qualifiers.MainLooper;
Dave Mankoff2aff6c32019-10-14 17:40:37 -040042import com.android.systemui.doze.AlwaysOnDisplayPolicy;
Jason Monk27d01a622018-12-10 15:57:09 -050043import com.android.systemui.plugins.PluginInitializerImpl;
Jason Monk27d01a622018-12-10 15:57:09 -050044import com.android.systemui.shared.plugins.PluginManager;
45import com.android.systemui.shared.plugins.PluginManagerImpl;
Gustav Sennton5a4fc212019-02-28 16:12:27 +000046import com.android.systemui.shared.system.ActivityManagerWrapper;
47import com.android.systemui.shared.system.DevicePolicyManagerWrapper;
Dave Mankoffbcaca8a2019-10-31 18:04:08 -040048import com.android.systemui.statusbar.CommandQueue;
Charles Chen10ca70b2018-11-28 00:03:38 +080049import com.android.systemui.statusbar.NavigationBarController;
Lucas Dupind236ee32019-10-08 15:33:59 -070050import com.android.systemui.statusbar.NotificationRemoteInputManager;
Charles Chen8c9a83f2018-12-18 17:44:10 +080051import com.android.systemui.statusbar.phone.AutoHideController;
Jason Monk27d01a622018-12-10 15:57:09 -050052import com.android.systemui.statusbar.phone.ConfigurationControllerImpl;
Jason Monk27d01a622018-12-10 15:57:09 -050053import com.android.systemui.statusbar.policy.ConfigurationController;
Jason Monk27d01a622018-12-10 15:57:09 -050054import com.android.systemui.statusbar.policy.DataSaverController;
yoshiki iguchiac2ffdd2019-03-20 19:17:35 +090055import com.android.systemui.statusbar.policy.DeviceProvisionedController;
56import com.android.systemui.statusbar.policy.DeviceProvisionedControllerImpl;
Jason Monk27d01a622018-12-10 15:57:09 -050057import com.android.systemui.statusbar.policy.NetworkController;
Jason Monk27d01a622018-12-10 15:57:09 -050058import com.android.systemui.util.leak.LeakDetector;
Jason Monk27d01a622018-12-10 15:57:09 -050059
60import javax.inject.Named;
61import javax.inject.Singleton;
62
63import dagger.Module;
64import dagger.Provides;
65
66/**
67 * Provides dependencies for the root component of sysui injection.
Dave Mankofff4736812019-10-18 17:25:50 -040068 *
69 * Only SystemUI owned classes and instances should go in here. Other, framework-owned classes
70 * should go in {@link SystemServicesModule}.
71 *
Jason Monk27d01a622018-12-10 15:57:09 -050072 * See SystemUI/docs/dagger.md
73 */
74@Module
75public class DependencyProvider {
76
77 @Singleton
78 @Provides
79 @Named(TIME_TICK_HANDLER_NAME)
Dave Mankoffa8749962019-10-18 10:44:07 -040080 public Handler provideTimeTickHandler() {
Jason Monk27d01a622018-12-10 15:57:09 -050081 HandlerThread thread = new HandlerThread("TimeTick");
82 thread.start();
83 return new Handler(thread.getLooper());
84 }
85
86 @Singleton
87 @Provides
Dave Mankofff4736812019-10-18 17:25:50 -040088 @BgLooper
Jason Monk27d01a622018-12-10 15:57:09 -050089 public Looper provideBgLooper() {
90 HandlerThread thread = new HandlerThread("SysUiBg",
91 Process.THREAD_PRIORITY_BACKGROUND);
92 thread.start();
93 return thread.getLooper();
94 }
95
Dave Mankoffe2294692019-08-14 11:53:13 -040096 /** Main Looper */
Dave Mankoffe2294692019-08-14 11:53:13 -040097 @Provides
Dave Mankofff4736812019-10-18 17:25:50 -040098 @MainLooper
Dave Mankoffe2294692019-08-14 11:53:13 -040099 public Looper provideMainLooper() {
100 return Looper.getMainLooper();
101 }
102
Jason Monk27d01a622018-12-10 15:57:09 -0500103 @Singleton
104 @Provides
Dave Mankofff4736812019-10-18 17:25:50 -0400105 @BgHandler
106 public Handler provideBgHandler(@BgLooper Looper bgLooper) {
Jason Monk27d01a622018-12-10 15:57:09 -0500107 return new Handler(bgLooper);
108 }
109
110 @Singleton
111 @Provides
Dave Mankofff4736812019-10-18 17:25:50 -0400112 @MainHandler
113 public Handler provideMainHandler(@MainLooper Looper mainLooper) {
Dave Mankoffe2294692019-08-14 11:53:13 -0400114 return new Handler(mainLooper);
Jason Monk27d01a622018-12-10 15:57:09 -0500115 }
116
Dave Mankoffa8749962019-10-18 10:44:07 -0400117 /** */
118 @Provides
Dave Mankofff4736812019-10-18 17:25:50 -0400119 public AmbientDisplayConfiguration provideAmbientDispalyConfiguration(Context context) {
120 return new AmbientDisplayConfiguration(context);
121 }
122
123 /** */
124 @Provides
Dave Mankoffa8749962019-10-18 10:44:07 -0400125 public Handler provideHandler() {
126 return new Handler();
127 }
128
Jason Monk27d01a622018-12-10 15:57:09 -0500129 @Singleton
130 @Provides
Jason Monk27d01a622018-12-10 15:57:09 -0500131 public DataSaverController provideDataSaverController(NetworkController networkController) {
132 return networkController.getDataSaverController();
133 }
134
135 @Singleton
136 @Provides
Dave Mankofff4736812019-10-18 17:25:50 -0400137 // Single instance of DisplayMetrics, gets updated by StatusBar, but can be used
138 // anywhere it is needed.
139 public DisplayMetrics provideDisplayMetrics() {
140 return new DisplayMetrics();
Jason Monk27d01a622018-12-10 15:57:09 -0500141 }
142
143 @Singleton
144 @Provides
Jason Monk27d01a622018-12-10 15:57:09 -0500145 public IStatusBarService provideIStatusBarService() {
146 return IStatusBarService.Stub.asInterface(
147 ServiceManager.getService(Context.STATUS_BAR_SERVICE));
148 }
149
Evan Laird47dc4542019-04-24 15:10:52 -0400150 /** */
151 @Singleton
152 @Provides
153 public INotificationManager provideINotificationManager() {
154 return INotificationManager.Stub.asInterface(
155 ServiceManager.getService(Context.NOTIFICATION_SERVICE));
156 }
157
Dave Mankoffaefb3462019-11-01 14:21:45 -0400158 /** */
159 @Singleton
160 @Provides
161 public LayoutInflater providerLayoutInflater(Context context) {
162 return LayoutInflater.from(context);
163 }
164
Jason Monk27d01a622018-12-10 15:57:09 -0500165 @Singleton
166 @Provides
Jason Monk196d6392018-12-20 13:25:34 -0500167 public LeakDetector provideLeakDetector() {
168 return LeakDetector.create();
169
170 }
171
172 @Singleton
173 @Provides
Dave Mankofff4736812019-10-18 17:25:50 -0400174 public MetricsLogger provideMetricsLogger() {
175 return new MetricsLogger();
176 }
177
178 @Singleton
179 @Provides
Christine Frankse17d7422019-02-11 10:42:07 -0800180 public NightDisplayListener provideNightDisplayListener(Context context,
Dave Mankofff4736812019-10-18 17:25:50 -0400181 @BgHandler Handler bgHandler) {
Christine Frankse17d7422019-02-11 10:42:07 -0800182 return new NightDisplayListener(context, bgHandler);
Jason Monk196d6392018-12-20 13:25:34 -0500183 }
184
185 @Singleton
186 @Provides
187 public PluginManager providePluginManager(Context context) {
188 return new PluginManagerImpl(context, new PluginInitializerImpl());
189 }
190
191 @Singleton
192 @Provides
Charles Chen10ca70b2018-11-28 00:03:38 +0800193 public NavigationBarController provideNavigationBarController(Context context,
Dave Mankoffbcaca8a2019-10-31 18:04:08 -0400194 @MainHandler Handler mainHandler, CommandQueue commandQueue) {
195 return new NavigationBarController(context, mainHandler, commandQueue);
Charles Chen10ca70b2018-11-28 00:03:38 +0800196 }
197
198 @Singleton
199 @Provides
Jason Monk196d6392018-12-20 13:25:34 -0500200 public ConfigurationController provideConfigurationController(Context context) {
201 return new ConfigurationControllerImpl(context);
202 }
Charles Chen8c9a83f2018-12-18 17:44:10 +0800203
204 @Singleton
205 @Provides
206 public AutoHideController provideAutoHideController(Context context,
Dave Mankofff4736812019-10-18 17:25:50 -0400207 @MainHandler Handler mainHandler,
Lucas Dupind236ee32019-10-08 15:33:59 -0700208 NotificationRemoteInputManager notificationRemoteInputManager,
209 IWindowManager iWindowManager) {
210 return new AutoHideController(context, mainHandler, notificationRemoteInputManager,
211 iWindowManager);
Charles Chen8c9a83f2018-12-18 17:44:10 +0800212 }
Gustav Sennton5a4fc212019-02-28 16:12:27 +0000213
214 @Singleton
215 @Provides
216 public ActivityManagerWrapper provideActivityManagerWrapper() {
217 return ActivityManagerWrapper.getInstance();
218 }
219
220 @Singleton
221 @Provides
222 public DevicePolicyManagerWrapper provideDevicePolicyManagerWrapper() {
223 return DevicePolicyManagerWrapper.getInstance();
224 }
225
226 @Singleton
227 @Provides
yoshiki iguchiac2ffdd2019-03-20 19:17:35 +0900228 public DeviceProvisionedController provideDeviceProvisionedController(Context context,
Dave Mankofff4736812019-10-18 17:25:50 -0400229 @MainHandler Handler mainHandler) {
yoshiki iguchiac2ffdd2019-03-20 19:17:35 +0900230 return new DeviceProvisionedControllerImpl(context, mainHandler);
231 }
Dave Mankoff63a12822019-09-16 14:38:06 -0400232
233 /** */
Dave Mankoffbb9575f2019-10-02 12:23:49 -0400234 @Provides
235 public LockPatternUtils provideLockPatternUtils(Context context) {
236 return new LockPatternUtils(context);
237 }
Dave Mankoff2aff6c32019-10-14 17:40:37 -0400238
239 /** */
240 @Provides
Dave Mankoff2aff6c32019-10-14 17:40:37 -0400241 public AlwaysOnDisplayPolicy provideAlwaysOnDisplayPolicy(Context context) {
242 return new AlwaysOnDisplayPolicy(context);
243 }
Dave Mankoffaefb3462019-11-01 14:21:45 -0400244
245 /** */
246 @Singleton
247 @Provides
248 public UserManager providesUserManager(Context context) {
249 return context.getSystemService(UserManager.class);
250 }
Jason Monk27d01a622018-12-10 15:57:09 -0500251}