Start using some dagger 2
Early days as we start migration, so lots of duplication between
Dependency and dagger2, but can be removed when migration is done.
Test: existing tests.
Change-Id: I00c3da6ebbd46a26e512d8a7aa1e2b828e08f33f
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java b/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java
index 867c917..9bc91ee 100644
--- a/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java
+++ b/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java
@@ -16,9 +16,11 @@
package com.android.systemui;
+import static com.android.systemui.Dependency.LEAK_REPORT_EMAIL_NAME;
+
+import android.annotation.Nullable;
import android.app.AlarmManager;
import android.content.Context;
-import android.util.ArrayMap;
import android.util.Log;
import android.view.ViewGroup;
@@ -26,56 +28,54 @@
import com.android.internal.util.function.TriConsumer;
import com.android.internal.widget.LockPatternUtils;
import com.android.keyguard.ViewMediatorCallback;
-import com.android.systemui.Dependency.DependencyProvider;
-import com.android.systemui.bubbles.BubbleController;
+import com.android.systemui.assist.AssistManager;
import com.android.systemui.classifier.FalsingManager;
import com.android.systemui.keyguard.DismissCallbackRegistry;
+import com.android.systemui.power.EnhancedEstimates;
+import com.android.systemui.power.EnhancedEstimatesImpl;
import com.android.systemui.qs.QSTileHost;
-import com.android.systemui.statusbar.AmbientPulseManager;
import com.android.systemui.statusbar.KeyguardIndicationController;
import com.android.systemui.statusbar.NotificationListener;
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
import com.android.systemui.statusbar.NotificationLockscreenUserManagerImpl;
-import com.android.systemui.statusbar.NotificationMediaManager;
-import com.android.systemui.statusbar.NotificationRemoteInputManager;
-import com.android.systemui.statusbar.NotificationViewHierarchyManager;
import com.android.systemui.statusbar.ScrimView;
-import com.android.systemui.statusbar.SmartReplyController;
-import com.android.systemui.statusbar.StatusBarStateController;
+import com.android.systemui.statusbar.notification.NotificationData;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
-import com.android.systemui.statusbar.notification.VisualStabilityManager;
-import com.android.systemui.statusbar.notification.logging.NotificationLogger;
-import com.android.systemui.statusbar.notification.row.NotificationBlockingHelperManager;
-import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.statusbar.phone.KeyguardBouncer;
-import com.android.systemui.statusbar.phone.KeyguardDismissUtil;
+import com.android.systemui.statusbar.phone.KeyguardEnvironmentImpl;
import com.android.systemui.statusbar.phone.LockIcon;
import com.android.systemui.statusbar.phone.LockscreenWallpaper;
-import com.android.systemui.statusbar.phone.NotificationGroupAlertTransferHelper;
-import com.android.systemui.statusbar.phone.NotificationGroupManager;
import com.android.systemui.statusbar.phone.NotificationIconAreaController;
import com.android.systemui.statusbar.phone.ScrimController;
import com.android.systemui.statusbar.phone.ScrimState;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
-import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler;
-import com.android.systemui.statusbar.policy.SmartReplyConstants;
+import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.volume.VolumeDialogComponent;
import java.util.function.Consumer;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+import dagger.Component;
+import dagger.Module;
+import dagger.Provides;
+
/**
* Class factory to provide customizable SystemUI components.
*/
+@Module
public class SystemUIFactory {
private static final String TAG = "SystemUIFactory";
static SystemUIFactory mFactory;
+ private SystemUIRootComponent mRootComponent;
- public static SystemUIFactory getInstance() {
- return mFactory;
+ public static <T extends SystemUIFactory> T getInstance() {
+ return (T) mFactory;
}
public static void createFromConfig(Context context) {
@@ -88,6 +88,7 @@
Class<?> cls = null;
cls = context.getClassLoader().loadClass(clsName);
mFactory = (SystemUIFactory) cls.newInstance();
+ mFactory.init(context);
} catch (Throwable t) {
Log.w(TAG, "Error creating SystemUIFactory component: " + clsName, t);
throw new RuntimeException(t);
@@ -96,6 +97,18 @@
public SystemUIFactory() {}
+ protected void init(Context context) {
+ mRootComponent = DaggerSystemUIFactory_SystemUIRootComponent.builder()
+ .systemUIFactory(this)
+ .dependencyProvider(new com.android.systemui.DependencyProvider())
+ .contextHolder(new ContextHolder(context))
+ .build();
+ }
+
+ public SystemUIRootComponent getRootComponent() {
+ return mRootComponent;
+ }
+
public StatusBarKeyguardViewManager createStatusBarKeyguardViewManager(Context context,
ViewMediatorCallback viewMediatorCallback, LockPatternUtils lockPatternUtils) {
return new StatusBarKeyguardViewManager(context, viewMediatorCallback, lockPatternUtils);
@@ -137,33 +150,70 @@
return new VolumeDialogComponent(systemUi, context);
}
- public void injectDependencies(ArrayMap<Object, DependencyProvider> providers,
+ @Singleton
+ @Provides
+ public NotificationData.KeyguardEnvironment provideKeyguardEnvironment(Context context) {
+ return new KeyguardEnvironmentImpl();
+ }
+
+ @Singleton
+ @Provides
+ public NotificationLockscreenUserManager provideNotificationLockscreenUserManager(
Context context) {
- providers.put(StatusBarStateController.class, StatusBarStateController::new);
- providers.put(NotificationLockscreenUserManager.class,
- () -> new NotificationLockscreenUserManagerImpl(context));
- providers.put(VisualStabilityManager.class, VisualStabilityManager::new);
- providers.put(NotificationGroupManager.class, NotificationGroupManager::new);
- providers.put(NotificationGroupAlertTransferHelper.class,
- NotificationGroupAlertTransferHelper::new);
- providers.put(NotificationMediaManager.class, () -> new NotificationMediaManager(context));
- providers.put(NotificationGutsManager.class, () -> new NotificationGutsManager(context));
- providers.put(AmbientPulseManager.class, () -> new AmbientPulseManager(context));
- providers.put(NotificationBlockingHelperManager.class,
- () -> new NotificationBlockingHelperManager(context));
- providers.put(NotificationRemoteInputManager.class,
- () -> new NotificationRemoteInputManager(context));
- providers.put(SmartReplyConstants.class,
- () -> new SmartReplyConstants(Dependency.get(Dependency.MAIN_HANDLER), context));
- providers.put(NotificationListener.class, () -> new NotificationListener(context));
- providers.put(NotificationLogger.class, NotificationLogger::new);
- providers.put(NotificationViewHierarchyManager.class,
- () -> new NotificationViewHierarchyManager(context));
- providers.put(NotificationEntryManager.class, () -> new NotificationEntryManager(context));
- providers.put(KeyguardDismissUtil.class, KeyguardDismissUtil::new);
- providers.put(SmartReplyController.class, () -> new SmartReplyController());
- providers.put(RemoteInputQuickSettingsDisabler.class,
- () -> new RemoteInputQuickSettingsDisabler(context));
- providers.put(BubbleController.class, () -> new BubbleController(context));
+ return new NotificationLockscreenUserManagerImpl(context);
+ }
+
+ @Singleton
+ @Provides
+ public AssistManager provideAssistManager(DeviceProvisionedController controller,
+ Context context) {
+ return new AssistManager(controller, context);
+ }
+
+ @Singleton
+ @Provides
+ public NotificationEntryManager provideNotificationEntryManager(Context context) {
+ return new NotificationEntryManager(context);
+ }
+
+ @Singleton
+ @Provides
+ public EnhancedEstimates provideEnhancedEstimates(Context context) {
+ return new EnhancedEstimatesImpl();
+ }
+
+ @Singleton
+ @Provides
+ @Named(LEAK_REPORT_EMAIL_NAME)
+ @Nullable
+ public String provideLeakReportEmail() {
+ return null;
+ }
+
+ @Singleton
+ @Provides
+ public NotificationListener provideNotificationListener(Context context) {
+ return new NotificationListener(context);
+ }
+
+ @Module
+ protected static class ContextHolder {
+ private Context mContext;
+
+ public ContextHolder(Context context) {
+ mContext = context;
+ }
+
+ @Provides
+ public Context provideContext() {
+ return mContext;
+ }
+ }
+
+ @Singleton
+ @Component(modules = {SystemUIFactory.class, DependencyProvider.class, ContextHolder.class})
+ public interface SystemUIRootComponent {
+ @Singleton
+ Dependency.DependencyInjector createDependency();
}
}