From 32eef6b57646622a3d87d38bf494a96f320e4284 Mon Sep 17 00:00:00 2001 From: Robert Carr Date: Wed, 17 Jul 2019 13:16:21 -0700 Subject: [PATCH] Ensure we clear magnification specs on non-magnifiable containers. It seems it's possible the IME container could be magnified before an IME is added. Once the IME is added we will view this as non-magnifiable and then never un-do the magnification. Bug: 137691821 Test: Manual Change-Id: I39b43367ac500a5c6c330b5ae3a451345fa5aec4 Merged-In: I39b43367ac500a5c6c330b5ae3a451345fa5aec4 --- .../java/com/android/server/wm/DisplayContent.java | 6 +++++- .../com/android/server/wm/WindowContainer.java | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 3e7fea2ac203c..54ab906e99247 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -4807,7 +4807,11 @@ class DisplayContent extends WindowContainer extends ConfigurationContainer< */ private boolean mCommittedReparentToAnimationLeash; + private MagnificationSpec mLastMagnificationSpec; + WindowContainer(WindowManagerService wms) { mWmService = wms; mPendingTransaction = wms.mTransactionFactory.make(); @@ -1186,6 +1188,7 @@ class WindowContainer extends ConfigurationContainer< if (shouldMagnify()) { t.setMatrix(mSurfaceControl, spec.scale, 0, 0, spec.scale) .setPosition(mSurfaceControl, spec.offsetX, spec.offsetY); + mLastMagnificationSpec = spec; } else { for (int i = 0; i < mChildren.size(); i++) { mChildren.get(i).applyMagnificationSpec(t, spec); @@ -1193,6 +1196,17 @@ class WindowContainer extends ConfigurationContainer< } } + void clearMagnificationSpec(Transaction t) { + if (mLastMagnificationSpec != null) { + t.setMatrix(mSurfaceControl, 1, 0, 0, 1) + .setPosition(mSurfaceControl, 0, 0); + } + mLastMagnificationSpec = null; + for (int i = 0; i < mChildren.size(); i++) { + mChildren.get(i).clearMagnificationSpec(t); + } + } + void prepareSurfaces() { // If a leash has been set when the transaction was committed, then the leash reparent has // been committed.