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 which also has
a somewhat related app (like 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
diff --git a/services/core/java/com/android/server/am/ b/services/core/java/com/android/server/am/
index 7ca3860..b623bc7 100644
--- a/services/core/java/com/android/server/am/
+++ b/services/core/java/com/android/server/am/
@@ -19040,7 +19040,7 @@
                 if ((changes&ActivityInfo.CONFIG_LOCALE) != 0) {
                     intent = new Intent(Intent.ACTION_LOCALE_CHANGED);
-                    if (!mProcessesReady) {
+	            if (initLocale || !mProcessesReady) {
                     broadcastIntentLocked(null, null, intent,