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
This commit is contained in:
Jason Monk
2018-12-20 13:25:34 -05:00
parent b93b626cbf
commit 196d639875
49 changed files with 621 additions and 442 deletions

View File

@@ -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

View File

@@ -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) {

View File

@@ -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);
}

View File

@@ -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;
@@ -163,256 +95,12 @@ public class DependencyProvider {
return new Handler(Looper.getMainLooper());
}
@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
@@ -422,74 +110,10 @@ public class DependencyProvider {
UserHandle.ALL);
}
@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
@@ -498,19 +122,6 @@ public class DependencyProvider {
return WindowManagerGlobal.getWindowManagerService();
}
@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() {
@@ -521,16 +132,9 @@ 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();
}
@Singleton
@@ -539,32 +143,34 @@ public class DependencyProvider {
return SysUiServiceProvider.getComponent(context, StatusBar.class);
}
@Singleton
@Provides
public NotificationRemoteInputManager.Callback provideNotificationRemoteInputManager(
Context context) {
return new StatusBarRemoteInputCallback(context);
}
@Singleton
@Provides
public AppOpsController provideAppOpsController(Context context,
@Named(BG_LOOPER_NAME) Looper bgLooper) {
return new AppOpsControllerImpl(context, bgLooper);
}
@Singleton
@Provides
public DisplayNavigationBarController provideDisplayNavigationBarController(Context context,
@Named(MAIN_HANDLER_NAME) Handler mainHandler) {
return new DisplayNavigationBarController(context, mainHandler);
}
@Singleton
@Provides
public SensorPrivacyManager provideSensorPrivacyManager(Context context) {
return context.getSystemService(SensorPrivacyManager.class);
}
@Singleton
@Provides
public LeakDetector provideLeakDetector() {
return LeakDetector.create();
}
@Singleton
@Provides
public ColorDisplayController provideColorDisplayController(Context context) {
return new ColorDisplayController(context);
}
@Singleton
@Provides
public PluginManager providePluginManager(Context context) {
return new PluginManagerImpl(context, new PluginInitializerImpl());
}
@Singleton
@Provides
public ConfigurationController provideConfigurationController(Context context) {
return new ConfigurationControllerImpl(context);
}
}

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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();

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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);
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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);

View File

@@ -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();

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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++) {

View File

@@ -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);

View File

@@ -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));

View File

@@ -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,

View File

@@ -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));

View File

@@ -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);

View File

@@ -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);
}

View File

@@ -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));
}

View File

@@ -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) {

View File

@@ -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);

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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 =

View File

@@ -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;

View File

@@ -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);

View File

@@ -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.

View File

@@ -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),

View File

@@ -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();

View File

@@ -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);

View File

@@ -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);
}

View File

@@ -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();

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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();

View File

@@ -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();

View File

@@ -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);

View File

@@ -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();

View File

@@ -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;

View File

@@ -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(