Merge "Fixes bad PIP state when opening Maps from the lock screen" into udc-dev am: 9dd349972c
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23848628 Change-Id: I0a96be256c272e5402e0716306094a21e2c30ceb Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -339,19 +339,36 @@ public class PipTransition extends PipTransitionController {
|
||||
}
|
||||
// This means an expand happened before enter-pip finished and we are now "merging" a
|
||||
// no-op transition that happens to match our exit-pip.
|
||||
// Or that the keyguard is up and preventing the transition from applying, in which case we
|
||||
// want to manually reset pip. (b/283783868)
|
||||
boolean cancelled = false;
|
||||
if (mPipAnimationController.getCurrentAnimator() != null) {
|
||||
mPipAnimationController.getCurrentAnimator().cancel();
|
||||
mPipAnimationController.resetAnimatorState();
|
||||
cancelled = true;
|
||||
}
|
||||
|
||||
// Unset exitTransition AFTER cancel so that finishResize knows we are merging.
|
||||
mExitTransition = null;
|
||||
if (!cancelled || aborted) return;
|
||||
if (!cancelled) return;
|
||||
final ActivityManager.RunningTaskInfo taskInfo = mPipOrganizer.getTaskInfo();
|
||||
if (taskInfo != null) {
|
||||
startExpandAnimation(taskInfo, mPipOrganizer.getSurfaceControl(),
|
||||
mPipBoundsState.getBounds(), mPipBoundsState.getBounds(),
|
||||
new Rect(mExitDestinationBounds), Surface.ROTATION_0, null /* startT */);
|
||||
if (aborted) {
|
||||
// keyguard case - the transition got aborted, so we want to reset state and
|
||||
// windowing mode before reapplying the resize transaction
|
||||
sendOnPipTransitionFinished(TRANSITION_DIRECTION_LEAVE_PIP);
|
||||
mPipOrganizer.onExitPipFinished(taskInfo);
|
||||
|
||||
WindowContainerTransaction wct = new WindowContainerTransaction();
|
||||
mPipOrganizer.applyWindowingModeChangeOnExit(wct, TRANSITION_DIRECTION_LEAVE_PIP);
|
||||
wct.setBounds(taskInfo.token, null);
|
||||
mPipOrganizer.applyFinishBoundsResize(wct, TRANSITION_DIRECTION_LEAVE_PIP, false);
|
||||
} else {
|
||||
// merge case
|
||||
startExpandAnimation(taskInfo, mPipOrganizer.getSurfaceControl(),
|
||||
mPipBoundsState.getBounds(), mPipBoundsState.getBounds(),
|
||||
new Rect(mExitDestinationBounds), Surface.ROTATION_0, null /* startT */);
|
||||
}
|
||||
}
|
||||
mExitDestinationBounds.setEmpty();
|
||||
mCurrentPipTaskToken = null;
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.wm.shell.startingsurface;
|
||||
|
||||
import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
|
||||
import static android.graphics.Color.WHITE;
|
||||
import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER;
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
|
||||
@@ -77,6 +78,13 @@ public class TaskSnapshotWindow {
|
||||
@NonNull Runnable clearWindowHandler) {
|
||||
final ActivityManager.RunningTaskInfo runningTaskInfo = info.taskInfo;
|
||||
final int taskId = runningTaskInfo.taskId;
|
||||
|
||||
// if we're in PIP we don't want to create the snapshot
|
||||
if (runningTaskInfo.getWindowingMode() == WINDOWING_MODE_PINNED) {
|
||||
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW,
|
||||
"did not create taskSnapshot due to being in PIP");
|
||||
return null;
|
||||
}
|
||||
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW,
|
||||
"create taskSnapshot surface for task: %d", taskId);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user