• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 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;
18 
19 import android.content.Context;
20 import android.os.Handler;
21 import android.os.SystemClock;
22 
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.ShellExecutor;
27 import com.android.wm.shell.common.SyncTransactionQueue;
28 import com.android.wm.shell.common.SystemWindows;
29 import com.android.wm.shell.common.TaskStackListenerImpl;
30 import com.android.wm.shell.common.annotations.ShellMainThread;
31 import com.android.wm.shell.pip.Pip;
32 import com.android.wm.shell.pip.PipAnimationController;
33 import com.android.wm.shell.pip.PipAppOpsListener;
34 import com.android.wm.shell.pip.PipMediaController;
35 import com.android.wm.shell.pip.PipParamsChangedForwarder;
36 import com.android.wm.shell.pip.PipSnapAlgorithm;
37 import com.android.wm.shell.pip.PipSurfaceTransactionHelper;
38 import com.android.wm.shell.pip.PipTaskOrganizer;
39 import com.android.wm.shell.pip.PipTransitionController;
40 import com.android.wm.shell.pip.PipTransitionState;
41 import com.android.wm.shell.pip.PipUiEventLogger;
42 import com.android.wm.shell.pip.phone.PipSizeSpecHandler;
43 import com.android.wm.shell.pip.tv.TvPipBoundsAlgorithm;
44 import com.android.wm.shell.pip.tv.TvPipBoundsController;
45 import com.android.wm.shell.pip.tv.TvPipBoundsState;
46 import com.android.wm.shell.pip.tv.TvPipController;
47 import com.android.wm.shell.pip.tv.TvPipMenuController;
48 import com.android.wm.shell.pip.tv.TvPipNotificationController;
49 import com.android.wm.shell.pip.tv.TvPipTaskOrganizer;
50 import com.android.wm.shell.pip.tv.TvPipTransition;
51 import com.android.wm.shell.splitscreen.SplitScreenController;
52 import com.android.wm.shell.sysui.ShellController;
53 import com.android.wm.shell.sysui.ShellInit;
54 import com.android.wm.shell.transition.Transitions;
55 
56 import java.util.Optional;
57 
58 import dagger.Module;
59 import dagger.Provides;
60 
61 /**
62  * Provides TV specific dependencies for Pip.
63  */
64 @Module(includes = {WMShellBaseModule.class})
65 public abstract class TvPipModule {
66     @WMSingleton
67     @Provides
providePip( Context context, ShellInit shellInit, ShellController shellController, TvPipBoundsState tvPipBoundsState, PipSizeSpecHandler pipSizeSpecHandler, TvPipBoundsAlgorithm tvPipBoundsAlgorithm, TvPipBoundsController tvPipBoundsController, PipAppOpsListener pipAppOpsListener, PipTaskOrganizer pipTaskOrganizer, TvPipMenuController tvPipMenuController, PipMediaController pipMediaController, PipTransitionController pipTransitionController, TvPipNotificationController tvPipNotificationController, TaskStackListenerImpl taskStackListener, PipParamsChangedForwarder pipParamsChangedForwarder, DisplayController displayController, WindowManagerShellWrapper windowManagerShellWrapper, @ShellMainThread ShellExecutor mainExecutor)68     static Optional<Pip> providePip(
69             Context context,
70             ShellInit shellInit,
71             ShellController shellController,
72             TvPipBoundsState tvPipBoundsState,
73             PipSizeSpecHandler pipSizeSpecHandler,
74             TvPipBoundsAlgorithm tvPipBoundsAlgorithm,
75             TvPipBoundsController tvPipBoundsController,
76             PipAppOpsListener pipAppOpsListener,
77             PipTaskOrganizer pipTaskOrganizer,
78             TvPipMenuController tvPipMenuController,
79             PipMediaController pipMediaController,
80             PipTransitionController pipTransitionController,
81             TvPipNotificationController tvPipNotificationController,
82             TaskStackListenerImpl taskStackListener,
83             PipParamsChangedForwarder pipParamsChangedForwarder,
84             DisplayController displayController,
85             WindowManagerShellWrapper windowManagerShellWrapper,
86             @ShellMainThread ShellExecutor mainExecutor) {
87         return Optional.of(
88                 TvPipController.create(
89                         context,
90                         shellInit,
91                         shellController,
92                         tvPipBoundsState,
93                         pipSizeSpecHandler,
94                         tvPipBoundsAlgorithm,
95                         tvPipBoundsController,
96                         pipAppOpsListener,
97                         pipTaskOrganizer,
98                         pipTransitionController,
99                         tvPipMenuController,
100                         pipMediaController,
101                         tvPipNotificationController,
102                         taskStackListener,
103                         pipParamsChangedForwarder,
104                         displayController,
105                         windowManagerShellWrapper,
106                         mainExecutor));
107     }
108 
109     @WMSingleton
110     @Provides
provideTvPipBoundsController( Context context, @ShellMainThread Handler mainHandler, TvPipBoundsState tvPipBoundsState, TvPipBoundsAlgorithm tvPipBoundsAlgorithm)111     static TvPipBoundsController provideTvPipBoundsController(
112             Context context,
113             @ShellMainThread Handler mainHandler,
114             TvPipBoundsState tvPipBoundsState,
115             TvPipBoundsAlgorithm tvPipBoundsAlgorithm) {
116         return new TvPipBoundsController(
117                 context,
118                 SystemClock::uptimeMillis,
119                 mainHandler,
120                 tvPipBoundsState,
121                 tvPipBoundsAlgorithm);
122     }
123 
124     @WMSingleton
125     @Provides
providePipSnapAlgorithm()126     static PipSnapAlgorithm providePipSnapAlgorithm() {
127         return new PipSnapAlgorithm();
128     }
129 
130     @WMSingleton
131     @Provides
provideTvPipBoundsAlgorithm(Context context, TvPipBoundsState tvPipBoundsState, PipSnapAlgorithm pipSnapAlgorithm, PipSizeSpecHandler pipSizeSpecHandler)132     static TvPipBoundsAlgorithm provideTvPipBoundsAlgorithm(Context context,
133             TvPipBoundsState tvPipBoundsState, PipSnapAlgorithm pipSnapAlgorithm,
134             PipSizeSpecHandler pipSizeSpecHandler) {
135         return new TvPipBoundsAlgorithm(context, tvPipBoundsState, pipSnapAlgorithm,
136                 pipSizeSpecHandler);
137     }
138 
139     @WMSingleton
140     @Provides
provideTvPipBoundsState(Context context, PipSizeSpecHandler pipSizeSpecHandler)141     static TvPipBoundsState provideTvPipBoundsState(Context context,
142             PipSizeSpecHandler pipSizeSpecHandler) {
143         return new TvPipBoundsState(context, pipSizeSpecHandler);
144     }
145 
146     @WMSingleton
147     @Provides
providePipSizeSpecHelper(Context context)148     static PipSizeSpecHandler providePipSizeSpecHelper(Context context) {
149         return new PipSizeSpecHandler(context);
150     }
151 
152     // Handler needed for loadDrawableAsync() in PipControlsViewController
153     @WMSingleton
154     @Provides
provideTvPipTransition( ShellInit shellInit, ShellTaskOrganizer shellTaskOrganizer, Transitions transitions, PipAnimationController pipAnimationController, TvPipBoundsAlgorithm tvPipBoundsAlgorithm, TvPipBoundsState tvPipBoundsState, TvPipMenuController pipMenuController)155     static PipTransitionController provideTvPipTransition(
156             ShellInit shellInit,
157             ShellTaskOrganizer shellTaskOrganizer,
158             Transitions transitions,
159             PipAnimationController pipAnimationController,
160             TvPipBoundsAlgorithm tvPipBoundsAlgorithm,
161             TvPipBoundsState tvPipBoundsState, TvPipMenuController pipMenuController) {
162         return new TvPipTransition(shellInit, shellTaskOrganizer, transitions, tvPipBoundsState,
163                 pipMenuController, tvPipBoundsAlgorithm, pipAnimationController);
164     }
165 
166     @WMSingleton
167     @Provides
providesTvPipMenuController( Context context, TvPipBoundsState tvPipBoundsState, SystemWindows systemWindows, PipMediaController pipMediaController, @ShellMainThread Handler mainHandler)168     static TvPipMenuController providesTvPipMenuController(
169             Context context,
170             TvPipBoundsState tvPipBoundsState,
171             SystemWindows systemWindows,
172             PipMediaController pipMediaController,
173             @ShellMainThread Handler mainHandler) {
174         return new TvPipMenuController(context, tvPipBoundsState, systemWindows, pipMediaController,
175                 mainHandler);
176     }
177 
178     // Handler needed for registerReceiverForAllUsers()
179     @WMSingleton
180     @Provides
provideTvPipNotificationController(Context context, PipMediaController pipMediaController, PipParamsChangedForwarder pipParamsChangedForwarder, TvPipBoundsState tvPipBoundsState, @ShellMainThread Handler mainHandler)181     static TvPipNotificationController provideTvPipNotificationController(Context context,
182             PipMediaController pipMediaController,
183             PipParamsChangedForwarder pipParamsChangedForwarder,
184             TvPipBoundsState tvPipBoundsState,
185             @ShellMainThread Handler mainHandler) {
186         return new TvPipNotificationController(context, pipMediaController,
187                 pipParamsChangedForwarder, tvPipBoundsState, mainHandler);
188     }
189 
190     @WMSingleton
191     @Provides
providePipAnimationController(PipSurfaceTransactionHelper pipSurfaceTransactionHelper)192     static PipAnimationController providePipAnimationController(PipSurfaceTransactionHelper
193             pipSurfaceTransactionHelper) {
194         return new PipAnimationController(pipSurfaceTransactionHelper);
195     }
196 
197     @WMSingleton
198     @Provides
providePipTransitionState()199     static PipTransitionState providePipTransitionState() {
200         return new PipTransitionState();
201     }
202 
203     @WMSingleton
204     @Provides
providePipTaskOrganizer(Context context, TvPipMenuController tvPipMenuController, SyncTransactionQueue syncTransactionQueue, TvPipBoundsState tvPipBoundsState, PipSizeSpecHandler pipSizeSpecHandler, PipTransitionState pipTransitionState, TvPipBoundsAlgorithm tvPipBoundsAlgorithm, PipAnimationController pipAnimationController, PipTransitionController pipTransitionController, PipParamsChangedForwarder pipParamsChangedForwarder, PipSurfaceTransactionHelper pipSurfaceTransactionHelper, Optional<SplitScreenController> splitScreenControllerOptional, DisplayController displayController, PipUiEventLogger pipUiEventLogger, ShellTaskOrganizer shellTaskOrganizer, @ShellMainThread ShellExecutor mainExecutor)205     static PipTaskOrganizer providePipTaskOrganizer(Context context,
206             TvPipMenuController tvPipMenuController,
207             SyncTransactionQueue syncTransactionQueue,
208             TvPipBoundsState tvPipBoundsState,
209             PipSizeSpecHandler pipSizeSpecHandler,
210             PipTransitionState pipTransitionState,
211             TvPipBoundsAlgorithm tvPipBoundsAlgorithm,
212             PipAnimationController pipAnimationController,
213             PipTransitionController pipTransitionController,
214             PipParamsChangedForwarder pipParamsChangedForwarder,
215             PipSurfaceTransactionHelper pipSurfaceTransactionHelper,
216             Optional<SplitScreenController> splitScreenControllerOptional,
217             DisplayController displayController,
218             PipUiEventLogger pipUiEventLogger, ShellTaskOrganizer shellTaskOrganizer,
219             @ShellMainThread ShellExecutor mainExecutor) {
220         return new TvPipTaskOrganizer(context,
221                 syncTransactionQueue, pipTransitionState, tvPipBoundsState, pipSizeSpecHandler,
222                 tvPipBoundsAlgorithm, tvPipMenuController, pipAnimationController,
223                 pipSurfaceTransactionHelper, pipTransitionController, pipParamsChangedForwarder,
224                 splitScreenControllerOptional, displayController, pipUiEventLogger,
225                 shellTaskOrganizer, mainExecutor);
226     }
227 
228     @WMSingleton
229     @Provides
providePipParamsChangedForwarder()230     static PipParamsChangedForwarder providePipParamsChangedForwarder() {
231         return new PipParamsChangedForwarder();
232     }
233 
234     @WMSingleton
235     @Provides
providePipAppOpsListener(Context context, PipTaskOrganizer pipTaskOrganizer, @ShellMainThread ShellExecutor mainExecutor)236     static PipAppOpsListener providePipAppOpsListener(Context context,
237             PipTaskOrganizer pipTaskOrganizer,
238             @ShellMainThread ShellExecutor mainExecutor) {
239         return new PipAppOpsListener(context, pipTaskOrganizer::removePip, mainExecutor);
240     }
241 }
242