diff --git a/packages/CarSystemUI/src/com/android/systemui/CarSystemUIBinder.java b/packages/CarSystemUI/src/com/android/systemui/CarSystemUIBinder.java index 0a76c7ddbe8d4..8eeaefda0920f 100644 --- a/packages/CarSystemUI/src/com/android/systemui/CarSystemUIBinder.java +++ b/packages/CarSystemUI/src/com/android/systemui/CarSystemUIBinder.java @@ -17,8 +17,10 @@ package com.android.systemui; import com.android.systemui.biometrics.AuthController; +import com.android.systemui.bubbles.dagger.BubbleModule; import com.android.systemui.globalactions.GlobalActionsComponent; import com.android.systemui.keyguard.KeyguardViewMediator; +import com.android.systemui.keyguard.dagger.KeyguardModule; import com.android.systemui.navigationbar.car.CarNavigationBar; import com.android.systemui.pip.PipUI; import com.android.systemui.power.PowerUI; @@ -43,7 +45,8 @@ import dagger.multibindings.ClassKey; import dagger.multibindings.IntoMap; /** Binder for car specific {@link SystemUI} modules. */ -@Module(includes = {RecentsModule.class, CarStatusBarModule.class, NotificationsModule.class}) +@Module(includes = {RecentsModule.class, CarStatusBarModule.class, NotificationsModule.class, + BubbleModule.class, KeyguardModule.class}) public abstract class CarSystemUIBinder { /** Inject into AuthController. */ @Binds diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java index 762e5f21cd63c..1f94dbd5e59af 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java @@ -72,9 +72,7 @@ import com.android.internal.statusbar.NotificationVisibility; import com.android.systemui.DumpController; import com.android.systemui.Dumpable; import com.android.systemui.R; -import com.android.systemui.bubbles.BubbleController.BubbleExpandListener; -import com.android.systemui.bubbles.BubbleController.BubbleStateChangeListener; -import com.android.systemui.bubbles.BubbleController.NotifCallback; +import com.android.systemui.bubbles.dagger.BubbleModule; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.shared.system.PinnedStackListenerForwarder; @@ -105,16 +103,12 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.List; -import javax.inject.Inject; -import javax.inject.Singleton; - /** * Bubbles are a special type of content that can "float" on top of other apps or System UI. * Bubbles can be expanded to show more content. * * The controller manages addition, removal, and visible state of bubbles on screen. */ -@Singleton public class BubbleController implements ConfigurationController.ConfigurationListener, Dumpable { private static final String TAG = TAG_WITH_CLASS_NAME ? "BubbleController" : TAG_BUBBLES; @@ -277,7 +271,6 @@ public class BubbleController implements ConfigurationController.ConfigurationLi } } - @Inject public BubbleController(Context context, NotificationShadeWindowController notificationShadeWindowController, StatusBarStateController statusBarStateController, @@ -298,6 +291,9 @@ public class BubbleController implements ConfigurationController.ConfigurationLi notifPipeline, featureFlags, dumpController); } + /** + * Injected constructor. See {@link BubbleModule}. + */ public BubbleController(Context context, NotificationShadeWindowController notificationShadeWindowController, StatusBarStateController statusBarStateController, diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/dagger/BubbleModule.java b/packages/SystemUI/src/com/android/systemui/bubbles/dagger/BubbleModule.java new file mode 100644 index 0000000000000..0337ee37bd374 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/bubbles/dagger/BubbleModule.java @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2020 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.bubbles.dagger; + +import android.content.Context; + +import com.android.systemui.DumpController; +import com.android.systemui.bubbles.BubbleController; +import com.android.systemui.bubbles.BubbleData; +import com.android.systemui.plugins.statusbar.StatusBarStateController; +import com.android.systemui.statusbar.FeatureFlags; +import com.android.systemui.statusbar.NotificationLockscreenUserManager; +import com.android.systemui.statusbar.notification.NotificationEntryManager; +import com.android.systemui.statusbar.notification.NotificationInterruptionStateProvider; +import com.android.systemui.statusbar.notification.collection.NotifPipeline; +import com.android.systemui.statusbar.phone.NotificationGroupManager; +import com.android.systemui.statusbar.phone.NotificationShadeWindowController; +import com.android.systemui.statusbar.phone.ShadeController; +import com.android.systemui.statusbar.policy.ConfigurationController; +import com.android.systemui.statusbar.policy.ZenModeController; + +import javax.inject.Singleton; + +import dagger.Module; +import dagger.Provides; + +/** */ +@Module +public interface BubbleModule { + + /** + */ + @Singleton + @Provides + static BubbleController newBubbleController( + Context context, + NotificationShadeWindowController notificationShadeWindowController, + StatusBarStateController statusBarStateController, + ShadeController shadeController, + BubbleData data, + ConfigurationController configurationController, + NotificationInterruptionStateProvider interruptionStateProvider, + ZenModeController zenModeController, + NotificationLockscreenUserManager notifUserManager, + NotificationGroupManager groupManager, + NotificationEntryManager entryManager, + NotifPipeline notifPipeline, + FeatureFlags featureFlags, + DumpController dumpController) { + return new BubbleController( + context, + notificationShadeWindowController, + statusBarStateController, + shadeController, + data, + /* synchronizer */null, + configurationController, + interruptionStateProvider, + zenModeController, + notifUserManager, + groupManager, + entryManager, + notifPipeline, + featureFlags, + dumpController); + } +} diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIBinder.java b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIBinder.java index c3226d3c7b5ee..413a522bccdce 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIBinder.java +++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIBinder.java @@ -24,8 +24,10 @@ import com.android.systemui.SystemUI; import com.android.systemui.accessibility.SystemActions; import com.android.systemui.accessibility.WindowMagnification; import com.android.systemui.biometrics.AuthController; +import com.android.systemui.bubbles.dagger.BubbleModule; import com.android.systemui.globalactions.GlobalActionsComponent; import com.android.systemui.keyguard.KeyguardViewMediator; +import com.android.systemui.keyguard.dagger.KeyguardModule; import com.android.systemui.pip.PipUI; import com.android.systemui.power.PowerUI; import com.android.systemui.recents.Recents; @@ -49,7 +51,8 @@ import dagger.multibindings.IntoMap; /** * SystemUI objects that are injectable should go here. */ -@Module(includes = {RecentsModule.class, StatusBarModule.class}) +@Module(includes = {RecentsModule.class, StatusBarModule.class, BubbleModule.class, + KeyguardModule.class}) public abstract class SystemUIBinder { /** Inject into AuthController. */ @Binds diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java index 83a6d7528dbb8..b1db7dfc5be9a 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java @@ -86,6 +86,7 @@ import com.android.systemui.SystemUI; import com.android.systemui.SystemUIFactory; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.qualifiers.UiBackground; +import com.android.systemui.keyguard.dagger.KeyguardModule; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.statusbar.phone.BiometricUnlockController; import com.android.systemui.statusbar.phone.KeyguardBypassController; @@ -100,9 +101,6 @@ import java.io.PrintWriter; import java.util.ArrayList; import java.util.concurrent.Executor; -import javax.inject.Inject; -import javax.inject.Singleton; - import dagger.Lazy; /** @@ -146,7 +144,6 @@ import dagger.Lazy; * directly to the keyguard UI is posted to a {@link android.os.Handler} to ensure it is taken on the UI * thread of the keyguard. */ -@Singleton public class KeyguardViewMediator extends SystemUI { private static final int KEYGUARD_DISPLAY_TIMEOUT_DELAY_DEFAULT = 30000; private static final long KEYGUARD_DONE_PENDING_TIMEOUT_MS = 3000; @@ -688,7 +685,9 @@ public class KeyguardViewMediator extends SystemUI { } }; - @Inject + /** + * Injected constructor. See {@link KeyguardModule}. + */ public KeyguardViewMediator( Context context, FalsingManager falsingManager, diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java b/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java new file mode 100644 index 0000000000000..2c023cadd9ead --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2020 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.keyguard.dagger; + +import android.content.Context; + +import com.android.internal.widget.LockPatternUtils; +import com.android.systemui.broadcast.BroadcastDispatcher; +import com.android.systemui.dagger.qualifiers.UiBackground; +import com.android.systemui.keyguard.DismissCallbackRegistry; +import com.android.systemui.keyguard.KeyguardViewMediator; +import com.android.systemui.plugins.FalsingManager; +import com.android.systemui.statusbar.phone.NotificationShadeWindowController; +import com.android.systemui.statusbar.phone.StatusBar; +import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; + +import java.util.concurrent.Executor; + +import javax.inject.Singleton; + +import dagger.Lazy; +import dagger.Module; +import dagger.Provides; + +/** + * Dagger Module providing {@link StatusBar}. + */ +@Module +public class KeyguardModule { + /** + * Provides our instance of KeyguardViewMediator which is considered optional. + */ + @Provides + @Singleton + public static KeyguardViewMediator newKeyguardViewMediator( + Context context, + FalsingManager falsingManager, + LockPatternUtils lockPatternUtils, + BroadcastDispatcher broadcastDispatcher, + NotificationShadeWindowController notificationShadeWindowController, + Lazy statusBarKeyguardViewManagerLazy, + DismissCallbackRegistry dismissCallbackRegistry, + @UiBackground Executor uiBgExecutor) { + return new KeyguardViewMediator( + context, + falsingManager, + lockPatternUtils, + broadcastDispatcher, + notificationShadeWindowController, + statusBarKeyguardViewManagerLazy, + dismissCallbackRegistry, + uiBgExecutor); + } +}