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.AppOpsManager; 25 import android.app.IActivityManager; 26 import android.app.IActivityTaskManager; 27 import android.app.INotificationManager; 28 import android.app.IWallpaperManager; 29 import android.app.KeyguardManager; 30 import android.app.NotificationManager; 31 import android.app.StatsManager; 32 import android.app.StatusBarManager; 33 import android.app.UiModeManager; 34 import android.app.WallpaperManager; 35 import android.app.admin.DevicePolicyManager; 36 import android.app.ambientcontext.AmbientContextManager; 37 import android.app.job.JobScheduler; 38 import android.app.role.RoleManager; 39 import android.app.smartspace.SmartspaceManager; 40 import android.app.trust.TrustManager; 41 import android.bluetooth.BluetoothAdapter; 42 import android.bluetooth.BluetoothManager; 43 import android.content.ClipboardManager; 44 import android.content.ContentResolver; 45 import android.content.Context; 46 import android.content.SharedPreferences; 47 import android.content.om.OverlayManager; 48 import android.content.pm.IPackageManager; 49 import android.content.pm.LauncherApps; 50 import android.content.pm.PackageManager; 51 import android.content.pm.ShortcutManager; 52 import android.content.res.AssetManager; 53 import android.content.res.Resources; 54 import android.graphics.Color; 55 import android.hardware.SensorManager; 56 import android.hardware.SensorPrivacyManager; 57 import android.hardware.biometrics.BiometricManager; 58 import android.hardware.camera2.CameraManager; 59 import android.hardware.devicestate.DeviceStateManager; 60 import android.hardware.display.AmbientDisplayConfiguration; 61 import android.hardware.display.ColorDisplayManager; 62 import android.hardware.display.DisplayManager; 63 import android.hardware.face.FaceManager; 64 import android.hardware.fingerprint.FingerprintManager; 65 import android.hardware.input.InputManager; 66 import android.media.AudioManager; 67 import android.media.IAudioService; 68 import android.media.MediaRouter2Manager; 69 import android.media.projection.MediaProjectionManager; 70 import android.media.session.MediaSessionManager; 71 import android.net.ConnectivityManager; 72 import android.net.NetworkScoreManager; 73 import android.net.wifi.WifiManager; 74 import android.os.BatteryStats; 75 import android.os.PowerExemptionManager; 76 import android.os.PowerManager; 77 import android.os.ServiceManager; 78 import android.os.SystemUpdateManager; 79 import android.os.UserManager; 80 import android.os.Vibrator; 81 import android.os.storage.StorageManager; 82 import android.permission.PermissionManager; 83 import android.safetycenter.SafetyCenterManager; 84 import android.service.dreams.DreamService; 85 import android.service.dreams.IDreamManager; 86 import android.service.vr.IVrManager; 87 import android.telecom.TelecomManager; 88 import android.telephony.CarrierConfigManager; 89 import android.telephony.SubscriptionManager; 90 import android.telephony.TelephonyManager; 91 import android.view.Choreographer; 92 import android.view.CrossWindowBlurListeners; 93 import android.view.IWindowManager; 94 import android.view.LayoutInflater; 95 import android.view.ViewConfiguration; 96 import android.view.WindowManager; 97 import android.view.WindowManagerGlobal; 98 import android.view.accessibility.AccessibilityManager; 99 import android.view.accessibility.CaptioningManager; 100 import android.view.inputmethod.InputMethodManager; 101 import android.view.textclassifier.TextClassificationManager; 102 103 import androidx.asynclayoutinflater.view.AsyncLayoutInflater; 104 import androidx.core.app.NotificationManagerCompat; 105 106 import com.android.internal.app.IBatteryStats; 107 import com.android.internal.appwidget.IAppWidgetService; 108 import com.android.internal.jank.InteractionJankMonitor; 109 import com.android.internal.statusbar.IStatusBarService; 110 import com.android.internal.util.LatencyTracker; 111 import com.android.systemui.Prefs; 112 import com.android.systemui.dagger.qualifiers.Application; 113 import com.android.systemui.dagger.qualifiers.DisplayId; 114 import com.android.systemui.dagger.qualifiers.Main; 115 import com.android.systemui.dagger.qualifiers.TestHarness; 116 import com.android.systemui.shared.system.PackageManagerWrapper; 117 118 import dagger.Module; 119 import dagger.Provides; 120 121 import java.util.Optional; 122 123 import javax.inject.Singleton; 124 125 /** 126 * Provides Non-SystemUI, Framework-Owned instances to the dependency graph. 127 */ 128 @SuppressLint("NonInjectedService") 129 @Module 130 public class FrameworkServicesModule { 131 @Provides 132 @Singleton provideAccessibilityManager(Context context)133 static AccessibilityManager provideAccessibilityManager(Context context) { 134 return context.getSystemService(AccessibilityManager.class); 135 } 136 137 @Provides 138 @Singleton provideActivityManager(Context context)139 static ActivityManager provideActivityManager(Context context) { 140 return context.getSystemService(ActivityManager.class); 141 } 142 143 @Provides 144 @Singleton provideAlarmManager(Context context)145 static AlarmManager provideAlarmManager(Context context) { 146 return context.getSystemService(AlarmManager.class); 147 } 148 149 @Provides 150 @Singleton provideSystemUpdateManager(Context context)151 static Optional<SystemUpdateManager> provideSystemUpdateManager(Context context) { 152 return Optional.ofNullable(context.getSystemService(SystemUpdateManager.class)); 153 } 154 155 @Provides 156 @Nullable 157 @Singleton provideAmbientContextManager(Context context)158 static AmbientContextManager provideAmbientContextManager(Context context) { 159 return context.getSystemService(AmbientContextManager.class); 160 } 161 162 /** */ 163 @Provides provideAmbientDisplayConfiguration(Context context)164 public AmbientDisplayConfiguration provideAmbientDisplayConfiguration(Context context) { 165 return new AmbientDisplayConfiguration(context); 166 } 167 168 @Provides 169 @Singleton provideAppOpsManager(Context context)170 static AppOpsManager provideAppOpsManager(Context context) { 171 return context.getSystemService(AppOpsManager.class); 172 } 173 174 @Provides 175 @Singleton provideAudioManager(Context context)176 static AudioManager provideAudioManager(Context context) { 177 return context.getSystemService(AudioManager.class); 178 } 179 180 @Provides 181 @Singleton provideCaptioningManager(Context context)182 static CaptioningManager provideCaptioningManager(Context context) { 183 return context.getSystemService(CaptioningManager.class); 184 } 185 186 /** */ 187 @Provides 188 @Singleton providesChoreographer()189 public Choreographer providesChoreographer() { 190 return Choreographer.getInstance(); 191 } 192 193 @Provides 194 @Singleton provideColorDisplayManager(Context context)195 static ColorDisplayManager provideColorDisplayManager(Context context) { 196 return context.getSystemService(ColorDisplayManager.class); 197 } 198 199 @Provides 200 @Singleton provideConnectivityManagager(Context context)201 static ConnectivityManager provideConnectivityManagager(Context context) { 202 return context.getSystemService(ConnectivityManager.class); 203 } 204 205 @Provides 206 @Singleton provideContentResolver(Context context)207 static ContentResolver provideContentResolver(Context context) { 208 return context.getContentResolver(); 209 } 210 211 @Provides 212 @Singleton provideDevicePolicyManager(Context context)213 static DevicePolicyManager provideDevicePolicyManager(Context context) { 214 return context.getSystemService(DevicePolicyManager.class); 215 } 216 217 @Provides 218 @Singleton provideCrossWindowBlurListeners()219 static CrossWindowBlurListeners provideCrossWindowBlurListeners() { 220 return CrossWindowBlurListeners.getInstance(); 221 } 222 223 @Provides 224 @DisplayId provideDisplayId(Context context)225 static int provideDisplayId(Context context) { 226 return context.getDisplayId(); 227 } 228 229 @Provides 230 @Singleton provideDisplayManager(Context context)231 static DisplayManager provideDisplayManager(Context context) { 232 return context.getSystemService(DisplayManager.class); 233 } 234 235 @Provides 236 @Singleton provideDeviceStateManager(Context context)237 static DeviceStateManager provideDeviceStateManager(Context context) { 238 return context.getSystemService(DeviceStateManager.class); 239 } 240 241 @Provides 242 @Singleton provideIActivityManager()243 static IActivityManager provideIActivityManager() { 244 return ActivityManager.getService(); 245 } 246 247 @Provides 248 @Singleton provideActivityTaskManager()249 static ActivityTaskManager provideActivityTaskManager() { 250 return ActivityTaskManager.getInstance(); 251 } 252 253 @Provides 254 @Singleton provideIActivityTaskManager()255 static IActivityTaskManager provideIActivityTaskManager() { 256 return ActivityTaskManager.getService(); 257 } 258 259 @Provides 260 @Singleton provideIAudioService()261 static IAudioService provideIAudioService() { 262 return IAudioService.Stub.asInterface(ServiceManager.getService(Context.AUDIO_SERVICE)); 263 } 264 265 266 @Provides 267 @Singleton provideIBatteryStats()268 static IBatteryStats provideIBatteryStats() { 269 return IBatteryStats.Stub.asInterface( 270 ServiceManager.getService(BatteryStats.SERVICE_NAME)); 271 } 272 273 @Provides 274 @Singleton provideIDreamManager()275 static IDreamManager provideIDreamManager() { 276 return IDreamManager.Stub.asInterface( 277 ServiceManager.getService(DreamService.DREAM_SERVICE)); 278 } 279 280 @Provides 281 @Singleton 282 @Nullable provideIVrManager()283 static IVrManager provideIVrManager() { 284 return IVrManager.Stub.asInterface(ServiceManager.getService(Context.VR_SERVICE)); 285 } 286 287 @Provides 288 @Singleton 289 @Nullable provideFaceManager(Context context)290 static FaceManager provideFaceManager(Context context) { 291 if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FACE)) { 292 return context.getSystemService(FaceManager.class); 293 } 294 return null; 295 } 296 297 @Provides 298 @Singleton 299 @Nullable providesFingerprintManager(Context context)300 static FingerprintManager providesFingerprintManager(Context context) { 301 if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) { 302 return context.getSystemService(FingerprintManager.class); 303 } 304 return null; 305 } 306 307 /** 308 * @return null if both faceManager and fingerprintManager are null. 309 */ 310 @Provides 311 @Singleton 312 @Nullable providesBiometricManager(Context context, @Nullable FaceManager faceManager, @Nullable FingerprintManager fingerprintManager)313 static BiometricManager providesBiometricManager(Context context, 314 @Nullable FaceManager faceManager, @Nullable FingerprintManager fingerprintManager) { 315 return faceManager == null && fingerprintManager == null ? null : 316 context.getSystemService(BiometricManager.class); 317 } 318 319 @Provides 320 @Singleton provideJobScheduler(Context context)321 static JobScheduler provideJobScheduler(Context context) { 322 return context.getSystemService(JobScheduler.class); 323 } 324 325 @Provides 326 @Singleton provideInteractionJankMonitor()327 static InteractionJankMonitor provideInteractionJankMonitor() { 328 InteractionJankMonitor jankMonitor = InteractionJankMonitor.getInstance(); 329 jankMonitor.configDebugOverlay(Color.YELLOW, 0.75); 330 return jankMonitor; 331 } 332 333 @Provides 334 @Singleton provideInputManager(Context context)335 static InputManager provideInputManager(Context context) { 336 return context.getSystemService(InputManager.class); 337 } 338 339 @Provides 340 @Singleton provideInputMethodManager(Context context)341 static InputMethodManager provideInputMethodManager(Context context) { 342 return context.getSystemService(InputMethodManager.class); 343 } 344 345 @Provides 346 @Singleton provideIAppWidgetService()347 static IAppWidgetService provideIAppWidgetService() { 348 return IAppWidgetService.Stub.asInterface( 349 ServiceManager.getService(Context.APPWIDGET_SERVICE)); 350 } 351 352 @Provides 353 @Singleton provideIPackageManager()354 static IPackageManager provideIPackageManager() { 355 return IPackageManager.Stub.asInterface(ServiceManager.getService("package")); 356 } 357 358 @Provides 359 @Singleton provideIStatusBarService()360 static IStatusBarService provideIStatusBarService() { 361 return IStatusBarService.Stub.asInterface( 362 ServiceManager.getService(Context.STATUS_BAR_SERVICE)); 363 } 364 365 @Provides 366 @Nullable provideIWallPaperManager()367 static IWallpaperManager provideIWallPaperManager() { 368 return IWallpaperManager.Stub.asInterface( 369 ServiceManager.getService(Context.WALLPAPER_SERVICE)); 370 } 371 372 @Provides 373 @Singleton provideIWindowManager()374 static IWindowManager provideIWindowManager() { 375 return WindowManagerGlobal.getWindowManagerService(); 376 } 377 378 @Provides 379 @Singleton provideKeyguardManager(Context context)380 static KeyguardManager provideKeyguardManager(Context context) { 381 return context.getSystemService(KeyguardManager.class); 382 } 383 384 @Provides 385 @Singleton provideLatencyTracker(Context context)386 static LatencyTracker provideLatencyTracker(Context context) { 387 return LatencyTracker.getInstance(context); 388 } 389 390 @Provides 391 @Singleton provideLauncherApps(Context context)392 static LauncherApps provideLauncherApps(Context context) { 393 return context.getSystemService(LauncherApps.class); 394 } 395 396 /** */ 397 @Provides 398 @Singleton providerLayoutInflater(Context context)399 public LayoutInflater providerLayoutInflater(Context context) { 400 return LayoutInflater.from(context); 401 } 402 403 /** */ 404 @Provides 405 @Singleton provideAsyncLayoutInflater(Context context)406 public AsyncLayoutInflater provideAsyncLayoutInflater(Context context) { 407 return new AsyncLayoutInflater(context); 408 } 409 410 @Provides provideMediaProjectionManager(Context context)411 static MediaProjectionManager provideMediaProjectionManager(Context context) { 412 return context.getSystemService(MediaProjectionManager.class); 413 } 414 415 @Provides provideMediaRouter2Manager(Context context)416 static MediaRouter2Manager provideMediaRouter2Manager(Context context) { 417 return MediaRouter2Manager.getInstance(context); 418 } 419 420 @Provides provideMediaSessionManager(Context context)421 static MediaSessionManager provideMediaSessionManager(Context context) { 422 return context.getSystemService(MediaSessionManager.class); 423 } 424 425 @Provides 426 @Singleton provideNetworkScoreManager(Context context)427 static NetworkScoreManager provideNetworkScoreManager(Context context) { 428 return context.getSystemService(NetworkScoreManager.class); 429 } 430 431 @Provides 432 @Singleton provideNotificationManager(Context context)433 static NotificationManager provideNotificationManager(Context context) { 434 return context.getSystemService(NotificationManager.class); 435 } 436 437 @Provides 438 @Singleton provideNotificationManagerCompat(Context context)439 static NotificationManagerCompat provideNotificationManagerCompat(Context context) { 440 return NotificationManagerCompat.from(context); 441 } 442 443 /** */ 444 @Provides 445 @Singleton provideINotificationManager()446 public INotificationManager provideINotificationManager() { 447 return INotificationManager.Stub.asInterface( 448 ServiceManager.getService(Context.NOTIFICATION_SERVICE)); 449 } 450 451 @Provides 452 @Singleton providePackageManager(Context context)453 static PackageManager providePackageManager(Context context) { 454 return context.getPackageManager(); 455 } 456 457 @Provides 458 @Singleton providePackageManagerWrapper()459 static PackageManagerWrapper providePackageManagerWrapper() { 460 return PackageManagerWrapper.getInstance(); 461 } 462 463 /** */ 464 @Provides 465 @Singleton providePowerManager(Context context)466 static PowerManager providePowerManager(Context context) { 467 return context.getSystemService(PowerManager.class); 468 } 469 470 /** */ 471 @Provides 472 @Singleton providePowerExemptionManager(Context context)473 static PowerExemptionManager providePowerExemptionManager(Context context) { 474 return context.getSystemService(PowerExemptionManager.class); 475 } 476 477 /** */ 478 @Provides 479 @Main provideSharePreferences(Context context)480 public SharedPreferences provideSharePreferences(Context context) { 481 return Prefs.get(context); 482 } 483 484 /** */ 485 @Provides 486 @Singleton provideUiModeManager(Context context)487 static UiModeManager provideUiModeManager(Context context) { 488 return context.getSystemService(UiModeManager.class); 489 } 490 491 @Provides 492 @Main provideResources(Context context)493 static Resources provideResources(Context context) { 494 return context.getResources(); 495 } 496 497 @Provides 498 @Application provideAssetManager(@pplication Context context)499 static AssetManager provideAssetManager(@Application Context context) { 500 return context.getAssets(); 501 } 502 503 @Provides 504 @Singleton provideRoleManager(Context context)505 static RoleManager provideRoleManager(Context context) { 506 return context.getSystemService(RoleManager.class); 507 } 508 509 @Provides 510 @Singleton providesSensorManager(Context context)511 static SensorManager providesSensorManager(Context context) { 512 return context.getSystemService(SensorManager.class); 513 } 514 515 @Provides 516 @Singleton provideSensorPrivacyManager(Context context)517 static SensorPrivacyManager provideSensorPrivacyManager(Context context) { 518 return context.getSystemService(SensorPrivacyManager.class); 519 } 520 521 @Provides 522 @Singleton provideShortcutManager(Context context)523 static ShortcutManager provideShortcutManager(Context context) { 524 return context.getSystemService(ShortcutManager.class); 525 } 526 527 @Provides 528 @Singleton provideStatsManager(Context context)529 static StatsManager provideStatsManager(Context context) { 530 return context.getSystemService(StatsManager.class); 531 } 532 533 @Provides 534 @Singleton provideStorageManager(Context context)535 static StorageManager provideStorageManager(Context context) { 536 return context.getSystemService(StorageManager.class); 537 } 538 539 @Provides 540 @Singleton provideSubscriptionManager(Context context)541 static SubscriptionManager provideSubscriptionManager(Context context) { 542 return context.getSystemService(SubscriptionManager.class); 543 } 544 545 @Provides 546 @Singleton 547 @Nullable provideTelecomManager(Context context)548 static TelecomManager provideTelecomManager(Context context) { 549 return context.getSystemService(TelecomManager.class); 550 } 551 552 @Provides 553 @Singleton provideOptionalTelecomManager(Context context)554 static Optional<TelecomManager> provideOptionalTelecomManager(Context context) { 555 return Optional.ofNullable(context.getSystemService(TelecomManager.class)); 556 } 557 558 @Provides 559 @Singleton provideTelephonyManager(Context context)560 static TelephonyManager provideTelephonyManager(Context context) { 561 return context.getSystemService(TelephonyManager.class); 562 } 563 564 @Provides 565 @Singleton 566 @TestHarness provideIsTestHarness()567 static boolean provideIsTestHarness() { 568 return ActivityManager.isRunningInUserTestHarness(); 569 } 570 571 @Provides 572 @Singleton provideTrustManager(Context context)573 static TrustManager provideTrustManager(Context context) { 574 return context.getSystemService(TrustManager.class); 575 } 576 577 @Provides 578 @Singleton 579 @Nullable provideVibrator(Context context)580 static Vibrator provideVibrator(Context context) { 581 return context.getSystemService(Vibrator.class); 582 } 583 584 @Provides 585 @Singleton provideOptionalVibrator(Context context)586 static Optional<Vibrator> provideOptionalVibrator(Context context) { 587 return Optional.ofNullable(context.getSystemService(Vibrator.class)); 588 } 589 590 @Provides 591 @Singleton provideViewConfiguration(Context context)592 static ViewConfiguration provideViewConfiguration(Context context) { 593 return ViewConfiguration.get(context); 594 } 595 596 @Provides 597 @Singleton provideUserManager(Context context)598 static UserManager provideUserManager(Context context) { 599 return context.getSystemService(UserManager.class); 600 } 601 602 @Provides provideWallpaperManager(Context context)603 static WallpaperManager provideWallpaperManager(Context context) { 604 return context.getSystemService(WallpaperManager.class); 605 } 606 607 @Provides 608 @Singleton 609 @Nullable provideWifiManager(Context context)610 static WifiManager provideWifiManager(Context context) { 611 return context.getSystemService(WifiManager.class); 612 } 613 614 @Provides 615 @Singleton provideOverlayManager(Context context)616 static OverlayManager provideOverlayManager(Context context) { 617 return context.getSystemService(OverlayManager.class); 618 } 619 620 @Provides 621 @Singleton provideCarrierConfigManager(Context context)622 static CarrierConfigManager provideCarrierConfigManager(Context context) { 623 return context.getSystemService(CarrierConfigManager.class); 624 } 625 626 @Provides 627 @Singleton provideWindowManager(Context context)628 static WindowManager provideWindowManager(Context context) { 629 return context.getSystemService(WindowManager.class); 630 } 631 632 @Provides 633 @Singleton providePermissionManager(Context context)634 static PermissionManager providePermissionManager(Context context) { 635 PermissionManager pm = context.getSystemService(PermissionManager.class); 636 if (pm != null) { 637 pm.initializeUsageHelper(); 638 } 639 return pm; 640 } 641 642 @Provides 643 @Singleton provideClipboardManager(Context context)644 static ClipboardManager provideClipboardManager(Context context) { 645 return context.getSystemService(ClipboardManager.class); 646 } 647 648 @Provides 649 @Singleton provideSmartspaceManager(Context context)650 static SmartspaceManager provideSmartspaceManager(Context context) { 651 return context.getSystemService(SmartspaceManager.class); 652 } 653 654 @Provides 655 @Singleton provideSafetyCenterManager(Context context)656 static SafetyCenterManager provideSafetyCenterManager(Context context) { 657 return context.getSystemService(SafetyCenterManager.class); 658 } 659 660 @Provides 661 @Singleton provideCameraManager(Context context)662 static CameraManager provideCameraManager(Context context) { 663 return context.getSystemService(CameraManager.class); 664 } 665 666 @Provides 667 @Singleton provideBluetoothManager(Context context)668 static BluetoothManager provideBluetoothManager(Context context) { 669 return context.getSystemService(BluetoothManager.class); 670 } 671 672 @Provides 673 @Singleton 674 @Nullable provideBluetoothAdapter(BluetoothManager bluetoothManager)675 static BluetoothAdapter provideBluetoothAdapter(BluetoothManager bluetoothManager) { 676 return bluetoothManager.getAdapter(); 677 } 678 679 @Provides 680 @Singleton provideTextClassificationManager(Context context)681 static TextClassificationManager provideTextClassificationManager(Context context) { 682 return context.getSystemService(TextClassificationManager.class); 683 } 684 685 @Provides 686 @Singleton provideStatusBarManager(Context context)687 static StatusBarManager provideStatusBarManager(Context context) { 688 return context.getSystemService(StatusBarManager.class); 689 } 690 } 691