From b4fdc0e4ba0796eebb215be06782252d4110cce7 Mon Sep 17 00:00:00 2001 From: Riddle Hsu Date: Tue, 7 Sep 2021 23:36:37 +0800 Subject: Avoid applying window config from updating persistent config The changed global configuration will also apply to default display. When the display is rotating, the transition will be disturbed if the given configuration contains stale window configuration (e.g. bounds and rotation). Because persistent configuration only includes locale and font scale, clear the window configuration to avoid the noise. Bug: 196313047 Test: Back from a landscape activity to a portrait activity. The portrait app activity calls LocalePicker#updateLocale in onResume. The transition should not be flickering. Change-Id: Ib1bea1b752eb695e26b8b0622bcf06ec01cce3e6 --- .../core/java/com/android/server/wm/ActivityTaskManagerService.java | 3 +++ services/core/java/com/android/server/wm/DisplayContent.java | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index 081c618b62aa..1652c3b2a9a7 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -4066,6 +4066,9 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { final long origId = Binder.clearCallingIdentity(); try { synchronized (mGlobalLock) { + // Window configuration is unrelated to persistent configuration (e.g. font scale, + // locale). Unset it to avoid affecting the current display configuration. + values.windowConfiguration.setToDefaults(); updateConfigurationLocked(values, null, false, true, userId, false /* deferResume */); } diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index b110d8d44fc5..7438fa3456e3 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -5693,7 +5693,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp final Configuration currOverrideConfig = getRequestedOverrideConfiguration(); final int currRotation = currOverrideConfig.windowConfiguration.getRotation(); final int overrideRotation = overrideConfiguration.windowConfiguration.getRotation(); - if (currRotation != ROTATION_UNDEFINED && currRotation != overrideRotation) { + if (currRotation != ROTATION_UNDEFINED && overrideRotation != ROTATION_UNDEFINED + && currRotation != overrideRotation) { applyRotationAndFinishFixedRotation(currRotation, overrideRotation); } mCurrentOverrideConfigurationChanges = currOverrideConfig.diff(overrideConfiguration); -- cgit v1.2.3-59-g8ed1b