From f74a62ac2136cb5a2229ceddf640002abc057899 Mon Sep 17 00:00:00 2001 From: Oleg Petsjonkin Date: Tue, 25 Apr 2023 15:03:21 +0000 Subject: Fixing ColorFade animation in landscape mode Bug: b/277612338 Test: manual testing Test steps: Increase animation duration: set DisplayPowerController2.COLOR_FADE_OFF_ANIMATION_DURATION_MILLIS value to e.g 2000 (2s.) Set ColorFade.MODE_FADE mode: Hardcode DisplayPowerController2.mColorFadeFadesConfig = true Set ColorFade.MODE_COOL_DOWN mode: Hardcode DisplayPowerController2.mColorFadeFadesConfig = false Tested MODE_FADE/MODE_COOL_DOWN on tablet/phone Test steps: 1) lauch application suppoting both portait and landscape modes (e.g Chrome) 2) Rotate device to portait mode 3) Turn on and Turn off device using power button 4) Verify off animation plays 5) Rotate device to landscape mode 8) Turn on and Turn off device using power button 9) Verify off animation plays 10) Verify that animation play (in ColorFade.MODE_FADE animation rotates, in ColorFade.MODE_COOL_DOWN animation statys locked) Change-Id: I950d8b6c3c36037d49eadb1e164391a53482ce97 --- .../java/com/android/server/display/ColorFade.java | 21 +++++++++++++++------ .../server/display/DisplayManagerService.java | 1 - 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/services/core/java/com/android/server/display/ColorFade.java b/services/core/java/com/android/server/display/ColorFade.java index a4bd6a699ceb..46cd496bdcd3 100644 --- a/services/core/java/com/android/server/display/ColorFade.java +++ b/services/core/java/com/android/server/display/ColorFade.java @@ -191,7 +191,7 @@ final class ColorFade { } if (!(createEglContext(isProtected) && createEglSurface(isProtected, isWideColor) - && setScreenshotTextureAndSetViewport(hardwareBuffer))) { + && setScreenshotTextureAndSetViewport(hardwareBuffer, displayInfo.rotation))) { dismiss(); return false; } @@ -500,7 +500,8 @@ final class ColorFade { } private boolean setScreenshotTextureAndSetViewport( - ScreenCapture.ScreenshotHardwareBuffer screenshotBuffer) { + ScreenCapture.ScreenshotHardwareBuffer screenshotBuffer, + @Surface.Rotation int rotation) { if (!attachEglContext()) { return false; } @@ -525,14 +526,22 @@ final class ColorFade { s.release(); st.release(); } + // if screen is rotated, map texture starting different corner + int indexDelta = (rotation == Surface.ROTATION_90) ? 2 + : (rotation == Surface.ROTATION_180) ? 4 + : (rotation == Surface.ROTATION_270) ? 6 : 0; // Set up texture coordinates for a quad. // We might need to change this if the texture ends up being // a different size from the display for some reason. - mTexCoordBuffer.put(0, 0f); mTexCoordBuffer.put(1, 0f); - mTexCoordBuffer.put(2, 0f); mTexCoordBuffer.put(3, 1f); - mTexCoordBuffer.put(4, 1f); mTexCoordBuffer.put(5, 1f); - mTexCoordBuffer.put(6, 1f); mTexCoordBuffer.put(7, 0f); + mTexCoordBuffer.put(indexDelta, 0f); + mTexCoordBuffer.put(indexDelta + 1, 0f); + mTexCoordBuffer.put((indexDelta + 2) % 8, 0f); + mTexCoordBuffer.put((indexDelta + 3) % 8, 1f); + mTexCoordBuffer.put((indexDelta + 4) % 8, 1f); + mTexCoordBuffer.put((indexDelta + 5) % 8, 1f); + mTexCoordBuffer.put((indexDelta + 6) % 8, 1f); + mTexCoordBuffer.put((indexDelta + 7) % 8, 0f); // Set up our viewport. GLES20.glViewport(0, 0, mDisplayWidth, mDisplayHeight); diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java index 26b6cb0ebe9b..5771a04b9607 100644 --- a/services/core/java/com/android/server/display/DisplayManagerService.java +++ b/services/core/java/com/android/server/display/DisplayManagerService.java @@ -2548,7 +2548,6 @@ public final class DisplayManagerService extends SystemService { final DisplayInfo displayInfo = logicalDisplay.getDisplayInfoLocked(); captureArgs = new ScreenCapture.DisplayCaptureArgs.Builder(token) .setSize(displayInfo.getNaturalWidth(), displayInfo.getNaturalHeight()) - .setUseIdentityTransform(true) .setCaptureSecureLayers(true) .setAllowProtected(true) .build(); -- cgit v1.2.3-59-g8ed1b