• 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.wmshell;
18 
19 import android.content.Context;
20 import android.os.Handler;
21 
22 import com.android.systemui.dagger.WMSingleton;
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.legacysplitscreen.LegacySplitScreenController;
32 import com.android.wm.shell.pip.Pip;
33 import com.android.wm.shell.pip.PipAnimationController;
34 import com.android.wm.shell.pip.PipBoundsAlgorithm;
35 import com.android.wm.shell.pip.PipBoundsState;
36 import com.android.wm.shell.pip.PipMediaController;
37 import com.android.wm.shell.pip.PipSnapAlgorithm;
38 import com.android.wm.shell.pip.PipSurfaceTransactionHelper;
39 import com.android.wm.shell.pip.PipTaskOrganizer;
40 import com.android.wm.shell.pip.PipTransitionController;
41 import com.android.wm.shell.pip.PipUiEventLogger;
42 import com.android.wm.shell.pip.tv.TvPipController;
43 import com.android.wm.shell.pip.tv.TvPipMenuController;
44 import com.android.wm.shell.pip.tv.TvPipNotificationController;
45 import com.android.wm.shell.pip.tv.TvPipTransition;
46 import com.android.wm.shell.transition.Transitions;
47 
48 import java.util.Optional;
49 
50 import dagger.Module;
51 import dagger.Provides;
52 
53 /**
54  * Provides TV specific dependencies for Pip.
55  */
56 @Module(includes = {WMShellBaseModule.class})
57 public abstract class TvPipModule {
58     @WMSingleton
59     @Provides
providePip( Context context, PipBoundsState pipBoundsState, PipBoundsAlgorithm pipBoundsAlgorithm, PipTaskOrganizer pipTaskOrganizer, TvPipMenuController tvPipMenuController, PipMediaController pipMediaController, PipTransitionController pipTransitionController, TvPipNotificationController tvPipNotificationController, TaskStackListenerImpl taskStackListener, WindowManagerShellWrapper windowManagerShellWrapper, @ShellMainThread ShellExecutor mainExecutor)60     static Optional<Pip> providePip(
61             Context context,
62             PipBoundsState pipBoundsState,
63             PipBoundsAlgorithm pipBoundsAlgorithm,
64             PipTaskOrganizer pipTaskOrganizer,
65             TvPipMenuController tvPipMenuController,
66             PipMediaController pipMediaController,
67             PipTransitionController pipTransitionController,
68             TvPipNotificationController tvPipNotificationController,
69             TaskStackListenerImpl taskStackListener,
70             WindowManagerShellWrapper windowManagerShellWrapper,
71             @ShellMainThread ShellExecutor mainExecutor) {
72         return Optional.of(
73                 TvPipController.create(
74                         context,
75                         pipBoundsState,
76                         pipBoundsAlgorithm,
77                         pipTaskOrganizer,
78                         pipTransitionController,
79                         tvPipMenuController,
80                         pipMediaController,
81                         tvPipNotificationController,
82                         taskStackListener,
83                         windowManagerShellWrapper,
84                         mainExecutor));
85     }
86 
87     @WMSingleton
88     @Provides
providePipSnapAlgorithm()89     static PipSnapAlgorithm providePipSnapAlgorithm() {
90         return new PipSnapAlgorithm();
91     }
92 
93     @WMSingleton
94     @Provides
providePipBoundsAlgorithm(Context context, PipBoundsState pipBoundsState, PipSnapAlgorithm pipSnapAlgorithm)95     static PipBoundsAlgorithm providePipBoundsAlgorithm(Context context,
96             PipBoundsState pipBoundsState, PipSnapAlgorithm pipSnapAlgorithm) {
97         return new PipBoundsAlgorithm(context, pipBoundsState, pipSnapAlgorithm);
98     }
99 
100     @WMSingleton
101     @Provides
providePipBoundsState(Context context)102     static PipBoundsState providePipBoundsState(Context context) {
103         return new PipBoundsState(context);
104     }
105 
106     // Handler needed for loadDrawableAsync() in PipControlsViewController
107     @WMSingleton
108     @Provides
provideTvPipTransition( Transitions transitions, ShellTaskOrganizer shellTaskOrganizer, PipAnimationController pipAnimationController, PipBoundsAlgorithm pipBoundsAlgorithm, PipBoundsState pipBoundsState, TvPipMenuController pipMenuController)109     static PipTransitionController provideTvPipTransition(
110             Transitions transitions, ShellTaskOrganizer shellTaskOrganizer,
111             PipAnimationController pipAnimationController, PipBoundsAlgorithm pipBoundsAlgorithm,
112             PipBoundsState pipBoundsState, TvPipMenuController pipMenuController) {
113         return new TvPipTransition(pipBoundsState, pipMenuController,
114                 pipBoundsAlgorithm, pipAnimationController, transitions, shellTaskOrganizer);
115     }
116 
117     @WMSingleton
118     @Provides
providesTvPipMenuController( Context context, PipBoundsState pipBoundsState, SystemWindows systemWindows, PipMediaController pipMediaController, @ShellMainThread Handler mainHandler)119     static TvPipMenuController providesTvPipMenuController(
120             Context context,
121             PipBoundsState pipBoundsState,
122             SystemWindows systemWindows,
123             PipMediaController pipMediaController,
124             @ShellMainThread Handler mainHandler) {
125         return new TvPipMenuController(context, pipBoundsState, systemWindows, pipMediaController,
126                 mainHandler);
127     }
128 
129     // Handler needed for registerReceiverForAllUsers()
130     @WMSingleton
131     @Provides
provideTvPipNotificationController(Context context, PipMediaController pipMediaController, @ShellMainThread Handler mainHandler)132     static TvPipNotificationController provideTvPipNotificationController(Context context,
133             PipMediaController pipMediaController,
134             @ShellMainThread Handler mainHandler) {
135         return new TvPipNotificationController(context, pipMediaController, mainHandler);
136     }
137 
138     @WMSingleton
139     @Provides
providePipAnimationController(PipSurfaceTransactionHelper pipSurfaceTransactionHelper)140     static PipAnimationController providePipAnimationController(PipSurfaceTransactionHelper
141             pipSurfaceTransactionHelper) {
142         return new PipAnimationController(pipSurfaceTransactionHelper);
143     }
144 
145     @WMSingleton
146     @Provides
providePipTaskOrganizer(Context context, TvPipMenuController tvPipMenuController, SyncTransactionQueue syncTransactionQueue, PipBoundsState pipBoundsState, PipBoundsAlgorithm pipBoundsAlgorithm, PipAnimationController pipAnimationController, PipTransitionController pipTransitionController, PipSurfaceTransactionHelper pipSurfaceTransactionHelper, Optional<LegacySplitScreenController> splitScreenOptional, DisplayController displayController, PipUiEventLogger pipUiEventLogger, ShellTaskOrganizer shellTaskOrganizer, @ShellMainThread ShellExecutor mainExecutor)147     static PipTaskOrganizer providePipTaskOrganizer(Context context,
148             TvPipMenuController tvPipMenuController,
149             SyncTransactionQueue syncTransactionQueue,
150             PipBoundsState pipBoundsState,
151             PipBoundsAlgorithm pipBoundsAlgorithm,
152             PipAnimationController pipAnimationController,
153             PipTransitionController pipTransitionController,
154             PipSurfaceTransactionHelper pipSurfaceTransactionHelper,
155             Optional<LegacySplitScreenController> splitScreenOptional,
156             DisplayController displayController,
157             PipUiEventLogger pipUiEventLogger, ShellTaskOrganizer shellTaskOrganizer,
158             @ShellMainThread ShellExecutor mainExecutor) {
159         return new PipTaskOrganizer(context,
160                 syncTransactionQueue, pipBoundsState, pipBoundsAlgorithm,
161                 tvPipMenuController, pipAnimationController, pipSurfaceTransactionHelper,
162                 pipTransitionController, splitScreenOptional, displayController, pipUiEventLogger,
163                 shellTaskOrganizer, mainExecutor);
164     }
165 }
166