Limit LOCALE_CHANGED broadcast when init'ing.
Immediately when a device finishes booting, retrieveSettings() will read out the current configuration details, including locale. At that point mProcessesReady has been set, meaning third-party apps can be launched. But we haven't started persistent apps yet! If you have a persistent app (like com.android.phone) which also has a somewhat related app (like com.android.stk) merged into the same process, the LOCALE_CHANGED broadcast could start the process pointing at an unexpected code/data location. This change avoids this by only sending LOCALE_CHANGED broadcasts to registered receivers (no manifest receivers) when the locale is being read for the first time (initLocale). Test: booted device with locked SIM Bug: 31665819 Change-Id: I977a596501c6ba492005f98a2367e4b9f67e2dba
This commit is contained in:
@@ -19040,7 +19040,7 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
if ((changes&ActivityInfo.CONFIG_LOCALE) != 0) {
|
||||
intent = new Intent(Intent.ACTION_LOCALE_CHANGED);
|
||||
intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
|
||||
if (!mProcessesReady) {
|
||||
if (initLocale || !mProcessesReady) {
|
||||
intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
|
||||
}
|
||||
broadcastIntentLocked(null, null, intent,
|
||||
|
||||
Reference in New Issue
Block a user