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.BootCompleteCacheImpl; 20 import com.android.systemui.CoreStartable; 21 import com.android.systemui.Dependency; 22 import com.android.systemui.InitController; 23 import com.android.systemui.SystemUIAppComponentFactoryBase; 24 import com.android.systemui.dagger.qualifiers.PerUser; 25 import com.android.systemui.dump.DumpManager; 26 import com.android.systemui.keyguard.KeyguardSliceProvider; 27 import com.android.systemui.media.muteawait.MediaMuteAwaitConnectionCli; 28 import com.android.systemui.media.nearby.NearbyMediaDevicesManager; 29 import com.android.systemui.people.PeopleProvider; 30 import com.android.systemui.statusbar.NotificationInsetsModule; 31 import com.android.systemui.statusbar.QsFrameTranslateModule; 32 import com.android.systemui.statusbar.policy.ConfigurationController; 33 import com.android.systemui.unfold.FoldStateLogger; 34 import com.android.systemui.unfold.FoldStateLoggingProvider; 35 import com.android.systemui.unfold.SysUIUnfoldComponent; 36 import com.android.systemui.unfold.UnfoldLatencyTracker; 37 import com.android.systemui.unfold.UnfoldTransitionProgressProvider; 38 import com.android.systemui.unfold.progress.UnfoldTransitionProgressForwarder; 39 import com.android.systemui.unfold.util.NaturalRotationUnfoldProgressProvider; 40 import com.android.wm.shell.back.BackAnimation; 41 import com.android.wm.shell.bubbles.Bubbles; 42 import com.android.wm.shell.desktopmode.DesktopMode; 43 import com.android.wm.shell.displayareahelper.DisplayAreaHelper; 44 import com.android.wm.shell.keyguard.KeyguardTransitions; 45 import com.android.wm.shell.onehanded.OneHanded; 46 import com.android.wm.shell.pip.Pip; 47 import com.android.wm.shell.recents.RecentTasks; 48 import com.android.wm.shell.splitscreen.SplitScreen; 49 import com.android.wm.shell.startingsurface.StartingSurface; 50 import com.android.wm.shell.sysui.ShellInterface; 51 import com.android.wm.shell.taskview.TaskViewFactory; 52 import com.android.wm.shell.transition.ShellTransitions; 53 54 import dagger.BindsInstance; 55 import dagger.Subcomponent; 56 57 import java.util.Map; 58 import java.util.Optional; 59 60 import javax.inject.Provider; 61 62 /** 63 * An example Dagger Subcomponent for Core SysUI. 64 * 65 * See {@link ReferenceSysUIComponent} for the one actually used by AOSP. 66 */ 67 @SysUISingleton 68 @Subcomponent(modules = { 69 DefaultComponentBinder.class, 70 DependencyProvider.class, 71 NotificationInsetsModule.class, 72 QsFrameTranslateModule.class, 73 SystemUIBinder.class, 74 SystemUIModule.class, 75 SystemUICoreStartableModule.class, 76 ReferenceSystemUIModule.class}) 77 public interface SysUIComponent { 78 79 /** 80 * Builder for a SysUIComponent. 81 */ 82 @SysUISingleton 83 @Subcomponent.Builder 84 interface Builder { 85 @BindsInstance setShell(ShellInterface s)86 Builder setShell(ShellInterface s); 87 88 @BindsInstance setPip(Optional<Pip> p)89 Builder setPip(Optional<Pip> p); 90 91 @BindsInstance setSplitScreen(Optional<SplitScreen> s)92 Builder setSplitScreen(Optional<SplitScreen> s); 93 94 @BindsInstance setOneHanded(Optional<OneHanded> o)95 Builder setOneHanded(Optional<OneHanded> o); 96 97 @BindsInstance setBubbles(Optional<Bubbles> b)98 Builder setBubbles(Optional<Bubbles> b); 99 100 @BindsInstance setTaskViewFactory(Optional<TaskViewFactory> t)101 Builder setTaskViewFactory(Optional<TaskViewFactory> t); 102 103 @BindsInstance setTransitions(ShellTransitions t)104 Builder setTransitions(ShellTransitions t); 105 106 @BindsInstance setKeyguardTransitions(KeyguardTransitions k)107 Builder setKeyguardTransitions(KeyguardTransitions k); 108 109 @BindsInstance setStartingSurface(Optional<StartingSurface> s)110 Builder setStartingSurface(Optional<StartingSurface> s); 111 112 @BindsInstance setDisplayAreaHelper(Optional<DisplayAreaHelper> h)113 Builder setDisplayAreaHelper(Optional<DisplayAreaHelper> h); 114 115 @BindsInstance setRecentTasks(Optional<RecentTasks> r)116 Builder setRecentTasks(Optional<RecentTasks> r); 117 118 @BindsInstance setBackAnimation(Optional<BackAnimation> b)119 Builder setBackAnimation(Optional<BackAnimation> b); 120 121 @BindsInstance setDesktopMode(Optional<DesktopMode> d)122 Builder setDesktopMode(Optional<DesktopMode> d); 123 build()124 SysUIComponent build(); 125 } 126 127 /** 128 * Initializes all the SysUI components. 129 */ init()130 default void init() { 131 // Initialize components that have no direct tie to the dagger dependency graph, 132 // but are critical to this component's operation 133 getSysUIUnfoldComponent().ifPresent(c -> { 134 c.getUnfoldLightRevealOverlayAnimation().init(); 135 c.getUnfoldTransitionWallpaperController().init(); 136 c.getUnfoldHapticsPlayer(); 137 }); 138 getNaturalRotationUnfoldProgressProvider().ifPresent(o -> o.init()); 139 // No init method needed, just needs to be gotten so that it's created. 140 getMediaMuteAwaitConnectionCli(); 141 getNearbyMediaDevicesManager(); 142 getUnfoldLatencyTracker().init(); 143 getFoldStateLoggingProvider().ifPresent(FoldStateLoggingProvider::init); 144 getFoldStateLogger().ifPresent(FoldStateLogger::init); 145 getUnfoldTransitionProgressProvider().ifPresent((progressProvider) -> 146 getUnfoldTransitionProgressForwarder().ifPresent((forwarder) -> 147 progressProvider.addCallback(forwarder) 148 )); 149 } 150 151 /** 152 * Provides a BootCompleteCache. 153 */ 154 @SysUISingleton provideBootCacheImpl()155 BootCompleteCacheImpl provideBootCacheImpl(); 156 157 /** 158 * Creates a ContextComponentHelper. 159 */ 160 @SysUISingleton getConfigurationController()161 ConfigurationController getConfigurationController(); 162 163 /** 164 * Creates a ContextComponentHelper. 165 */ 166 @SysUISingleton getContextComponentHelper()167 ContextComponentHelper getContextComponentHelper(); 168 169 /** 170 * Creates a UnfoldLatencyTracker. 171 */ 172 @SysUISingleton getUnfoldLatencyTracker()173 UnfoldLatencyTracker getUnfoldLatencyTracker(); 174 175 /** 176 * Creates a UnfoldTransitionProgressProvider. 177 */ 178 @SysUISingleton getUnfoldTransitionProgressProvider()179 Optional<UnfoldTransitionProgressProvider> getUnfoldTransitionProgressProvider(); 180 181 /** 182 * Creates a UnfoldTransitionProgressForwarder. 183 */ 184 @SysUISingleton getUnfoldTransitionProgressForwarder()185 Optional<UnfoldTransitionProgressForwarder> getUnfoldTransitionProgressForwarder(); 186 187 /** 188 * Creates a FoldStateLoggingProvider. 189 */ 190 @SysUISingleton getFoldStateLoggingProvider()191 Optional<FoldStateLoggingProvider> getFoldStateLoggingProvider(); 192 193 /** 194 * Creates a FoldStateLogger. 195 */ 196 @SysUISingleton getFoldStateLogger()197 Optional<FoldStateLogger> getFoldStateLogger(); 198 199 /** 200 * Main dependency providing module. 201 */ 202 @SysUISingleton createDependency()203 Dependency createDependency(); 204 205 /** */ 206 @SysUISingleton createDumpManager()207 DumpManager createDumpManager(); 208 209 /** 210 * Creates a InitController. 211 */ 212 @SysUISingleton getInitController()213 InitController getInitController(); 214 215 /** 216 * For devices with a hinge: access objects within this component 217 */ getSysUIUnfoldComponent()218 Optional<SysUIUnfoldComponent> getSysUIUnfoldComponent(); 219 220 /** 221 * For devices with a hinge: the rotation animation 222 */ getNaturalRotationUnfoldProgressProvider()223 Optional<NaturalRotationUnfoldProgressProvider> getNaturalRotationUnfoldProgressProvider(); 224 225 /** */ getMediaMuteAwaitConnectionCli()226 MediaMuteAwaitConnectionCli getMediaMuteAwaitConnectionCli(); 227 228 /** */ getNearbyMediaDevicesManager()229 NearbyMediaDevicesManager getNearbyMediaDevicesManager(); 230 231 /** 232 * Returns {@link CoreStartable}s that should be started with the application. 233 */ getStartables()234 Map<Class<?>, Provider<CoreStartable>> getStartables(); 235 236 /** 237 * Returns {@link CoreStartable}s that should be started for every user. 238 */ getPerUserStartables()239 @PerUser Map<Class<?>, Provider<CoreStartable>> getPerUserStartables(); 240 241 /** 242 * Member injection into the supplied argument. 243 */ inject(SystemUIAppComponentFactoryBase factory)244 void inject(SystemUIAppComponentFactoryBase factory); 245 246 /** 247 * Member injection into the supplied argument. 248 */ inject(KeyguardSliceProvider keyguardSliceProvider)249 void inject(KeyguardSliceProvider keyguardSliceProvider); 250 251 /** 252 * Member injection into the supplied argument. 253 */ inject(PeopleProvider peopleProvider)254 void inject(PeopleProvider peopleProvider); 255 } 256