From e3dd9f8c71b8420d449bf45a93be140be9ecd471 Mon Sep 17 00:00:00 2001 From: Keun-young Park Date: Wed, 27 Apr 2016 15:02:07 -0700 Subject: [PATCH] fix recursion for config change - update mTempConfig from mCurConfig first to decide if config is changed or not. This fixes recursion of putting new config again from reconfigureDisplay - ignore setNewConfiguration if there is no change in configuration This fixes another recursion due to config change -> app restart loop bug: 28381048 Change-Id: I4c2e6072b269baf9fa11d4b8073f0800c0e0d28d --- .../com/android/server/wm/WindowManagerService.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index cf415ff4e6474..ac5df6a71ed03 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -3625,8 +3625,7 @@ public class WindowManagerService extends IWindowManager.Stub // disregarding font scale, which should remain set to // the value of the previous configuration. mTempConfiguration.setToDefaults(); - mTempConfiguration.fontScale = currentConfig.fontScale; - mTempConfiguration.uiMode = currentConfig.uiMode; + mTempConfiguration.updateFrom(currentConfig); computeScreenConfigurationLocked(mTempConfiguration); if (currentConfig.diff(mTempConfiguration) != 0) { mWaitingForConfig = true; @@ -3689,11 +3688,15 @@ public class WindowManagerService extends IWindowManager.Stub } synchronized(mWindowMap) { - mCurConfiguration = new Configuration(config); if (mWaitingForConfig) { mWaitingForConfig = false; mLastFinishedFreezeSource = "new-config"; } + boolean configChanged = mCurConfiguration.diff(config) != 0; + if (!configChanged) { + return null; + } + mCurConfiguration = new Configuration(config); return onConfigurationChanged(); } } @@ -8877,8 +8880,7 @@ public class WindowManagerService extends IWindowManager.Stub boolean configChanged = updateOrientationFromAppTokensLocked(false); mTempConfiguration.setToDefaults(); - mTempConfiguration.fontScale = mCurConfiguration.fontScale; - mTempConfiguration.uiMode = mCurConfiguration.uiMode; + mTempConfiguration.updateFrom(mCurConfiguration); computeScreenConfigurationLocked(mTempConfiguration); configChanged |= mCurConfiguration.diff(mTempConfiguration) != 0;