diff options
author | 2018-12-20 13:25:34 -0500 | |
---|---|---|
committer | 2018-12-21 09:02:13 -0500 | |
commit | 196d639875478281d6885114f8a134354a8a098b (patch) | |
tree | b0697c13ab0e614ff4271d00eefa30206f011fc4 | |
parent | b93b626cbfaa77f6811e9fdfd3c362b45731661c (diff) |
Clean up DependencyProvider a bit
Create DependencyBinder which is abstract and can tell dagger how
to convert directly between interfaces and implementations without
requiring code for it.
Test: compile (which runs dagger)
Change-Id: I7013ee12d37172441e2c70cf2fe36f707975c821
49 files changed, 608 insertions, 429 deletions
diff --git a/packages/SystemUI/docs/dagger.md b/packages/SystemUI/docs/dagger.md index f81e8cce1f91..7751bb10c5ce 100644 --- a/packages/SystemUI/docs/dagger.md +++ b/packages/SystemUI/docs/dagger.md @@ -36,7 +36,8 @@ public interface SystemUIRootComponent { The root modules are what provides the global singleton dependencies across SystemUI. ContextHolder is just a wrapper that provides a context. SystemUIFactory @Provide dependencies that need to be overridden by SystemUI -variants (like other form factors). DependencyProvider provides or binds any +variants (like other form factors). DependencyBinder creates the mapping from +interfaces to implementation classes. DependencyProvider provides or binds any remaining depedencies required. ### Adding injection to a new SystemUI object @@ -195,10 +196,5 @@ public CustomView(@Named(VIEW_CONTEXT) Context themedViewContext, AttributeSet a ## TODO List - - Eliminate usages of Depndency#get - - Add support for Fragments to handle injection automatically - - (this could be through dagger2-android or something custom) - - Reduce number of things with @Provide in DependencyProvider (many can be - @Inject instead) - - Migrate as many remaining DependencyProvider instances to @Bind + - Eliminate usages of Dependency#get - Add links in above TODO diff --git a/packages/SystemUI/src/com/android/systemui/ActivityStarterDelegate.java b/packages/SystemUI/src/com/android/systemui/ActivityStarterDelegate.java index 9e7c5ba1d66c..b461f69f10d6 100644 --- a/packages/SystemUI/src/com/android/systemui/ActivityStarterDelegate.java +++ b/packages/SystemUI/src/com/android/systemui/ActivityStarterDelegate.java @@ -19,14 +19,22 @@ import android.content.Intent; import com.android.systemui.plugins.ActivityStarter; +import javax.inject.Inject; +import javax.inject.Singleton; + /** * Single common instance of ActivityStarter that can be gotten and referenced from anywhere, but * delegates to an actual implementation such as StatusBar, assuming it exists. */ +@Singleton public class ActivityStarterDelegate implements ActivityStarter { private ActivityStarter mActualStarter; + @Inject + public ActivityStarterDelegate() { + } + @Override public void startPendingIntentDismissingKeyguard(PendingIntent intent) { if (mActualStarter == null) { diff --git a/packages/SystemUI/src/com/android/systemui/DependencyBinder.java b/packages/SystemUI/src/com/android/systemui/DependencyBinder.java new file mode 100644 index 000000000000..23ef0307feb1 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/DependencyBinder.java @@ -0,0 +1,227 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui; + +import com.android.systemui.appops.AppOpsController; +import com.android.systemui.appops.AppOpsControllerImpl; +import com.android.systemui.plugins.ActivityStarter; +import com.android.systemui.plugins.VolumeDialogController; +import com.android.systemui.power.PowerNotificationWarnings; +import com.android.systemui.power.PowerUI; +import com.android.systemui.statusbar.NotificationRemoteInputManager; +import com.android.systemui.statusbar.phone.DarkIconDispatcherImpl; +import com.android.systemui.statusbar.phone.ManagedProfileController; +import com.android.systemui.statusbar.phone.ManagedProfileControllerImpl; +import com.android.systemui.statusbar.phone.StatusBarIconController; +import com.android.systemui.statusbar.phone.StatusBarIconControllerImpl; +import com.android.systemui.statusbar.phone.StatusBarRemoteInputCallback; +import com.android.systemui.statusbar.policy.BatteryController; +import com.android.systemui.statusbar.policy.BatteryControllerImpl; +import com.android.systemui.statusbar.policy.BluetoothController; +import com.android.systemui.statusbar.policy.BluetoothControllerImpl; +import com.android.systemui.statusbar.policy.CastController; +import com.android.systemui.statusbar.policy.CastControllerImpl; +import com.android.systemui.statusbar.policy.DarkIconDispatcher; +import com.android.systemui.statusbar.policy.DeviceProvisionedController; +import com.android.systemui.statusbar.policy.DeviceProvisionedControllerImpl; +import com.android.systemui.statusbar.policy.ExtensionController; +import com.android.systemui.statusbar.policy.ExtensionControllerImpl; +import com.android.systemui.statusbar.policy.FlashlightController; +import com.android.systemui.statusbar.policy.FlashlightControllerImpl; +import com.android.systemui.statusbar.policy.HotspotController; +import com.android.systemui.statusbar.policy.HotspotControllerImpl; +import com.android.systemui.statusbar.policy.IconLogger; +import com.android.systemui.statusbar.policy.IconLoggerImpl; +import com.android.systemui.statusbar.policy.KeyguardMonitor; +import com.android.systemui.statusbar.policy.KeyguardMonitorImpl; +import com.android.systemui.statusbar.policy.LocationController; +import com.android.systemui.statusbar.policy.LocationControllerImpl; +import com.android.systemui.statusbar.policy.NetworkController; +import com.android.systemui.statusbar.policy.NetworkControllerImpl; +import com.android.systemui.statusbar.policy.NextAlarmController; +import com.android.systemui.statusbar.policy.NextAlarmControllerImpl; +import com.android.systemui.statusbar.policy.RotationLockController; +import com.android.systemui.statusbar.policy.RotationLockControllerImpl; +import com.android.systemui.statusbar.policy.SecurityController; +import com.android.systemui.statusbar.policy.SecurityControllerImpl; +import com.android.systemui.statusbar.policy.UserInfoController; +import com.android.systemui.statusbar.policy.UserInfoControllerImpl; +import com.android.systemui.statusbar.policy.ZenModeController; +import com.android.systemui.statusbar.policy.ZenModeControllerImpl; +import com.android.systemui.tuner.TunerService; +import com.android.systemui.tuner.TunerServiceImpl; +import com.android.systemui.volume.VolumeDialogControllerImpl; + +import dagger.Binds; +import dagger.Module; + +/** + * Maps interfaces to implementations for use with Dagger. + */ +@Module +public abstract class DependencyBinder { + + /** + */ + @Binds + public abstract ActivityStarter provideActivityStarter(ActivityStarterDelegate delegate); + + /** + */ + @Binds + public abstract BluetoothController provideBluetoothController( + BluetoothControllerImpl controllerImpl); + + /** + */ + @Binds + public abstract LocationController provideLocationController( + LocationControllerImpl controllerImpl); + + /** + */ + @Binds + public abstract RotationLockController provideRotationLockController( + RotationLockControllerImpl controllerImpl); + + /** + */ + @Binds + public abstract NetworkController provideNetworkController( + NetworkControllerImpl controllerImpl); + + /** + */ + @Binds + public abstract ZenModeController provideZenModeController( + ZenModeControllerImpl controllerImpl); + + /** + */ + @Binds + public abstract HotspotController provideHotspotController( + HotspotControllerImpl controllerImpl); + + /** + */ + @Binds + public abstract AppOpsController provideAppOpsController( + AppOpsControllerImpl controllerImpl); + + /** + */ + @Binds + public abstract NotificationRemoteInputManager.Callback provideNotificationRemoteInputManager( + StatusBarRemoteInputCallback callbackImpl); + + /** + */ + @Binds + public abstract IconLogger provideIconLogger(IconLoggerImpl loggerImpl); + + /** + */ + @Binds + public abstract CastController provideCastController(CastControllerImpl controllerImpl); + + /** + */ + @Binds + public abstract FlashlightController provideFlashlightController( + FlashlightControllerImpl controllerImpl); + + /** + */ + @Binds + public abstract KeyguardMonitor provideKeyguardMonitor(KeyguardMonitorImpl controllerImpl); + + /** + */ + @Binds + public abstract UserInfoController provideUserInfoContrller( + UserInfoControllerImpl controllerImpl); + + /** + */ + @Binds + public abstract BatteryController provideBatteryController( + BatteryControllerImpl controllerImpl); + + /** + */ + @Binds + public abstract ManagedProfileController provideManagedProfileController( + ManagedProfileControllerImpl controllerImpl); + + /** + */ + @Binds + public abstract NextAlarmController provideNextAlarmController( + NextAlarmControllerImpl controllerImpl); + + /** + */ + @Binds + public abstract DeviceProvisionedController provideDeviceProvisionedController( + DeviceProvisionedControllerImpl controllerImpl); + + /** + */ + @Binds + public abstract SecurityController provideSecurityController( + SecurityControllerImpl controllerImpl); + + /** + */ + @Binds + public abstract TunerService provideTunerService(TunerServiceImpl controllerImpl); + + /** + */ + @Binds + public abstract DarkIconDispatcher provideDarkIconDispatcher( + DarkIconDispatcherImpl controllerImpl); + + /** + */ + @Binds + public abstract StatusBarIconController provideStatusBarIconController( + StatusBarIconControllerImpl controllerImpl); + + /** + */ + @Binds + public abstract ExtensionController provideExtensionController( + ExtensionControllerImpl controllerImpl); + + /** + */ + @Binds + public abstract VolumeDialogController provideVolumeDialogController( + VolumeDialogControllerImpl controllerImpl); + + /** + */ + @Binds + public abstract ForegroundServiceController provideForegroundService( + ForegroundServiceControllerImpl controllerImpl); + + /** + */ + @Binds + public abstract PowerUI.WarningsUI provideWarningsUi(PowerNotificationWarnings controllerImpl); +} diff --git a/packages/SystemUI/src/com/android/systemui/DependencyProvider.java b/packages/SystemUI/src/com/android/systemui/DependencyProvider.java index 3ca7b971a468..2b521c53a1e6 100644 --- a/packages/SystemUI/src/com/android/systemui/DependencyProvider.java +++ b/packages/SystemUI/src/com/android/systemui/DependencyProvider.java @@ -18,13 +18,11 @@ package com.android.systemui; import static com.android.systemui.Dependency.BG_HANDLER_NAME; import static com.android.systemui.Dependency.BG_LOOPER_NAME; -import static com.android.systemui.Dependency.LEAK_REPORT_EMAIL_NAME; import static com.android.systemui.Dependency.MAIN_HANDLER_NAME; import static com.android.systemui.Dependency.TIME_TICK_HANDLER_NAME; import android.annotation.Nullable; import android.content.Context; -import android.hardware.SensorManager; import android.hardware.SensorPrivacyManager; import android.os.Handler; import android.os.HandlerThread; @@ -40,82 +38,16 @@ import com.android.internal.app.ColorDisplayController; import com.android.internal.logging.MetricsLogger; import com.android.internal.statusbar.IStatusBarService; import com.android.settingslib.bluetooth.LocalBluetoothManager; -import com.android.systemui.appops.AppOpsController; -import com.android.systemui.appops.AppOpsControllerImpl; -import com.android.systemui.colorextraction.SysuiColorExtractor; -import com.android.systemui.keyguard.ScreenLifecycle; -import com.android.systemui.keyguard.WakefulnessLifecycle; -import com.android.systemui.plugins.ActivityStarter; -import com.android.systemui.plugins.PluginDependencyProvider; import com.android.systemui.plugins.PluginInitializerImpl; -import com.android.systemui.plugins.VolumeDialogController; -import com.android.systemui.power.PowerNotificationWarnings; -import com.android.systemui.power.PowerUI; -import com.android.systemui.recents.OverviewProxyService; import com.android.systemui.shared.plugins.PluginManager; import com.android.systemui.shared.plugins.PluginManagerImpl; -import com.android.systemui.statusbar.DisplayNavigationBarController; -import com.android.systemui.statusbar.NotificationRemoteInputManager; -import com.android.systemui.statusbar.VibratorHelper; import com.android.systemui.statusbar.phone.ConfigurationControllerImpl; -import com.android.systemui.statusbar.phone.DarkIconDispatcherImpl; -import com.android.systemui.statusbar.phone.LightBarController; -import com.android.systemui.statusbar.phone.LockscreenGestureLogger; -import com.android.systemui.statusbar.phone.ManagedProfileController; -import com.android.systemui.statusbar.phone.ManagedProfileControllerImpl; import com.android.systemui.statusbar.phone.ShadeController; import com.android.systemui.statusbar.phone.StatusBar; -import com.android.systemui.statusbar.phone.StatusBarIconController; -import com.android.systemui.statusbar.phone.StatusBarIconControllerImpl; -import com.android.systemui.statusbar.phone.StatusBarRemoteInputCallback; -import com.android.systemui.statusbar.phone.StatusBarWindowController; -import com.android.systemui.statusbar.policy.AccessibilityController; -import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper; -import com.android.systemui.statusbar.policy.BatteryController; -import com.android.systemui.statusbar.policy.BatteryControllerImpl; -import com.android.systemui.statusbar.policy.BluetoothController; -import com.android.systemui.statusbar.policy.BluetoothControllerImpl; -import com.android.systemui.statusbar.policy.CastController; -import com.android.systemui.statusbar.policy.CastControllerImpl; import com.android.systemui.statusbar.policy.ConfigurationController; -import com.android.systemui.statusbar.policy.DarkIconDispatcher; import com.android.systemui.statusbar.policy.DataSaverController; -import com.android.systemui.statusbar.policy.DeviceProvisionedController; -import com.android.systemui.statusbar.policy.DeviceProvisionedControllerImpl; -import com.android.systemui.statusbar.policy.ExtensionController; -import com.android.systemui.statusbar.policy.ExtensionControllerImpl; -import com.android.systemui.statusbar.policy.FlashlightController; -import com.android.systemui.statusbar.policy.FlashlightControllerImpl; -import com.android.systemui.statusbar.policy.HotspotController; -import com.android.systemui.statusbar.policy.HotspotControllerImpl; -import com.android.systemui.statusbar.policy.IconLogger; -import com.android.systemui.statusbar.policy.IconLoggerImpl; -import com.android.systemui.statusbar.policy.KeyguardMonitor; -import com.android.systemui.statusbar.policy.KeyguardMonitorImpl; -import com.android.systemui.statusbar.policy.LocationController; -import com.android.systemui.statusbar.policy.LocationControllerImpl; import com.android.systemui.statusbar.policy.NetworkController; -import com.android.systemui.statusbar.policy.NetworkControllerImpl; -import com.android.systemui.statusbar.policy.NextAlarmController; -import com.android.systemui.statusbar.policy.NextAlarmControllerImpl; -import com.android.systemui.statusbar.policy.RotationLockController; -import com.android.systemui.statusbar.policy.RotationLockControllerImpl; -import com.android.systemui.statusbar.policy.SecurityController; -import com.android.systemui.statusbar.policy.SecurityControllerImpl; -import com.android.systemui.statusbar.policy.UserInfoController; -import com.android.systemui.statusbar.policy.UserInfoControllerImpl; -import com.android.systemui.statusbar.policy.UserSwitcherController; -import com.android.systemui.statusbar.policy.ZenModeController; -import com.android.systemui.statusbar.policy.ZenModeControllerImpl; -import com.android.systemui.tuner.TunablePadding; -import com.android.systemui.tuner.TunablePadding.TunablePaddingService; -import com.android.systemui.tuner.TunerService; -import com.android.systemui.tuner.TunerServiceImpl; -import com.android.systemui.util.AsyncSensorManager; -import com.android.systemui.util.leak.GarbageMonitor; import com.android.systemui.util.leak.LeakDetector; -import com.android.systemui.util.leak.LeakReporter; -import com.android.systemui.volume.VolumeDialogControllerImpl; import javax.inject.Named; import javax.inject.Singleton; @@ -165,256 +97,12 @@ public class DependencyProvider { @Singleton @Provides - public ActivityStarter provideActivityStarter() { - return new ActivityStarterDelegate(); - } - - @Singleton - @Provides - public InitController provideInitController() { - return new InitController(); - } - - @Singleton - @Provides - public ActivityStarterDelegate provideActivityStarterDelegate(ActivityStarter starter) { - return (ActivityStarterDelegate) starter; - } - - @Singleton - @Provides - public AsyncSensorManager provideAsyncSensorManager(Context context, PluginManager manager) { - return new AsyncSensorManager(context.getSystemService(SensorManager.class), - manager); - - } - - @Singleton - @Provides - public BluetoothController provideBluetoothController(Context context, - @Named(BG_LOOPER_NAME) Looper looper) { - return new BluetoothControllerImpl(context, looper); - - } - - @Singleton - @Provides - public LocationController provideLocationController(Context context, - @Named(BG_LOOPER_NAME) Looper bgLooper) { - return new LocationControllerImpl(context, bgLooper); - - } - - @Singleton - @Provides - public RotationLockController provideRotationLockController(Context context) { - return new RotationLockControllerImpl(context); - - } - - @Singleton - @Provides - public NetworkController provideNetworkController(Context context, - @Named(BG_LOOPER_NAME) Looper bgLooper, DeviceProvisionedController controller) { - return new NetworkControllerImpl(context, bgLooper, - controller); - - } - - @Singleton - @Provides - public ZenModeController provideZenModeController(Context context, - @Named(MAIN_HANDLER_NAME) Handler mainHandler) { - return new ZenModeControllerImpl(context, mainHandler); - - } - - @Singleton - @Provides - public HotspotController provideHotspotController(Context context) { - return new HotspotControllerImpl(context); - - } - - @Singleton - @Provides - public CastController provideCastController(Context context) { - return new CastControllerImpl(context); - - } - - @Singleton - @Provides - public FlashlightController provideFlashlightController(Context context) { - return new FlashlightControllerImpl(context); - - } - - @Singleton - @Provides - public KeyguardMonitor provideKeyguardMonitor(Context context) { - return new KeyguardMonitorImpl(context); - - } - - @Singleton - @Provides - public UserSwitcherController provideUserSwitcherController(Context context, - KeyguardMonitor keyguardMonitor, @Named(MAIN_HANDLER_NAME) Handler mainHandler, - ActivityStarter activityStarter) { - return new UserSwitcherController(context, keyguardMonitor, mainHandler, activityStarter); - } - - @Singleton - @Provides - public UserInfoController provideUserInfoContrller(Context context) { - return new UserInfoControllerImpl(context); - - } - - @Singleton - @Provides - public BatteryController provideBatteryController(Context context) { - return new BatteryControllerImpl(context); - - } - - @Singleton - @Provides - public ColorDisplayController provideColorDisplayController(Context context) { - return new ColorDisplayController(context); - - } - - @Singleton - @Provides - public ManagedProfileController provideManagedProfileController(Context context) { - return new ManagedProfileControllerImpl(context); - - } - - @Singleton - @Provides - public NextAlarmController provideNextAlarmController(Context context) { - return new NextAlarmControllerImpl(context); - - } - - @Singleton - @Provides public DataSaverController provideDataSaverController(NetworkController networkController) { return networkController.getDataSaverController(); } @Singleton @Provides - public AccessibilityController provideAccessibilityController(Context context) { - return new AccessibilityController(context); - - } - - @Singleton - @Provides - public DeviceProvisionedController provideDeviceProvisionedController(Context context) { - return new DeviceProvisionedControllerImpl(context); - - } - - @Singleton - @Provides - public PluginManager providePluginManager(Context context) { - return new PluginManagerImpl(context, new PluginInitializerImpl()); - - } - - @Singleton - @Provides - public SecurityController provideSecurityController(Context context) { - return new SecurityControllerImpl(context); - - } - - @Singleton - @Provides - public LeakDetector provideLeakDetector() { - return LeakDetector.create(); - - } - - @Singleton - @Provides - public LeakReporter provideLeakReporter(Context context, LeakDetector detector, - @Nullable @Named(LEAK_REPORT_EMAIL_NAME) String email) { - return new LeakReporter(context, detector, email); - } - - @Singleton - @Provides - public GarbageMonitor provideGarbageMonitor(Context context, - @Named(BG_LOOPER_NAME) Looper bgLooper, LeakDetector detector, LeakReporter reporter) { - return new GarbageMonitor(context, bgLooper, detector, reporter); - } - - @Singleton - @Provides - public TunerService provideTunerService(Context context) { - return new TunerServiceImpl(context); - - } - - @Singleton - @Provides - public StatusBarWindowController provideStatusBarWindowController(Context context) { - return new StatusBarWindowController(context); - - } - - @Singleton - @Provides - public DarkIconDispatcher provideDarkIconDispatcher(Context context) { - return new DarkIconDispatcherImpl(context); - } - - @Singleton - @Provides - public ConfigurationController provideConfigurationController(Context context) { - return new ConfigurationControllerImpl(context); - - } - - @Singleton - @Provides - public StatusBarIconController provideStatusBarIconController(Context context) { - return new StatusBarIconControllerImpl(context); - - } - - @Singleton - @Provides - public ScreenLifecycle provideScreenLifecycle() { - return new ScreenLifecycle(); - } - - @Singleton - @Provides - public WakefulnessLifecycle provideWakefulnessLifecycle() { - return new WakefulnessLifecycle(); - } - - @Singleton - @Provides - public ExtensionController provideExtensionController(Context context) { - return new ExtensionControllerImpl(context); - } - - @Singleton - @Provides - public PluginDependencyProvider providePluginDependency(PluginManager pluginManager) { - return new PluginDependencyProvider(pluginManager); - } - - @Singleton - @Provides @Nullable public LocalBluetoothManager provideLocalBluetoothController(Context context, @Named(BG_HANDLER_NAME) Handler bgHandler) { @@ -424,72 +112,8 @@ public class DependencyProvider { @Singleton @Provides - public VolumeDialogController provideVolumeDialogController(Context context) { - return new VolumeDialogControllerImpl(context); - - } - - @Singleton - @Provides public MetricsLogger provideMetricsLogger() { return new MetricsLogger(); - - } - - @Singleton - @Provides - public AccessibilityManagerWrapper provideAccessibilityManagerWrapper(Context context) { - return new AccessibilityManagerWrapper(context); - - } - - @Singleton - @Provides - // Creating a new instance will trigger color extraction. - // Thankfully this only happens once - during boot - and WallpaperManagerService - // loads colors from cache. - public SysuiColorExtractor provideSysuiColorExtractor(Context context) { - return new SysuiColorExtractor(context); - - } - - @Singleton - @Provides - public TunablePadding.TunablePaddingService provideTunablePaddingService() { - return new TunablePaddingService(); - - } - - @Singleton - @Provides - public ForegroundServiceController provideForegroundService(Context context) { - return new ForegroundServiceControllerImpl(context); - - } - - @Singleton - @Provides - public UiOffloadThread provideUiOffloadThread() { - return new UiOffloadThread(); - } - - @Singleton - @Provides - public PowerUI.WarningsUI provideWarningsUi(Context context) { - return new PowerNotificationWarnings(context); - } - - @Singleton - @Provides - public IconLogger provideIconLogger(Context context, @Named(BG_LOOPER_NAME) Looper bgLooper, - MetricsLogger logger) { - return new IconLoggerImpl(context, bgLooper, logger); - } - - @Singleton - @Provides - public LightBarController provideLightBarController(Context context) { - return new LightBarController(context); } @Singleton @@ -500,19 +124,6 @@ public class DependencyProvider { @Singleton @Provides - public OverviewProxyService provideOverviewProxyService(Context context) { - return new OverviewProxyService(context); - } - - @Singleton - @Provides - public VibratorHelper provideVibratorHelper(Context context) { - return new VibratorHelper(context); - - } - - @Singleton - @Provides public IStatusBarService provideIStatusBarService() { return IStatusBarService.Stub.asInterface( ServiceManager.getService(Context.STATUS_BAR_SERVICE)); @@ -521,50 +132,45 @@ public class DependencyProvider { @Singleton @Provides // Single instance of DisplayMetrics, gets updated by StatusBar, but can be used -// anywhere it is needed. + // anywhere it is needed. public DisplayMetrics provideDisplayMetrics() { return new DisplayMetrics(); - } @Singleton @Provides - public LockscreenGestureLogger provideLockscreenGestureLogger() { - return new LockscreenGestureLogger(); + public ShadeController provideShadeController(Context context) { + return SysUiServiceProvider.getComponent(context, StatusBar.class); } @Singleton @Provides - public ShadeController provideShadeController(Context context) { - return SysUiServiceProvider.getComponent(context, StatusBar.class); + public SensorPrivacyManager provideSensorPrivacyManager(Context context) { + return context.getSystemService(SensorPrivacyManager.class); } @Singleton @Provides - public NotificationRemoteInputManager.Callback provideNotificationRemoteInputManager( - Context context) { - return new StatusBarRemoteInputCallback(context); + public LeakDetector provideLeakDetector() { + return LeakDetector.create(); } @Singleton @Provides - public AppOpsController provideAppOpsController(Context context, - @Named(BG_LOOPER_NAME) Looper bgLooper) { - return new AppOpsControllerImpl(context, bgLooper); - + public ColorDisplayController provideColorDisplayController(Context context) { + return new ColorDisplayController(context); } @Singleton @Provides - public DisplayNavigationBarController provideDisplayNavigationBarController(Context context, - @Named(MAIN_HANDLER_NAME) Handler mainHandler) { - return new DisplayNavigationBarController(context, mainHandler); + public PluginManager providePluginManager(Context context) { + return new PluginManagerImpl(context, new PluginInitializerImpl()); } @Singleton @Provides - public SensorPrivacyManager provideSensorPrivacyManager(Context context) { - return context.getSystemService(SensorPrivacyManager.class); + public ConfigurationController provideConfigurationController(Context context) { + return new ConfigurationControllerImpl(context); } } diff --git a/packages/SystemUI/src/com/android/systemui/ForegroundServiceControllerImpl.java b/packages/SystemUI/src/com/android/systemui/ForegroundServiceControllerImpl.java index bab472c2e687..ae446ddc91ab 100644 --- a/packages/SystemUI/src/com/android/systemui/ForegroundServiceControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/ForegroundServiceControllerImpl.java @@ -29,9 +29,13 @@ import com.android.internal.messages.nano.SystemMessageProto; import java.util.Arrays; +import javax.inject.Inject; +import javax.inject.Singleton; + /** * Foreground service controller, a/k/a Dianne's Dungeon. */ +@Singleton public class ForegroundServiceControllerImpl implements ForegroundServiceController { @@ -45,6 +49,7 @@ public class ForegroundServiceControllerImpl private final SparseArray<UserServices> mUserServices = new SparseArray<>(); private final Object mMutex = new Object(); + @Inject public ForegroundServiceControllerImpl(Context context) { mContext = context; } diff --git a/packages/SystemUI/src/com/android/systemui/InitController.java b/packages/SystemUI/src/com/android/systemui/InitController.java index 81d32517b27a..a2dd12389fa9 100644 --- a/packages/SystemUI/src/com/android/systemui/InitController.java +++ b/packages/SystemUI/src/com/android/systemui/InitController.java @@ -16,10 +16,14 @@ package com.android.systemui; import java.util.ArrayList; +import javax.inject.Inject; +import javax.inject.Singleton; + /** * Created by {@link Dependency} on SystemUI startup. Add tasks which need to be executed only * after all other dependencies have been created. */ +@Singleton public class InitController { /** @@ -29,6 +33,10 @@ public class InitController { private final ArrayList<Runnable> mTasks = new ArrayList<>(); + @Inject + public InitController() { + } + /** * Add a task to be executed after {@link Dependency#start()} * @param runnable the task to be executed diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java b/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java index 384a14c70e9c..8bac7c590249 100644 --- a/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java +++ b/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java @@ -221,7 +221,8 @@ public class SystemUIFactory { } @Singleton - @Component(modules = {SystemUIFactory.class, DependencyProvider.class, ContextHolder.class}) + @Component(modules = {SystemUIFactory.class, DependencyProvider.class, DependencyBinder.class, + ContextHolder.class}) public interface SystemUIRootComponent { @Singleton Dependency.DependencyInjector createDependency(); diff --git a/packages/SystemUI/src/com/android/systemui/UiOffloadThread.java b/packages/SystemUI/src/com/android/systemui/UiOffloadThread.java index 82fd9b304195..a726b42f714f 100644 --- a/packages/SystemUI/src/com/android/systemui/UiOffloadThread.java +++ b/packages/SystemUI/src/com/android/systemui/UiOffloadThread.java @@ -20,14 +20,22 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; +import javax.inject.Inject; +import javax.inject.Singleton; + /** * Thread that offloads work from the UI thread but that is still perceptible to the user, so the * priority is the same as the main thread. */ +@Singleton public class UiOffloadThread { private final ExecutorService mExecutorService = Executors.newSingleThreadExecutor(); + @Inject + public UiOffloadThread() { + } + public Future<?> submit(Runnable runnable) { return mExecutorService.submit(runnable); } diff --git a/packages/SystemUI/src/com/android/systemui/appops/AppOpsControllerImpl.java b/packages/SystemUI/src/com/android/systemui/appops/AppOpsControllerImpl.java index af6ee1f4179a..e3bcb37474db 100644 --- a/packages/SystemUI/src/com/android/systemui/appops/AppOpsControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/appops/AppOpsControllerImpl.java @@ -16,6 +16,8 @@ package com.android.systemui.appops; +import static com.android.systemui.Dependency.BG_LOOPER_NAME; + import android.app.AppOpsManager; import android.content.Context; import android.os.Handler; @@ -32,12 +34,17 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; + /** * Controller to keep track of applications that have requested access to given App Ops * * It can be subscribed to with callbacks. Additionally, it passes on the information to * NotificationPresenter to be displayed to the user. */ +@Singleton public class AppOpsControllerImpl implements AppOpsController, AppOpsManager.OnOpActiveChangedListener, AppOpsManager.OnOpNotedListener { @@ -65,7 +72,8 @@ public class AppOpsControllerImpl implements AppOpsController, AppOpsManager.OP_FINE_LOCATION }; - public AppOpsControllerImpl(Context context, Looper bgLooper) { + @Inject + public AppOpsControllerImpl(Context context, @Named(BG_LOOPER_NAME) Looper bgLooper) { mContext = context; mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE); mBGHandler = new H(bgLooper); diff --git a/packages/SystemUI/src/com/android/systemui/colorextraction/SysuiColorExtractor.java b/packages/SystemUI/src/com/android/systemui/colorextraction/SysuiColorExtractor.java index 3c8a461d3f73..fdf18ce24f50 100644 --- a/packages/SystemUI/src/com/android/systemui/colorextraction/SysuiColorExtractor.java +++ b/packages/SystemUI/src/com/android/systemui/colorextraction/SysuiColorExtractor.java @@ -39,9 +39,13 @@ import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.Arrays; +import javax.inject.Inject; +import javax.inject.Singleton; + /** * ColorExtractor aware of wallpaper visibility */ +@Singleton public class SysuiColorExtractor extends ColorExtractor implements Dumpable { private static final String TAG = "SysuiColorExtractor"; private boolean mWallpaperVisible; @@ -49,6 +53,7 @@ public class SysuiColorExtractor extends ColorExtractor implements Dumpable { // Colors to return when the wallpaper isn't visible private final GradientColors mWpHiddenColors; + @Inject public SysuiColorExtractor(Context context) { this(context, new Tonal(context), true); } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ScreenLifecycle.java b/packages/SystemUI/src/com/android/systemui/keyguard/ScreenLifecycle.java index b6fce4408bcf..834bca55103a 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ScreenLifecycle.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ScreenLifecycle.java @@ -23,9 +23,13 @@ import com.android.systemui.Dumpable; import java.io.FileDescriptor; import java.io.PrintWriter; +import javax.inject.Inject; +import javax.inject.Singleton; + /** * Tracks the screen lifecycle. */ +@Singleton public class ScreenLifecycle extends Lifecycle<ScreenLifecycle.Observer> implements Dumpable { public static final int SCREEN_OFF = 0; @@ -35,6 +39,10 @@ public class ScreenLifecycle extends Lifecycle<ScreenLifecycle.Observer> impleme private int mScreenState = SCREEN_OFF; + @Inject + public ScreenLifecycle() { + } + public int getScreenState() { return mScreenState; } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/WakefulnessLifecycle.java b/packages/SystemUI/src/com/android/systemui/keyguard/WakefulnessLifecycle.java index 59c7f236caf7..52a0214c492c 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/WakefulnessLifecycle.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/WakefulnessLifecycle.java @@ -23,9 +23,13 @@ import com.android.systemui.Dumpable; import java.io.FileDescriptor; import java.io.PrintWriter; +import javax.inject.Inject; +import javax.inject.Singleton; + /** * Tracks the wakefulness lifecycle. */ +@Singleton public class WakefulnessLifecycle extends Lifecycle<WakefulnessLifecycle.Observer> implements Dumpable { @@ -36,6 +40,10 @@ public class WakefulnessLifecycle extends Lifecycle<WakefulnessLifecycle.Observe private int mWakefulness = WAKEFULNESS_ASLEEP; + @Inject + public WakefulnessLifecycle() { + } + public int getWakefulness() { return mWakefulness; } diff --git a/packages/SystemUI/src/com/android/systemui/plugins/PluginDependencyProvider.java b/packages/SystemUI/src/com/android/systemui/plugins/PluginDependencyProvider.java index 03daa95567ee..69495319e060 100644 --- a/packages/SystemUI/src/com/android/systemui/plugins/PluginDependencyProvider.java +++ b/packages/SystemUI/src/com/android/systemui/plugins/PluginDependencyProvider.java @@ -20,11 +20,20 @@ import com.android.systemui.Dependency; import com.android.systemui.plugins.PluginDependency.DependencyProvider; import com.android.systemui.shared.plugins.PluginManager; +import javax.inject.Inject; +import javax.inject.Singleton; + +/** + */ +@Singleton public class PluginDependencyProvider extends DependencyProvider { private final ArrayMap<Class<?>, Object> mDependencies = new ArrayMap<>(); private final PluginManager mManager; + /** + */ + @Inject public PluginDependencyProvider(PluginManager manager) { mManager = manager; PluginDependency.sProvider = this; diff --git a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java index b722f9f1d1c1..50dda1c1de6b 100644 --- a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java +++ b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java @@ -58,6 +58,12 @@ import java.text.NumberFormat; import java.util.Locale; import java.util.Objects; +import javax.inject.Inject; +import javax.inject.Singleton; + +/** + */ +@Singleton public class PowerNotificationWarnings implements PowerUI.WarningsUI { private static final String TAG = PowerUI.TAG + ".Notification"; private static final boolean DEBUG = PowerUI.DEBUG; @@ -136,6 +142,9 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI { private SystemUIDialog mHighTempDialog; private SystemUIDialog mThermalShutdownDialog; + /** + */ + @Inject public PowerNotificationWarnings(Context context) { mContext = context; mNoMan = mContext.getSystemService(NotificationManager.class); diff --git a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java index 12b6f673de1c..538e0f0de415 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java +++ b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java @@ -63,9 +63,13 @@ import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; +import javax.inject.Inject; +import javax.inject.Singleton; + /** * Class to send information from overview to launcher with a binder. */ +@Singleton public class OverviewProxyService implements CallbackController<OverviewProxyListener>, Dumpable { private static final String ACTION_QUICKSTEP = "android.intent.action.QUICKSTEP_SERVICE"; @@ -338,6 +342,7 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis private final IBinder.DeathRecipient mOverviewServiceDeathRcpt = this::cleanupAfterDeath; + @Inject public OverviewProxyService(Context context) { mContext = context; mHandler = new Handler(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/DisplayNavigationBarController.java b/packages/SystemUI/src/com/android/systemui/statusbar/DisplayNavigationBarController.java index 2f2610998b35..78172f19d291 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/DisplayNavigationBarController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/DisplayNavigationBarController.java @@ -18,6 +18,8 @@ package com.android.systemui.statusbar; import static android.view.Display.DEFAULT_DISPLAY; +import static com.android.systemui.Dependency.MAIN_HANDLER_NAME; + import android.content.Context; import android.hardware.display.DisplayManager; import android.hardware.display.DisplayManager.DisplayListener; @@ -32,9 +34,14 @@ import android.view.WindowManagerGlobal; import com.android.systemui.statusbar.phone.NavigationBarFragment; +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; + /** * A controller to handle external navigation bars */ +@Singleton public class DisplayNavigationBarController implements DisplayListener { private static final String TAG = DisplayNavigationBarController.class.getName(); @@ -46,7 +53,9 @@ public class DisplayNavigationBarController implements DisplayListener { /** A displayId - nav bar mapping */ private SparseArray<NavigationBarFragment> mExternalNavigationBarMap = new SparseArray<>(); - public DisplayNavigationBarController(Context context, Handler handler) { + @Inject + public DisplayNavigationBarController(Context context, + @Named(MAIN_HANDLER_NAME) Handler handler) { mContext = context; mHandler = handler; mDisplayManager = (DisplayManager) mContext.getSystemService(Context.DISPLAY_SERVICE); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/VibratorHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/VibratorHelper.java index 6560f8f9c420..442416fd3bea 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/VibratorHelper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/VibratorHelper.java @@ -26,6 +26,12 @@ import android.os.VibrationEffect; import android.os.Vibrator; import android.provider.Settings; +import javax.inject.Inject; +import javax.inject.Singleton; + +/** + */ +@Singleton public class VibratorHelper { private final Vibrator mVibrator; @@ -44,6 +50,9 @@ public class VibratorHelper { } }; + /** + */ + @Inject public VibratorHelper(Context context) { mContext = context; mVibrator = context.getSystemService(Vibrator.class); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DarkIconDispatcherImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DarkIconDispatcherImpl.java index 5906dc29fa08..5b44a77454b2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DarkIconDispatcherImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DarkIconDispatcherImpl.java @@ -29,6 +29,12 @@ import com.android.systemui.statusbar.policy.DarkIconDispatcher; import java.io.FileDescriptor; import java.io.PrintWriter; +import javax.inject.Inject; +import javax.inject.Singleton; + +/** + */ +@Singleton public class DarkIconDispatcherImpl implements DarkIconDispatcher { private final LightBarTransitionsController mTransitionsController; @@ -40,6 +46,9 @@ public class DarkIconDispatcherImpl implements DarkIconDispatcher { private int mDarkModeIconColorSingleTone; private int mLightModeIconColorSingleTone; + /** + */ + @Inject public DarkIconDispatcherImpl(Context context) { mDarkModeIconColorSingleTone = context.getColor(R.color.dark_mode_icon_color_single_tone); mLightModeIconColorSingleTone = context.getColor(R.color.light_mode_icon_color_single_tone); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java index 7c30e48f171a..e156e770cb72 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java @@ -34,9 +34,13 @@ import com.android.systemui.statusbar.policy.DarkIconDispatcher; import java.io.FileDescriptor; import java.io.PrintWriter; +import javax.inject.Inject; +import javax.inject.Singleton; + /** * Controls how light status bar flag applies to the icons. */ +@Singleton public class LightBarController implements BatteryController.BatteryStateChangeCallback, Dumpable { private static final float NAV_BAR_INVERSION_SCRIM_ALPHA_THRESHOLD = 0.1f; @@ -78,6 +82,7 @@ public class LightBarController implements BatteryController.BatteryStateChangeC private final Context mContext; + @Inject public LightBarController(Context ctx) { mDarkModeColor = Color.valueOf(ctx.getColor(R.color.dark_mode_icon_color_single_tone)); mStatusBarIconController = Dependency.get(DarkIconDispatcher.class); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenGestureLogger.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenGestureLogger.java index 7621887b4170..12819535cfb6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenGestureLogger.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenGestureLogger.java @@ -25,16 +25,21 @@ import com.android.systemui.Dependency; import com.android.systemui.EventLogConstants; import com.android.systemui.EventLogTags; +import javax.inject.Inject; +import javax.inject.Singleton; + /** * Wrapper that emits both new- and old-style gesture logs. * TODO: delete this once the old logs are no longer needed. */ +@Singleton public class LockscreenGestureLogger { private ArrayMap<Integer, Integer> mLegacyMap; private LogMaker mLogMaker = new LogMaker(MetricsEvent.VIEW_UNKNOWN) .setType(MetricsEvent.TYPE_ACTION); private final MetricsLogger mMetricsLogger = Dependency.get(MetricsLogger.class); + @Inject public LockscreenGestureLogger() { mLegacyMap = new ArrayMap<>(EventLogConstants.METRICS_GESTURE_TYPE_MAP.length); for (int i = 0; i < EventLogConstants.METRICS_GESTURE_TYPE_MAP.length ; i++) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ManagedProfileControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ManagedProfileControllerImpl.java index 0f8d59b12ddb..fbd8d8a76d26 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ManagedProfileControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ManagedProfileControllerImpl.java @@ -28,6 +28,12 @@ import java.util.ArrayList; import java.util.LinkedList; import java.util.List; +import javax.inject.Inject; +import javax.inject.Singleton; + +/** + */ +@Singleton public class ManagedProfileControllerImpl implements ManagedProfileController { private final List<Callback> mCallbacks = new ArrayList<>(); @@ -38,6 +44,9 @@ public class ManagedProfileControllerImpl implements ManagedProfileController { private boolean mListening; private int mCurrentUser; + /** + */ + @Inject public ManagedProfileControllerImpl(Context context) { mContext = context; mUserManager = UserManager.get(mContext); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java index 4f25349ef7d2..db7589d0f333 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java @@ -45,11 +45,15 @@ import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; +import javax.inject.Inject; +import javax.inject.Singleton; + /** * Receives the callbacks from CommandQueue related to icons and tracks the state of * all the icons. Dispatches this state to any IconManagers that are currently * registered with it. */ +@Singleton public class StatusBarIconControllerImpl extends StatusBarIconList implements Tunable, ConfigurationListener, Dumpable, CommandQueue.Callbacks, StatusBarIconController { @@ -66,6 +70,7 @@ public class StatusBarIconControllerImpl extends StatusBarIconList implements Tu private boolean mIsDark = false; + @Inject public StatusBarIconControllerImpl(Context context) { super(context.getResources().getStringArray( com.android.internal.R.array.config_statusBarIcons)); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java index 78f537459d0a..116ecc8ddeb5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java @@ -47,6 +47,12 @@ import com.android.systemui.statusbar.notification.stack.NotificationStackScroll import com.android.systemui.statusbar.policy.KeyguardMonitor; import com.android.systemui.statusbar.policy.PreviewInflater; +import javax.inject.Inject; +import javax.inject.Singleton; + +/** + */ +@Singleton public class StatusBarRemoteInputCallback implements Callback, Callbacks { private final KeyguardMonitor mKeyguardMonitor = Dependency.get(KeyguardMonitor.class); @@ -65,6 +71,9 @@ public class StatusBarRemoteInputCallback implements Callback, Callbacks { private int mDisabled2; protected BroadcastReceiver mChallengeReceiver = new ChallengeReceiver(); + /** + */ + @Inject public StatusBarRemoteInputCallback(Context context) { mContext = context; mContext.registerReceiverAsUser(mChallengeReceiver, UserHandle.ALL, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java index cb6e30070fdd..88f904882c8f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java @@ -54,9 +54,13 @@ import java.io.FileDescriptor; import java.io.PrintWriter; import java.lang.reflect.Field; +import javax.inject.Inject; +import javax.inject.Singleton; + /** * Encapsulates all logic for the status bar window state management. */ +@Singleton public class StatusBarWindowController implements Callback, Dumpable, ConfigurationListener { private static final String TAG = "StatusBarWindowController"; @@ -78,6 +82,7 @@ public class StatusBarWindowController implements Callback, Dumpable, Configurat private final SysuiColorExtractor mColorExtractor = Dependency.get(SysuiColorExtractor.class); + @Inject public StatusBarWindowController(Context context) { this(context, context.getSystemService(WindowManager.class), ActivityManager.getService(), DozeParameters.getInstance(context)); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessibilityController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessibilityController.java index cc431dd3c34a..ebfdb3f9aa76 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessibilityController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessibilityController.java @@ -23,6 +23,12 @@ import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; +import javax.inject.Inject; +import javax.inject.Singleton; + +/** + */ +@Singleton public class AccessibilityController implements AccessibilityManager.AccessibilityStateChangeListener, AccessibilityManager.TouchExplorationStateChangeListener { @@ -32,6 +38,9 @@ public class AccessibilityController implements private boolean mAccessibilityEnabled; private boolean mTouchExplorationEnabled; + /** + */ + @Inject public AccessibilityController(Context context) { AccessibilityManager am = (AccessibilityManager) context.getSystemService(Context.ACCESSIBILITY_SERVICE); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessibilityManagerWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessibilityManagerWrapper.java index 67da8a54b68a..1395e1377529 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessibilityManagerWrapper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessibilityManagerWrapper.java @@ -19,14 +19,19 @@ import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityManager; import android.view.accessibility.AccessibilityManager.AccessibilityServicesStateChangeListener; +import javax.inject.Inject; +import javax.inject.Singleton; + /** * For mocking because AccessibilityManager is final for some reason... */ +@Singleton public class AccessibilityManagerWrapper implements CallbackController<AccessibilityServicesStateChangeListener> { private final AccessibilityManager mAccessibilityManager; + @Inject public AccessibilityManagerWrapper(Context context) { mAccessibilityManager = context.getSystemService(AccessibilityManager.class); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java index ddcfbf6f3c31..5d61f4aa7fcb 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java @@ -39,10 +39,14 @@ import java.io.PrintWriter; import java.text.NumberFormat; import java.util.ArrayList; +import javax.inject.Inject; +import javax.inject.Singleton; + /** * Default implementation of a {@link BatteryController}. This controller monitors for battery * level change events that are broadcasted by the system. */ +@Singleton public class BatteryControllerImpl extends BroadcastReceiver implements BatteryController { private static final String TAG = "BatteryController"; @@ -68,6 +72,7 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC private Estimate mEstimate; private long mLastEstimateTimestamp = -1; + @Inject public BatteryControllerImpl(Context context) { this(context, context.getSystemService(PowerManager.class)); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java index 6f64a563289e..c8550003d2f4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java @@ -16,6 +16,8 @@ package com.android.systemui.statusbar.policy; +import static com.android.systemui.Dependency.BG_LOOPER_NAME; + import android.app.ActivityManager; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; @@ -42,6 +44,13 @@ import java.util.Collection; import java.util.List; import java.util.WeakHashMap; +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; + +/** + */ +@Singleton public class BluetoothControllerImpl implements BluetoothController, BluetoothCallback, CachedBluetoothDevice.Callback, LocalBluetoothProfileManager.ServiceListener { private static final String TAG = "BluetoothController"; @@ -61,7 +70,10 @@ public class BluetoothControllerImpl implements BluetoothController, BluetoothCa private final H mHandler = new H(Looper.getMainLooper()); private int mState; - public BluetoothControllerImpl(Context context, Looper bgLooper) { + /** + */ + @Inject + public BluetoothControllerImpl(Context context, @Named(BG_LOOPER_NAME) Looper bgLooper) { mLocalBluetoothManager = Dependency.get(LocalBluetoothManager.class); mBgHandler = new Handler(bgLooper); if (mLocalBluetoothManager != null) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CastControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CastControllerImpl.java index ccfe073d5cb8..c7d337ad46d6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CastControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CastControllerImpl.java @@ -44,8 +44,12 @@ import java.util.Objects; import java.util.Set; import java.util.UUID; +import javax.inject.Inject; +import javax.inject.Singleton; + /** Platform implementation of the cast controller. **/ +@Singleton public class CastControllerImpl implements CastController { private static final String TAG = "CastController"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); @@ -63,6 +67,7 @@ public class CastControllerImpl implements CastController { private boolean mCallbackRegistered; private MediaProjectionInfo mProjection; + @Inject public CastControllerImpl(Context context) { mContext = context; mMediaRouter = (MediaRouter) context.getSystemService(Context.MEDIA_ROUTER_SERVICE); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceProvisionedControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceProvisionedControllerImpl.java index f2283a53a608..c995162c8bb1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceProvisionedControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceProvisionedControllerImpl.java @@ -27,6 +27,12 @@ import com.android.systemui.settings.CurrentUserTracker; import java.util.ArrayList; +import javax.inject.Inject; +import javax.inject.Singleton; + +/** + */ +@Singleton public class DeviceProvisionedControllerImpl extends CurrentUserTracker implements DeviceProvisionedController { @@ -36,6 +42,9 @@ public class DeviceProvisionedControllerImpl extends CurrentUserTracker implemen private final Uri mDeviceProvisionedUri; private final Uri mUserSetupUri; + /** + */ + @Inject public DeviceProvisionedControllerImpl(Context context) { super(context); mContext = context; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ExtensionControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ExtensionControllerImpl.java index a6146a625193..2305db0dbf8d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ExtensionControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ExtensionControllerImpl.java @@ -34,6 +34,12 @@ import java.util.Comparator; import java.util.function.Consumer; import java.util.function.Supplier; +import javax.inject.Inject; +import javax.inject.Singleton; + +/** + */ +@Singleton public class ExtensionControllerImpl implements ExtensionController { public static final int SORT_ORDER_PLUGIN = 0; @@ -44,6 +50,9 @@ public class ExtensionControllerImpl implements ExtensionController { private final Context mDefaultContext; + /** + */ + @Inject public ExtensionControllerImpl(Context context) { mDefaultContext = context; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightControllerImpl.java index e23ce2d022b3..41ff9d1029b2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightControllerImpl.java @@ -35,9 +35,13 @@ import java.io.PrintWriter; import java.lang.ref.WeakReference; import java.util.ArrayList; +import javax.inject.Inject; +import javax.inject.Singleton; + /** * Manages the flashlight. */ +@Singleton public class FlashlightControllerImpl implements FlashlightController { private static final String TAG = "FlashlightController"; @@ -64,6 +68,7 @@ public class FlashlightControllerImpl implements FlashlightController { private String mCameraId; private boolean mTorchAvailable; + @Inject public FlashlightControllerImpl(Context context) { mContext = context; mCameraManager = (CameraManager) mContext.getSystemService(Context.CAMERA_SERVICE); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java index 0a72c3f9e8d8..420abe88f455 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java @@ -29,6 +29,12 @@ import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; +import javax.inject.Inject; +import javax.inject.Singleton; + +/** + */ +@Singleton public class HotspotControllerImpl implements HotspotController, WifiManager.SoftApCallback { private static final String TAG = "HotspotController"; @@ -43,6 +49,9 @@ public class HotspotControllerImpl implements HotspotController, WifiManager.Sof private int mNumConnectedDevices; private boolean mWaitingForTerminalState; + /** + */ + @Inject public HotspotControllerImpl(Context context) { mContext = context; mConnectivityManager = diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/IconLoggerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/IconLoggerImpl.java index aee021ce4688..ba6369e2c90e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/IconLoggerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/IconLoggerImpl.java @@ -18,6 +18,7 @@ import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_ import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_STATUS_ICONS; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.STATUS_BAR_ICONS_CHANGED; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.TYPE_ACTION; +import static com.android.systemui.Dependency.BG_LOOPER_NAME; import android.content.Context; import android.metrics.LogMaker; @@ -32,6 +33,9 @@ import com.android.internal.logging.MetricsLogger; import java.util.Arrays; import java.util.List; +import javax.inject.Inject; +import javax.inject.Named; + public class IconLoggerImpl implements IconLogger { // Minimum ms between log statements. @@ -46,7 +50,9 @@ public class IconLoggerImpl implements IconLogger { private final List<String> mIconIndex; private long mLastLog = System.currentTimeMillis(); - public IconLoggerImpl(Context context, Looper bgLooper, MetricsLogger logger) { + @Inject + public IconLoggerImpl(Context context, @Named(BG_LOOPER_NAME) Looper bgLooper, + MetricsLogger logger) { mContext = context; mHandler = new Handler(bgLooper); mLogger = logger; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardMonitorImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardMonitorImpl.java index 5eb0fb76794d..3c8ed6ebf279 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardMonitorImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardMonitorImpl.java @@ -25,6 +25,12 @@ import com.android.systemui.settings.CurrentUserTracker; import java.util.ArrayList; +import javax.inject.Inject; +import javax.inject.Singleton; + +/** + */ +@Singleton public class KeyguardMonitorImpl extends KeyguardUpdateMonitorCallback implements KeyguardMonitor { @@ -47,6 +53,9 @@ public class KeyguardMonitorImpl extends KeyguardUpdateMonitorCallback private boolean mKeyguardGoingAway; private boolean mLaunchTransitionFadingAway; + /** + */ + @Inject public KeyguardMonitorImpl(Context context) { mContext = context; mKeyguardUpdateMonitor = KeyguardUpdateMonitor.getInstance(mContext); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationControllerImpl.java index 840e77ea85a2..683cdbb326dc 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationControllerImpl.java @@ -17,6 +17,7 @@ package com.android.systemui.statusbar.policy; import static com.android.settingslib.Utils.updateLocationEnabled; +import static com.android.systemui.Dependency.BG_LOOPER_NAME; import android.app.ActivityManager; import android.app.AppOpsManager; @@ -40,9 +41,14 @@ import com.android.systemui.util.Utils; import java.util.ArrayList; import java.util.List; +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; + /** * A controller to manage changes of location related states and update the views accordingly. */ +@Singleton public class LocationControllerImpl extends BroadcastReceiver implements LocationController { private static final int[] mHighPowerRequestAppOpArray @@ -59,7 +65,8 @@ public class LocationControllerImpl extends BroadcastReceiver implements Locatio new ArrayList<LocationChangeCallback>(); private final H mHandler = new H(); - public LocationControllerImpl(Context context, Looper bgLooper) { + @Inject + public LocationControllerImpl(Context context, @Named(BG_LOOPER_NAME) Looper bgLooper) { mContext = context; // Register to listen for changes in location settings. diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java index bc43120fcefa..9422101c76dd 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java @@ -22,6 +22,8 @@ import static android.net.wifi.WifiManager.TrafficStateCallback.DATA_ACTIVITY_IN import static android.net.wifi.WifiManager.TrafficStateCallback.DATA_ACTIVITY_NONE; import static android.net.wifi.WifiManager.TrafficStateCallback.DATA_ACTIVITY_OUT; +import static com.android.systemui.Dependency.BG_LOOPER_NAME; + import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -65,7 +67,6 @@ import com.android.systemui.statusbar.policy.MobileSignalController.MobileIconGr import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; -import java.util.Arrays; import java.util.BitSet; import java.util.Collections; import java.util.Comparator; @@ -74,7 +75,12 @@ import java.util.List; import java.util.Locale; import java.util.Map; +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; + /** Platform implementation of the network controller. **/ +@Singleton public class NetworkControllerImpl extends BroadcastReceiver implements NetworkController, DemoMode, DataUsageController.NetworkNameProvider, ConfigurationChangedReceiver, Dumpable { @@ -154,7 +160,8 @@ public class NetworkControllerImpl extends BroadcastReceiver /** * Construct this controller object and register for updates. */ - public NetworkControllerImpl(Context context, Looper bgLooper, + @Inject + public NetworkControllerImpl(Context context, @Named(BG_LOOPER_NAME) Looper bgLooper, DeviceProvisionedController deviceProvisionedController) { this(context, (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE), (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE), diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NextAlarmControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NextAlarmControllerImpl.java index dac878c69313..288b3aff2af6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NextAlarmControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NextAlarmControllerImpl.java @@ -27,6 +27,13 @@ import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; +import javax.inject.Inject; +import javax.inject.Singleton; + +/** + * Implementation of {@link NextAlarmController} + */ +@Singleton public class NextAlarmControllerImpl extends BroadcastReceiver implements NextAlarmController { @@ -35,6 +42,9 @@ public class NextAlarmControllerImpl extends BroadcastReceiver private AlarmManager mAlarmManager; private AlarmManager.AlarmClockInfo mNextAlarm; + /** + */ + @Inject public NextAlarmControllerImpl(Context context) { mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); IntentFilter filter = new IntentFilter(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RotationLockControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RotationLockControllerImpl.java index 5418dc14e0bb..1f368e164678 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RotationLockControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RotationLockControllerImpl.java @@ -23,7 +23,11 @@ import com.android.internal.view.RotationPolicy; import java.util.concurrent.CopyOnWriteArrayList; +import javax.inject.Inject; +import javax.inject.Singleton; + /** Platform implementation of the rotation lock controller. **/ +@Singleton public final class RotationLockControllerImpl implements RotationLockController { private final Context mContext; private final CopyOnWriteArrayList<RotationLockControllerCallback> mCallbacks = @@ -37,6 +41,7 @@ public final class RotationLockControllerImpl implements RotationLockController } }; + @Inject public RotationLockControllerImpl(Context context) { mContext = context; setListening(true); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java index 29a6b956ed1e..e0259c9f5af7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java @@ -55,6 +55,12 @@ import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; +import javax.inject.Inject; +import javax.inject.Singleton; + +/** + */ +@Singleton public class SecurityControllerImpl extends CurrentUserTracker implements SecurityController { private static final String TAG = "SecurityController"; @@ -90,6 +96,9 @@ public class SecurityControllerImpl extends CurrentUserTracker implements Securi // Needs to be cached here since the query has to be asynchronous private ArrayMap<Integer, Boolean> mHasCACerts = new ArrayMap<Integer, Boolean>(); + /** + */ + @Inject public SecurityControllerImpl(Context context) { this(context, null); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserInfoControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserInfoControllerImpl.java index fed803217568..0ca6ff6ec66e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserInfoControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserInfoControllerImpl.java @@ -40,6 +40,12 @@ import com.android.systemui.R; import java.util.ArrayList; +import javax.inject.Inject; +import javax.inject.Singleton; + +/** + */ +@Singleton public class UserInfoControllerImpl implements UserInfoController { private static final String TAG = "UserInfoController"; @@ -53,6 +59,9 @@ public class UserInfoControllerImpl implements UserInfoController { private Drawable mUserDrawable; private String mUserAccount; + /** + */ + @Inject public UserInfoControllerImpl(Context context) { mContext = context; IntentFilter filter = new IntentFilter(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java index 15b2f2bcb755..e412e09fe519 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java @@ -17,6 +17,7 @@ package com.android.systemui.statusbar.policy; import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; +import static com.android.systemui.Dependency.MAIN_HANDLER_NAME; import android.app.ActivityManager; import android.app.Dialog; @@ -68,9 +69,14 @@ import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; + /** * Keeps a list of all users on the device for user switching. */ +@Singleton public class UserSwitcherController implements Dumpable { private static final String TAG = "UserSwitcherController"; @@ -102,8 +108,9 @@ public class UserSwitcherController implements Dumpable { private Intent mSecondaryUserServiceIntent; private SparseBooleanArray mForcePictureLoadForUserId = new SparseBooleanArray(2); + @Inject public UserSwitcherController(Context context, KeyguardMonitor keyguardMonitor, - Handler handler, ActivityStarter activityStarter) { + @Named(MAIN_HANDLER_NAME) Handler handler, ActivityStarter activityStarter) { mContext = context; mGuestResumeSessionReceiver.register(context); mKeyguardMonitor = keyguardMonitor; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java index 89ccff03133d..7198165456c3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java @@ -16,6 +16,8 @@ package com.android.systemui.statusbar.policy; +import static com.android.systemui.Dependency.MAIN_HANDLER_NAME; + import android.app.ActivityManager; import android.app.AlarmManager; import android.app.NotificationManager; @@ -48,7 +50,12 @@ import java.io.PrintWriter; import java.util.ArrayList; import java.util.Objects; +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; + /** Platform implementation of the zen mode controller. **/ +@Singleton public class ZenModeControllerImpl extends CurrentUserTracker implements ZenModeController, Dumpable { private static final String TAG = "ZenModeController"; @@ -71,7 +78,8 @@ public class ZenModeControllerImpl extends CurrentUserTracker private long mZenUpdateTime; private NotificationManager.Policy mConsolidatedNotificationPolicy; - public ZenModeControllerImpl(Context context, Handler handler) { + @Inject + public ZenModeControllerImpl(Context context, @Named(MAIN_HANDLER_NAME) Handler handler) { super(context); mContext = context; mModeSetting = new GlobalSetting(mContext, handler, Global.ZEN_MODE) { diff --git a/packages/SystemUI/src/com/android/systemui/tuner/TunablePadding.java b/packages/SystemUI/src/com/android/systemui/tuner/TunablePadding.java index e85dee841715..81d77a64c1f0 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/TunablePadding.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/TunablePadding.java @@ -21,6 +21,9 @@ import android.view.WindowManager; import com.android.systemui.Dependency; import com.android.systemui.tuner.TunerService.Tunable; +import javax.inject.Inject; +import javax.inject.Singleton; + /** * Version of Space that can be resized by a tunable setting. */ @@ -69,8 +72,18 @@ public class TunablePadding implements Tunable { Dependency.get(TunerService.class).removeTunable(this); } - // Exists for easy injecting in tests. + /** + * Exists for easy injecting in tests. + */ + @Singleton public static class TunablePaddingService { + + /** + */ + @Inject + public TunablePaddingService() { + } + public TunablePadding add(View view, String key, int defaultSize, int flags) { if (view == null) { throw new IllegalArgumentException(); diff --git a/packages/SystemUI/src/com/android/systemui/tuner/TunerServiceImpl.java b/packages/SystemUI/src/com/android/systemui/tuner/TunerServiceImpl.java index 196d9bc32e75..0a47f19ac2f5 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/TunerServiceImpl.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/TunerServiceImpl.java @@ -43,7 +43,13 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Set; +import javax.inject.Inject; +import javax.inject.Singleton; + +/** + */ +@Singleton public class TunerServiceImpl extends TunerService { private static final String TUNER_VERSION = "sysui_tuner_version"; @@ -70,6 +76,9 @@ public class TunerServiceImpl extends TunerService { private int mCurrentUser; private CurrentUserTracker mUserTracker; + /** + */ + @Inject public TunerServiceImpl(Context context) { mContext = context; mContentResolver = mContext.getContentResolver(); diff --git a/packages/SystemUI/src/com/android/systemui/util/AsyncSensorManager.java b/packages/SystemUI/src/com/android/systemui/util/AsyncSensorManager.java index 88cbbb574aff..31f4991a82b5 100644 --- a/packages/SystemUI/src/com/android/systemui/util/AsyncSensorManager.java +++ b/packages/SystemUI/src/com/android/systemui/util/AsyncSensorManager.java @@ -38,6 +38,9 @@ import com.android.systemui.shared.plugins.PluginManager; import java.util.ArrayList; import java.util.List; +import javax.inject.Inject; +import javax.inject.Singleton; + /** * Wrapper around sensor manager that hides potential sources of latency. * @@ -45,6 +48,7 @@ import java.util.List; * without blocking. Note that this means registering listeners now always appears successful even * if it is not. */ +@Singleton public class AsyncSensorManager extends SensorManager implements PluginListener<SensorManagerPlugin> { @@ -56,8 +60,14 @@ public class AsyncSensorManager extends SensorManager @VisibleForTesting final Handler mHandler; private final List<SensorManagerPlugin> mPlugins; - public AsyncSensorManager(SensorManager inner, PluginManager pluginManager) { - mInner = inner; + @Inject + public AsyncSensorManager(Context context, PluginManager pluginManager) { + this(context.getSystemService(SensorManager.class), pluginManager); + } + + @VisibleForTesting + AsyncSensorManager(SensorManager sensorManager, PluginManager pluginManager) { + mInner = sensorManager; mHandlerThread.start(); mHandler = new Handler(mHandlerThread.getLooper()); mSensorCache = mInner.getSensorList(Sensor.TYPE_ALL); diff --git a/packages/SystemUI/src/com/android/systemui/util/leak/GarbageMonitor.java b/packages/SystemUI/src/com/android/systemui/util/leak/GarbageMonitor.java index b2cc2694916e..7bc96261782d 100644 --- a/packages/SystemUI/src/com/android/systemui/util/leak/GarbageMonitor.java +++ b/packages/SystemUI/src/com/android/systemui/util/leak/GarbageMonitor.java @@ -17,6 +17,7 @@ package com.android.systemui.util.leak; import static com.android.internal.logging.MetricsLogger.VIEW_UNKNOWN; +import static com.android.systemui.Dependency.BG_LOOPER_NAME; import android.app.ActivityManager; import android.content.Context; @@ -51,6 +52,13 @@ import com.android.systemui.qs.tileimpl.QSTileImpl; import java.util.ArrayList; +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; + +/** + */ +@Singleton public class GarbageMonitor { private static final boolean LEAK_REPORTING_ENABLED = Build.IS_DEBUGGABLE @@ -85,9 +93,12 @@ public class GarbageMonitor { private long mHeapLimit; + /** + */ + @Inject public GarbageMonitor( Context context, - Looper bgLooper, + @Named(BG_LOOPER_NAME) Looper bgLooper, LeakDetector leakDetector, LeakReporter leakReporter) { mContext = context.getApplicationContext(); diff --git a/packages/SystemUI/src/com/android/systemui/util/leak/LeakReporter.java b/packages/SystemUI/src/com/android/systemui/util/leak/LeakReporter.java index a47e99d1e84d..b25df5f9c07f 100644 --- a/packages/SystemUI/src/com/android/systemui/util/leak/LeakReporter.java +++ b/packages/SystemUI/src/com/android/systemui/util/leak/LeakReporter.java @@ -16,6 +16,9 @@ package com.android.systemui.util.leak; +import static com.android.systemui.Dependency.LEAK_REPORT_EMAIL_NAME; + +import android.annotation.Nullable; import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; @@ -39,9 +42,14 @@ import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; + /** * Dumps data to debug leaks and posts a notification to share the data. */ +@Singleton public class LeakReporter { static final String TAG = "LeakReporter"; @@ -56,7 +64,9 @@ public class LeakReporter { private final LeakDetector mLeakDetector; private final String mLeakReportEmail; - public LeakReporter(Context context, LeakDetector leakDetector, String leakReportEmail) { + @Inject + public LeakReporter(Context context, LeakDetector leakDetector, + @Nullable @Named(LEAK_REPORT_EMAIL_NAME) String leakReportEmail) { mContext = context; mLeakDetector = leakDetector; mLeakReportEmail = leakReportEmail; diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java index e20e267336ea..a86970b90bff 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java @@ -67,6 +67,9 @@ import java.util.HashMap; import java.util.Map; import java.util.Objects; +import javax.inject.Inject; +import javax.inject.Singleton; + /** * Source of truth for all state / events related to the volume dialog. No presentation. * @@ -74,6 +77,7 @@ import java.util.Objects; * * Methods ending in "W" must be called on the worker thread. */ +@Singleton public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpable { private static final String TAG = Util.logTag(VolumeDialogControllerImpl.class); @@ -131,6 +135,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa protected final VC mVolumeController = new VC(); + @Inject public VolumeDialogControllerImpl(Context context) { mContext = context.getApplicationContext(); mNotificationManager = (NotificationManager) mContext.getSystemService( |