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 android.annotation.Nullable;
20 import android.annotation.SuppressLint;
21 import android.app.ActivityManager;
22 import android.app.ActivityTaskManager;
23 import android.app.AlarmManager;
24 import android.app.IActivityManager;
25 import android.app.IActivityTaskManager;
26 import android.app.IWallpaperManager;
27 import android.app.KeyguardManager;
28 import android.app.NotificationManager;
29 import android.app.WallpaperManager;
30 import android.app.admin.DevicePolicyManager;
31 import android.app.role.RoleManager;
32 import android.app.trust.TrustManager;
33 import android.content.ContentResolver;
34 import android.content.Context;
35 import android.content.pm.IPackageManager;
36 import android.content.pm.LauncherApps;
37 import android.content.pm.PackageManager;
38 import android.content.pm.ShortcutManager;
39 import android.content.res.Resources;
40 import android.hardware.SensorPrivacyManager;
41 import android.hardware.display.DisplayManager;
42 import android.media.AudioManager;
43 import android.media.MediaRouter2Manager;
44 import android.net.ConnectivityManager;
45 import android.net.NetworkScoreManager;
46 import android.net.wifi.WifiManager;
47 import android.os.BatteryStats;
48 import android.os.Handler;
49 import android.os.PowerManager;
50 import android.os.ServiceManager;
51 import android.os.UserHandle;
52 import android.os.UserManager;
53 import android.os.Vibrator;
54 import android.service.dreams.DreamService;
55 import android.service.dreams.IDreamManager;
56 import android.telecom.TelecomManager;
57 import android.telephony.TelephonyManager;
58 import android.view.IWindowManager;
59 import android.view.WindowManager;
60 import android.view.WindowManagerGlobal;
61 import android.view.accessibility.AccessibilityManager;
62 
63 import com.android.internal.app.IBatteryStats;
64 import com.android.internal.statusbar.IStatusBarService;
65 import com.android.internal.util.LatencyTracker;
66 import com.android.settingslib.bluetooth.LocalBluetoothManager;
67 import com.android.systemui.dagger.qualifiers.Background;
68 import com.android.systemui.dagger.qualifiers.DisplayId;
69 import com.android.systemui.dagger.qualifiers.Main;
70 import com.android.systemui.shared.system.PackageManagerWrapper;
71 
72 import javax.inject.Singleton;
73 
74 import dagger.Module;
75 import dagger.Provides;
76 
77 /**
78  * Provides Non-SystemUI, Framework-Owned instances to the dependency graph.
79  */
80 @Module
81 public class SystemServicesModule {
82     @Provides
83     @Singleton
provideAccessibilityManager(Context context)84     static AccessibilityManager provideAccessibilityManager(Context context) {
85         return context.getSystemService(AccessibilityManager.class);
86     }
87 
88     @Provides
89     @Singleton
provideActivityManager(Context context)90     static ActivityManager provideActivityManager(Context context) {
91         return context.getSystemService(ActivityManager.class);
92     }
93 
94     @Singleton
95     @Provides
provideAlarmManager(Context context)96     static AlarmManager provideAlarmManager(Context context) {
97         return context.getSystemService(AlarmManager.class);
98     }
99 
100     @Provides
101     @Singleton
provideAudioManager(Context context)102     static AudioManager provideAudioManager(Context context) {
103         return context.getSystemService(AudioManager.class);
104     }
105 
106     @Provides
107     @Singleton
provideConnectivityManagager(Context context)108     static ConnectivityManager provideConnectivityManagager(Context context) {
109         return context.getSystemService(ConnectivityManager.class);
110     }
111 
112     @Provides
113     @Singleton
provideContentResolver(Context context)114     static ContentResolver provideContentResolver(Context context) {
115         return context.getContentResolver();
116     }
117 
118     @Provides
119     @Singleton
provideDevicePolicyManager(Context context)120     static DevicePolicyManager provideDevicePolicyManager(Context context) {
121         return context.getSystemService(DevicePolicyManager.class);
122     }
123 
124     @Provides
125     @DisplayId
provideDisplayId(Context context)126     static int provideDisplayId(Context context) {
127         return context.getDisplayId();
128     }
129 
130     @Provides
131     @Singleton
provideDisplayManager(Context context)132     static DisplayManager provideDisplayManager(Context context) {
133         return context.getSystemService(DisplayManager.class);
134     }
135 
136     @Singleton
137     @Provides
provideIActivityManager()138     static IActivityManager provideIActivityManager() {
139         return ActivityManager.getService();
140     }
141 
142     @Singleton
143     @Provides
provideIActivityTaskManager()144     static IActivityTaskManager provideIActivityTaskManager() {
145         return ActivityTaskManager.getService();
146     }
147 
148     @Provides
149     @Singleton
provideIBatteryStats()150     static IBatteryStats provideIBatteryStats() {
151         return IBatteryStats.Stub.asInterface(
152                 ServiceManager.getService(BatteryStats.SERVICE_NAME));
153     }
154 
155     @Provides
156     @Singleton
provideIDreamManager()157     static IDreamManager provideIDreamManager() {
158         return IDreamManager.Stub.asInterface(
159                 ServiceManager.checkService(DreamService.DREAM_SERVICE));
160     }
161 
162     @Provides
163     @Singleton
provideIPackageManager()164     static IPackageManager provideIPackageManager() {
165         return IPackageManager.Stub.asInterface(ServiceManager.getService("package"));
166     }
167 
168     @Singleton
169     @Provides
provideIStatusBarService()170     static IStatusBarService provideIStatusBarService() {
171         return IStatusBarService.Stub.asInterface(
172                 ServiceManager.getService(Context.STATUS_BAR_SERVICE));
173     }
174 
175     @Provides
176     @Nullable
provideIWallPaperManager()177     static IWallpaperManager provideIWallPaperManager() {
178         return IWallpaperManager.Stub.asInterface(
179                 ServiceManager.getService(Context.WALLPAPER_SERVICE));
180     }
181 
182     @Singleton
183     @Provides
provideIWindowManager()184     static IWindowManager provideIWindowManager() {
185         return WindowManagerGlobal.getWindowManagerService();
186     }
187 
188     @Singleton
189     @Provides
provideKeyguardManager(Context context)190     static KeyguardManager provideKeyguardManager(Context context) {
191         return context.getSystemService(KeyguardManager.class);
192     }
193 
194     @Singleton
195     @Provides
provideLatencyTracker(Context context)196     static LatencyTracker provideLatencyTracker(Context context) {
197         return LatencyTracker.getInstance(context);
198     }
199 
200     @Singleton
201     @Provides
provideLauncherApps(Context context)202     static LauncherApps provideLauncherApps(Context context) {
203         return context.getSystemService(LauncherApps.class);
204     }
205 
206     @SuppressLint("MissingPermission")
207     @Singleton
208     @Provides
209     @Nullable
provideLocalBluetoothController(Context context, @Background Handler bgHandler)210     static LocalBluetoothManager provideLocalBluetoothController(Context context,
211             @Background Handler bgHandler) {
212         return LocalBluetoothManager.create(context, bgHandler, UserHandle.ALL);
213     }
214 
215     @Provides
provideMediaRouter2Manager(Context context)216     static MediaRouter2Manager provideMediaRouter2Manager(Context context) {
217         return MediaRouter2Manager.getInstance(context);
218     }
219 
220     @Provides
221     @Singleton
provideNetworkScoreManager(Context context)222     static NetworkScoreManager provideNetworkScoreManager(Context context) {
223         return context.getSystemService(NetworkScoreManager.class);
224     }
225 
226     @Singleton
227     @Provides
provideNotificationManager(Context context)228     static NotificationManager provideNotificationManager(Context context) {
229         return context.getSystemService(NotificationManager.class);
230     }
231 
232     @Singleton
233     @Provides
providePackageManager(Context context)234     static PackageManager providePackageManager(Context context) {
235         return context.getPackageManager();
236     }
237 
238     @Singleton
239     @Provides
providePackageManagerWrapper()240     static PackageManagerWrapper providePackageManagerWrapper() {
241         return PackageManagerWrapper.getInstance();
242     }
243 
244     /** */
245     @Singleton
246     @Provides
providePowerManager(Context context)247     static PowerManager providePowerManager(Context context) {
248         return context.getSystemService(PowerManager.class);
249     }
250 
251     @Provides
252     @Main
provideResources(Context context)253     static Resources provideResources(Context context) {
254         return context.getResources();
255     }
256 
257     @Singleton
258     @Provides
provideSensorPrivacyManager(Context context)259     static SensorPrivacyManager provideSensorPrivacyManager(Context context) {
260         return context.getSystemService(SensorPrivacyManager.class);
261     }
262 
263     @Singleton
264     @Provides
provideShortcutManager(Context context)265     static ShortcutManager provideShortcutManager(Context context) {
266         return context.getSystemService(ShortcutManager.class);
267     }
268 
269     @Provides
270     @Singleton
271     @Nullable
provideTelecomManager(Context context)272     static TelecomManager provideTelecomManager(Context context) {
273         return context.getSystemService(TelecomManager.class);
274     }
275 
276     @Provides
277     @Singleton
provideTelephonyManager(Context context)278     static TelephonyManager provideTelephonyManager(Context context) {
279         return context.getSystemService(TelephonyManager.class);
280     }
281 
282     @Provides
283     @Singleton
provideTrustManager(Context context)284     static TrustManager provideTrustManager(Context context) {
285         return context.getSystemService(TrustManager.class);
286     }
287 
288     @Provides
289     @Singleton
290     @Nullable
provideVibrator(Context context)291     static Vibrator provideVibrator(Context context) {
292         return context.getSystemService(Vibrator.class);
293     }
294 
295     @Provides
296     @Singleton
provideUserManager(Context context)297     static UserManager provideUserManager(Context context) {
298         return context.getSystemService(UserManager.class);
299     }
300 
301     @Provides
provideWallpaperManager(Context context)302     static WallpaperManager provideWallpaperManager(Context context) {
303         return (WallpaperManager) context.getSystemService(Context.WALLPAPER_SERVICE);
304     }
305 
306     @Provides
307     @Singleton
provideWifiManager(Context context)308     static WifiManager provideWifiManager(Context context) {
309         return context.getSystemService(WifiManager.class);
310     }
311 
312     @Singleton
313     @Provides
provideWindowManager(Context context)314     static WindowManager provideWindowManager(Context context) {
315         return context.getSystemService(WindowManager.class);
316     }
317 
318     @Provides
319     @Singleton
provideRoleManager(Context context)320     static RoleManager provideRoleManager(Context context) {
321         return context.getSystemService(RoleManager.class);
322     }
323 }
324