Merge "Pass the float9 values in PictureInPictureSurfaceTransaction" into sc-dev
This commit is contained in:
@@ -24,6 +24,7 @@ import android.os.Parcel;
|
|||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
import android.view.SurfaceControl;
|
import android.view.SurfaceControl;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -37,10 +38,11 @@ public final class PictureInPictureSurfaceTransaction implements Parcelable {
|
|||||||
public final float mPositionX;
|
public final float mPositionX;
|
||||||
public final float mPositionY;
|
public final float mPositionY;
|
||||||
|
|
||||||
public final float mScaleX;
|
public final float[] mFloat9;
|
||||||
public final float mScaleY;
|
|
||||||
|
|
||||||
|
// Though this can be determined by mFloat9, it's easier to set the value directly
|
||||||
public final float mRotation;
|
public final float mRotation;
|
||||||
|
|
||||||
public final float mCornerRadius;
|
public final float mCornerRadius;
|
||||||
|
|
||||||
private final Rect mWindowCrop = new Rect();
|
private final Rect mWindowCrop = new Rect();
|
||||||
@@ -48,21 +50,19 @@ public final class PictureInPictureSurfaceTransaction implements Parcelable {
|
|||||||
public PictureInPictureSurfaceTransaction(Parcel in) {
|
public PictureInPictureSurfaceTransaction(Parcel in) {
|
||||||
mPositionX = in.readFloat();
|
mPositionX = in.readFloat();
|
||||||
mPositionY = in.readFloat();
|
mPositionY = in.readFloat();
|
||||||
mScaleX = in.readFloat();
|
mFloat9 = new float[9];
|
||||||
mScaleY = in.readFloat();
|
in.readFloatArray(mFloat9);
|
||||||
mRotation = in.readFloat();
|
mRotation = in.readFloat();
|
||||||
mCornerRadius = in.readFloat();
|
mCornerRadius = in.readFloat();
|
||||||
mWindowCrop.set(Objects.requireNonNull(in.readTypedObject(Rect.CREATOR)));
|
mWindowCrop.set(Objects.requireNonNull(in.readTypedObject(Rect.CREATOR)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public PictureInPictureSurfaceTransaction(float positionX, float positionY,
|
public PictureInPictureSurfaceTransaction(float positionX, float positionY,
|
||||||
float scaleX, float scaleY,
|
float[] float9, float rotation, float cornerRadius,
|
||||||
float rotation, float cornerRadius,
|
|
||||||
@Nullable Rect windowCrop) {
|
@Nullable Rect windowCrop) {
|
||||||
mPositionX = positionX;
|
mPositionX = positionX;
|
||||||
mPositionY = positionY;
|
mPositionY = positionY;
|
||||||
mScaleX = scaleX;
|
mFloat9 = Arrays.copyOf(float9, 9);
|
||||||
mScaleY = scaleY;
|
|
||||||
mRotation = rotation;
|
mRotation = rotation;
|
||||||
mCornerRadius = cornerRadius;
|
mCornerRadius = cornerRadius;
|
||||||
if (windowCrop != null) {
|
if (windowCrop != null) {
|
||||||
@@ -72,13 +72,14 @@ public final class PictureInPictureSurfaceTransaction implements Parcelable {
|
|||||||
|
|
||||||
public PictureInPictureSurfaceTransaction(PictureInPictureSurfaceTransaction other) {
|
public PictureInPictureSurfaceTransaction(PictureInPictureSurfaceTransaction other) {
|
||||||
this(other.mPositionX, other.mPositionY,
|
this(other.mPositionX, other.mPositionY,
|
||||||
other.mScaleX, other.mScaleY,
|
other.mFloat9, other.mRotation, other.mCornerRadius, other.mWindowCrop);
|
||||||
other.mRotation, other.mCornerRadius,
|
|
||||||
other.mWindowCrop);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Rect getWindowCrop() {
|
/** @return {@link Matrix} from {@link #mFloat9} */
|
||||||
return new Rect(mWindowCrop);
|
public Matrix getMatrix() {
|
||||||
|
final Matrix matrix = new Matrix();
|
||||||
|
matrix.setValues(mFloat9);
|
||||||
|
return matrix;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -88,8 +89,7 @@ public final class PictureInPictureSurfaceTransaction implements Parcelable {
|
|||||||
PictureInPictureSurfaceTransaction that = (PictureInPictureSurfaceTransaction) o;
|
PictureInPictureSurfaceTransaction that = (PictureInPictureSurfaceTransaction) o;
|
||||||
return Objects.equals(mPositionX, that.mPositionX)
|
return Objects.equals(mPositionX, that.mPositionX)
|
||||||
&& Objects.equals(mPositionY, that.mPositionY)
|
&& Objects.equals(mPositionY, that.mPositionY)
|
||||||
&& Objects.equals(mScaleX, that.mScaleX)
|
&& Arrays.equals(mFloat9, that.mFloat9)
|
||||||
&& Objects.equals(mScaleY, that.mScaleY)
|
|
||||||
&& Objects.equals(mRotation, that.mRotation)
|
&& Objects.equals(mRotation, that.mRotation)
|
||||||
&& Objects.equals(mCornerRadius, that.mCornerRadius)
|
&& Objects.equals(mCornerRadius, that.mCornerRadius)
|
||||||
&& Objects.equals(mWindowCrop, that.mWindowCrop);
|
&& Objects.equals(mWindowCrop, that.mWindowCrop);
|
||||||
@@ -97,7 +97,7 @@ public final class PictureInPictureSurfaceTransaction implements Parcelable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return Objects.hash(mPositionX, mPositionY, mScaleX, mScaleY,
|
return Objects.hash(mPositionX, mPositionY, Arrays.hashCode(mFloat9),
|
||||||
mRotation, mCornerRadius, mWindowCrop);
|
mRotation, mCornerRadius, mWindowCrop);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,8 +110,7 @@ public final class PictureInPictureSurfaceTransaction implements Parcelable {
|
|||||||
public void writeToParcel(Parcel out, int flags) {
|
public void writeToParcel(Parcel out, int flags) {
|
||||||
out.writeFloat(mPositionX);
|
out.writeFloat(mPositionX);
|
||||||
out.writeFloat(mPositionY);
|
out.writeFloat(mPositionY);
|
||||||
out.writeFloat(mScaleX);
|
out.writeFloatArray(mFloat9);
|
||||||
out.writeFloat(mScaleY);
|
|
||||||
out.writeFloat(mRotation);
|
out.writeFloat(mRotation);
|
||||||
out.writeFloat(mCornerRadius);
|
out.writeFloat(mCornerRadius);
|
||||||
out.writeTypedObject(mWindowCrop, 0 /* flags */);
|
out.writeTypedObject(mWindowCrop, 0 /* flags */);
|
||||||
@@ -119,11 +118,11 @@ public final class PictureInPictureSurfaceTransaction implements Parcelable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
|
final Matrix matrix = getMatrix();
|
||||||
return "PictureInPictureSurfaceTransaction("
|
return "PictureInPictureSurfaceTransaction("
|
||||||
+ " posX=" + mPositionX
|
+ " posX=" + mPositionX
|
||||||
+ " posY=" + mPositionY
|
+ " posY=" + mPositionY
|
||||||
+ " scaleX=" + mScaleX
|
+ " matrix=" + matrix.toShortString()
|
||||||
+ " scaleY=" + mScaleY
|
|
||||||
+ " rotation=" + mRotation
|
+ " rotation=" + mRotation
|
||||||
+ " cornerRadius=" + mCornerRadius
|
+ " cornerRadius=" + mCornerRadius
|
||||||
+ " crop=" + mWindowCrop
|
+ " crop=" + mWindowCrop
|
||||||
@@ -134,15 +133,11 @@ public final class PictureInPictureSurfaceTransaction implements Parcelable {
|
|||||||
public static void apply(@NonNull PictureInPictureSurfaceTransaction surfaceTransaction,
|
public static void apply(@NonNull PictureInPictureSurfaceTransaction surfaceTransaction,
|
||||||
@NonNull SurfaceControl surfaceControl,
|
@NonNull SurfaceControl surfaceControl,
|
||||||
@NonNull SurfaceControl.Transaction tx) {
|
@NonNull SurfaceControl.Transaction tx) {
|
||||||
final Matrix matrix = new Matrix();
|
final Matrix matrix = surfaceTransaction.getMatrix();
|
||||||
matrix.setScale(surfaceTransaction.mScaleX, surfaceTransaction.mScaleY);
|
|
||||||
if (surfaceTransaction.mRotation != 0) {
|
|
||||||
matrix.postRotate(surfaceTransaction.mRotation);
|
|
||||||
}
|
|
||||||
tx.setMatrix(surfaceControl, matrix, new float[9])
|
tx.setMatrix(surfaceControl, matrix, new float[9])
|
||||||
.setPosition(surfaceControl,
|
.setPosition(surfaceControl,
|
||||||
surfaceTransaction.mPositionX, surfaceTransaction.mPositionY)
|
surfaceTransaction.mPositionX, surfaceTransaction.mPositionY)
|
||||||
.setWindowCrop(surfaceControl, surfaceTransaction.getWindowCrop())
|
.setWindowCrop(surfaceControl, surfaceTransaction.mWindowCrop)
|
||||||
.setCornerRadius(surfaceControl, surfaceTransaction.mCornerRadius);
|
.setCornerRadius(surfaceControl, surfaceTransaction.mCornerRadius);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,9 +16,6 @@
|
|||||||
|
|
||||||
package com.android.systemui.shared.pip;
|
package com.android.systemui.shared.pip;
|
||||||
|
|
||||||
import static android.graphics.Matrix.MSCALE_X;
|
|
||||||
import static android.graphics.Matrix.MSCALE_Y;
|
|
||||||
|
|
||||||
import android.graphics.Matrix;
|
import android.graphics.Matrix;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
import android.graphics.RectF;
|
import android.graphics.RectF;
|
||||||
@@ -52,8 +49,7 @@ public class PipSurfaceTransactionHelper {
|
|||||||
.setCornerRadius(leash, mCornerRadius);
|
.setCornerRadius(leash, mCornerRadius);
|
||||||
return new PictureInPictureSurfaceTransaction(
|
return new PictureInPictureSurfaceTransaction(
|
||||||
mTmpDestinationRectF.left, mTmpDestinationRectF.top,
|
mTmpDestinationRectF.left, mTmpDestinationRectF.top,
|
||||||
mTmpFloat9[MSCALE_X], mTmpFloat9[MSCALE_Y],
|
mTmpFloat9, 0 /* rotation */, mCornerRadius, sourceBounds);
|
||||||
0 /* rotation*/, mCornerRadius, sourceBounds);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public PictureInPictureSurfaceTransaction scale(
|
public PictureInPictureSurfaceTransaction scale(
|
||||||
@@ -68,9 +64,7 @@ public class PipSurfaceTransactionHelper {
|
|||||||
.setPosition(leash, positionX, positionY)
|
.setPosition(leash, positionX, positionY)
|
||||||
.setCornerRadius(leash, mCornerRadius);
|
.setCornerRadius(leash, mCornerRadius);
|
||||||
return new PictureInPictureSurfaceTransaction(
|
return new PictureInPictureSurfaceTransaction(
|
||||||
positionX, positionY,
|
positionX, positionY, mTmpFloat9, degree, mCornerRadius, sourceBounds);
|
||||||
mTmpFloat9[MSCALE_X], mTmpFloat9[MSCALE_Y],
|
|
||||||
degree, mCornerRadius, sourceBounds);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public PictureInPictureSurfaceTransaction scaleAndCrop(
|
public PictureInPictureSurfaceTransaction scaleAndCrop(
|
||||||
@@ -92,7 +86,7 @@ public class PipSurfaceTransactionHelper {
|
|||||||
.setPosition(leash, left, top)
|
.setPosition(leash, left, top)
|
||||||
.setCornerRadius(leash, mCornerRadius);
|
.setCornerRadius(leash, mCornerRadius);
|
||||||
return new PictureInPictureSurfaceTransaction(
|
return new PictureInPictureSurfaceTransaction(
|
||||||
left, top, scale, scale, 0 /* rotation */, mCornerRadius, mTmpDestinationRect);
|
left, top, mTmpFloat9, 0 /* rotation */, mCornerRadius, mTmpDestinationRect);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PictureInPictureSurfaceTransaction scaleAndRotate(
|
public PictureInPictureSurfaceTransaction scaleAndRotate(
|
||||||
@@ -114,7 +108,7 @@ public class PipSurfaceTransactionHelper {
|
|||||||
.setPosition(leash, positionX, positionY)
|
.setPosition(leash, positionX, positionY)
|
||||||
.setCornerRadius(leash, mCornerRadius);
|
.setCornerRadius(leash, mCornerRadius);
|
||||||
return new PictureInPictureSurfaceTransaction(
|
return new PictureInPictureSurfaceTransaction(
|
||||||
positionX, positionY, scale, scale, degree, mCornerRadius, mTmpDestinationRect);
|
positionX, positionY, mTmpFloat9, degree, mCornerRadius, mTmpDestinationRect);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return {@link SurfaceControl.Transaction} instance with vsync-id */
|
/** @return {@link SurfaceControl.Transaction} instance with vsync-id */
|
||||||
|
|||||||
@@ -257,15 +257,16 @@ class PinnedTaskController {
|
|||||||
// be rotated.
|
// be rotated.
|
||||||
float dx = pipTx.mPositionX;
|
float dx = pipTx.mPositionX;
|
||||||
float dy = pipTx.mPositionY;
|
float dy = pipTx.mPositionY;
|
||||||
|
final Matrix matrix = pipTx.getMatrix();
|
||||||
if (pipTx.mRotation == 90) {
|
if (pipTx.mRotation == 90) {
|
||||||
dx = pipTx.mPositionY;
|
dx = pipTx.mPositionY;
|
||||||
dy = areaBounds.right - pipTx.mPositionX;
|
dy = areaBounds.right - pipTx.mPositionX;
|
||||||
|
matrix.postRotate(-90);
|
||||||
} else if (pipTx.mRotation == -90) {
|
} else if (pipTx.mRotation == -90) {
|
||||||
dx = areaBounds.bottom - pipTx.mPositionY;
|
dx = areaBounds.bottom - pipTx.mPositionY;
|
||||||
dy = pipTx.mPositionX;
|
dy = pipTx.mPositionX;
|
||||||
|
matrix.postRotate(90);
|
||||||
}
|
}
|
||||||
final Matrix matrix = new Matrix();
|
|
||||||
matrix.setScale(pipTx.mScaleX, pipTx.mScaleY);
|
|
||||||
matrix.postTranslate(dx, dy);
|
matrix.postTranslate(dx, dy);
|
||||||
t.setMatrix(pinnedTask.getSurfaceControl(), matrix, new float[9]);
|
t.setMatrix(pinnedTask.getSurfaceControl(), matrix, new float[9]);
|
||||||
Slog.i(TAG, "Seamless rotation PiP tx=" + pipTx + " pos=" + dx + "," + dy);
|
Slog.i(TAG, "Seamless rotation PiP tx=" + pipTx + " pos=" + dx + "," + dy);
|
||||||
|
|||||||
Reference in New Issue
Block a user