1 /* 2 * Copyright (C) 2019 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.systemui.dagger; 18 19 import com.android.systemui.LatencyTester; 20 import com.android.systemui.ScreenDecorations; 21 import com.android.systemui.SizeCompatModeActivityController; 22 import com.android.systemui.SliceBroadcastRelayHandler; 23 import com.android.systemui.SystemUI; 24 import com.android.systemui.accessibility.SystemActions; 25 import com.android.systemui.accessibility.WindowMagnification; 26 import com.android.systemui.biometrics.AuthController; 27 import com.android.systemui.bubbles.dagger.BubbleModule; 28 import com.android.systemui.globalactions.GlobalActionsComponent; 29 import com.android.systemui.keyguard.KeyguardViewMediator; 30 import com.android.systemui.keyguard.dagger.KeyguardModule; 31 import com.android.systemui.pip.PipUI; 32 import com.android.systemui.power.PowerUI; 33 import com.android.systemui.recents.Recents; 34 import com.android.systemui.recents.RecentsModule; 35 import com.android.systemui.shortcut.ShortcutKeyDispatcher; 36 import com.android.systemui.stackdivider.Divider; 37 import com.android.systemui.statusbar.dagger.StatusBarModule; 38 import com.android.systemui.statusbar.notification.InstantAppNotifier; 39 import com.android.systemui.statusbar.phone.StatusBar; 40 import com.android.systemui.statusbar.tv.TvStatusBar; 41 import com.android.systemui.theme.ThemeOverlayController; 42 import com.android.systemui.toast.ToastUI; 43 import com.android.systemui.util.leak.GarbageMonitor; 44 import com.android.systemui.volume.VolumeUI; 45 46 import dagger.Binds; 47 import dagger.Module; 48 import dagger.multibindings.ClassKey; 49 import dagger.multibindings.IntoMap; 50 51 /** 52 * SystemUI objects that are injectable should go here. 53 */ 54 @Module(includes = {RecentsModule.class, StatusBarModule.class, BubbleModule.class, 55 KeyguardModule.class}) 56 public abstract class SystemUIBinder { 57 /** Inject into AuthController. */ 58 @Binds 59 @IntoMap 60 @ClassKey(AuthController.class) bindAuthController(AuthController service)61 public abstract SystemUI bindAuthController(AuthController service); 62 63 /** Inject into Divider. */ 64 @Binds 65 @IntoMap 66 @ClassKey(Divider.class) bindDivider(Divider sysui)67 public abstract SystemUI bindDivider(Divider sysui); 68 69 /** Inject into GarbageMonitor.Service. */ 70 @Binds 71 @IntoMap 72 @ClassKey(GarbageMonitor.Service.class) bindGarbageMonitorService(GarbageMonitor.Service sysui)73 public abstract SystemUI bindGarbageMonitorService(GarbageMonitor.Service sysui); 74 75 /** Inject into GlobalActionsComponent. */ 76 @Binds 77 @IntoMap 78 @ClassKey(GlobalActionsComponent.class) bindGlobalActionsComponent(GlobalActionsComponent sysui)79 public abstract SystemUI bindGlobalActionsComponent(GlobalActionsComponent sysui); 80 81 /** Inject into InstantAppNotifier. */ 82 @Binds 83 @IntoMap 84 @ClassKey(InstantAppNotifier.class) bindInstantAppNotifier(InstantAppNotifier sysui)85 public abstract SystemUI bindInstantAppNotifier(InstantAppNotifier sysui); 86 87 /** Inject into KeyguardViewMediator. */ 88 @Binds 89 @IntoMap 90 @ClassKey(KeyguardViewMediator.class) bindKeyguardViewMediator(KeyguardViewMediator sysui)91 public abstract SystemUI bindKeyguardViewMediator(KeyguardViewMediator sysui); 92 93 /** Inject into LatencyTests. */ 94 @Binds 95 @IntoMap 96 @ClassKey(LatencyTester.class) bindLatencyTester(LatencyTester sysui)97 public abstract SystemUI bindLatencyTester(LatencyTester sysui); 98 99 /** Inject into PipUI. */ 100 @Binds 101 @IntoMap 102 @ClassKey(PipUI.class) bindPipUI(PipUI sysui)103 public abstract SystemUI bindPipUI(PipUI sysui); 104 105 /** Inject into PowerUI. */ 106 @Binds 107 @IntoMap 108 @ClassKey(PowerUI.class) bindPowerUI(PowerUI sysui)109 public abstract SystemUI bindPowerUI(PowerUI sysui); 110 111 /** Inject into Recents. */ 112 @Binds 113 @IntoMap 114 @ClassKey(Recents.class) bindRecents(Recents sysui)115 public abstract SystemUI bindRecents(Recents sysui); 116 117 /** Inject into ScreenDecorations. */ 118 @Binds 119 @IntoMap 120 @ClassKey(ScreenDecorations.class) bindScreenDecorations(ScreenDecorations sysui)121 public abstract SystemUI bindScreenDecorations(ScreenDecorations sysui); 122 123 /** Inject into ShortcutKeyDispatcher. */ 124 @Binds 125 @IntoMap 126 @ClassKey(ShortcutKeyDispatcher.class) bindsShortcutKeyDispatcher(ShortcutKeyDispatcher sysui)127 public abstract SystemUI bindsShortcutKeyDispatcher(ShortcutKeyDispatcher sysui); 128 129 /** Inject into SizeCompatModeActivityController. */ 130 @Binds 131 @IntoMap 132 @ClassKey(SizeCompatModeActivityController.class) bindsSizeCompatModeActivityController( SizeCompatModeActivityController sysui)133 public abstract SystemUI bindsSizeCompatModeActivityController( 134 SizeCompatModeActivityController sysui); 135 136 /** Inject into SliceBroadcastRelayHandler. */ 137 @Binds 138 @IntoMap 139 @ClassKey(SliceBroadcastRelayHandler.class) bindSliceBroadcastRelayHandler(SliceBroadcastRelayHandler sysui)140 public abstract SystemUI bindSliceBroadcastRelayHandler(SliceBroadcastRelayHandler sysui); 141 142 /** Inject into StatusBar. */ 143 @Binds 144 @IntoMap 145 @ClassKey(StatusBar.class) bindsStatusBar(StatusBar sysui)146 public abstract SystemUI bindsStatusBar(StatusBar sysui); 147 148 /** Inject into SystemActions. */ 149 @Binds 150 @IntoMap 151 @ClassKey(SystemActions.class) bindSystemActions(SystemActions sysui)152 public abstract SystemUI bindSystemActions(SystemActions sysui); 153 154 /** Inject into ThemeOverlayController. */ 155 @Binds 156 @IntoMap 157 @ClassKey(ThemeOverlayController.class) bindThemeOverlayController(ThemeOverlayController sysui)158 public abstract SystemUI bindThemeOverlayController(ThemeOverlayController sysui); 159 160 /** Inject into ToastUI. */ 161 @Binds 162 @IntoMap 163 @ClassKey(ToastUI.class) bindToastUI(ToastUI service)164 public abstract SystemUI bindToastUI(ToastUI service); 165 166 /** Inject into TvStatusBar. */ 167 @Binds 168 @IntoMap 169 @ClassKey(TvStatusBar.class) bindsTvStatusBar(TvStatusBar sysui)170 public abstract SystemUI bindsTvStatusBar(TvStatusBar sysui); 171 172 /** Inject into VolumeUI. */ 173 @Binds 174 @IntoMap 175 @ClassKey(VolumeUI.class) bindVolumeUI(VolumeUI sysui)176 public abstract SystemUI bindVolumeUI(VolumeUI sysui); 177 178 /** Inject into WindowMagnification. */ 179 @Binds 180 @IntoMap 181 @ClassKey(WindowMagnification.class) bindWindowMagnification(WindowMagnification sysui)182 public abstract SystemUI bindWindowMagnification(WindowMagnification sysui); 183 } 184