Merge "Fixes bad PIP state when opening Maps from the lock screen" into udc-dev

This commit is contained in:
Perry Wu
2023-06-30 17:57:33 +00:00
committed by Android (Google) Code Review
2 changed files with 29 additions and 4 deletions

View File

@@ -339,20 +339,37 @@ public class PipTransition extends PipTransitionController {
} }
// This means an expand happened before enter-pip finished and we are now "merging" a // 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. // 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; boolean cancelled = false;
if (mPipAnimationController.getCurrentAnimator() != null) { if (mPipAnimationController.getCurrentAnimator() != null) {
mPipAnimationController.getCurrentAnimator().cancel(); mPipAnimationController.getCurrentAnimator().cancel();
mPipAnimationController.resetAnimatorState();
cancelled = true; cancelled = true;
} }
// Unset exitTransition AFTER cancel so that finishResize knows we are merging. // Unset exitTransition AFTER cancel so that finishResize knows we are merging.
mExitTransition = null; mExitTransition = null;
if (!cancelled || aborted) return; if (!cancelled) return;
final ActivityManager.RunningTaskInfo taskInfo = mPipOrganizer.getTaskInfo(); final ActivityManager.RunningTaskInfo taskInfo = mPipOrganizer.getTaskInfo();
if (taskInfo != null) { if (taskInfo != null) {
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(), startExpandAnimation(taskInfo, mPipOrganizer.getSurfaceControl(),
mPipBoundsState.getBounds(), mPipBoundsState.getBounds(), mPipBoundsState.getBounds(), mPipBoundsState.getBounds(),
new Rect(mExitDestinationBounds), Surface.ROTATION_0, null /* startT */); new Rect(mExitDestinationBounds), Surface.ROTATION_0, null /* startT */);
} }
}
mExitDestinationBounds.setEmpty(); mExitDestinationBounds.setEmpty();
mCurrentPipTaskToken = null; mCurrentPipTaskToken = null;
} }

View File

@@ -16,6 +16,7 @@
package com.android.wm.shell.startingsurface; package com.android.wm.shell.startingsurface;
import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
import static android.graphics.Color.WHITE; import static android.graphics.Color.WHITE;
import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER; import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
@@ -77,6 +78,13 @@ public class TaskSnapshotWindow {
@NonNull Runnable clearWindowHandler) { @NonNull Runnable clearWindowHandler) {
final ActivityManager.RunningTaskInfo runningTaskInfo = info.taskInfo; final ActivityManager.RunningTaskInfo runningTaskInfo = info.taskInfo;
final int taskId = runningTaskInfo.taskId; 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, ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW,
"create taskSnapshot surface for task: %d", taskId); "create taskSnapshot surface for task: %d", taskId);