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,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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user