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:
Perry Wu
2023-06-30 18:44:17 +00:00
committed by Automerger Merge Worker
2 changed files with 29 additions and 4 deletions

View File

@@ -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;

View File

@@ -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);