diff --git a/services/core/java/com/android/server/display/ColorFade.java b/services/core/java/com/android/server/display/ColorFade.java index 372bc8ad94a17..a4bd6a699ceb9 100644 --- a/services/core/java/com/android/server/display/ColorFade.java +++ b/services/core/java/com/android/server/display/ColorFade.java @@ -16,7 +16,7 @@ package com.android.server.display; -import static com.android.server.wm.utils.RotationAnimationUtils.hasProtectedContent; +import static com.android.internal.policy.TransitionAnimation.hasProtectedContent; import android.content.Context; import android.graphics.BLASTBufferQueue; diff --git a/services/core/java/com/android/server/wm/ScreenRotationAnimation.java b/services/core/java/com/android/server/wm/ScreenRotationAnimation.java index 449e77fca3991..d395f12f8a01a 100644 --- a/services/core/java/com/android/server/wm/ScreenRotationAnimation.java +++ b/services/core/java/com/android/server/wm/ScreenRotationAnimation.java @@ -31,6 +31,7 @@ import static com.android.server.wm.ScreenRotationAnimationProto.STARTED; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_SCREEN_ROTATION; import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME; import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM; +import static com.android.server.wm.utils.CoordinateTransforms.computeRotationMatrix; import android.animation.ArgbEvaluator; import android.content.Context; @@ -60,7 +61,6 @@ import com.android.internal.protolog.common.ProtoLog; import com.android.server.display.DisplayControl; import com.android.server.wm.SurfaceAnimator.AnimationType; import com.android.server.wm.SurfaceAnimator.OnAnimationFinishedCallback; -import com.android.server.wm.utils.RotationAnimationUtils; import java.io.PrintWriter; @@ -378,8 +378,7 @@ class ScreenRotationAnimation { // to the snapshot to make it stay in the same original position // with the current screen rotation. int delta = deltaRotation(rotation, mOriginalRotation); - RotationAnimationUtils.createRotationMatrix(delta, mOriginalWidth, mOriginalHeight, - mSnapshotInitialMatrix); + computeRotationMatrix(delta, mOriginalWidth, mOriginalHeight, mSnapshotInitialMatrix); setRotationTransform(t, mSnapshotInitialMatrix); } diff --git a/services/core/java/com/android/server/wm/utils/CoordinateTransforms.java b/services/core/java/com/android/server/wm/utils/CoordinateTransforms.java index a2f37a56598dd..7dc8a31b63107 100644 --- a/services/core/java/com/android/server/wm/utils/CoordinateTransforms.java +++ b/services/core/java/com/android/server/wm/utils/CoordinateTransforms.java @@ -22,11 +22,9 @@ import static android.view.Surface.ROTATION_270; import static android.view.Surface.ROTATION_90; import android.annotation.Dimension; -import android.annotation.Nullable; import android.graphics.Matrix; -import android.graphics.Rect; -import android.graphics.RectF; import android.view.DisplayInfo; +import android.view.Surface; import android.view.Surface.Rotation; public class CoordinateTransforms { @@ -137,19 +135,24 @@ public class CoordinateTransforms { out.postConcat(tmp); } - /** - * Transforms a rect using a transformation matrix - * - * @param transform the transformation to apply to the rect - * @param inOutRect the rect to transform - * @param tmp a temporary value, if null the function will allocate its own. - */ - public static void transformRect(Matrix transform, Rect inOutRect, @Nullable RectF tmp) { - if (tmp == null) { - tmp = new RectF(); + /** Computes the matrix that rotates the original w x h by the rotation delta. */ + public static void computeRotationMatrix(int rotationDelta, int w, int h, Matrix outMatrix) { + switch (rotationDelta) { + case Surface.ROTATION_0: + outMatrix.reset(); + break; + case Surface.ROTATION_90: + outMatrix.setRotate(90); + outMatrix.postTranslate(h, 0); + break; + case Surface.ROTATION_180: + outMatrix.setRotate(180); + outMatrix.postTranslate(w, h); + break; + case Surface.ROTATION_270: + outMatrix.setRotate(270); + outMatrix.postTranslate(0, w); + break; } - tmp.set(inOutRect); - transform.mapRect(tmp); - inOutRect.set((int) tmp.left, (int) tmp.top, (int) tmp.right, (int) tmp.bottom); } } diff --git a/services/core/java/com/android/server/wm/utils/RotationAnimationUtils.java b/services/core/java/com/android/server/wm/utils/RotationAnimationUtils.java deleted file mode 100644 index c11a6d02eb18d..0000000000000 --- a/services/core/java/com/android/server/wm/utils/RotationAnimationUtils.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm.utils; - -import static android.hardware.HardwareBuffer.USAGE_PROTECTED_CONTENT; - -import android.graphics.Matrix; -import android.hardware.HardwareBuffer; -import android.view.Surface; - - -/** Helper functions for the {@link com.android.server.wm.ScreenRotationAnimation} class*/ -public class RotationAnimationUtils { - - /** - * @return whether the hardwareBuffer passed in is marked as protected. - */ - public static boolean hasProtectedContent(HardwareBuffer hardwareBuffer) { - return (hardwareBuffer.getUsage() & USAGE_PROTECTED_CONTENT) == USAGE_PROTECTED_CONTENT; - } - - public static void createRotationMatrix(int rotation, int width, int height, Matrix outMatrix) { - switch (rotation) { - case Surface.ROTATION_0: - outMatrix.reset(); - break; - case Surface.ROTATION_90: - outMatrix.setRotate(90, 0, 0); - outMatrix.postTranslate(height, 0); - break; - case Surface.ROTATION_180: - outMatrix.setRotate(180, 0, 0); - outMatrix.postTranslate(width, height); - break; - case Surface.ROTATION_270: - outMatrix.setRotate(270, 0, 0); - outMatrix.postTranslate(0, width); - break; - } - } -} diff --git a/services/tests/wmtests/src/com/android/server/wm/utils/CoordinateTransformsTest.java b/services/tests/wmtests/src/com/android/server/wm/utils/CoordinateTransformsTest.java index 99ceb2011db3b..3e74626b66d79 100644 --- a/services/tests/wmtests/src/com/android/server/wm/utils/CoordinateTransformsTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/utils/CoordinateTransformsTest.java @@ -21,6 +21,7 @@ import static android.view.Surface.ROTATION_180; import static android.view.Surface.ROTATION_270; import static android.view.Surface.ROTATION_90; +import static com.android.server.wm.utils.CoordinateTransforms.computeRotationMatrix; import static com.android.server.wm.utils.CoordinateTransforms.transformLogicalToPhysicalCoordinates; import static com.android.server.wm.utils.CoordinateTransforms.transformPhysicalToLogicalCoordinates; import static com.android.server.wm.utils.CoordinateTransforms.transformToRotation; @@ -185,6 +186,44 @@ public class CoordinateTransformsTest { assertEquals(mMatrix2, mMatrix); } + @Test + public void rotate_0_bottomRight() { + computeRotationMatrix(ROTATION_0, W, H, mMatrix); + PointF newPoints = checkMappedPoints(W, H); + assertEquals(W, newPoints.x, 0); + assertEquals(H, newPoints.y, 0); + } + + @Test + public void rotate_90_bottomRight() { + computeRotationMatrix(ROTATION_90, W, H, mMatrix); + PointF newPoints = checkMappedPoints(W, H); + assertEquals(0, newPoints.x, 0); + assertEquals(W, newPoints.y, 0); + } + + @Test + public void rotate_180_bottomRight() { + computeRotationMatrix(ROTATION_180, W, H, mMatrix); + PointF newPoints = checkMappedPoints(W, H); + assertEquals(0, newPoints.x, 0); + assertEquals(0, newPoints.y, 0); + } + + @Test + public void rotate_270_bottomRight() { + computeRotationMatrix(ROTATION_270, W, H, mMatrix); + PointF newPoints = checkMappedPoints(W, H); + assertEquals(H, newPoints.x, 0); + assertEquals(0, newPoints.y, 0); + } + + private PointF checkMappedPoints(int x, int y) { + final float[] fs = new float[] {x, y}; + mMatrix.mapPoints(fs); + return new PointF(fs[0], fs[1]); + } + private void assertMatricesAreInverses(Matrix matrix, Matrix matrix2) { final Matrix concat = new Matrix(); concat.setConcat(matrix, matrix2); diff --git a/services/tests/wmtests/src/com/android/server/wm/utils/RotationAnimationUtilsTest.java b/services/tests/wmtests/src/com/android/server/wm/utils/RotationAnimationUtilsTest.java index cd4d65d7dab12..ff43ff7182205 100644 --- a/services/tests/wmtests/src/com/android/server/wm/utils/RotationAnimationUtilsTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/utils/RotationAnimationUtilsTest.java @@ -23,15 +23,11 @@ import static org.junit.Assert.assertEquals; import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.ColorSpace; -import android.graphics.Matrix; -import android.graphics.PointF; import android.hardware.HardwareBuffer; import android.platform.test.annotations.Presubmit; -import android.view.Surface; import com.android.internal.policy.TransitionAnimation; -import org.junit.Before; import org.junit.Test; @Presubmit @@ -39,16 +35,8 @@ public class RotationAnimationUtilsTest { private static final int BITMAP_HEIGHT = 100; private static final int BITMAP_WIDTH = 100; - private static final int POINT_WIDTH = 1000; - private static final int POINT_HEIGHT = 2000; private ColorSpace mColorSpace = ColorSpace.get(ColorSpace.Named.DISPLAY_P3); - private Matrix mMatrix; - - @Before - public void setup() { - mMatrix = new Matrix(); - } @Test public void blackLuma() { @@ -93,48 +81,6 @@ public class RotationAnimationUtilsTest { assertEquals(1, borderLuma, 0); } - @Test - public void rotate_0_bottomRight() { - RotationAnimationUtils.createRotationMatrix(Surface.ROTATION_0, - POINT_WIDTH, POINT_HEIGHT, mMatrix); - PointF newPoints = checkMappedPoints(POINT_WIDTH, POINT_HEIGHT); - assertEquals(POINT_WIDTH, newPoints.x, 0); - assertEquals(POINT_HEIGHT, newPoints.y, 0); - } - - @Test - public void rotate_90_bottomRight() { - RotationAnimationUtils.createRotationMatrix(Surface.ROTATION_90, - POINT_WIDTH, POINT_HEIGHT, mMatrix); - PointF newPoints = checkMappedPoints(POINT_WIDTH, POINT_HEIGHT); - assertEquals(0, newPoints.x, 0); - assertEquals(POINT_WIDTH, newPoints.y, 0); - } - - @Test - public void rotate_180_bottomRight() { - RotationAnimationUtils.createRotationMatrix(Surface.ROTATION_180, - POINT_WIDTH, POINT_HEIGHT, mMatrix); - PointF newPoints = checkMappedPoints(POINT_WIDTH, POINT_HEIGHT); - assertEquals(0, newPoints.x, 0); - assertEquals(0, newPoints.y, 0); - } - - @Test - public void rotate_270_bottomRight() { - RotationAnimationUtils.createRotationMatrix(Surface.ROTATION_270, - POINT_WIDTH, POINT_HEIGHT, mMatrix); - PointF newPoints = checkMappedPoints(POINT_WIDTH, POINT_HEIGHT); - assertEquals(POINT_HEIGHT, newPoints.x, 0); - assertEquals(0, newPoints.y, 0); - } - - private PointF checkMappedPoints(int x, int y) { - final float[] fs = new float[] {x, y}; - mMatrix.mapPoints(fs); - return new PointF(fs[0], fs[1]); - } - private Bitmap createBitmap(float luma) { return createBitmap(luma, BITMAP_WIDTH, BITMAP_HEIGHT); }