Fix unexpected language changes on SIM card insertion.

There are two separate issues here that need to be fixed, both
boil down to the fact that adding an imperative (userSetLocale)
to the Configuration is a bad idea. Because of this:

- We'd never persist the first user set configuration if it was en_US,
  because of an erroneous call to Configuration.setLocale.

- ActivityManager.getConfiguration would sometimes return a
  Configuration with userSetLocale == true, which means callers with
  the right permissions would inadvertently persist a locale they didn't
  want to persist.

bug: 18879010

(cherry picked from commit c63a16b8e4)

Change-Id: I4d714eb1f75afc0a5bf4d53a374df4ed16e328bf
This commit is contained in:
Narayan Kamath
2015-01-13 15:51:57 +00:00
parent 66b4d48469
commit 7dc8d32fd2

View File

@@ -2303,7 +2303,7 @@ public final class ActivityManagerService extends ActivityManagerNative
ConfigurationInfo.GL_ES_VERSION_UNDEFINED);
mConfiguration.setToDefaults();
mConfiguration.setLocale(Locale.getDefault());
mConfiguration.locale = Locale.getDefault();
mConfigurationSeq = mConfiguration.seq = 1;
mProcessCpuTracker.init();
@@ -16197,6 +16197,7 @@ public final class ActivityManagerService extends ActivityManagerNative
Configuration ci;
synchronized(this) {
ci = new Configuration(mConfiguration);
ci.userSetLocale = false;
}
return ci;
}