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