Revert^2 "Use the newly introduced MCC to country table, f..."
Revert submission 31517114-revert-31449888-telephony_mainline_mcc_table-CRWDIWTBKC
Reason for revert: Fixed failing test
Reverted changes: /q/submissionid:31517114-revert-31449888-telephony_mainline_mcc_table-CRWDIWTBKC
Bug: 381070025
Flag: com.android.internal.telephony.flags.use_i18n_for_mcc_mapping
Test: atest TelephonyLookupTest.java
Change-Id: I29a39f5a20b391e5d426e93964ccca0a1e51e96b
diff --git a/flags/misc.aconfig b/flags/misc.aconfig
index 797bdd1..5d02cb4 100644
--- a/flags/misc.aconfig
+++ b/flags/misc.aconfig
@@ -246,7 +246,15 @@
purpose: PURPOSE_BUGFIX
}
}
-#
+
+# OWNER=jackyu,boullanger TARGET=25Q3
+flag {
+ name: "use_i18n_for_mcc_mapping"
+ namespace: "telephony"
+ description: "Use the newly introduced MCC to country table, from the time zone mainline module"
+ bug:"381070025"
+}
+
# OWNER=nharold TARGET=25Q4
flag {
name: "thread_shred"
diff --git a/src/java/com/android/internal/telephony/MccTable.java b/src/java/com/android/internal/telephony/MccTable.java
index b36a19e..3ff6b1b 100644
--- a/src/java/com/android/internal/telephony/MccTable.java
+++ b/src/java/com/android/internal/telephony/MccTable.java
@@ -24,12 +24,12 @@
import android.os.Build;
import android.os.SystemProperties;
import android.text.TextUtils;
+import android.timezone.MobileCountries;
import android.timezone.TelephonyLookup;
import android.timezone.TelephonyNetwork;
import android.timezone.TelephonyNetworkFinder;
import com.android.internal.annotations.GuardedBy;
-import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.util.TelephonyUtils;
import com.android.telephony.Rlog;
@@ -87,7 +87,6 @@
*
* @hide
*/
- @VisibleForTesting
public static class MccMnc {
@NonNull
public final String mcc;
@@ -174,29 +173,42 @@
* Given a GSM Mobile Country Code, returns a lower-case ISO 3166 alpha-2 country code if
* available. Returns empty string if unavailable.
*/
- @UnsupportedAppUsage
- @NonNull
- public static String countryCodeForMcc(int mcc) {
- MccEntry entry = entryForMcc(mcc);
-
- if (entry == null) {
- return "";
- } else {
- return entry.mIso;
- }
- }
-
- /**
- * Given a GSM Mobile Country Code, returns a lower-case ISO 3166 alpha-2 country code if
- * available. Returns empty string if unavailable.
- */
@NonNull
public static String countryCodeForMcc(@NonNull String mcc) {
- try {
- return countryCodeForMcc(Integer.parseInt(mcc));
- } catch (NumberFormatException ex) {
+ if (!isNewMccTableEnabled()) {
+ try {
+ MccEntry entry = entryForMcc(Integer.parseInt(mcc));
+
+ if (entry == null) {
+ return "";
+ } else {
+ return entry.mIso;
+ }
+ } catch (NumberFormatException ex) {
+ return "";
+ }
+ }
+
+ TelephonyNetworkFinder telephonyNetworkFinder;
+
+ synchronized (MccTable.class) {
+ if ((telephonyNetworkFinder = sTelephonyNetworkFinder) == null) {
+ sTelephonyNetworkFinder = telephonyNetworkFinder =
+ TelephonyLookup.getInstance().getTelephonyNetworkFinder();
+ }
+ }
+
+ if (telephonyNetworkFinder == null) {
+ // This should not happen under normal circumstances, only when the data is missing.
return "";
}
+
+ MobileCountries mobileCountries = telephonyNetworkFinder.findCountriesByMcc(mcc);
+ if (mobileCountries == null) {
+ return "";
+ }
+
+ return mobileCountries.getDefaultCountryIsoCode();
}
/**
@@ -209,7 +221,7 @@
* help distinguish, or the MCC assigned to a country isn't used for geopolitical reasons.
* When the geographical country is needed (e.g. time zone detection) this version can provide
* more pragmatic results than the official MCC-only answer. This method falls back to calling
- * {@link #countryCodeForMcc(int)} if no special MCC+MNC cases are found.
+ * {@link #countryCodeForMcc(String)} if no special MCC+MNC cases are found.
* Returns empty string if no code can be determined.
*/
@NonNull
@@ -220,7 +232,7 @@
}
if (TextUtils.isEmpty(countryCode)) {
// Try the MCC-only fallback.
- countryCode = MccTable.countryCodeForMcc(mccMnc.mcc);
+ countryCode = countryCodeForMcc(mccMnc.mcc);
}
return countryCode;
}
@@ -244,7 +256,6 @@
return network.getCountryIsoCode();
}
-
/**
* Given a GSM Mobile Country Code, returns
* the smallest number of digits that M if available.
@@ -312,6 +323,11 @@
*/
public static final Map<Locale, Locale> FALLBACKS = new HashMap<Locale, Locale>();
+ public static boolean isNewMccTableEnabled() {
+ return com.android.icu.Flags.telephonyLookupMccExtension()
+ && com.android.internal.telephony.flags.Flags.useI18nForMccMapping();
+ }
+
static {
// If we have English (without a country) explicitly prioritize en_US. http://b/28998094
FALLBACKS.put(Locale.ENGLISH, Locale.US);
diff --git a/src/java/com/android/internal/telephony/util/LocaleUtils.java b/src/java/com/android/internal/telephony/util/LocaleUtils.java
index 064b10d..26cc6db 100644
--- a/src/java/com/android/internal/telephony/util/LocaleUtils.java
+++ b/src/java/com/android/internal/telephony/util/LocaleUtils.java
@@ -47,7 +47,7 @@
public static Locale getLocaleFromMcc(Context context, int mcc, String simLanguage) {
boolean hasSimLanguage = !TextUtils.isEmpty(simLanguage);
String language = hasSimLanguage ? simLanguage : defaultLanguageForMcc(mcc);
- String country = MccTable.countryCodeForMcc(mcc);
+ String country = MccTable.countryCodeForMcc(String.valueOf(mcc));
Rlog.d(LOG_TAG, "getLocaleFromMcc(" + language + ", " + country + ", " + mcc);
final Locale locale = getLocaleForLanguageCountry(context, language, country);
@@ -155,14 +155,13 @@
* Returns null if unavailable.
*/
public static String defaultLanguageForMcc(int mcc) {
- MccTable.MccEntry entry = MccTable.entryForMcc(mcc);
- if (entry == null) {
+ String country = MccTable.countryCodeForMcc(String.valueOf(mcc));
+
+ if (country.isEmpty()) {
Rlog.d(LOG_TAG, "defaultLanguageForMcc(" + mcc + "): no country for mcc");
return null;
}
- final String country = entry.mIso;
-
// Choose English as the default language for India.
if ("in".equals(country)) {
return "en";
diff --git a/tests/telephonytests/src/com/android/internal/telephony/MccTableTest.java b/tests/telephonytests/src/com/android/internal/telephony/MccTableTest.java
index 658935f..174ac17 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/MccTableTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/MccTableTest.java
@@ -17,40 +17,69 @@
package com.android.internal.telephony;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
import android.content.Context;
+import android.platform.test.annotations.UsesFlags;
+import android.platform.test.flag.junit.FlagsParameterization;
+import android.platform.test.flag.junit.SetFlagsRule;
import androidx.test.InstrumentationRegistry;
import androidx.test.filters.SmallTest;
import com.android.internal.telephony.MccTable.MccMnc;
+import com.android.internal.telephony.flags.Flags;
import com.android.internal.telephony.util.LocaleUtils;
+import org.junit.ClassRule;
+import org.junit.Rule;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import java.util.List;
import java.util.Locale;
+@RunWith(Parameterized.class)
+@UsesFlags({
+ com.android.internal.telephony.flags.Flags.class,
+ com.android.icu.Flags.class
+})
public class MccTableTest {
+ @ClassRule
+ public static final SetFlagsRule.ClassRule mSetFlagsClassRule = new SetFlagsRule.ClassRule();
+
+ @Parameterized.Parameters(name = "{0}")
+ public static List<FlagsParameterization> getParams() {
+ return FlagsParameterization.allCombinationsOf(
+ Flags.FLAG_USE_I18N_FOR_MCC_MAPPING,
+ com.android.icu.Flags.FLAG_TELEPHONY_LOOKUP_MCC_EXTENSION);
+ }
+
+ @Rule
+ public final SetFlagsRule mSetFlagsRule;
+
+ public MccTableTest(FlagsParameterization flags) {
+ mSetFlagsRule = mSetFlagsClassRule.createSetFlagsRule(flags);
+ }
@SmallTest
@Test
public void testCountryCodeForMcc() throws Exception {
- checkMccLookupWithNoMnc("lu", 270);
- checkMccLookupWithNoMnc("gr", 202);
- checkMccLookupWithNoMnc("fk", 750);
- checkMccLookupWithNoMnc("mg", 646);
- checkMccLookupWithNoMnc("us", 314);
- checkMccLookupWithNoMnc("", 300); // mcc not defined, hence default
- checkMccLookupWithNoMnc("", 0); // mcc not defined, hence default
- checkMccLookupWithNoMnc("", 2000); // mcc not defined, hence default
+ checkMccLookupWithNoMnc("lu", "270");
+ checkMccLookupWithNoMnc("gr", "202");
+ checkMccLookupWithNoMnc("fk", "750");
+ checkMccLookupWithNoMnc("mg", "646");
+ checkMccLookupWithNoMnc("us", "314");
+ checkMccLookupWithNoMnc("", "300"); // mcc not defined, hence default
+ checkMccLookupWithNoMnc("", "0"); // mcc not defined, hence default
+ checkMccLookupWithNoMnc("", "2000"); // mcc not defined, hence default
}
- private void checkMccLookupWithNoMnc(String expectedCountryIsoCode, int mcc) {
+ private void checkMccLookupWithNoMnc(String expectedCountryIsoCode, String mcc) {
assertEquals(expectedCountryIsoCode, MccTable.countryCodeForMcc(mcc));
- assertEquals(expectedCountryIsoCode, MccTable.countryCodeForMcc(mcc));
- assertEquals(expectedCountryIsoCode, MccTable.countryCodeForMcc("" + mcc));
assertEquals(expectedCountryIsoCode,
- MccTable.geoCountryCodeForMccMnc(new MccMnc("" + mcc, "999")));
+ MccTable.geoCountryCodeForMccMnc(new MccMnc(mcc, "999")));
}
@SmallTest
@@ -69,9 +98,9 @@
assertEquals("nl", LocaleUtils.defaultLanguageForMcc(204));
assertEquals("is", LocaleUtils.defaultLanguageForMcc(274));
// mcc not defined, hence default
- assertEquals(null, LocaleUtils.defaultLanguageForMcc(0));
+ assertNull(LocaleUtils.defaultLanguageForMcc(0));
// mcc not defined, hence default
- assertEquals(null, LocaleUtils.defaultLanguageForMcc(2000));
+ assertNull(LocaleUtils.defaultLanguageForMcc(2000));
}
@SmallTest