Merge "Fix flicker at the end of content PiP animation" into tm-qpr-dev
This commit is contained in:
@@ -111,9 +111,6 @@ public abstract class PipContentOverlay {
|
|||||||
private final TaskSnapshot mSnapshot;
|
private final TaskSnapshot mSnapshot;
|
||||||
private final Rect mSourceRectHint;
|
private final Rect mSourceRectHint;
|
||||||
|
|
||||||
private float mTaskSnapshotScaleX;
|
|
||||||
private float mTaskSnapshotScaleY;
|
|
||||||
|
|
||||||
public PipSnapshotOverlay(TaskSnapshot snapshot, Rect sourceRectHint) {
|
public PipSnapshotOverlay(TaskSnapshot snapshot, Rect sourceRectHint) {
|
||||||
mSnapshot = snapshot;
|
mSnapshot = snapshot;
|
||||||
mSourceRectHint = new Rect(sourceRectHint);
|
mSourceRectHint = new Rect(sourceRectHint);
|
||||||
@@ -125,16 +122,16 @@ public abstract class PipContentOverlay {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void attach(SurfaceControl.Transaction tx, SurfaceControl parentLeash) {
|
public void attach(SurfaceControl.Transaction tx, SurfaceControl parentLeash) {
|
||||||
mTaskSnapshotScaleX = (float) mSnapshot.getTaskSize().x
|
final float taskSnapshotScaleX = (float) mSnapshot.getTaskSize().x
|
||||||
/ mSnapshot.getHardwareBuffer().getWidth();
|
/ mSnapshot.getHardwareBuffer().getWidth();
|
||||||
mTaskSnapshotScaleY = (float) mSnapshot.getTaskSize().y
|
final float taskSnapshotScaleY = (float) mSnapshot.getTaskSize().y
|
||||||
/ mSnapshot.getHardwareBuffer().getHeight();
|
/ mSnapshot.getHardwareBuffer().getHeight();
|
||||||
tx.show(mLeash);
|
tx.show(mLeash);
|
||||||
tx.setLayer(mLeash, Integer.MAX_VALUE);
|
tx.setLayer(mLeash, Integer.MAX_VALUE);
|
||||||
tx.setBuffer(mLeash, mSnapshot.getHardwareBuffer());
|
tx.setBuffer(mLeash, mSnapshot.getHardwareBuffer());
|
||||||
// Relocate the content to parentLeash's coordinates.
|
// Relocate the content to parentLeash's coordinates.
|
||||||
tx.setPosition(mLeash, -mSourceRectHint.left, -mSourceRectHint.top);
|
tx.setPosition(mLeash, -mSourceRectHint.left, -mSourceRectHint.top);
|
||||||
tx.setScale(mLeash, mTaskSnapshotScaleX, mTaskSnapshotScaleY);
|
tx.setScale(mLeash, taskSnapshotScaleX, taskSnapshotScaleY);
|
||||||
tx.reparent(mLeash, parentLeash);
|
tx.reparent(mLeash, parentLeash);
|
||||||
tx.apply();
|
tx.apply();
|
||||||
}
|
}
|
||||||
@@ -146,20 +143,6 @@ public abstract class PipContentOverlay {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAnimationEnd(SurfaceControl.Transaction atomicTx, Rect destinationBounds) {
|
public void onAnimationEnd(SurfaceControl.Transaction atomicTx, Rect destinationBounds) {
|
||||||
// Work around to make sure the snapshot overlay is aligned with PiP window before
|
|
||||||
// the atomicTx is committed along with the final WindowContainerTransaction.
|
|
||||||
final SurfaceControl.Transaction nonAtomicTx = new SurfaceControl.Transaction();
|
|
||||||
final float scaleX = (float) destinationBounds.width()
|
|
||||||
/ mSourceRectHint.width();
|
|
||||||
final float scaleY = (float) destinationBounds.height()
|
|
||||||
/ mSourceRectHint.height();
|
|
||||||
final float scale = Math.max(
|
|
||||||
scaleX * mTaskSnapshotScaleX, scaleY * mTaskSnapshotScaleY);
|
|
||||||
nonAtomicTx.setScale(mLeash, scale, scale);
|
|
||||||
nonAtomicTx.setPosition(mLeash,
|
|
||||||
-scale * mSourceRectHint.left / mTaskSnapshotScaleX,
|
|
||||||
-scale * mSourceRectHint.top / mTaskSnapshotScaleY);
|
|
||||||
nonAtomicTx.apply();
|
|
||||||
atomicTx.remove(mLeash);
|
atomicTx.remove(mLeash);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user