Use supported locale replace the result from sim info.
- Current sim locale use Sim info to get corresponding sim locale, but
it may not completely match current supported locale.
e.g.
The result of TelephonyManager#getSimLocale is zh-TW.
Supported lcoale only has zh-Hant-TW.
- Hence, when SetupWizard use TelephonyManager#getSimLocale, it will
set a non-matched locale to device and make user confuse.
Bug: b/244017408
Test: atest passed
Test: Maunal test passed
Merged-In: Id29bd66c14d7a5415b3d5b2905a2301846780c70
Change-Id: Id29bd66c14d7a5415b3d5b2905a2301846780c70
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index c953de5..09e99ea 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -50,6 +50,7 @@
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
+import android.os.LocaleList;
import android.os.Looper;
import android.os.Message;
import android.os.Messenger;
@@ -7685,7 +7686,7 @@
if (!localeFromDefaultSim.getCountry().isEmpty()) {
if (DBG) log("Using locale from subId: " + subId + " locale: "
+ localeFromDefaultSim);
- return localeFromDefaultSim.toLanguageTag();
+ return matchLocaleFromSupportedLocaleList(localeFromDefaultSim);
} else {
simLanguage = localeFromDefaultSim.getLanguage();
}
@@ -7698,7 +7699,7 @@
final Locale mccLocale = LocaleUtils.getLocaleFromMcc(mApp, mcc, simLanguage);
if (mccLocale != null) {
if (DBG) log("No locale from SIM, using mcc locale:" + mccLocale);
- return mccLocale.toLanguageTag();
+ return matchLocaleFromSupportedLocaleList(mccLocale);
}
if (DBG) log("No locale found - returning null");
@@ -7708,6 +7709,21 @@
}
}
+ @VisibleForTesting
+ String matchLocaleFromSupportedLocaleList(@NonNull Locale inputLocale) {
+ String[] supportedLocale = com.android.internal.app.LocalePicker.getSupportedLocales(
+ getDefaultPhone().getContext());
+ for (String localeTag : supportedLocale) {
+ if (LocaleList.matchesLanguageAndScript(
+ inputLocale, Locale.forLanguageTag(localeTag))
+ && inputLocale.getCountry().equals(
+ Locale.forLanguageTag(localeTag).getCountry())) {
+ return localeTag;
+ }
+ }
+ return inputLocale.toLanguageTag();
+ }
+
private List<SubscriptionInfo> getAllSubscriptionInfoList() {
return mSubscriptionController.getAllSubInfoList(mApp.getOpPackageName(),
mApp.getAttributionTag());