diff --git a/services/core/java/com/android/server/wm/AsyncRotationController.java b/services/core/java/com/android/server/wm/AsyncRotationController.java index 0dc6e0ff1054f..5c9c81300e0d0 100644 --- a/services/core/java/com/android/server/wm/AsyncRotationController.java +++ b/services/core/java/com/android/server/wm/AsyncRotationController.java @@ -364,6 +364,7 @@ class AsyncRotationController extends FadeAnimationController implements Consume /** Hides the window immediately until it is drawn in new rotation. */ void hideImmediately(WindowToken windowToken) { + if (isTargetToken(windowToken)) return; final boolean original = mHideImmediately; mHideImmediately = true; final Operation op = new Operation(Operation.ACTION_FADE); diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index dfa1a62ff506b..d92c6bdfdd0c8 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -4150,13 +4150,13 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp /** @see WindowManagerInternal#onToggleImeRequested */ void onShowImeRequested() { - if (mImeLayeringTarget == null || mInputMethodWindow == null) { + if (mInputMethodWindow == null) { return; } // If IME window will be shown on the rotated activity, share the transformed state to // IME window so it can compute rotated frame with rotated configuration. - if (mImeLayeringTarget.mToken.isFixedRotationTransforming()) { - mInputMethodWindow.mToken.linkFixedRotationTransform(mImeLayeringTarget.mToken); + if (mFixedRotationLaunchingApp != null) { + mInputMethodWindow.mToken.linkFixedRotationTransform(mFixedRotationLaunchingApp); // Hide the window until the rotation is done to avoid intermediate artifacts if the // parent surface of IME container is changed. if (mAsyncRotationController != null) { diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 87e87b95fdfd5..09f7fb6c794e2 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -2342,9 +2342,11 @@ class WindowState extends WindowContainer implements WindowManagerP @Override public void onConfigurationChanged(Configuration newParentConfig) { - mTempConfiguration.setTo(getConfiguration()); + // Get from super to avoid using the updated global config from the override method. + final Configuration selfConfiguration = super.getConfiguration(); + mTempConfiguration.setTo(selfConfiguration); super.onConfigurationChanged(newParentConfig); - final int diff = getConfiguration().diff(mTempConfiguration); + final int diff = selfConfiguration.diff(mTempConfiguration); if (diff != 0) { mLastConfigReportedToClient = false; } diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java index aaeae239024d4..3379bebe66985 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java @@ -1620,7 +1620,6 @@ public class DisplayContentTests extends WindowTestsBase { // If the rotated activity requests to show IME, the IME window should use the // transformation from activity to lay out in the same orientation. - mDisplayContent.setImeLayeringTarget(mAppWindow); LocalServices.getService(WindowManagerInternal.class).onToggleImeRequested(true /* show */, app.token, app.token, mDisplayContent.mDisplayId); assertTrue(asyncRotationController.isTargetToken(mImeWindow.mToken));