10825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/* 20825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Copyright (C) 2006 The Android Open Source Project 30825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 40825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 50825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * you may not use this file except in compliance with the License. 60825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * You may obtain a copy of the License at 70825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 80825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * http://www.apache.org/licenses/LICENSE-2.0 90825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Unless required by applicable law or agreed to in writing, software 110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * distributed under the License is distributed on an "AS IS" BASIS, 120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * See the License for the specific language governing permissions and 140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * limitations under the License. 150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 170825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepackage com.android.internal.telephony; 180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 190825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.app.ActivityManagerNative; 200825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.app.AlarmManager; 210825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.app.IActivityManager; 220825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.content.Context; 230825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.content.res.Configuration; 240825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.wifi.WifiManager; 250825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.RemoteException; 260825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.SystemProperties; 270825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.TelephonyManager; 280825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.text.TextUtils; 290825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.util.Log; 300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 310825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.ArrayList; 320825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.Collections; 330825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.Locale; 340825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport libcore.icu.TimeZones; 350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/** 370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Mobile Country Code 380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * {@hide} 400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 410825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepublic final class MccTable 420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville{ 430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville static final String LOG_TAG = "MccTable"; 440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville static ArrayList<MccEntry> table; 460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville static class MccEntry implements Comparable<MccEntry> 480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville { 490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int mcc; 500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String iso; 510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int smallestDigitsMnc; 520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String language; 530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville MccEntry(int mnc, String iso, int smallestDigitsMCC) { 550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville this(mnc, iso, smallestDigitsMCC, null); 560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville MccEntry(int mnc, String iso, int smallestDigitsMCC, String language) { 590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville this.mcc = mnc; 600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville this.iso = iso; 610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville this.smallestDigitsMnc = smallestDigitsMCC; 620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville this.language = language; 630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int compareTo(MccEntry o) 670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville { 680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mcc - o.mcc; 690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static MccEntry 730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville entryForMcc(int mcc) 740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville { 750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int index; 760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville MccEntry m; 780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville m = new MccEntry(mcc, null, 0); 800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville index = Collections.binarySearch(table, m); 820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (index < 0) { 840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return table.get(index); 870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns a default time zone ID for the given MCC. 920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param mcc Mobile Country Code 930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return default TimeZone ID, or null if not specified 940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static String defaultTimeZoneForMcc(int mcc) { 960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville MccEntry entry; 970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville entry = entryForMcc(mcc); 990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (entry == null || entry.iso == null) { 1000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 1010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 1020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Locale locale; 1030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (entry.language == null) { 1040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville locale = new Locale(entry.iso); 1050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 1060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville locale = new Locale(entry.language, entry.iso); 1070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String[] tz = TimeZones.forLocale(locale); 1090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (tz.length == 0) return null; 1100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return tz[0]; 1110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Given a GSM Mobile Country Code, returns 1160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * an ISO two-character country code if available. 1170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns "" if unavailable. 1180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static String 1200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville countryCodeForMcc(int mcc) 1210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville { 1220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville MccEntry entry; 1230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville entry = entryForMcc(mcc); 1250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (entry == null) { 1270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return ""; 1280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 1290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return entry.iso; 1300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 1340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Given a GSM Mobile Country Code, returns 1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * an ISO 2-3 character language code if available. 1360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns null if unavailable. 1370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static String defaultLanguageForMcc(int mcc) { 1390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville MccEntry entry; 1400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville entry = entryForMcc(mcc); 1420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (entry == null) { 1440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 1450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 1460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return entry.language; 1470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 1510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Given a GSM Mobile Country Code, returns 1520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * the smallest number of digits that M if available. 1530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns 2 if unavailable. 1540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static int 1560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville smallestDigitsMccForMnc(int mcc) 1570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville { 1580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville MccEntry entry; 1590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville entry = entryForMcc(mcc); 1610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (entry == null) { 1630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return 2; 1640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 1650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return entry.smallestDigitsMnc; 1660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 1700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Updates MCC and MNC device configuration information for application retrieving 1710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * correct version of resources. If either MCC or MNC is 0, they will be ignored (not set). 1720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param context Context to act on. 1730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param mccmnc truncated imsi with just the MCC and MNC - MNC assumed to be from 4th to end 1740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static void updateMccMncConfiguration(Context context, String mccmnc) { 1760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (!TextUtils.isEmpty(mccmnc)) { 1770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int mcc, mnc; 1780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 1800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mcc = Integer.parseInt(mccmnc.substring(0,3)); 1810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mnc = Integer.parseInt(mccmnc.substring(3)); 1820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (NumberFormatException e) { 1830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Log.e(LOG_TAG, "Error parsing IMSI"); 1840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return; 1850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Log.d(LOG_TAG, "updateMccMncConfiguration: mcc=" + mcc + ", mnc=" + mnc); 1880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (mcc != 0) { 1900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville setTimezoneFromMccIfNeeded(context, mcc); 1910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville setLocaleFromMccIfNeeded(context, mcc); 1920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville setWifiCountryCodeFromMcc(context, mcc); 1930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 1950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Configuration config = ActivityManagerNative.getDefault().getConfiguration(); 1960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (mcc != 0) { 1970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville config.mcc = mcc; 1980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (mnc != 0) { 2000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville config.mnc = mnc; 2010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ActivityManagerNative.getDefault().updateConfiguration(config); 2030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (RemoteException e) { 2040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Log.e(LOG_TAG, "Can't update configuration", e); 2050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 2100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Utility code to set the system locale if it's not set already 2110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param context Context to act on. 2120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param language Two character language code desired 2130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param country Two character country code desired 2140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 2150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * {@hide} 2160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 2170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static void setSystemLocale(Context context, String language, String country) { 2180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String l = SystemProperties.get("persist.sys.language"); 2190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String c = SystemProperties.get("persist.sys.country"); 2200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (null == language) { 2220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return; // no match possible 2230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville language = language.toLowerCase(); 2250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (null == country) { 2260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville country = ""; 2270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville country = country.toUpperCase(); 2290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if((null == l || 0 == l.length()) && (null == c || 0 == c.length())) { 2310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 2320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // try to find a good match 2330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String[] locales = context.getAssets().getLocales(); 2340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville final int N = locales.length; 2350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String bestMatch = null; 2360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for(int i = 0; i < N; i++) { 2370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // only match full (lang + country) locales 2380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (locales[i]!=null && locales[i].length() >= 5 && 2390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville locales[i].substring(0,2).equals(language)) { 2400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (locales[i].substring(3,5).equals(country)) { 2410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bestMatch = locales[i]; 2420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 2430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else if (null == bestMatch) { 2440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bestMatch = locales[i]; 2450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (null != bestMatch) { 2490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville IActivityManager am = ActivityManagerNative.getDefault(); 2500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Configuration config = am.getConfiguration(); 2510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville config.locale = new Locale(bestMatch.substring(0,2), 2520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bestMatch.substring(3,5)); 2530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville config.userSetLocale = true; 2540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville am.updateConfiguration(config); 2550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (Exception e) { 2570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Intentionally left blank 2580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 2630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * If the timezone is not already set, set it based on the MCC of the SIM. 2640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param context Context to act on. 2650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param mcc Mobile Country Code of the SIM or SIM-like entity (build prop on CDMA) 2660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 2670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static void setTimezoneFromMccIfNeeded(Context context, int mcc) { 2680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String timezone = SystemProperties.get(ServiceStateTracker.TIMEZONE_PROPERTY); 2690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (timezone == null || timezone.length() == 0) { 2700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String zoneId = defaultTimeZoneForMcc(mcc); 2710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (zoneId != null && zoneId.length() > 0) { 2720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Set time zone based on MCC 2730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AlarmManager alarm = 2740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 2750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville alarm.setTimeZone(zoneId); 2760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Log.d(LOG_TAG, "timezone set to "+zoneId); 2770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 2820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * If the locale is not already set, set it based on the MCC of the SIM. 2830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param context Context to act on. 2840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param mcc Mobile Country Code of the SIM or SIM-like entity (build prop on CDMA) 2850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 2860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static void setLocaleFromMccIfNeeded(Context context, int mcc) { 2870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (TelephonyManager.getLteOnCdmaModeStatic() == PhoneConstants.LTE_ON_CDMA_TRUE) { 2880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Avoid system locale is set from MCC table if CDMALTEPhone is used. 2890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // The locale will be picked up based on EFpl/EFli once CSIM records are loaded. 2900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return; 2910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String language = MccTable.defaultLanguageForMcc(mcc); 2930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String country = MccTable.countryCodeForMcc(mcc); 2940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Log.d(LOG_TAG, "locale set to "+language+"_"+country); 2960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville setSystemLocale(context, language, country); 2970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 3000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * If the number of allowed wifi channels has not been set, set it based on 3010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * the MCC of the SIM. 3020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param context Context to act on. 3030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param mcc Mobile Country Code of the SIM or SIM-like entity (build prop on CDMA) 3040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 3050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static void setWifiCountryCodeFromMcc(Context context, int mcc) { 3060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String country = MccTable.countryCodeForMcc(mcc); 3070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (!country.isEmpty()) { 3080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Log.d(LOG_TAG, "WIFI_COUNTRY_CODE set to " + country); 3090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville WifiManager wM = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 3100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville //persist 3110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville wM.setCountryCode(country, true); 3120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville static { 3160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table = new ArrayList<MccEntry>(240); 3170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /* 3200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * The table below is built from two resources: 3210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 3220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 1) ITU "Mobile Network Code (MNC) for the international 3230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * identification plan for mobile terminals and mobile users" 3240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * which is available as an annex to the ITU operational bulletin 3250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * available here: http://www.itu.int/itu-t/bulletin/annex.html 3260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 3270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 2) The ISO 3166 country codes list, available here: 3280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/index.html 3290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 3300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * This table has not been verified. 3310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 3320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 3330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(202,"gr",2)); //Greece 3350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(204,"nl",2,"nl")); //Netherlands (Kingdom of the) 3360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(206,"be",2)); //Belgium 3370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(208,"fr",2,"fr")); //France 3380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(212,"mc",2)); //Monaco (Principality of) 3390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(213,"ad",2)); //Andorra (Principality of) 3400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(214,"es",2,"es")); //Spain 3410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(216,"hu",2)); //Hungary (Republic of) 3420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(218,"ba",2)); //Bosnia and Herzegovina 3430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(219,"hr",2)); //Croatia (Republic of) 3440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(220,"rs",2)); //Serbia and Montenegro 3450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(222,"it",2,"it")); //Italy 3460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(225,"va",2,"it")); //Vatican City State 3470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(226,"ro",2)); //Romania 3480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(228,"ch",2,"de")); //Switzerland (Confederation of) 3490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(230,"cz",2,"cs")); //Czech Republic 3500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(231,"sk",2)); //Slovak Republic 3510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(232,"at",2,"de")); //Austria 3520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(234,"gb",2,"en")); //United Kingdom of Great Britain and Northern Ireland 3530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(235,"gb",2,"en")); //United Kingdom of Great Britain and Northern Ireland 3540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(238,"dk",2)); //Denmark 3550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(240,"se",2)); //Sweden 3560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(242,"no",2)); //Norway 3570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(244,"fi",2)); //Finland 3580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(246,"lt",2)); //Lithuania (Republic of) 3590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(247,"lv",2)); //Latvia (Republic of) 3600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(248,"ee",2)); //Estonia (Republic of) 3610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(250,"ru",2)); //Russian Federation 3620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(255,"ua",2)); //Ukraine 3630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(257,"by",2)); //Belarus (Republic of) 3640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(259,"md",2)); //Moldova (Republic of) 3650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(260,"pl",2)); //Poland (Republic of) 3660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(262,"de",2,"de")); //Germany (Federal Republic of) 3670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(266,"gi",2)); //Gibraltar 3680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(268,"pt",2)); //Portugal 3690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(270,"lu",2)); //Luxembourg 3700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(272,"ie",2,"en")); //Ireland 3710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(274,"is",2)); //Iceland 3720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(276,"al",2)); //Albania (Republic of) 3730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(278,"mt",2)); //Malta 3740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(280,"cy",2)); //Cyprus (Republic of) 3750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(282,"ge",2)); //Georgia 3760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(283,"am",2)); //Armenia (Republic of) 3770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(284,"bg",2)); //Bulgaria (Republic of) 3780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(286,"tr",2)); //Turkey 3790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(288,"fo",2)); //Faroe Islands 3800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(289,"ge",2)); //Abkhazia (Georgia) 3810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(290,"gl",2)); //Greenland (Denmark) 3820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(292,"sm",2)); //San Marino (Republic of) 3830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(293,"si",2)); //Slovenia (Republic of) 3840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(294,"mk",2)); //The Former Yugoslav Republic of Macedonia 3850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(295,"li",2)); //Liechtenstein (Principality of) 3860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(297,"me",2)); //Montenegro (Republic of) 3870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(302,"ca",3,"")); //Canada 3880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(308,"pm",2)); //Saint Pierre and Miquelon (Collectivit territoriale de la Rpublique franaise) 3890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(310,"us",3,"en")); //United States of America 3900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(311,"us",3,"en")); //United States of America 3910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(312,"us",3,"en")); //United States of America 3920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(313,"us",3,"en")); //United States of America 3930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(314,"us",3,"en")); //United States of America 3940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(315,"us",3,"en")); //United States of America 3950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(316,"us",3,"en")); //United States of America 3960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(330,"pr",2)); //Puerto Rico 3970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(332,"vi",2)); //United States Virgin Islands 3980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(334,"mx",3)); //Mexico 3990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(338,"jm",3)); //Jamaica 4000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(340,"gp",2)); //Guadeloupe (French Department of) 4010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(342,"bb",3)); //Barbados 4020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(344,"ag",3)); //Antigua and Barbuda 4030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(346,"ky",3)); //Cayman Islands 4040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(348,"vg",3)); //British Virgin Islands 4050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(350,"bm",2)); //Bermuda 4060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(352,"gd",2)); //Grenada 4070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(354,"ms",2)); //Montserrat 4080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(356,"kn",2)); //Saint Kitts and Nevis 4090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(358,"lc",2)); //Saint Lucia 4100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(360,"vc",2)); //Saint Vincent and the Grenadines 4110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(362,"ai",2)); //Netherlands Antilles 4120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(363,"aw",2)); //Aruba 4130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(364,"bs",2)); //Bahamas (Commonwealth of the) 4140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(365,"ai",3)); //Anguilla 4150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(366,"dm",2)); //Dominica (Commonwealth of) 4160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(368,"cu",2)); //Cuba 4170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(370,"do",2)); //Dominican Republic 4180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(372,"ht",2)); //Haiti (Republic of) 4190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(374,"tt",2)); //Trinidad and Tobago 4200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(376,"tc",2)); //Turks and Caicos Islands 4210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(400,"az",2)); //Azerbaijani Republic 4220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(401,"kz",2)); //Kazakhstan (Republic of) 4230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(402,"bt",2)); //Bhutan (Kingdom of) 4240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(404,"in",2)); //India (Republic of) 4250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(405,"in",2)); //India (Republic of) 4260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(410,"pk",2)); //Pakistan (Islamic Republic of) 4270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(412,"af",2)); //Afghanistan 4280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(413,"lk",2)); //Sri Lanka (Democratic Socialist Republic of) 4290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(414,"mm",2)); //Myanmar (Union of) 4300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(415,"lb",2)); //Lebanon 4310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(416,"jo",2)); //Jordan (Hashemite Kingdom of) 4320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(417,"sy",2)); //Syrian Arab Republic 4330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(418,"iq",2)); //Iraq (Republic of) 4340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(419,"kw",2)); //Kuwait (State of) 4350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(420,"sa",2)); //Saudi Arabia (Kingdom of) 4360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(421,"ye",2)); //Yemen (Republic of) 4370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(422,"om",2)); //Oman (Sultanate of) 4380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(423,"ps",2)); //Palestine 4390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(424,"ae",2)); //United Arab Emirates 4400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(425,"il",2)); //Israel (State of) 4410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(426,"bh",2)); //Bahrain (Kingdom of) 4420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(427,"qa",2)); //Qatar (State of) 4430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(428,"mn",2)); //Mongolia 4440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(429,"np",2)); //Nepal 4450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(430,"ae",2)); //United Arab Emirates 4460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(431,"ae",2)); //United Arab Emirates 4470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(432,"ir",2)); //Iran (Islamic Republic of) 4480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(434,"uz",2)); //Uzbekistan (Republic of) 4490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(436,"tj",2)); //Tajikistan (Republic of) 4500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(437,"kg",2)); //Kyrgyz Republic 4510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(438,"tm",2)); //Turkmenistan 4520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(440,"jp",2,"ja")); //Japan 4530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(441,"jp",2,"ja")); //Japan 4540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(450,"kr",2,"ko")); //Korea (Republic of) 4550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(452,"vn",2)); //Viet Nam (Socialist Republic of) 4560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(454,"hk",2)); //"Hong Kong, China" 4570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(455,"mo",2)); //"Macao, China" 4580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(456,"kh",2)); //Cambodia (Kingdom of) 4590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(457,"la",2)); //Lao People's Democratic Republic 4600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(460,"cn",2,"zh")); //China (People's Republic of) 4610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(461,"cn",2,"zh")); //China (People's Republic of) 4620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(466,"tw",2)); //"Taiwan, China" 4630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(467,"kp",2)); //Democratic People's Republic of Korea 4640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(470,"bd",2)); //Bangladesh (People's Republic of) 4650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(472,"mv",2)); //Maldives (Republic of) 4660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(502,"my",2)); //Malaysia 4670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(505,"au",2,"en")); //Australia 4680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(510,"id",2)); //Indonesia (Republic of) 4690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(514,"tl",2)); //Democratic Republic of Timor-Leste 4700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(515,"ph",2)); //Philippines (Republic of the) 4710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(520,"th",2)); //Thailand 4720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(525,"sg",2,"en")); //Singapore (Republic of) 4730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(528,"bn",2)); //Brunei Darussalam 4740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(530,"nz",2, "en")); //New Zealand 4750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(534,"mp",2)); //Northern Mariana Islands (Commonwealth of the) 4760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(535,"gu",2)); //Guam 4770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(536,"nr",2)); //Nauru (Republic of) 4780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(537,"pg",2)); //Papua New Guinea 4790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(539,"to",2)); //Tonga (Kingdom of) 4800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(540,"sb",2)); //Solomon Islands 4810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(541,"vu",2)); //Vanuatu (Republic of) 4820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(542,"fj",2)); //Fiji (Republic of) 4830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(543,"wf",2)); //Wallis and Futuna (Territoire franais d'outre-mer) 4840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(544,"as",2)); //American Samoa 4850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(545,"ki",2)); //Kiribati (Republic of) 4860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(546,"nc",2)); //New Caledonia (Territoire franais d'outre-mer) 4870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(547,"pf",2)); //French Polynesia (Territoire franais d'outre-mer) 4880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(548,"ck",2)); //Cook Islands 4890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(549,"ws",2)); //Samoa (Independent State of) 4900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(550,"fm",2)); //Micronesia (Federated States of) 4910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(551,"mh",2)); //Marshall Islands (Republic of the) 4920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(552,"pw",2)); //Palau (Republic of) 4930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(602,"eg",2)); //Egypt (Arab Republic of) 4940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(603,"dz",2)); //Algeria (People's Democratic Republic of) 4950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(604,"ma",2)); //Morocco (Kingdom of) 4960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(605,"tn",2)); //Tunisia 4970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(606,"ly",2)); //Libya (Socialist People's Libyan Arab Jamahiriya) 4980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(607,"gm",2)); //Gambia (Republic of the) 4990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(608,"sn",2)); //Senegal (Republic of) 5000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(609,"mr",2)); //Mauritania (Islamic Republic of) 5010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(610,"ml",2)); //Mali (Republic of) 5020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(611,"gn",2)); //Guinea (Republic of) 5030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(612,"ci",2)); //Cte d'Ivoire (Republic of) 5040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(613,"bf",2)); //Burkina Faso 5050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(614,"ne",2)); //Niger (Republic of the) 5060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(615,"tg",2)); //Togolese Republic 5070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(616,"bj",2)); //Benin (Republic of) 5080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(617,"mu",2)); //Mauritius (Republic of) 5090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(618,"lr",2)); //Liberia (Republic of) 5100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(619,"sl",2)); //Sierra Leone 5110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(620,"gh",2)); //Ghana 5120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(621,"ng",2)); //Nigeria (Federal Republic of) 5130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(622,"td",2)); //Chad (Republic of) 5140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(623,"cf",2)); //Central African Republic 5150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(624,"cm",2)); //Cameroon (Republic of) 5160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(625,"cv",2)); //Cape Verde (Republic of) 5170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(626,"st",2)); //Sao Tome and Principe (Democratic Republic of) 5180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(627,"gq",2)); //Equatorial Guinea (Republic of) 5190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(628,"ga",2)); //Gabonese Republic 5200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(629,"cg",2)); //Congo (Republic of the) 5210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(630,"cg",2)); //Democratic Republic of the Congo 5220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(631,"ao",2)); //Angola (Republic of) 5230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(632,"gw",2)); //Guinea-Bissau (Republic of) 5240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(633,"sc",2)); //Seychelles (Republic of) 5250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(634,"sd",2)); //Sudan (Republic of the) 5260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(635,"rw",2)); //Rwanda (Republic of) 5270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(636,"et",2)); //Ethiopia (Federal Democratic Republic of) 5280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(637,"so",2)); //Somali Democratic Republic 5290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(638,"dj",2)); //Djibouti (Republic of) 5300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(639,"ke",2)); //Kenya (Republic of) 5310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(640,"tz",2)); //Tanzania (United Republic of) 5320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(641,"ug",2)); //Uganda (Republic of) 5330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(642,"bi",2)); //Burundi (Republic of) 5340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(643,"mz",2)); //Mozambique (Republic of) 5350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(645,"zm",2)); //Zambia (Republic of) 5360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(646,"mg",2)); //Madagascar (Republic of) 5370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(647,"re",2)); //Reunion (French Department of) 5380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(648,"zw",2)); //Zimbabwe (Republic of) 5390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(649,"na",2)); //Namibia (Republic of) 5400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(650,"mw",2)); //Malawi 5410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(651,"ls",2)); //Lesotho (Kingdom of) 5420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(652,"bw",2)); //Botswana (Republic of) 5430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(653,"sz",2)); //Swaziland (Kingdom of) 5440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(654,"km",2)); //Comoros (Union of the) 5450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(655,"za",2,"en")); //South Africa (Republic of) 5460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(657,"er",2)); //Eritrea 5470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(702,"bz",2)); //Belize 5480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(704,"gt",2)); //Guatemala (Republic of) 5490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(706,"sv",2)); //El Salvador (Republic of) 5500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(708,"hn",3)); //Honduras (Republic of) 5510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(710,"ni",2)); //Nicaragua 5520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(712,"cr",2)); //Costa Rica 5530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(714,"pa",2)); //Panama (Republic of) 5540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(716,"pe",2)); //Peru 5550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(722,"ar",3)); //Argentine Republic 5560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(724,"br",2)); //Brazil (Federative Republic of) 5570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(730,"cl",2)); //Chile 5580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(732,"co",3)); //Colombia (Republic of) 5590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(734,"ve",2)); //Venezuela (Bolivarian Republic of) 5600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(736,"bo",2)); //Bolivia (Republic of) 5610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(738,"gy",2)); //Guyana 5620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(740,"ec",2)); //Ecuador 5630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(742,"gf",2)); //French Guiana (French Department of) 5640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(744,"py",2)); //Paraguay (Republic of) 5650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(746,"sr",2)); //Suriname (Republic of) 5660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(748,"uy",2)); //Uruguay (Eastern Republic of) 5670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville table.add(new MccEntry(750,"fk",2)); //Falkland Islands (Malvinas) 5680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville //table.add(new MccEntry(901,"",2)); //"International Mobile, shared code" 5690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Collections.sort(table); 5710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville} 573