Full AIX Code
package com.ry.dialcode;
import android.content.Context;
import android.telephony.TelephonyManager;
import com.google.appinventor.components.annotations.DesignerComponent;
import com.google.appinventor.components.annotations.SimpleFunction;
import com.google.appinventor.components.annotations.SimpleEvent;
import com.google.appinventor.components.common.ComponentCategory;
import com.google.appinventor.components.runtime.AndroidNonvisibleComponent;
import com.google.appinventor.components.runtime.ComponentContainer;
import com.google.appinventor.components.runtime.EventDispatcher;
import java.util.HashMap;
import java.util.Locale;
@DesignerComponent(
version = 1,
description = "Detect country, dial code, and flag emoji for phone authentication",
category = ComponentCategory.EXTENSION,
nonVisible = true,
iconName = "aiwebres/icon.png"
)
public class RYDialCode extends AndroidNonvisibleComponent {
private Context context;
private HashMap<String,String> dialMap;
public RYDialCode(ComponentContainer container) {
super(container.$form());
context = container.$context();
initDialCodes();
}
private void initDialCodes() {
dialMap = new HashMap<String,String>();
dialMap.put("AF","+93");dialMap.put("AL","+355");dialMap.put("DZ","+213");dialMap.put("AS","+1684");
dialMap.put("AD","+376");dialMap.put("AO","+244");dialMap.put("AI","+1264");dialMap.put("AQ","+672");
dialMap.put("AG","+1268");dialMap.put("AR","+54");dialMap.put("AM","+374");dialMap.put("AW","+297");
dialMap.put("AU","+61");dialMap.put("AT","+43");dialMap.put("AZ","+994");dialMap.put("BS","+1242");
dialMap.put("BH","+973");dialMap.put("BD","+880");dialMap.put("BB","+1246");dialMap.put("BY","+375");
dialMap.put("BE","+32");dialMap.put("BZ","+501");dialMap.put("BJ","+229");dialMap.put("BM","+1441");
dialMap.put("BT","+975");dialMap.put("BO","+591");dialMap.put("BA","+387");dialMap.put("BW","+267");
dialMap.put("BR","+55");dialMap.put("IO","+246");dialMap.put("VG","+1284");dialMap.put("BN","+673");
dialMap.put("BG","+359");dialMap.put("BF","+226");dialMap.put("BI","+257");dialMap.put("KH","+855");
dialMap.put("CM","+237");dialMap.put("CA","+1");dialMap.put("CV","+238");dialMap.put("KY","+1345");
dialMap.put("CF","+236");dialMap.put("TD","+235");dialMap.put("CL","+56");dialMap.put("CN","+86");
dialMap.put("CX","+61");dialMap.put("CC","+61");dialMap.put("CO","+57");dialMap.put("KM","+269");
dialMap.put("CK","+682");dialMap.put("CR","+506");dialMap.put("HR","+385");dialMap.put("CU","+53");
dialMap.put("CW","+599");dialMap.put("CY","+357");dialMap.put("CZ","+420");dialMap.put("CD","+243");
dialMap.put("DK","+45");dialMap.put("DJ","+253");dialMap.put("DM","+1767");dialMap.put("DO","+1809");
dialMap.put("EC","+593");dialMap.put("EG","+20");dialMap.put("SV","+503");dialMap.put("GQ","+240");
dialMap.put("ER","+291");dialMap.put("EE","+372");dialMap.put("ET","+251");dialMap.put("FK","+500");
dialMap.put("FO","+298");dialMap.put("FJ","+679");dialMap.put("FI","+358");dialMap.put("FR","+33");
dialMap.put("PF","+689");dialMap.put("GA","+241");dialMap.put("GM","+220");dialMap.put("GE","+995");
dialMap.put("DE","+49");dialMap.put("GH","+233");dialMap.put("GI","+350");dialMap.put("GR","+30");
dialMap.put("GL","+299");dialMap.put("GD","+1473");dialMap.put("GU","+1671");dialMap.put("GT","+502");
dialMap.put("GG","+44");dialMap.put("GN","+224");dialMap.put("GW","+245");dialMap.put("GY","+592");
dialMap.put("HT","+509");dialMap.put("HN","+504");dialMap.put("HK","+852");dialMap.put("HU","+36");
dialMap.put("IS","+354");dialMap.put("IN","+91");dialMap.put("ID","+62");dialMap.put("IR","+98");
dialMap.put("IQ","+964");dialMap.put("IE","+353");dialMap.put("IM","+44");dialMap.put("IL","+972");
dialMap.put("IT","+39");dialMap.put("CI","+225");dialMap.put("JM","+1876");dialMap.put("JP","+81");
dialMap.put("JE","+44");dialMap.put("JO","+962");dialMap.put("KZ","+7");dialMap.put("KE","+254");
dialMap.put("KI","+686");dialMap.put("KW","+965");dialMap.put("KG","+996");dialMap.put("LA","+856");
dialMap.put("LV","+371");dialMap.put("LB","+961");dialMap.put("LS","+266");dialMap.put("LR","+231");
dialMap.put("LY","+218");dialMap.put("LI","+423");dialMap.put("LT","+370");dialMap.put("LU","+352");
dialMap.put("MO","+853");dialMap.put("MK","+389");dialMap.put("MG","+261");dialMap.put("MW","+265");
dialMap.put("MY","+60");dialMap.put("MV","+960");dialMap.put("ML","+223");dialMap.put("MT","+356");
dialMap.put("MH","+692");dialMap.put("MR","+222");dialMap.put("MU","+230");dialMap.put("MX","+52");
dialMap.put("FM","+691");dialMap.put("MD","+373");dialMap.put("MC","+377");dialMap.put("MN","+976");
dialMap.put("ME","+382");dialMap.put("MS","+1664");dialMap.put("MA","+212");dialMap.put("MZ","+258");
dialMap.put("MM","+95");dialMap.put("NA","+264");dialMap.put("NR","+674");dialMap.put("NP","+977");
dialMap.put("NL","+31");dialMap.put("NC","+687");dialMap.put("NZ","+64");dialMap.put("NI","+505");
dialMap.put("NE","+227");dialMap.put("NG","+234");dialMap.put("NU","+683");dialMap.put("NF","+672");
dialMap.put("KP","+850");dialMap.put("MP","+1670");dialMap.put("NO","+47");dialMap.put("OM","+968");
dialMap.put("PK","+92");dialMap.put("PW","+680");dialMap.put("PS","+970");dialMap.put("PA","+507");
dialMap.put("PG","+675");dialMap.put("PY","+595");dialMap.put("PE","+51");dialMap.put("PH","+63");
dialMap.put("PN","+64");dialMap.put("PL","+48");dialMap.put("PT","+351");dialMap.put("PR","+1787");
dialMap.put("QA","+974");dialMap.put("CG","+242");dialMap.put("RE","+262");dialMap.put("RO","+40");
dialMap.put("RU","+7");dialMap.put("RW","+250");dialMap.put("BL","+590");dialMap.put("SH","+290");
dialMap.put("KN","+1869");dialMap.put("LC","+1758");dialMap.put("MF","+590");dialMap.put("PM","+508");
dialMap.put("VC","+1784");dialMap.put("WS","+685");dialMap.put("SM","+378");dialMap.put("ST","+239");
dialMap.put("SA","+966");dialMap.put("SN","+221");dialMap.put("RS","+381");dialMap.put("SC","+248");
dialMap.put("SL","+232");dialMap.put("SG","+65");dialMap.put("SX","+1721");dialMap.put("SK","+421");
dialMap.put("SI","+386");dialMap.put("SB","+677");dialMap.put("SO","+252");dialMap.put("ZA","+27");
dialMap.put("KR","+82");dialMap.put("SS","+211");dialMap.put("ES","+34");dialMap.put("LK","+94");
dialMap.put("SD","+249");dialMap.put("SR","+597");dialMap.put("SJ","+47");dialMap.put("SZ","+268");
dialMap.put("SE","+46");dialMap.put("CH","+41");dialMap.put("SY","+963");dialMap.put("TW","+886");
dialMap.put("TJ","+992");dialMap.put("TZ","+255");dialMap.put("TH","+66");dialMap.put("TL","+670");
dialMap.put("TG","+228");dialMap.put("TK","+690");dialMap.put("TO","+676");dialMap.put("TT","+1868");
dialMap.put("TN","+216");dialMap.put("TR","+90");dialMap.put("TM","+993");dialMap.put("TC","+1649");
dialMap.put("TV","+688");dialMap.put("UG","+256");dialMap.put("UA","+380");dialMap.put("AE","+971");
dialMap.put("GB","+44");dialMap.put("US","+1");dialMap.put("UY","+598");dialMap.put("UZ","+998");
dialMap.put("VU","+678");dialMap.put("VA","+379");dialMap.put("VE","+58");dialMap.put("VN","+84");
dialMap.put("WF","+681");dialMap.put("EH","+212");dialMap.put("YE","+967");dialMap.put("ZM","+260");
dialMap.put("ZW","+263");
}
private String getCountryISO() {
try {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
String iso = tm.getSimCountryIso();
if (iso == null || iso.length() == 0) iso = tm.getNetworkCountryIso();
if (iso == null || iso.length() == 0) iso = Locale.getDefault().getCountry();
if (iso != null) return iso.toUpperCase();
} catch (Exception e) {}
return "IN";
}
private String getFlagEmoji(String countryISO) {
if (countryISO == null || countryISO.length() != 2) return "";
int first = 0x1F1E6 + (countryISO.charAt(0) - 'A');
int second = 0x1F1E6 + (countryISO.charAt(1) - 'A');
return new String(Character.toChars(first)) + new String(Character.toChars(second));
}
@SimpleFunction(description="Detect country, dial code, and flag emoji automatically")
public void DetectDialCode() {
String iso = getCountryISO();
String dial = dialMap.get(iso);
if (dial == null) dial = "+91";
String flag = getFlagEmoji(iso);
OnDialCodeDetected(iso, dial, flag);
}
@SimpleEvent(description="Triggered when dial code detected")
public void OnDialCodeDetected(String countryISO, String dialCode, String flagEmoji) {
EventDispatcher.dispatchEvent(this,"OnDialCodeDetected",countryISO,dialCode,flagEmoji);
}
@SimpleFunction(description="Get dial code by country ISO manually")
public String GetDialCodeByISO(String countryISO) {
String d = dialMap.get(countryISO.toUpperCase());
if (d == null) return "";
return d;
}
@SimpleFunction(description="Get detected country ISO")
public String GetCountryISO() {
return getCountryISO();
}
}