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;
18 
19 import com.android.systemui.accessibility.SystemActions;
20 import com.android.systemui.biometrics.AuthController;
21 import com.android.systemui.car.cluster.ClusterDisplayController;
22 import com.android.systemui.car.notification.CarNotificationModule;
23 import com.android.systemui.car.sideloaded.SideLoadedAppController;
24 import com.android.systemui.car.statusicon.ui.QuickControlsEntryPointsModule;
25 import com.android.systemui.car.systembar.CarSystemBar;
26 import com.android.systemui.car.toast.CarToastUI;
27 import com.android.systemui.car.voicerecognition.ConnectedDeviceVoiceRecognitionNotifier;
28 import com.android.systemui.car.volume.VolumeUI;
29 import com.android.systemui.car.window.OverlayWindowModule;
30 import com.android.systemui.car.window.SystemUIOverlayWindowManager;
31 import com.android.systemui.globalactions.GlobalActionsComponent;
32 import com.android.systemui.keyguard.KeyguardViewMediator;
33 import com.android.systemui.keyguard.dagger.KeyguardModule;
34 import com.android.systemui.power.PowerUI;
35 import com.android.systemui.recents.Recents;
36 import com.android.systemui.recents.RecentsModule;
37 import com.android.systemui.shortcut.ShortcutKeyDispatcher;
38 import com.android.systemui.statusbar.dagger.StatusBarModule;
39 import com.android.systemui.statusbar.notification.InstantAppNotifier;
40 import com.android.systemui.statusbar.notification.dagger.NotificationsModule;
41 import com.android.systemui.statusbar.phone.StatusBar;
42 import com.android.systemui.theme.ThemeOverlayController;
43 import com.android.systemui.util.leak.GarbageMonitor;
44 import com.android.systemui.wmshell.WMShell;
45 
46 import dagger.Binds;
47 import dagger.Module;
48 import dagger.multibindings.ClassKey;
49 import dagger.multibindings.IntoMap;
50 
51 /** Binder for car specific {@link SystemUI} modules. */
52 @Module(includes = {RecentsModule.class, StatusBarModule.class, NotificationsModule.class,
53         KeyguardModule.class, OverlayWindowModule.class, CarNotificationModule.class,
54         QuickControlsEntryPointsModule.class})
55 public abstract class CarSystemUIBinder {
56     /** Inject into AuthController. */
57     @Binds
58     @IntoMap
59     @ClassKey(AuthController.class)
bindAuthController(AuthController sysui)60     public abstract SystemUI bindAuthController(AuthController sysui);
61 
62     /** Inject Car Navigation Bar. */
63     @Binds
64     @IntoMap
65     @ClassKey(CarSystemBar.class)
bindCarSystemBar(CarSystemBar sysui)66     public abstract SystemUI bindCarSystemBar(CarSystemBar sysui);
67 
68     /** Inject into GarbageMonitor.Service. */
69     @Binds
70     @IntoMap
71     @ClassKey(GarbageMonitor.Service.class)
bindGarbageMonitorService(GarbageMonitor.Service sysui)72     public abstract SystemUI bindGarbageMonitorService(GarbageMonitor.Service sysui);
73 
74     /** Inject into GlobalActionsComponent. */
75     @Binds
76     @IntoMap
77     @ClassKey(GlobalActionsComponent.class)
bindGlobalActionsComponent(GlobalActionsComponent sysui)78     public abstract SystemUI bindGlobalActionsComponent(GlobalActionsComponent sysui);
79 
80     /** Inject into InstantAppNotifier. */
81     @Binds
82     @IntoMap
83     @ClassKey(InstantAppNotifier.class)
bindInstantAppNotifier(InstantAppNotifier sysui)84     public abstract SystemUI bindInstantAppNotifier(InstantAppNotifier sysui);
85 
86     /** Inject into KeyguardViewMediator. */
87     @Binds
88     @IntoMap
89     @ClassKey(KeyguardViewMediator.class)
bindKeyguardViewMediator(KeyguardViewMediator sysui)90     public abstract SystemUI bindKeyguardViewMediator(KeyguardViewMediator sysui);
91 
92     /** Inject into LatencyTests. */
93     @Binds
94     @IntoMap
95     @ClassKey(LatencyTester.class)
bindLatencyTester(LatencyTester sysui)96     public abstract SystemUI bindLatencyTester(LatencyTester sysui);
97 
98     /** Inject into PowerUI. */
99     @Binds
100     @IntoMap
101     @ClassKey(PowerUI.class)
bindPowerUI(PowerUI sysui)102     public abstract SystemUI bindPowerUI(PowerUI sysui);
103 
104     /** Inject into Recents. */
105     @Binds
106     @IntoMap
107     @ClassKey(Recents.class)
bindRecents(Recents sysui)108     public abstract SystemUI bindRecents(Recents sysui);
109 
110     /** Inject into ScreenDecorations. */
111     @Binds
112     @IntoMap
113     @ClassKey(ScreenDecorations.class)
bindScreenDecorations(ScreenDecorations sysui)114     public abstract SystemUI bindScreenDecorations(ScreenDecorations sysui);
115 
116     /** Inject into ShortcutKeyDispatcher. */
117     @Binds
118     @IntoMap
119     @ClassKey(ShortcutKeyDispatcher.class)
bindsShortcutKeyDispatcher(ShortcutKeyDispatcher sysui)120     public abstract SystemUI bindsShortcutKeyDispatcher(ShortcutKeyDispatcher sysui);
121 
122     /** Inject into SliceBroadcastRelayHandler. */
123     @Binds
124     @IntoMap
125     @ClassKey(SliceBroadcastRelayHandler.class)
bindSliceBroadcastRelayHandler(SliceBroadcastRelayHandler sysui)126     public abstract SystemUI bindSliceBroadcastRelayHandler(SliceBroadcastRelayHandler sysui);
127 
128     /** Inject into ThemeOverlayController. */
129     @Binds
130     @IntoMap
131     @ClassKey(ThemeOverlayController.class)
bindThemeOverlayController(ThemeOverlayController sysui)132     public abstract SystemUI bindThemeOverlayController(ThemeOverlayController sysui);
133 
134     /** Inject into StatusBar. */
135     @Binds
136     @IntoMap
137     @ClassKey(StatusBar.class)
bindsStatusBar(StatusBar sysui)138     public abstract SystemUI bindsStatusBar(StatusBar sysui);
139 
140     /** Inject into SystemActions. */
141     @Binds
142     @IntoMap
143     @ClassKey(SystemActions.class)
bindSystemActions(SystemActions sysui)144     public abstract SystemUI bindSystemActions(SystemActions sysui);
145 
146     /** Inject into VolumeUI. */
147     @Binds
148     @IntoMap
149     @ClassKey(VolumeUI.class)
bindVolumeUI(VolumeUI sysui)150     public abstract SystemUI bindVolumeUI(VolumeUI sysui);
151 
152     /** Inject into CarToastUI. */
153     @Binds
154     @IntoMap
155     @ClassKey(CarToastUI.class)
bindCarToastUI(CarToastUI service)156     public abstract SystemUI bindCarToastUI(CarToastUI service);
157 
158     /** Inject into ConnectedDeviceVoiceRecognitionNotifier. */
159     @Binds
160     @IntoMap
161     @ClassKey(ConnectedDeviceVoiceRecognitionNotifier.class)
bindConnectedDeviceVoiceRecognitionNotifier( ConnectedDeviceVoiceRecognitionNotifier sysui)162     public abstract SystemUI bindConnectedDeviceVoiceRecognitionNotifier(
163             ConnectedDeviceVoiceRecognitionNotifier sysui);
164 
165     /** Inject into SystemUIOverlayWindowManager. */
166     @Binds
167     @IntoMap
168     @ClassKey(SystemUIOverlayWindowManager.class)
bindSystemUIPrimaryWindowManager(SystemUIOverlayWindowManager sysui)169     public abstract SystemUI bindSystemUIPrimaryWindowManager(SystemUIOverlayWindowManager sysui);
170 
171     /** Inject into SideLoadedAppController. */
172     @Binds
173     @IntoMap
174     @ClassKey(SideLoadedAppController.class)
bindSideLoadedAppController(SideLoadedAppController sysui)175     public abstract SystemUI bindSideLoadedAppController(SideLoadedAppController sysui);
176 
177     /** Inject into WMShell. */
178     @Binds
179     @IntoMap
180     @ClassKey(WMShell.class)
bindWMShell(WMShell sysui)181     public abstract SystemUI bindWMShell(WMShell sysui);
182 
183     /** Inject into ClusterDisplayController. */
184     @Binds
185     @IntoMap
186     @ClassKey(ClusterDisplayController.class)
bindClusterDisplayController(ClusterDisplayController sysui)187     public abstract SystemUI bindClusterDisplayController(ClusterDisplayController sysui);
188 }
189