blob: ba9a30fb554f2a4d0216558376f35f9b5efa7fc3 [file] [log] [blame]
Winson73bc1592016-10-18 18:47:43 -07001/*
2 * Copyright (C) 2016 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
17package com.android.systemui.pip.phone;
18
Arthur Hungd52d1192019-08-30 16:06:59 +080019import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
20import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
21
Hongwei Wang221fe3d2020-03-26 13:13:04 -070022import static com.android.systemui.pip.PipAnimationController.TRANSITION_DIRECTION_TO_FULLSCREEN;
23
Hongwei Wang3c981f62020-04-07 16:16:26 -070024import android.annotation.Nullable;
Sudheer Shankadc589ac2016-11-10 15:30:17 -080025import android.app.ActivityManager;
Wale Ogunwale65ebd952018-04-25 15:41:44 -070026import android.app.ActivityTaskManager;
Winson73bc1592016-10-18 18:47:43 -070027import android.app.IActivityManager;
Wale Ogunwale65ebd952018-04-25 15:41:44 -070028import android.app.IActivityTaskManager;
Winson Chung3535df22017-01-17 18:43:39 -080029import android.content.ComponentName;
Winson73bc1592016-10-18 18:47:43 -070030import android.content.Context;
Winson Chunga29eb982016-12-14 12:01:27 -080031import android.content.pm.ParceledListSlice;
Winson Chung0c5a5922017-05-22 17:41:06 -070032import android.content.res.Configuration;
Winson Chung2a82fe52017-02-02 14:43:34 -080033import android.graphics.Rect;
Winson Chunga29eb982016-12-14 12:01:27 -080034import android.os.Handler;
35import android.os.RemoteException;
36import android.util.Log;
Winson Chung85d3c8a2017-09-15 15:41:00 -070037import android.util.Pair;
Hongwei Wang43a752b2019-09-17 20:20:30 +000038import android.view.DisplayInfo;
Winson Chunga29eb982016-12-14 12:01:27 -080039import android.view.IPinnedStackController;
Wale Ogunwale57946582020-03-21 14:29:07 -070040import android.window.WindowContainerTransaction;
Gus Prevasab336792018-11-14 13:52:20 -050041
Winson Chung67f5c8b2018-09-24 12:09:19 -070042import com.android.systemui.Dependency;
43import com.android.systemui.UiOffloadThread;
Fabian Kozynski5ca7a512019-10-16 19:56:11 +000044import com.android.systemui.broadcast.BroadcastDispatcher;
Winson Chung29a78652017-02-09 18:35:26 -080045import com.android.systemui.pip.BasePipManager;
Hongwei Wang43a752b2019-09-17 20:20:30 +000046import com.android.systemui.pip.PipBoundsHandler;
jorgegil@google.com5bdec5f2020-02-28 13:14:39 -080047import com.android.systemui.pip.PipSnapAlgorithm;
Hongwei Wangec3cb3c2020-03-09 10:43:21 -070048import com.android.systemui.pip.PipSurfaceTransactionHelper;
Hongwei Wang85cf41f2020-01-15 15:14:47 -080049import com.android.systemui.pip.PipTaskOrganizer;
50import com.android.systemui.shared.recents.IPinnedStackAnimationListener;
Winson Chungaa357452017-10-31 11:35:30 -070051import com.android.systemui.shared.system.ActivityManagerWrapper;
Winson Chungcbb15a92018-01-25 17:46:16 +000052import com.android.systemui.shared.system.InputConsumerController;
Hongwei Wang43a752b2019-09-17 20:20:30 +000053import com.android.systemui.shared.system.PinnedStackListenerForwarder.PinnedStackListener;
Winson Chung67f5c8b2018-09-24 12:09:19 -070054import com.android.systemui.shared.system.TaskStackChangeListener;
55import com.android.systemui.shared.system.WindowManagerWrapper;
Beverly660d0a72020-02-26 12:32:42 -050056import com.android.systemui.util.DeviceConfigProxy;
Joshua Tsujic81ff3d2020-02-13 14:48:40 -050057import com.android.systemui.util.FloatingContentCoordinator;
Winson Chung95c9fca2020-01-22 09:48:40 -080058import com.android.systemui.wm.DisplayChangeController;
59import com.android.systemui.wm.DisplayController;
Gus Prevasab336792018-11-14 13:52:20 -050060
Winson Chung29a78652017-02-09 18:35:26 -080061import java.io.PrintWriter;
62
Dave Mankofff5019142019-12-20 16:22:57 -050063import javax.inject.Inject;
64import javax.inject.Singleton;
65
Winson73bc1592016-10-18 18:47:43 -070066/**
67 * Manages the picture-in-picture (PIP) UI and states for Phones.
68 */
Dave Mankofff5019142019-12-20 16:22:57 -050069@Singleton
Hongwei Wang85cf41f2020-01-15 15:14:47 -080070public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitionCallback {
Winson73bc1592016-10-18 18:47:43 -070071 private static final String TAG = "PipManager";
72
Winson73bc1592016-10-18 18:47:43 -070073 private Context mContext;
74 private IActivityManager mActivityManager;
Winson Chunga29eb982016-12-14 12:01:27 -080075 private Handler mHandler = new Handler();
76
Hongwei Wang43a752b2019-09-17 20:20:30 +000077 private final DisplayInfo mTmpDisplayInfo = new DisplayInfo();
78 private final Rect mTmpInsetBounds = new Rect();
79 private final Rect mTmpNormalBounds = new Rect();
jorgegil@google.com62f735e2019-10-30 14:37:19 -070080 private final Rect mReentryBounds = new Rect();
Winson73bc1592016-10-18 18:47:43 -070081
Hongwei Wang43a752b2019-09-17 20:20:30 +000082 private PipBoundsHandler mPipBoundsHandler;
Winson Chungd2d90972017-02-28 11:40:41 -080083 private InputConsumerController mInputConsumerController;
Winson Chung15504af2016-11-02 18:11:36 -070084 private PipMenuActivityController mMenuController;
Winson Chung97a60d92017-01-18 16:01:53 -080085 private PipMediaController mMediaController;
Winson73bc1592016-10-18 18:47:43 -070086 private PipTouchHandler mTouchHandler;
Winson Chung95bccdc2018-01-03 11:45:47 -080087 private PipAppOpsListener mAppOpsListener;
Hongwei Wang85cf41f2020-01-15 15:14:47 -080088 private IPinnedStackAnimationListener mPinnedStackAnimationRecentsListener;
Winson73bc1592016-10-18 18:47:43 -070089
Ben Lin11e808a2020-03-17 17:57:17 -070090 protected PipTaskOrganizer mPipTaskOrganizer;
91
Winson Chunga29eb982016-12-14 12:01:27 -080092 /**
Hongwei Wangebf18082019-09-26 14:25:11 -070093 * Handler for display rotation changes.
94 */
Winson Chung95c9fca2020-01-22 09:48:40 -080095 private final DisplayChangeController.OnDisplayChangingListener mRotationController = (
Hongwei Wangebf18082019-09-26 14:25:11 -070096 int displayId, int fromRotation, int toRotation, WindowContainerTransaction t) -> {
97 final boolean changed = mPipBoundsHandler.onDisplayRotationChanged(mTmpNormalBounds,
98 displayId, fromRotation, toRotation, t);
99 if (changed) {
Hongwei Wange0412d12020-04-13 18:27:25 -0700100 updateMovementBounds(mTmpNormalBounds, true /* fromRotation */,
101 false /* fromImeAdjustment */, false /* fromShelfAdjustment */);
Hongwei Wangebf18082019-09-26 14:25:11 -0700102 }
103 };
104
105 /**
Winson Chung929d4f72017-01-13 10:21:33 -0800106 * Handler for system task stack changes.
107 */
Hongwei Wangebf18082019-09-26 14:25:11 -0700108 private final TaskStackChangeListener mTaskStackListener = new TaskStackChangeListener() {
Winson Chung929d4f72017-01-13 10:21:33 -0800109 @Override
Wale Ogunwale89be5762017-10-04 13:27:49 -0700110 public void onActivityPinned(String packageName, int userId, int taskId, int stackId) {
Winson Chung929d4f72017-01-13 10:21:33 -0800111 mTouchHandler.onActivityPinned();
Winson Chung97a60d92017-01-18 16:01:53 -0800112 mMediaController.onActivityPinned();
Winson Chungd2d90972017-02-28 11:40:41 -0800113 mMenuController.onActivityPinned();
Winson Chung95bccdc2018-01-03 11:45:47 -0800114 mAppOpsListener.onActivityPinned(packageName);
Winson Chungac52f282017-03-30 14:44:52 -0700115
Dave Mankoffc7cf9fc2019-12-19 15:43:20 -0500116 Dependency.get(UiOffloadThread.class).execute(() -> {
Winson Chung67f5c8b2018-09-24 12:09:19 -0700117 WindowManagerWrapper.getInstance().setPipVisibility(true);
118 });
Winson Chungc81c0ce2017-03-17 12:27:30 -0700119 }
120
121 @Override
122 public void onActivityUnpinned() {
Winson Chungbe00a832020-03-10 11:08:35 -0700123 final Pair<ComponentName, Integer> topPipActivityInfo = PipUtils.getTopPipActivity(
Winson Chung85d3c8a2017-09-15 15:41:00 -0700124 mContext, mActivityManager);
125 final ComponentName topActivity = topPipActivityInfo.first;
Winson Chung85d3c8a2017-09-15 15:41:00 -0700126 mMenuController.onActivityUnpinned();
127 mTouchHandler.onActivityUnpinned(topActivity);
Winson Chung95bccdc2018-01-03 11:45:47 -0800128 mAppOpsListener.onActivityUnpinned();
Winson Chungac52f282017-03-30 14:44:52 -0700129
Dave Mankoffc7cf9fc2019-12-19 15:43:20 -0500130 Dependency.get(UiOffloadThread.class).execute(() -> {
Winson Chung67f5c8b2018-09-24 12:09:19 -0700131 WindowManagerWrapper.getInstance().setPipVisibility(topActivity != null);
132 });
Winson Chung929d4f72017-01-13 10:21:33 -0800133 }
134
135 @Override
Winson Chunge789ff62020-02-24 14:40:23 -0800136 public void onActivityRestartAttempt(ActivityManager.RunningTaskInfo task,
137 boolean homeTaskVisible, boolean clearedTask) {
138 if (task.configuration.windowConfiguration.getWindowingMode()
139 != WINDOWING_MODE_PINNED) {
140 return;
141 }
Winson Chunge6385a22017-05-02 18:15:16 -0700142 mTouchHandler.getMotionHelper().expandPip(clearedTask /* skipAnimation */);
Winson Chung929d4f72017-01-13 10:21:33 -0800143 }
144 };
145
146 /**
Winson Chunga29eb982016-12-14 12:01:27 -0800147 * Handler for messages from the PIP controller.
148 */
Hongwei Wang43a752b2019-09-17 20:20:30 +0000149 private class PipManagerPinnedStackListener extends PinnedStackListener {
Winson Chunga29eb982016-12-14 12:01:27 -0800150 @Override
151 public void onListenerRegistered(IPinnedStackController controller) {
Hongwei Wang85cf41f2020-01-15 15:14:47 -0800152 mHandler.post(() -> mTouchHandler.setPinnedStackController(controller));
Winson Chunga29eb982016-12-14 12:01:27 -0800153 }
154
155 @Override
Winson Chung2a82fe52017-02-02 14:43:34 -0800156 public void onImeVisibilityChanged(boolean imeVisible, int imeHeight) {
Winson Chunga29eb982016-12-14 12:01:27 -0800157 mHandler.post(() -> {
Hongwei Wang43a752b2019-09-17 20:20:30 +0000158 mPipBoundsHandler.onImeVisibilityChanged(imeVisible, imeHeight);
Winson Chung2a82fe52017-02-02 14:43:34 -0800159 mTouchHandler.onImeVisibilityChanged(imeVisible, imeHeight);
Winson Chunga29eb982016-12-14 12:01:27 -0800160 });
161 }
162
163 @Override
Hongwei Wang3c981f62020-04-07 16:16:26 -0700164 public void onMovementBoundsChanged(boolean fromImeAdjustment) {
165 mHandler.post(() -> updateMovementBounds(null /* toBounds */,
Hongwei Wange0412d12020-04-13 18:27:25 -0700166 false /* fromRotation */, fromImeAdjustment, false /* fromShelfAdjustment */));
Winson Chung2a82fe52017-02-02 14:43:34 -0800167 }
168
169 @Override
170 public void onActionsChanged(ParceledListSlice actions) {
Hongwei Wang43a752b2019-09-17 20:20:30 +0000171 mHandler.post(() -> mMenuController.setAppActions(actions));
172 }
173
174 @Override
Hongwei Wang221fe3d2020-03-26 13:13:04 -0700175 public void onActivityHidden(ComponentName componentName) {
jorgegil@google.com62f735e2019-10-30 14:37:19 -0700176 mHandler.post(() -> mPipBoundsHandler.onResetReentryBounds(componentName));
Hongwei Wang43a752b2019-09-17 20:20:30 +0000177 }
178
179 @Override
180 public void onDisplayInfoChanged(DisplayInfo displayInfo) {
Hongwei Wang89f18ff2020-03-10 10:24:35 -0700181 mHandler.post(() -> mPipBoundsHandler.onDisplayInfoChanged(displayInfo));
Hongwei Wang43a752b2019-09-17 20:20:30 +0000182 }
183
184 @Override
185 public void onConfigurationChanged() {
186 mHandler.post(() -> mPipBoundsHandler.onConfigurationChanged());
187 }
188
189 @Override
190 public void onAspectRatioChanged(float aspectRatio) {
191 mHandler.post(() -> mPipBoundsHandler.onAspectRatioChanged(aspectRatio));
192 }
Winson Chunga29eb982016-12-14 12:01:27 -0800193 }
194
Dave Mankofff5019142019-12-20 16:22:57 -0500195 @Inject
196 public PipManager(Context context, BroadcastDispatcher broadcastDispatcher,
Joshua Tsujic81ff3d2020-02-13 14:48:40 -0500197 DisplayController displayController,
Beverly660d0a72020-02-26 12:32:42 -0500198 FloatingContentCoordinator floatingContentCoordinator,
jorgegil@google.com5bdec5f2020-02-28 13:14:39 -0800199 DeviceConfigProxy deviceConfig,
200 PipBoundsHandler pipBoundsHandler,
Hongwei Wangec3cb3c2020-03-09 10:43:21 -0700201 PipSnapAlgorithm pipSnapAlgorithm,
202 PipSurfaceTransactionHelper surfaceTransactionHelper) {
Winson73bc1592016-10-18 18:47:43 -0700203 mContext = context;
Sudheer Shankadc589ac2016-11-10 15:30:17 -0800204 mActivityManager = ActivityManager.getService();
Winson73bc1592016-10-18 18:47:43 -0700205
Winson Chunga29eb982016-12-14 12:01:27 -0800206 try {
Hongwei Wangea2ae852020-02-27 13:47:52 -0800207 WindowManagerWrapper.getInstance().addPinnedStackListener(
208 new PipManagerPinnedStackListener());
Winson Chunga29eb982016-12-14 12:01:27 -0800209 } catch (RemoteException e) {
210 Log.e(TAG, "Failed to register pinned stack listener", e);
211 }
Winson Chung2cf6ad82017-11-09 17:36:59 -0800212 ActivityManagerWrapper.getInstance().registerTaskStackListener(mTaskStackListener);
Winson Chunga29eb982016-12-14 12:01:27 -0800213
Hongwei Wang85cf41f2020-01-15 15:14:47 -0800214 final IActivityTaskManager activityTaskManager = ActivityTaskManager.getService();
jorgegil@google.com5bdec5f2020-02-28 13:14:39 -0800215 mPipBoundsHandler = pipBoundsHandler;
Hongwei Wangec3cb3c2020-03-09 10:43:21 -0700216 mPipTaskOrganizer = new PipTaskOrganizer(context, pipBoundsHandler,
217 surfaceTransactionHelper);
Hongwei Wang85cf41f2020-01-15 15:14:47 -0800218 mPipTaskOrganizer.registerPipTransitionCallback(this);
Winson Chungcbb15a92018-01-25 17:46:16 +0000219 mInputConsumerController = InputConsumerController.getPipInputConsumer();
Fabian Kozynski5ca7a512019-10-16 19:56:11 +0000220 mMediaController = new PipMediaController(context, mActivityManager, broadcastDispatcher);
Hongwei Wang85cf41f2020-01-15 15:14:47 -0800221 mMenuController = new PipMenuActivityController(context, mMediaController,
Winson Chungd2d90972017-02-28 11:40:41 -0800222 mInputConsumerController);
Hongwei Wang85cf41f2020-01-15 15:14:47 -0800223 mTouchHandler = new PipTouchHandler(context, mActivityManager, activityTaskManager,
224 mMenuController, mInputConsumerController, mPipBoundsHandler, mPipTaskOrganizer,
jorgegil@google.com5bdec5f2020-02-28 13:14:39 -0800225 floatingContentCoordinator, deviceConfig, pipSnapAlgorithm);
Winson Chung95bccdc2018-01-03 11:45:47 -0800226 mAppOpsListener = new PipAppOpsListener(context, mActivityManager,
227 mTouchHandler.getMotionHelper());
Winson Chung95c9fca2020-01-22 09:48:40 -0800228 displayController.addDisplayChangingController(mRotationController);
Arthur Hungd52d1192019-08-30 16:06:59 +0800229
Winson Chung77338ab2020-03-09 16:32:34 -0700230 // Ensure that we have the display info in case we get calls to update the bounds before the
231 // listener calls back
232 final DisplayInfo displayInfo = new DisplayInfo();
233 context.getDisplay().getDisplayInfo(displayInfo);
234 mPipBoundsHandler.onDisplayInfoChanged(displayInfo);
235
Arthur Hungd52d1192019-08-30 16:06:59 +0800236 try {
Wale Ogunwaleadf116e2020-03-27 16:36:01 -0700237 mPipTaskOrganizer.registerOrganizer(WINDOWING_MODE_PINNED);
Hongwei Wang85cf41f2020-01-15 15:14:47 -0800238 ActivityManager.StackInfo stackInfo = activityTaskManager.getStackInfo(
Arthur Hungd52d1192019-08-30 16:06:59 +0800239 WINDOWING_MODE_PINNED, ACTIVITY_TYPE_UNDEFINED);
240 if (stackInfo != null) {
Hongwei Wang85cf41f2020-01-15 15:14:47 -0800241 // If SystemUI restart, and it already existed a pinned stack,
242 // register the pip input consumer to ensure touch can send to it.
Arthur Hungd52d1192019-08-30 16:06:59 +0800243 mInputConsumerController.registerInputConsumer();
244 }
Hongwei Wangc90eb8e2020-03-27 12:45:13 -0700245 } catch (RemoteException | UnsupportedOperationException e) {
Arthur Hungd52d1192019-08-30 16:06:59 +0800246 e.printStackTrace();
247 }
Winson73bc1592016-10-18 18:47:43 -0700248 }
249
250 /**
251 * Updates the PIP per configuration changed.
252 */
Winson Chung0c5a5922017-05-22 17:41:06 -0700253 public void onConfigurationChanged(Configuration newConfig) {
Winson Chung303c6b72016-10-24 17:12:49 -0700254 mTouchHandler.onConfigurationChanged();
255 }
Winson73bc1592016-10-18 18:47:43 -0700256
257 /**
Winson Chungb5026902017-05-03 12:45:13 -0700258 * Expands the PIP.
259 */
Winson Chung2dbcf092018-10-24 13:00:41 -0700260 @Override
261 public void expandPip() {
Winson Chungb5026902017-05-03 12:45:13 -0700262 mTouchHandler.getMotionHelper().expandPip(false /* skipAnimation */);
263 }
264
265 /**
Winson Chung2dbcf092018-10-24 13:00:41 -0700266 * Hides the PIP menu.
267 */
268 @Override
269 public void hidePipMenu(Runnable onStartCallback, Runnable onEndCallback) {
270 mMenuController.hideMenu(onStartCallback, onEndCallback);
271 }
272
273 /**
Winson Chungac52f282017-03-30 14:44:52 -0700274 * Sent from KEYCODE_WINDOW handler in PhoneWindowManager, to request the menu to be shown.
275 */
276 public void showPictureInPictureMenu() {
277 mTouchHandler.showPictureInPictureMenu();
278 }
279
280 /**
Ben Lin1a80f122020-01-27 14:09:52 -0800281 * Sets a customized touch gesture that replaces the default one.
282 */
283 public void setTouchGesture(PipTouchGesture gesture) {
284 mTouchHandler.setTouchGesture(gesture);
285 }
286
287 /**
Hongwei Wang9b751802019-09-11 12:13:21 -0700288 * Sets both shelf visibility and its height.
289 */
290 @Override
291 public void setShelfHeight(boolean visible, int height) {
292 mHandler.post(() -> {
293 final boolean changed = mPipBoundsHandler.setShelfHeight(visible, height);
294 if (changed) {
295 mTouchHandler.onShelfVisibilityChanged(visible, height);
296 updateMovementBounds(mPipBoundsHandler.getLastDestinationBounds(),
Hongwei Wange0412d12020-04-13 18:27:25 -0700297 false /* fromRotation */, false /* fromImeAdjustment */,
298 true /* fromShelfAdjustment */);
Hongwei Wang9b751802019-09-11 12:13:21 -0700299 }
300 });
301 }
302
Hongwei Wang85cf41f2020-01-15 15:14:47 -0800303 @Override
304 public void setPinnedStackAnimationType(int animationType) {
305 mHandler.post(() -> mPipTaskOrganizer.setOneShotAnimationType(animationType));
306 }
307
308 @Override
309 public void setPinnedStackAnimationListener(IPinnedStackAnimationListener listener) {
310 mHandler.post(() -> mPinnedStackAnimationRecentsListener = listener);
311 }
312
313 @Override
Hongwei Wang221fe3d2020-03-26 13:13:04 -0700314 public void onPipTransitionStarted(ComponentName activity, int direction) {
315 if (direction == TRANSITION_DIRECTION_TO_FULLSCREEN) {
316 // On phones, the expansion animation that happens on pip tap before restoring
317 // to fullscreen makes it so that the bounds received here are the expanded
318 // bounds. We want to restore to the unexpanded bounds when re-entering pip,
319 // so we save the bounds before expansion (normal) instead of the current
320 // bounds.
321 mReentryBounds.set(mTouchHandler.getNormalBounds());
322 // Apply the snap fraction of the current bounds to the normal bounds.
323 final Rect bounds = mPipTaskOrganizer.getLastReportedBounds();
324 float snapFraction = mPipBoundsHandler.getSnapFraction(bounds);
325 mPipBoundsHandler.applySnapFraction(mReentryBounds, snapFraction);
326 // Save reentry bounds (normal non-expand bounds with current position applied).
327 mPipBoundsHandler.onSaveReentryBounds(activity, mReentryBounds);
328 }
Hongwei Wang85cf41f2020-01-15 15:14:47 -0800329 // Disable touches while the animation is running
330 mTouchHandler.setTouchEnabled(false);
331 if (mPinnedStackAnimationRecentsListener != null) {
332 try {
333 mPinnedStackAnimationRecentsListener.onPinnedStackAnimationStarted();
334 } catch (RemoteException e) {
335 Log.e(TAG, "Failed to callback recents", e);
336 }
337 }
338 }
339
340 @Override
Hongwei Wang221fe3d2020-03-26 13:13:04 -0700341 public void onPipTransitionFinished(ComponentName activity, int direction) {
Hongwei Wang081ecb32020-04-13 16:49:03 -0700342 onPipTransitionFinishedOrCanceled(direction);
Hongwei Wang85cf41f2020-01-15 15:14:47 -0800343 }
344
345 @Override
Hongwei Wang221fe3d2020-03-26 13:13:04 -0700346 public void onPipTransitionCanceled(ComponentName activity, int direction) {
Hongwei Wang081ecb32020-04-13 16:49:03 -0700347 onPipTransitionFinishedOrCanceled(direction);
Hongwei Wang85cf41f2020-01-15 15:14:47 -0800348 }
349
Hongwei Wang081ecb32020-04-13 16:49:03 -0700350 private void onPipTransitionFinishedOrCanceled(int direction) {
Hongwei Wang85cf41f2020-01-15 15:14:47 -0800351 // Re-enable touches after the animation completes
352 mTouchHandler.setTouchEnabled(true);
Hongwei Wang081ecb32020-04-13 16:49:03 -0700353 mTouchHandler.onPinnedStackAnimationEnded(direction);
Hongwei Wang85cf41f2020-01-15 15:14:47 -0800354 mMenuController.onPinnedStackAnimationEnded();
355 }
356
Hongwei Wange0412d12020-04-13 18:27:25 -0700357 private void updateMovementBounds(@Nullable Rect toBounds, boolean fromRotation,
Hongwei Wang3c981f62020-04-07 16:16:26 -0700358 boolean fromImeAdjustment, boolean fromShelfAdjustment) {
Hongwei Wangbede2c12020-02-26 12:11:53 -0800359 // Populate inset / normal bounds and DisplayInfo from mPipBoundsHandler before
Hongwei Wang3c981f62020-04-07 16:16:26 -0700360 // passing to mTouchHandler/mPipTaskOrganizer
361 final Rect outBounds = new Rect(toBounds);
Hongwei Wang9b751802019-09-11 12:13:21 -0700362 mPipBoundsHandler.onMovementBoundsChanged(mTmpInsetBounds, mTmpNormalBounds,
Hongwei Wang3c981f62020-04-07 16:16:26 -0700363 outBounds, mTmpDisplayInfo);
364 // mTouchHandler would rely on the bounds populated from mPipTaskOrganizer
Hongwei Wange0412d12020-04-13 18:27:25 -0700365 mPipTaskOrganizer.onMovementBoundsChanged(outBounds, fromRotation,
Hongwei Wang3c981f62020-04-07 16:16:26 -0700366 fromImeAdjustment, fromShelfAdjustment);
Hongwei Wang9b751802019-09-11 12:13:21 -0700367 mTouchHandler.onMovementBoundsChanged(mTmpInsetBounds, mTmpNormalBounds,
Hongwei Wang3c981f62020-04-07 16:16:26 -0700368 outBounds, fromImeAdjustment, fromShelfAdjustment,
Hongwei Wang9b751802019-09-11 12:13:21 -0700369 mTmpDisplayInfo.rotation);
370 }
371
Winson Chung29a78652017-02-09 18:35:26 -0800372 public void dump(PrintWriter pw) {
373 final String innerPrefix = " ";
374 pw.println(TAG);
Winson Chungd2d90972017-02-28 11:40:41 -0800375 mInputConsumerController.dump(pw, innerPrefix);
Winson Chung29a78652017-02-09 18:35:26 -0800376 mMenuController.dump(pw, innerPrefix);
377 mTouchHandler.dump(pw, innerPrefix);
Hongwei Wang43a752b2019-09-17 20:20:30 +0000378 mPipBoundsHandler.dump(pw, innerPrefix);
Winson Chung29a78652017-02-09 18:35:26 -0800379 }
Winson73bc1592016-10-18 18:47:43 -0700380}