From da4997312c79bfb5b5c6fb31833fc2ce401c4457 Mon Sep 17 00:00:00 2001 From: Jorim Jaggi Date: Wed, 22 Aug 2018 15:43:17 +0200 Subject: [PATCH] DO NOT MERGE Fix display freezing when screen size mismatches If we have a display size change, make sure to set different scaling mode such that we can show the buffer even if there is a size mismatch. Test: Rotate screen Test: Change cutout type Bug: 112876936 Change-Id: Iedc7774d69730a95b98ba46d4f274bc3b7e66bd1 --- .../com/android/server/wm/ScreenRotationAnimation.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/services/core/java/com/android/server/wm/ScreenRotationAnimation.java b/services/core/java/com/android/server/wm/ScreenRotationAnimation.java index fa8a5c66aeea8..755a571cf5f75 100644 --- a/services/core/java/com/android/server/wm/ScreenRotationAnimation.java +++ b/services/core/java/com/android/server/wm/ScreenRotationAnimation.java @@ -37,6 +37,7 @@ import android.view.DisplayInfo; import android.view.Surface; import android.view.Surface.OutOfResourcesException; import android.view.SurfaceControl; +import android.view.SurfaceControl.Transaction; import android.view.SurfaceSession; import android.view.animation.Animation; import android.view.animation.AnimationUtils; @@ -268,6 +269,12 @@ class ScreenRotationAnimation { .setSecure(isSecure) .build(); + // In case display bounds change, screenshot buffer and surface may mismatch so set a + // scaling mode. + Transaction t2 = new Transaction(); + t2.setOverrideScalingMode(mSurfaceControl, Surface.SCALING_MODE_SCALE_TO_WINDOW); + t2.apply(true /* sync */); + // capture a screenshot into the surface we just created // TODO(multidisplay): we should use the proper display final int displayId = SurfaceControl.BUILT_IN_DISPLAY_ID_MAIN;