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