diff options
author | Eric Fischer <enf@google.com> | 2009-10-29 02:06:26 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2009-10-29 02:06:26 -0700 |
commit | d01fd604004011e25eb9e2814535950e566f7ad6 (patch) | |
tree | 21064b25762d8f209feba2519e948a632e86d5e1 | |
parent | cd54683ef918aa309592b356db0f4f2d0f42abb1 (diff) | |
parent | 25510e077766cf023dd0adb9c84d6d5f82cc01bc (diff) | |
download | frameworks_base-d01fd604004011e25eb9e2814535950e566f7ad6.zip frameworks_base-d01fd604004011e25eb9e2814535950e566f7ad6.tar.gz frameworks_base-d01fd604004011e25eb9e2814535950e566f7ad6.tar.bz2 |
am 25510e07: am 8071b146: am fb872d1a: Merge change Id4d04def into eclair
Merge commit '25510e077766cf023dd0adb9c84d6d5f82cc01bc'
* commit '25510e077766cf023dd0adb9c84d6d5f82cc01bc':
Fix a race that kept the locale picker from working under heavy CPU load.
-rw-r--r-- | services/java/com/android/server/am/ActivityManagerService.java | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index 088d5e5..bfbe01e 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -2705,13 +2705,31 @@ public final class ActivityManagerService extends ActivityManagerNative implemen // Have the window manager re-evaluate the orientation of // the screen based on the new activity order. - Configuration config = mWindowManager.updateOrientationFromAppTokens( - mConfiguration, - next.mayFreezeScreenLocked(next.app) ? next : null); - if (config != null) { - next.frozenBeforeDestroy = true; - } - if (!updateConfigurationLocked(config, next)) { + boolean updated; + synchronized (this) { + Configuration config = mWindowManager.updateOrientationFromAppTokens( + mConfiguration, + next.mayFreezeScreenLocked(next.app) ? next : null); + if (config != null) { + /* + * Explicitly restore the locale to the one from the + * old configuration, since the one that comes back from + * the window manager has the default (boot) locale. + * + * It looks like previously the locale picker only worked + * by coincidence: usually it would do its setting of + * the locale after the activity transition, so it didn't + * matter that this lost it. With the synchronized + * block now keeping them from happening at the same time, + * this one always would happen second and undo what the + * locale picker had just done. + */ + config.locale = mConfiguration.locale; + next.frozenBeforeDestroy = true; + } + updated = updateConfigurationLocked(config, next); + } + if (!updated) { // The configuration update wasn't able to keep the existing // instance of the activity, and instead started a new one. // We should be all done, but let's just make sure our activity |