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