Merge "Remove pip resize flicks" into tm-qpr-dev am: 6ccf5e7044
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/22255151 Change-Id: I333b2830f7f646cbb6fd864f89be146a88f0cf04 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -73,6 +73,7 @@ import android.window.TaskOrganizer;
|
|||||||
import android.window.TaskSnapshot;
|
import android.window.TaskSnapshot;
|
||||||
import android.window.WindowContainerToken;
|
import android.window.WindowContainerToken;
|
||||||
import android.window.WindowContainerTransaction;
|
import android.window.WindowContainerTransaction;
|
||||||
|
import android.window.WindowContainerTransactionCallback;
|
||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.internal.protolog.common.ProtoLog;
|
import com.android.internal.protolog.common.ProtoLog;
|
||||||
@@ -144,6 +145,23 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
|
|||||||
protected final ShellTaskOrganizer mTaskOrganizer;
|
protected final ShellTaskOrganizer mTaskOrganizer;
|
||||||
protected final ShellExecutor mMainExecutor;
|
protected final ShellExecutor mMainExecutor;
|
||||||
|
|
||||||
|
// the runnable to execute after WindowContainerTransactions is applied to finish resizing pip
|
||||||
|
private Runnable mPipFinishResizeWCTRunnable;
|
||||||
|
|
||||||
|
private final WindowContainerTransactionCallback mPipFinishResizeWCTCallback =
|
||||||
|
new WindowContainerTransactionCallback() {
|
||||||
|
@Override
|
||||||
|
public void onTransactionReady(int id, SurfaceControl.Transaction t) {
|
||||||
|
t.apply();
|
||||||
|
|
||||||
|
// execute the runnable if non-null after WCT is applied to finish resizing pip
|
||||||
|
if (mPipFinishResizeWCTRunnable != null) {
|
||||||
|
mPipFinishResizeWCTRunnable.run();
|
||||||
|
mPipFinishResizeWCTRunnable = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// These callbacks are called on the update thread
|
// These callbacks are called on the update thread
|
||||||
private final PipAnimationController.PipAnimationCallback mPipAnimationCallback =
|
private final PipAnimationController.PipAnimationCallback mPipAnimationCallback =
|
||||||
new PipAnimationController.PipAnimationCallback() {
|
new PipAnimationController.PipAnimationCallback() {
|
||||||
@@ -1251,8 +1269,23 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
|
|||||||
/**
|
/**
|
||||||
* Animates resizing of the pinned stack given the duration and start bounds.
|
* Animates resizing of the pinned stack given the duration and start bounds.
|
||||||
* This is used when the starting bounds is not the current PiP bounds.
|
* This is used when the starting bounds is not the current PiP bounds.
|
||||||
|
*
|
||||||
|
* @param pipFinishResizeWCTRunnable callback to run after window updates are complete
|
||||||
*/
|
*/
|
||||||
public void scheduleAnimateResizePip(Rect fromBounds, Rect toBounds, int duration,
|
public void scheduleAnimateResizePip(Rect fromBounds, Rect toBounds, int duration,
|
||||||
|
float startingAngle, Consumer<Rect> updateBoundsCallback,
|
||||||
|
Runnable pipFinishResizeWCTRunnable) {
|
||||||
|
mPipFinishResizeWCTRunnable = pipFinishResizeWCTRunnable;
|
||||||
|
if (mPipFinishResizeWCTRunnable != null) {
|
||||||
|
ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
|
||||||
|
"mPipFinishResizeWCTRunnable is set to be called once window updates");
|
||||||
|
}
|
||||||
|
|
||||||
|
scheduleAnimateResizePip(fromBounds, toBounds, duration, startingAngle,
|
||||||
|
updateBoundsCallback);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void scheduleAnimateResizePip(Rect fromBounds, Rect toBounds, int duration,
|
||||||
float startingAngle, Consumer<Rect> updateBoundsCallback) {
|
float startingAngle, Consumer<Rect> updateBoundsCallback) {
|
||||||
if (mWaitForFixedRotation) {
|
if (mWaitForFixedRotation) {
|
||||||
ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
|
ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
|
||||||
@@ -1557,7 +1590,7 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
|
|||||||
mSplitScreenOptional.ifPresent(splitScreenController ->
|
mSplitScreenOptional.ifPresent(splitScreenController ->
|
||||||
splitScreenController.enterSplitScreen(mTaskInfo.taskId, wasPipTopLeft, wct));
|
splitScreenController.enterSplitScreen(mTaskInfo.taskId, wasPipTopLeft, wct));
|
||||||
} else {
|
} else {
|
||||||
mTaskOrganizer.applyTransaction(wct);
|
mTaskOrganizer.applySyncTransaction(wct, mPipFinishResizeWCTCallback);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -580,8 +580,16 @@ public class PipResizeGestureHandler {
|
|||||||
final float snapFraction = mPipBoundsAlgorithm.getSnapFraction(
|
final float snapFraction = mPipBoundsAlgorithm.getSnapFraction(
|
||||||
mLastResizeBounds, movementBounds);
|
mLastResizeBounds, movementBounds);
|
||||||
mPipBoundsAlgorithm.applySnapFraction(mLastResizeBounds, snapFraction);
|
mPipBoundsAlgorithm.applySnapFraction(mLastResizeBounds, snapFraction);
|
||||||
|
|
||||||
|
// disable the pinch resizing until the final bounds are updated
|
||||||
|
final boolean prevEnablePinchResize = mEnablePinchResize;
|
||||||
|
mEnablePinchResize = false;
|
||||||
|
|
||||||
mPipTaskOrganizer.scheduleAnimateResizePip(startBounds, mLastResizeBounds,
|
mPipTaskOrganizer.scheduleAnimateResizePip(startBounds, mLastResizeBounds,
|
||||||
PINCH_RESIZE_SNAP_DURATION, mAngle, mUpdateResizeBoundsCallback);
|
PINCH_RESIZE_SNAP_DURATION, mAngle, mUpdateResizeBoundsCallback, () -> {
|
||||||
|
// reset the pinch resizing to its default state
|
||||||
|
mEnablePinchResize = prevEnablePinchResize;
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
mPipTaskOrganizer.scheduleFinishResizePip(mLastResizeBounds,
|
mPipTaskOrganizer.scheduleFinishResizePip(mLastResizeBounds,
|
||||||
PipAnimationController.TRANSITION_DIRECTION_USER_RESIZE,
|
PipAnimationController.TRANSITION_DIRECTION_USER_RESIZE,
|
||||||
|
|||||||
@@ -155,7 +155,7 @@ public class PipResizeGestureHandlerTest extends ShellTestCase {
|
|||||||
mPipResizeGestureHandler.onPinchResize(upEvent);
|
mPipResizeGestureHandler.onPinchResize(upEvent);
|
||||||
|
|
||||||
verify(mPipTaskOrganizer, times(1))
|
verify(mPipTaskOrganizer, times(1))
|
||||||
.scheduleAnimateResizePip(any(), any(), anyInt(), anyFloat(), any());
|
.scheduleAnimateResizePip(any(), any(), anyInt(), anyFloat(), any(), any());
|
||||||
|
|
||||||
assertTrue("The new size should be bigger than the original PiP size.",
|
assertTrue("The new size should be bigger than the original PiP size.",
|
||||||
mPipResizeGestureHandler.getLastResizeBounds().width()
|
mPipResizeGestureHandler.getLastResizeBounds().width()
|
||||||
@@ -194,7 +194,7 @@ public class PipResizeGestureHandlerTest extends ShellTestCase {
|
|||||||
mPipResizeGestureHandler.onPinchResize(upEvent);
|
mPipResizeGestureHandler.onPinchResize(upEvent);
|
||||||
|
|
||||||
verify(mPipTaskOrganizer, times(1))
|
verify(mPipTaskOrganizer, times(1))
|
||||||
.scheduleAnimateResizePip(any(), any(), anyInt(), anyFloat(), any());
|
.scheduleAnimateResizePip(any(), any(), anyInt(), anyFloat(), any(), any());
|
||||||
|
|
||||||
assertTrue("The new size should be smaller than the original PiP size.",
|
assertTrue("The new size should be smaller than the original PiP size.",
|
||||||
mPipResizeGestureHandler.getLastResizeBounds().width()
|
mPipResizeGestureHandler.getLastResizeBounds().width()
|
||||||
|
|||||||
Reference in New Issue
Block a user