diff options
author | Jorim Jaggi <jjaggi@google.com> | 2018-08-22 15:43:17 +0200 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2018-08-23 01:27:03 +0000 |
commit | 07d041c51a1cebe8013d280a99154f3fcc85440b (patch) | |
tree | c2182f86286323547879962e74a997a209747576 | |
parent | 1d1b6dfb36800732cfefc8429ff621c0eef527e3 (diff) | |
download | base-07d041c51a1cebe8013d280a99154f3fcc85440b.tar.gz |
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
(cherry picked from commit da4997312c79bfb5b5c6fb31833fc2ce401c4457)
-rw-r--r-- | services/core/java/com/android/server/wm/ScreenRotationAnimation.java | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/wm/ScreenRotationAnimation.java b/services/core/java/com/android/server/wm/ScreenRotationAnimation.java index fa8a5c66aeea..755a571cf5f7 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; |