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.Dependency; 22 import com.android.systemui.InitController; 23 import com.android.systemui.SystemUIAppComponentFactory; 24 import com.android.systemui.dump.DumpManager; 25 import com.android.systemui.keyguard.KeyguardSliceProvider; 26 import com.android.systemui.people.PeopleProvider; 27 import com.android.systemui.statusbar.policy.ConfigurationController; 28 import com.android.systemui.unfold.SysUIUnfoldComponent; 29 import com.android.systemui.unfold.util.NaturalRotationUnfoldProgressProvider; 30 import com.android.wm.shell.ShellCommandHandler; 31 import com.android.wm.shell.TaskViewFactory; 32 import com.android.wm.shell.apppairs.AppPairs; 33 import com.android.wm.shell.bubbles.Bubbles; 34 import com.android.wm.shell.compatui.CompatUI; 35 import com.android.wm.shell.displayareahelper.DisplayAreaHelper; 36 import com.android.wm.shell.draganddrop.DragAndDrop; 37 import com.android.wm.shell.hidedisplaycutout.HideDisplayCutout; 38 import com.android.wm.shell.legacysplitscreen.LegacySplitScreen; 39 import com.android.wm.shell.onehanded.OneHanded; 40 import com.android.wm.shell.pip.Pip; 41 import com.android.wm.shell.recents.RecentTasks; 42 import com.android.wm.shell.splitscreen.SplitScreen; 43 import com.android.wm.shell.startingsurface.StartingSurface; 44 import com.android.wm.shell.tasksurfacehelper.TaskSurfaceHelper; 45 import com.android.wm.shell.transition.ShellTransitions; 46 47 import java.util.Optional; 48 49 import dagger.BindsInstance; 50 import dagger.Subcomponent; 51 52 /** 53 * Dagger Subcomponent for Core SysUI. 54 */ 55 @SysUISingleton 56 @Subcomponent(modules = { 57 DefaultComponentBinder.class, 58 DependencyProvider.class, 59 SystemUIBinder.class, 60 SystemUIModule.class, 61 SystemUIDefaultModule.class}) 62 public interface SysUIComponent { 63 64 /** 65 * Builder for a SysUIComponent. 66 */ 67 @SysUISingleton 68 @Subcomponent.Builder 69 interface Builder { 70 @BindsInstance setPip(Optional<Pip> p)71 Builder setPip(Optional<Pip> p); 72 73 @BindsInstance setLegacySplitScreen(Optional<LegacySplitScreen> s)74 Builder setLegacySplitScreen(Optional<LegacySplitScreen> s); 75 76 @BindsInstance setSplitScreen(Optional<SplitScreen> s)77 Builder setSplitScreen(Optional<SplitScreen> s); 78 79 @BindsInstance setAppPairs(Optional<AppPairs> s)80 Builder setAppPairs(Optional<AppPairs> s); 81 82 @BindsInstance setOneHanded(Optional<OneHanded> o)83 Builder setOneHanded(Optional<OneHanded> o); 84 85 @BindsInstance setBubbles(Optional<Bubbles> b)86 Builder setBubbles(Optional<Bubbles> b); 87 88 @BindsInstance setTaskViewFactory(Optional<TaskViewFactory> t)89 Builder setTaskViewFactory(Optional<TaskViewFactory> t); 90 91 @BindsInstance setHideDisplayCutout(Optional<HideDisplayCutout> h)92 Builder setHideDisplayCutout(Optional<HideDisplayCutout> h); 93 94 @BindsInstance setShellCommandHandler(Optional<ShellCommandHandler> shellDump)95 Builder setShellCommandHandler(Optional<ShellCommandHandler> shellDump); 96 97 @BindsInstance setTransitions(ShellTransitions t)98 Builder setTransitions(ShellTransitions t); 99 100 @BindsInstance setStartingSurface(Optional<StartingSurface> s)101 Builder setStartingSurface(Optional<StartingSurface> s); 102 103 @BindsInstance setDisplayAreaHelper(Optional<DisplayAreaHelper> h)104 Builder setDisplayAreaHelper(Optional<DisplayAreaHelper> h); 105 106 @BindsInstance setTaskSurfaceHelper(Optional<TaskSurfaceHelper> t)107 Builder setTaskSurfaceHelper(Optional<TaskSurfaceHelper> t); 108 109 @BindsInstance setRecentTasks(Optional<RecentTasks> r)110 Builder setRecentTasks(Optional<RecentTasks> r); 111 112 @BindsInstance setCompatUI(Optional<CompatUI> s)113 Builder setCompatUI(Optional<CompatUI> s); 114 115 @BindsInstance setDragAndDrop(Optional<DragAndDrop> d)116 Builder setDragAndDrop(Optional<DragAndDrop> d); 117 build()118 SysUIComponent build(); 119 } 120 121 /** 122 * Initializes all the SysUI components. 123 */ init()124 default void init() { 125 // Initialize components that have no direct tie to the dagger dependency graph, 126 // but are critical to this component's operation 127 // TODO(b/205034537): I think this is a good idea? 128 getSysUIUnfoldComponent().ifPresent(c -> { 129 c.getUnfoldLightRevealOverlayAnimation().init(); 130 c.getUnfoldTransitionWallpaperController().init(); 131 }); 132 getNaturalRotationUnfoldProgressProvider().ifPresent(o -> o.init()); 133 } 134 135 /** 136 * Provides a BootCompleteCache. 137 */ 138 @SysUISingleton provideBootCacheImpl()139 BootCompleteCacheImpl provideBootCacheImpl(); 140 141 /** 142 * Creates a ContextComponentHelper. 143 */ 144 @SysUISingleton getConfigurationController()145 ConfigurationController getConfigurationController(); 146 147 /** 148 * Creates a ContextComponentHelper. 149 */ 150 @SysUISingleton getContextComponentHelper()151 ContextComponentHelper getContextComponentHelper(); 152 153 /** 154 * Main dependency providing module. 155 */ 156 @SysUISingleton createDependency()157 Dependency createDependency(); 158 159 /** */ 160 @SysUISingleton createDumpManager()161 DumpManager createDumpManager(); 162 163 /** 164 * Creates a InitController. 165 */ 166 @SysUISingleton getInitController()167 InitController getInitController(); 168 169 /** 170 * For devices with a hinge: access objects within this component 171 */ getSysUIUnfoldComponent()172 Optional<SysUIUnfoldComponent> getSysUIUnfoldComponent(); 173 174 /** 175 * For devices with a hinge: the rotation animation 176 */ getNaturalRotationUnfoldProgressProvider()177 Optional<NaturalRotationUnfoldProgressProvider> getNaturalRotationUnfoldProgressProvider(); 178 179 /** 180 * Member injection into the supplied argument. 181 */ inject(SystemUIAppComponentFactory factory)182 void inject(SystemUIAppComponentFactory factory); 183 184 /** 185 * Member injection into the supplied argument. 186 */ inject(KeyguardSliceProvider keyguardSliceProvider)187 void inject(KeyguardSliceProvider keyguardSliceProvider); 188 189 /** 190 * Member injection into the supplied argument. 191 */ inject(ClockOptionsProvider clockOptionsProvider)192 void inject(ClockOptionsProvider clockOptionsProvider); 193 194 /** 195 * Member injection into the supplied argument. 196 */ inject(PeopleProvider peopleProvider)197 void inject(PeopleProvider peopleProvider); 198 } 199