Loading packages/SystemUI/docs/dagger.md +3 −7 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 packages/SystemUI/src/com/android/systemui/ActivityStarterDelegate.java +8 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading packages/SystemUI/src/com/android/systemui/DependencyBinder.java 0 → 100644 +227 −0 Original line number Diff line number Diff line /* * 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); } packages/SystemUI/src/com/android/systemui/DependencyProvider.java +13 −407 File changed.Preview size limit exceeded, changes collapsed. Show changes packages/SystemUI/src/com/android/systemui/ForegroundServiceControllerImpl.java +5 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading @@ -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; } Loading Loading
packages/SystemUI/docs/dagger.md +3 −7 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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
packages/SystemUI/src/com/android/systemui/ActivityStarterDelegate.java +8 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading
packages/SystemUI/src/com/android/systemui/DependencyBinder.java 0 → 100644 +227 −0 Original line number Diff line number Diff line /* * 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); }
packages/SystemUI/src/com/android/systemui/DependencyProvider.java +13 −407 File changed.Preview size limit exceeded, changes collapsed. Show changes
packages/SystemUI/src/com/android/systemui/ForegroundServiceControllerImpl.java +5 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading @@ -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; } Loading