• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2023 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.wm.shell.dagger.pip;
18 
19 import android.content.Context;
20 import android.os.Handler;
21 
22 import com.android.wm.shell.RootTaskDisplayAreaOrganizer;
23 import com.android.wm.shell.ShellTaskOrganizer;
24 import com.android.wm.shell.WindowManagerShellWrapper;
25 import com.android.wm.shell.common.DisplayController;
26 import com.android.wm.shell.common.DisplayInsetsController;
27 import com.android.wm.shell.common.FloatingContentCoordinator;
28 import com.android.wm.shell.common.ShellExecutor;
29 import com.android.wm.shell.common.SyncTransactionQueue;
30 import com.android.wm.shell.common.SystemWindows;
31 import com.android.wm.shell.common.TabletopModeController;
32 import com.android.wm.shell.common.TaskStackListenerImpl;
33 import com.android.wm.shell.common.pip.PhonePipKeepClearAlgorithm;
34 import com.android.wm.shell.common.pip.PipAppOpsListener;
35 import com.android.wm.shell.common.pip.PipBoundsAlgorithm;
36 import com.android.wm.shell.common.pip.PipBoundsState;
37 import com.android.wm.shell.common.pip.PipDisplayLayoutState;
38 import com.android.wm.shell.common.pip.PipMediaController;
39 import com.android.wm.shell.common.pip.PipPerfHintController;
40 import com.android.wm.shell.common.pip.PipSnapAlgorithm;
41 import com.android.wm.shell.common.pip.PipUiEventLogger;
42 import com.android.wm.shell.common.pip.SizeSpecSource;
43 import com.android.wm.shell.dagger.WMShellBaseModule;
44 import com.android.wm.shell.dagger.WMSingleton;
45 import com.android.wm.shell.desktopmode.DesktopUserRepositories;
46 import com.android.wm.shell.onehanded.OneHandedController;
47 import com.android.wm.shell.pip.PipAnimationController;
48 import com.android.wm.shell.pip.PipParamsChangedForwarder;
49 import com.android.wm.shell.pip.PipSurfaceTransactionHelper;
50 import com.android.wm.shell.pip.PipTaskOrganizer;
51 import com.android.wm.shell.pip.PipTransition;
52 import com.android.wm.shell.pip.PipTransitionController;
53 import com.android.wm.shell.pip.PipTransitionState;
54 import com.android.wm.shell.pip.phone.PhonePipMenuController;
55 import com.android.wm.shell.pip.phone.PipController;
56 import com.android.wm.shell.pip.phone.PipMotionHelper;
57 import com.android.wm.shell.pip.phone.PipTouchHandler;
58 import com.android.wm.shell.shared.annotations.ShellMainThread;
59 import com.android.wm.shell.splitscreen.SplitScreenController;
60 import com.android.wm.shell.sysui.ShellCommandHandler;
61 import com.android.wm.shell.sysui.ShellController;
62 import com.android.wm.shell.sysui.ShellInit;
63 import com.android.wm.shell.transition.HomeTransitionObserver;
64 import com.android.wm.shell.transition.Transitions;
65 
66 import dagger.Module;
67 import dagger.Provides;
68 
69 import java.util.Optional;
70 
71 /**
72  * Provides dependencies from {@link com.android.wm.shell.pip}, this implementation is meant to be
73  * replaced by the sibling {@link Pip2Module}.
74  */
75 @Module(includes = {
76         Pip1SharedModule.class,
77         WMShellBaseModule.class
78 })
79 public abstract class Pip1Module {
80     @WMSingleton
81     @Provides
providePip1(Context context, ShellInit shellInit, ShellCommandHandler shellCommandHandler, ShellController shellController, DisplayController displayController, PipAnimationController pipAnimationController, PipAppOpsListener pipAppOpsListener, PipBoundsAlgorithm pipBoundsAlgorithm, PhonePipKeepClearAlgorithm pipKeepClearAlgorithm, PipBoundsState pipBoundsState, PipDisplayLayoutState pipDisplayLayoutState, PipMotionHelper pipMotionHelper, PipMediaController pipMediaController, PhonePipMenuController phonePipMenuController, PipTaskOrganizer pipTaskOrganizer, PipTransitionState pipTransitionState, PipTouchHandler pipTouchHandler, PipTransitionController pipTransitionController, WindowManagerShellWrapper windowManagerShellWrapper, TaskStackListenerImpl taskStackListener, PipParamsChangedForwarder pipParamsChangedForwarder, DisplayInsetsController displayInsetsController, TabletopModeController pipTabletopController, Optional<OneHandedController> oneHandedController, @ShellMainThread ShellExecutor mainExecutor, @ShellMainThread Handler handler)82     static Optional<PipController.PipImpl> providePip1(Context context,
83             ShellInit shellInit,
84             ShellCommandHandler shellCommandHandler,
85             ShellController shellController,
86             DisplayController displayController,
87             PipAnimationController pipAnimationController,
88             PipAppOpsListener pipAppOpsListener,
89             PipBoundsAlgorithm pipBoundsAlgorithm,
90             PhonePipKeepClearAlgorithm pipKeepClearAlgorithm,
91             PipBoundsState pipBoundsState,
92             PipDisplayLayoutState pipDisplayLayoutState,
93             PipMotionHelper pipMotionHelper,
94             PipMediaController pipMediaController,
95             PhonePipMenuController phonePipMenuController,
96             PipTaskOrganizer pipTaskOrganizer,
97             PipTransitionState pipTransitionState,
98             PipTouchHandler pipTouchHandler,
99             PipTransitionController pipTransitionController,
100             WindowManagerShellWrapper windowManagerShellWrapper,
101             TaskStackListenerImpl taskStackListener,
102             PipParamsChangedForwarder pipParamsChangedForwarder,
103             DisplayInsetsController displayInsetsController,
104             TabletopModeController pipTabletopController,
105             Optional<OneHandedController> oneHandedController,
106             @ShellMainThread ShellExecutor mainExecutor,
107             @ShellMainThread Handler handler) {
108         return Optional.ofNullable(PipController.create(
109                 context, shellInit, shellCommandHandler, shellController,
110                 displayController, pipAnimationController, pipAppOpsListener,
111                 pipBoundsAlgorithm,
112                 pipKeepClearAlgorithm, pipBoundsState, pipDisplayLayoutState,
113                 pipMotionHelper, pipMediaController, phonePipMenuController, pipTaskOrganizer,
114                 pipTransitionState, pipTouchHandler, pipTransitionController,
115                 windowManagerShellWrapper, taskStackListener, pipParamsChangedForwarder,
116                 displayInsetsController, pipTabletopController, oneHandedController,
117                 mainExecutor, handler));
118     }
119 
120     // Handler is used by Icon.loadDrawableAsync
121     @WMSingleton
122     @Provides
providesPipPhoneMenuController(Context context, PipBoundsState pipBoundsState, PipMediaController pipMediaController, SystemWindows systemWindows, PipUiEventLogger pipUiEventLogger, @ShellMainThread ShellExecutor mainExecutor, @ShellMainThread Handler mainHandler)123     static PhonePipMenuController providesPipPhoneMenuController(Context context,
124             PipBoundsState pipBoundsState, PipMediaController pipMediaController,
125             SystemWindows systemWindows,
126             PipUiEventLogger pipUiEventLogger,
127             @ShellMainThread ShellExecutor mainExecutor,
128             @ShellMainThread Handler mainHandler) {
129         return new PhonePipMenuController(context, pipBoundsState, pipMediaController,
130                 systemWindows, pipUiEventLogger, mainExecutor, mainHandler);
131     }
132 
133     @WMSingleton
134     @Provides
providePipTouchHandler(Context context, ShellInit shellInit, PhonePipMenuController menuPhoneController, PipBoundsAlgorithm pipBoundsAlgorithm, PipBoundsState pipBoundsState, SizeSpecSource sizeSpecSource, PipTaskOrganizer pipTaskOrganizer, PipMotionHelper pipMotionHelper, FloatingContentCoordinator floatingContentCoordinator, PipUiEventLogger pipUiEventLogger, @ShellMainThread ShellExecutor mainExecutor, Optional<PipPerfHintController> pipPerfHintControllerOptional)135     static PipTouchHandler providePipTouchHandler(Context context,
136             ShellInit shellInit,
137             PhonePipMenuController menuPhoneController,
138             PipBoundsAlgorithm pipBoundsAlgorithm,
139             PipBoundsState pipBoundsState,
140             SizeSpecSource sizeSpecSource,
141             PipTaskOrganizer pipTaskOrganizer,
142             PipMotionHelper pipMotionHelper,
143             FloatingContentCoordinator floatingContentCoordinator,
144             PipUiEventLogger pipUiEventLogger,
145             @ShellMainThread ShellExecutor mainExecutor,
146             Optional<PipPerfHintController> pipPerfHintControllerOptional) {
147         return new PipTouchHandler(context, shellInit, menuPhoneController, pipBoundsAlgorithm,
148                 pipBoundsState, sizeSpecSource, pipTaskOrganizer, pipMotionHelper,
149                 floatingContentCoordinator, pipUiEventLogger, mainExecutor,
150                 pipPerfHintControllerOptional);
151     }
152 
153     @WMSingleton
154     @Provides
providePipTransitionState()155     static PipTransitionState providePipTransitionState() {
156         return new PipTransitionState();
157     }
158 
159     @WMSingleton
160     @Provides
providePipTaskOrganizer(Context context, SyncTransactionQueue syncTransactionQueue, PipTransitionState pipTransitionState, PipBoundsState pipBoundsState, PipDisplayLayoutState pipDisplayLayoutState, PipBoundsAlgorithm pipBoundsAlgorithm, PhonePipMenuController menuPhoneController, PipAnimationController pipAnimationController, PipSurfaceTransactionHelper pipSurfaceTransactionHelper, PipTransitionController pipTransitionController, PipParamsChangedForwarder pipParamsChangedForwarder, Optional<SplitScreenController> splitScreenControllerOptional, Optional<PipPerfHintController> pipPerfHintControllerOptional, Optional<DesktopUserRepositories> desktopUserRepositoriesOptional, RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer, DisplayController displayController, PipUiEventLogger pipUiEventLogger, ShellTaskOrganizer shellTaskOrganizer, @ShellMainThread ShellExecutor mainExecutor)161     static PipTaskOrganizer providePipTaskOrganizer(Context context,
162             SyncTransactionQueue syncTransactionQueue,
163             PipTransitionState pipTransitionState,
164             PipBoundsState pipBoundsState,
165             PipDisplayLayoutState pipDisplayLayoutState,
166             PipBoundsAlgorithm pipBoundsAlgorithm,
167             PhonePipMenuController menuPhoneController,
168             PipAnimationController pipAnimationController,
169             PipSurfaceTransactionHelper pipSurfaceTransactionHelper,
170             PipTransitionController pipTransitionController,
171             PipParamsChangedForwarder pipParamsChangedForwarder,
172             Optional<SplitScreenController> splitScreenControllerOptional,
173             Optional<PipPerfHintController> pipPerfHintControllerOptional,
174             Optional<DesktopUserRepositories> desktopUserRepositoriesOptional,
175             RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer,
176             DisplayController displayController,
177             PipUiEventLogger pipUiEventLogger, ShellTaskOrganizer shellTaskOrganizer,
178             @ShellMainThread ShellExecutor mainExecutor) {
179         return new PipTaskOrganizer(context,
180                 syncTransactionQueue, pipTransitionState, pipBoundsState, pipDisplayLayoutState,
181                 pipBoundsAlgorithm, menuPhoneController, pipAnimationController,
182                 pipSurfaceTransactionHelper, pipTransitionController, pipParamsChangedForwarder,
183                 splitScreenControllerOptional, pipPerfHintControllerOptional,
184                 desktopUserRepositoriesOptional, rootTaskDisplayAreaOrganizer, displayController,
185                 pipUiEventLogger, shellTaskOrganizer, mainExecutor);
186     }
187 
188     @WMSingleton
189     @Provides
providePipTransition(Context context, ShellInit shellInit, ShellTaskOrganizer shellTaskOrganizer, Transitions transitions, PipAnimationController pipAnimationController, PipBoundsAlgorithm pipBoundsAlgorithm, PipBoundsState pipBoundsState, PipDisplayLayoutState pipDisplayLayoutState, PipTransitionState pipTransitionState, PhonePipMenuController pipMenuController, PipSurfaceTransactionHelper pipSurfaceTransactionHelper, HomeTransitionObserver homeTransitionObserver, Optional<SplitScreenController> splitScreenOptional)190     static PipTransition providePipTransition(Context context,
191             ShellInit shellInit, ShellTaskOrganizer shellTaskOrganizer, Transitions transitions,
192             PipAnimationController pipAnimationController, PipBoundsAlgorithm pipBoundsAlgorithm,
193             PipBoundsState pipBoundsState, PipDisplayLayoutState pipDisplayLayoutState,
194             PipTransitionState pipTransitionState, PhonePipMenuController pipMenuController,
195             PipSurfaceTransactionHelper pipSurfaceTransactionHelper,
196             HomeTransitionObserver homeTransitionObserver,
197             Optional<SplitScreenController> splitScreenOptional) {
198         return new PipTransition(context, shellInit, shellTaskOrganizer, transitions,
199                 pipBoundsState, pipDisplayLayoutState, pipTransitionState, pipMenuController,
200                 pipBoundsAlgorithm, pipAnimationController, pipSurfaceTransactionHelper,
201                 homeTransitionObserver, splitScreenOptional);
202     }
203 
204     @WMSingleton
205     @Provides
providePipMotionHelper(Context context, @ShellMainThread ShellExecutor mainExecutor, PipBoundsState pipBoundsState, PipTaskOrganizer pipTaskOrganizer, PhonePipMenuController menuController, PipSnapAlgorithm pipSnapAlgorithm, PipTransitionController pipTransitionController, FloatingContentCoordinator floatingContentCoordinator, Optional<PipPerfHintController> pipPerfHintControllerOptional)206     static PipMotionHelper providePipMotionHelper(Context context,
207             @ShellMainThread ShellExecutor mainExecutor,
208             PipBoundsState pipBoundsState, PipTaskOrganizer pipTaskOrganizer,
209             PhonePipMenuController menuController, PipSnapAlgorithm pipSnapAlgorithm,
210             PipTransitionController pipTransitionController,
211             FloatingContentCoordinator floatingContentCoordinator,
212             Optional<PipPerfHintController> pipPerfHintControllerOptional) {
213         return new PipMotionHelper(context, mainExecutor, pipBoundsState, pipTaskOrganizer,
214                 menuController, pipSnapAlgorithm, pipTransitionController,
215                 floatingContentCoordinator, pipPerfHintControllerOptional);
216     }
217 
218     @WMSingleton
219     @Provides
providePipParamsChangedForwarder()220     static PipParamsChangedForwarder providePipParamsChangedForwarder() {
221         return new PipParamsChangedForwarder();
222     }
223 }
224