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