/** * Copyright (C) 2010-2012 Regis Montoya (aka r3gis - www.r3gis.fr) * This file is part of CSipSimple. * * CSipSimple is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * If you own a pjsip commercial license you can also redistribute it * and/or modify it under the terms of the GNU Lesser General Public License * as an android library. * * CSipSimple is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with CSipSimple. If not, see <http://www.gnu.org/licenses/>. */ package com.csipsimple.wizards; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.util.Log; import com.csipsimple.R; import com.csipsimple.api.SipProfile; import com.csipsimple.utils.CustomDistribution; import com.csipsimple.wizards.impl.*; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.Map.Entry; import java.util.Set; public class WizardUtils { public static class WizardInfo { public String label; public String id; public int icon; public int priority=99; public Locale[] countries; public boolean isGeneric = false; public boolean isWorld = false; public Class<?> classObject; public WizardInfo(String aId, String aLabel, int aIcon, int aPriority, Locale[] aCountries, boolean aIsGeneric, boolean aIsWorld, Class<?> aClassObject) { id = aId; label = aLabel; icon = aIcon; priority = aPriority; countries = aCountries; isGeneric = aIsGeneric; isWorld = aIsWorld; classObject = aClassObject; } }; private static boolean initDone = false; public static final String LABEL = "LABEL"; public static final String ICON = "ICON"; public static final String ID = "ID"; public static final String LANG_DISPLAY = "DISPLAY"; public static final String PRIORITY = "PRIORITY"; public static final String PRIORITY_INT = "PRIORITY_INT"; public static final String EXPERT_WIZARD_TAG = "EXPERT"; public static final String BASIC_WIZARD_TAG = "BASIC"; public static final String ADVANCED_WIZARD_TAG = "ADVANCED"; public static final String LOCAL_WIZARD_TAG = "LOCAL"; private static HashMap<String, WizardInfo> WIZARDS_DICT; private static class WizardPrioComparator implements Comparator<Map<String, Object>> { @Override public int compare(Map<String, Object> infos1, Map<String, Object> infos2) { if (infos1 != null && infos2 != null) { if((Boolean) infos1.get(PRIORITY_INT)) { Integer w1 = (Integer) infos1.get(PRIORITY); Integer w2 = (Integer) infos2.get(PRIORITY); //Log.d(THIS_FILE, "Compare : "+w1+ " vs "+w2); if (w1 > w2) { return -1; } if (w1 < w2) { return 1; } }else { String name1 = (String) infos1.get(LABEL); String name2 = (String) infos2.get(LABEL); return name1.compareToIgnoreCase(name2); } } return 0; } } private static Locale locale(String isoCode) { String[] codes = isoCode.split("_"); if(codes.length == 2) { return new Locale(codes[0].toLowerCase(), codes[1].toUpperCase()); }else if(codes.length == 1){ return new Locale(codes[0].toLowerCase()); } Log.e("WizardUtils", "Invalid locale "+isoCode); return null; } /** * Initialize wizards list */ private static void initWizards() { WIZARDS_DICT = new HashMap<String, WizardInfo>(); //Generic if(CustomDistribution.distributionWantsGeneric(BASIC_WIZARD_TAG)) { WIZARDS_DICT.put(BASIC_WIZARD_TAG, new WizardInfo(BASIC_WIZARD_TAG, "Basic", R.drawable.ic_wizard_basic, 50, new Locale[] {}, true, false, Basic.class)); } if(CustomDistribution.distributionWantsGeneric(ADVANCED_WIZARD_TAG)) { WIZARDS_DICT.put(ADVANCED_WIZARD_TAG, new WizardInfo(ADVANCED_WIZARD_TAG, "Advanced", R.drawable.ic_wizard_advanced, 10, new Locale[] {}, true, false, Advanced.class)); } if(CustomDistribution.distributionWantsGeneric(EXPERT_WIZARD_TAG)) { WIZARDS_DICT.put(EXPERT_WIZARD_TAG, new WizardInfo(EXPERT_WIZARD_TAG, "Expert", R.drawable.ic_wizard_expert, 5, new Locale[] {}, true, false, Expert.class)); } if(CustomDistribution.distributionWantsGeneric(LOCAL_WIZARD_TAG)) { WIZARDS_DICT.put(LOCAL_WIZARD_TAG, new WizardInfo(LOCAL_WIZARD_TAG, "Local", R.drawable.ic_wizard_expert, 1, new Locale[] {}, true, false, Local.class)); } if(CustomDistribution.distributionWantsOtherProviders()) { WIZARDS_DICT.put("OSTN", new WizardInfo("OSTN", "OSTN", R.drawable.ic_wizard_ostn, 4, new Locale[] {}, true, false, OSTN.class)); //World wide WIZARDS_DICT.put("EKIGA", new WizardInfo("EKIGA", "Ekiga", R.drawable.ic_wizard_ekiga, 50, new Locale[]{}, false, true, Ekiga.class)); WIZARDS_DICT.put("SIP2SIP", new WizardInfo("SIP2SIP", "Sip2Sip", R.drawable.ic_wizard_sip2sip, 10, new Locale[]{}, false, true, Sip2Sip.class)); WIZARDS_DICT.put("IPTEL", new WizardInfo("IPTEL", "IpTel", R.drawable.ic_wizard_iptel, 30, new Locale[]{}, false, true, IpTel.class)); WIZARDS_DICT.put("SIPSORCERY", new WizardInfo("SIPSORCERY", "SIPSorcery", R.drawable.ic_wizard_sipsorcery, 35, new Locale[]{}, false, true, SipSorcery.class)); WIZARDS_DICT.put("PBXES", new WizardInfo("PBXES", "Pbxes.org", R.drawable.ic_wizard_pbxes, 20, new Locale[]{}, false, true, Pbxes.class)); WIZARDS_DICT.put("ECS", new WizardInfo("ECS", "Alcatel-Lucent OmniPCX Office", R.drawable.ic_wizard_ale, 5, new Locale[]{}, false, true, OXO810.class)); WIZARDS_DICT.put("ITTELENET", new WizardInfo("ITTELENET", "ITTelenet", R.drawable.ic_wizard_ittelenet, 10, new Locale[]{}, false, true, ITTelenet.class)); WIZARDS_DICT.put("DELTATHREE", new WizardInfo("DELTATHREE", "deltathree", R.drawable.ic_wizard_deltathree, 35, new Locale[]{ }, false, true, DeltaThree.class)); WIZARDS_DICT.put("CAMUNDANET", new WizardInfo("CAMUNDANET", "CamundaNet", R.drawable.ic_wizard_camundanet, 15, new Locale[]{}, false, true, CamundaNet.class)); WIZARDS_DICT.put("BETAMAX", new WizardInfo("BETAMAX", "Betamax clone", R.drawable.ic_wizard_basic, 30, new Locale[]{}, false, true, Betamax.class)); WIZARDS_DICT.put("SIPCEL", new WizardInfo("SIPCEL", "SipCel Telecom", R.drawable.ic_wizard_sipcel, 14, new Locale[]{}, false, true, SipCel.class)); WIZARDS_DICT.put("LOCALPHONE", new WizardInfo("LOCALPHONE", "Localphone", R.drawable.ic_wizard_localphone, 10, new Locale[]{ }, false, true, Localphone.class)); WIZARDS_DICT.put("BROADSOFT", new WizardInfo("BROADSOFT", "Broadsoft", R.drawable.ic_wizard_broadsoft, 9, new Locale[]{ }, false, true, Broadsoft.class)); WIZARDS_DICT.put("DVCNG", new WizardInfo("DVCNG", "DVC'NG", R.drawable.ic_wizard_dvcng, 16, new Locale[]{ }, false, true, DvcNg.class)); WIZARDS_DICT.put("PFINGO", new WizardInfo("PFINGO", "Pfingo", R.drawable.ic_wizard_pfingo, 19, new Locale[]{ }, false, true, Pfingo.class)); WIZARDS_DICT.put("FASTVOIP", new WizardInfo("FASTVOIP", "FastVoip", R.drawable.ic_wizard_fastvoip, 20, new Locale[]{ }, false, true, FastVoip.class)); WIZARDS_DICT.put("SIPWISE", new WizardInfo("SIPWISE", "sipwise", R.drawable.ic_wizard_sipwise, 34, new Locale[]{ }, false, true, SipWise.class)); WIZARDS_DICT.put("VOIPMS", new WizardInfo("VOIPMS", "VoIP.ms", R.drawable.ic_wizard_voipms, 18, new Locale[]{ }, false, true, VoipMS.class)); WIZARDS_DICT.put("SONETEL", new WizardInfo("SONETEL", "Sonetel", R.drawable.ic_wizard_sonetel, 17, new Locale[]{ }, false, true, Sonetel.class)); WIZARDS_DICT.put("RAPIDVOX", new WizardInfo("RAPIDVOX", "Rapidvox", R.drawable.ic_wizard_rapidvox, 19, new Locale[]{ }, false, true, Rapidvox.class)); WIZARDS_DICT.put("TANSTAGI", new WizardInfo("TANSTAGI", "tanstagi", R.drawable.ic_wizard_tanstagi, 35, new Locale[]{ }, false, true, Tanstagi.class)); WIZARDS_DICT.put("NYMGO", new WizardInfo("NYMGO", "Nymgo", R.drawable.ic_wizard_nymgo, 18, new Locale[]{ }, false, true, Nymgo.class)); WIZARDS_DICT.put("SIPKOM", new WizardInfo("SIPKOM", "sipkom", R.drawable.ic_wizard_sipkom, 18, new Locale[]{ }, false, true, Sipkom.class)); WIZARDS_DICT.put("ABCVOIP", new WizardInfo("ABCVOIP", "ABC-VoIP", R.drawable.ic_wizard_abcvoip, 18, new Locale[]{ }, false, true, AbcVoip.class)); WIZARDS_DICT.put("AMIVOX", new WizardInfo("AMIVOX", "Amivox", R.drawable.ic_wizard_amivox, 18, new Locale[]{ }, false, true, Amivox.class)); WIZARDS_DICT.put("VOIPNOR", new WizardInfo("VOIPNOR", "VOIPNOR", R.drawable.ic_wizard_voipnor, 9, new Locale[]{ }, false, true, VoipNor.class)); WIZARDS_DICT.put("CRYPTEL", new WizardInfo("CRYPTEL", "Cryptel Inc", R.drawable.ic_wizard_cryptel, 9, new Locale[]{ }, false, true, Cryptel.class)); WIZARDS_DICT.put("FLOWROUTE", new WizardInfo("FLOWROUTE", "Flowroute", R.drawable.ic_wizard_flowroute, 9, new Locale[]{ }, false, true, Flowroute.class)); WIZARDS_DICT.put("REACHPHONES", new WizardInfo("REACHPHONES", "ReachPhones.com", R.drawable.ic_wizard_reachphones, 9, new Locale[]{ }, false, true, ReachPhones.class)); WIZARDS_DICT.put("ZENG", new WizardInfo("ZENG", "Zeng", R.drawable.ic_wizard_zeng, 9, new Locale[]{ }, false, true, Zeng.class)); WIZARDS_DICT.put("VOIPTIGER", new WizardInfo("VOIPTIGER", "VoipTiger", R.drawable.ic_wizard_voiptiger, 9, new Locale[]{ }, false, true, VoipTiger.class)); WIZARDS_DICT.put("MITELEFONO", new WizardInfo("MITELEFONO", "MiTelefono", R.drawable.ic_wizard_mitelefono, 9, new Locale[]{ }, false, true, MiTelefono.class)); WIZARDS_DICT.put("CATITEL", new WizardInfo("CATITEL", "Catitel", R.drawable.ic_wizard_catitel, 9, new Locale[]{ }, false, true, Catitel.class)); WIZARDS_DICT.put("TECOBU", new WizardInfo("TECOBU", "TECOBU", R.drawable.ic_wizard_tecobu, 19, new Locale[]{ }, false, true, Tecobu.class)); WIZARDS_DICT.put("MESSAGENET", new WizardInfo("MESSAGENET", "Messagenet", R.drawable.ic_wizard_messagenet, 20, new Locale[]{}, false, true, Messagenet.class)); WIZARDS_DICT.put("ITALKWORLD", new WizardInfo("ITALKWORLD", "italkworld", R.drawable.ic_wizard_italkworld, 20, new Locale[]{}, false, true, ItalkWorld.class)); WIZARDS_DICT.put("MYDIVERT", new WizardInfo("MYDIVERT", "MyDivert", R.drawable.ic_wizard_mydivert, 5, new Locale[]{}, false, true, MyDivert.class)); WIZARDS_DICT.put("MOBILEWIFI", new WizardInfo("MOBILEWIFI", "Mobile-Wi.Fi", R.drawable.ic_wizard_mobilewifi, 5, new Locale[]{}, false, true, MobileWiFi.class)); WIZARDS_DICT.put("ONEWORLD", new WizardInfo("ONEWORLD", "1WorldSip", R.drawable.ic_wizard_oneworldsip, 45, new Locale[]{}, false, true, OneWorld.class)); WIZARDS_DICT.put("PTTJAPAN", new WizardInfo("PTTJAPAN", "PTTJapanPlus", R.drawable.ic_wizard_pttjapan, 45, new Locale[]{}, false, true, PTTJapan.class)); WIZARDS_DICT.put("PEOPLELINE", new WizardInfo("PEOPLELINE", "PeopleLine", R.drawable.ic_wizard_peopleline, 45, new Locale[]{}, false, true, PeopleLine.class)); WIZARDS_DICT.put("FEELYCALL", new WizardInfo("FEELYCALL", "FreelyCall", R.drawable.ic_wizard_freelycall, 45, new Locale[]{}, false, true, FreelyCall.class)); WIZARDS_DICT.put("TELENATIVE", new WizardInfo("TELENATIVE", "TeleNative", R.drawable.ic_wizard_telenative, 45, new Locale[]{}, false, true, TeleNative.class)); WIZARDS_DICT.put("DIRECTDIAL", new WizardInfo("DIRECTDIAL", "DirectDial", R.drawable.ic_wizard_directdial, 45, new Locale[]{}, false, true, DirectDial.class)); WIZARDS_DICT.put("TPOINT", new WizardInfo("TPOINT", "TPointSystems", R.drawable.ic_wizard_tpoint, 45, new Locale[]{}, false, true, TPoint.class)); WIZARDS_DICT.put("COMMPEAK", new WizardInfo("COMMPEAK", "CommPeak", R.drawable.ic_wizard_commpeak, 45, new Locale[]{}, false, true, CommPeak.class)); WIZARDS_DICT.put("SUPERCEL", new WizardInfo("SUPERCEL", "SuperCel", R.drawable.ic_wizard_supercel, 45, new Locale[]{}, false, true, SuperCel.class)); WIZARDS_DICT.put("SECURDATA", new WizardInfo("SECURDATA", "Secur Data", R.drawable.ic_wizard_securdata, 45, new Locale[]{}, false, true, SecurData.class)); WIZARDS_DICT.put("NECC", new WizardInfo("NECC", "Voip Necc", R.drawable.ic_wizard_necc, 45, new Locale[]{}, false, true, Necc.class)); WIZARDS_DICT.put("TELACCESS", new WizardInfo("TELACCESS", "TelAccess", R.drawable.ic_wizard_telaccess, 45, new Locale[]{}, false, true, TelAccess.class)); WIZARDS_DICT.put("SIGAPY", new WizardInfo("SIGAPY", "Sigapy", R.drawable.ic_wizard_sigapy, 45, new Locale[]{}, false, true, Sigapy.class)); WIZARDS_DICT.put("ENAKNET", new WizardInfo("ENAKNET", "Enaknet", R.drawable.ic_wizard_enaknet, 45, new Locale[]{}, false, true, Enaknet.class)); WIZARDS_DICT.put("PHONEPOWER", new WizardInfo("PHONEPOWER", "Phone Power", R.drawable.ic_wizard_phonepower, 45, new Locale[]{}, false, true, PhonePower.class)); WIZARDS_DICT.put("CALLWITHUS", new WizardInfo("CALLWITHUS", "CallWithUs", R.drawable.ic_wizard_callwithus, 8, new Locale[]{}, false, true, CallWithUs.class)); WIZARDS_DICT.put("OSTEL", new WizardInfo("OSTEL", "OSTel", R.drawable.ic_wizard_ostel, 8, new Locale[]{}, false, true, OSTel.class)); WIZARDS_DICT.put("NIBTEL", new WizardInfo("NIBTEL", "NIBTEL", R.drawable.ic_wizard_nibtel, 40, new Locale[]{ }, false, true, NibTel.class)); WIZARDS_DICT.put("SECURECALL", new WizardInfo("SECURECALL", "SecureCall", R.drawable.ic_wizard_securecall, 30, new Locale[]{ }, false, true, SecureCall.class)); WIZARDS_DICT.put("UKRCALL", new WizardInfo("UKRCALL", "UkrCall.net", R.drawable.ic_wizard_ukrcall, 30, new Locale[]{ }, false, true, UkrCall.class)); WIZARDS_DICT.put("SPOUT", new WizardInfo("SPOUT", "thespout.ca", R.drawable.ic_wizard_spout, 30, new Locale[]{ }, false, true, Spout.class)); WIZARDS_DICT.put("WIMANX", new WizardInfo("WIMANX", "Wi-Manx", R.drawable.ic_wizard_wimanx, 30, new Locale[]{ }, false, true, Wimanx.class)); WIZARDS_DICT.put("ADVANCEFONE", new WizardInfo("ADVANCEFONE", "Advancefone", R.drawable.ic_wizard_advancefone, 30, new Locale[]{ }, false, true, Advancefone.class)); WIZARDS_DICT.put("KURIRA", new WizardInfo("KURIRA", "Kurira", R.drawable.ic_wizard_kurira, 30, new Locale[]{ }, false, true, Kurira.class)); WIZARDS_DICT.put("SIPALO", new WizardInfo("SIPALO", "Sipalo", R.drawable.ic_wizard_sipalo, 30, new Locale[]{ }, false, true, Sipalo.class)); WIZARDS_DICT.put("ALONIA", new WizardInfo("ALONIA", "Alonia", R.drawable.ic_wizard_alonia, 30, new Locale[]{ }, false, true, Alonia.class)); WIZARDS_DICT.put("VOIP2GO", new WizardInfo("VOIP2GO", "voip2go", R.drawable.ic_wizard_voip2go, 30, new Locale[]{ }, false, true, Voip2go.class)); //Locales WIZARDS_DICT.put("CALLCENTRIC", new WizardInfo("CALLCENTRIC", "Callcentric", R.drawable.ic_wizard_callcentric, 10, new Locale[]{Locale.US}, false, false, Callcentric.class)); WIZARDS_DICT.put("EUTELIA", new WizardInfo("EUTELIA", "Eutelia", R.drawable.ic_wizard_eutelia, 30, new Locale[]{Locale.ITALY}, false, false, Eutelia.class)); WIZARDS_DICT.put("WIMOBILE", new WizardInfo("WIMOBILE", "WiMobile", R.drawable.ic_wizard_wimobile, 20, new Locale[]{Locale.ITALY}, false, false, WiMobile.class)); WIZARDS_DICT.put("FREEPHONIE", new WizardInfo("FREEPHONIE", "Freephonie", R.drawable.ic_wizard_freephonie, 30, new Locale[]{Locale.FRANCE}, false, false, Freephonie.class)); // Neuftalk is obsolete WIZARDS_DICT.put("NEUFTALK", new WizardInfo("NEUFTALK", "NeufTalk", R.drawable.ic_wizard_neuftalk, 1, new Locale[]{Locale.FRANCE}, false, false, NeufTalk.class)); WIZARDS_DICT.put("LIBERTALK", new WizardInfo("LIBERTALK", "SFR LiberTalk", R.drawable.ic_wizard_sfr, 25, new Locale[]{Locale.FRANCE}, false, false, LiberTalk.class)); WIZARDS_DICT.put("IPPI", new WizardInfo("IPPI", "ippi", R.drawable.ic_wizard_ippi, 21, new Locale[]{ Locale.FRENCH, Locale.CANADA, Locale.US, }, false, false, Ippi.class)); WIZARDS_DICT.put("KEYYO", new WizardInfo("KEYYO", "Keyyo", R.drawable.ic_wizard_keyyo, 9, new Locale[]{Locale.FRANCE}, false, false, Keyyo.class)); WIZARDS_DICT.put("PHONZO", new WizardInfo("PHONZO", "Phonzo", R.drawable.ic_wizard_phonzo, 10, new Locale[]{new Locale("SE")}, false, false, Phonzo.class)); WIZARDS_DICT.put("PLANETPHONE", new WizardInfo("PLANETPHONE", "PlanetPhone", R.drawable.ic_wizard_planetphone, 10, new Locale[]{ locale("bg_BG") }, false, false, PlanetPhone.class)); WIZARDS_DICT.put("SIPGATE", new WizardInfo("SIPGATE", "Sipgate DE", R.drawable.ic_wizard_sipgate, 10, new Locale[]{Locale.GERMANY}, false, false, Sipgate.class)); WIZARDS_DICT.put("SIPGATEUK", new WizardInfo("SIPGATEUK", "Sipgate UK", R.drawable.ic_wizard_sipgate_uk, 10, new Locale[]{}, false, true, SipgateUK.class)); WIZARDS_DICT.put("PENNYTEL", new WizardInfo("PENNYTEL", "Pennytel", R.drawable.ic_wizard_pennytel, 10, new Locale[]{ locale("en_AU") }, false, false, Pennytel.class)); /* WIZARDS_DICT.put("MAGICJACK", new WizardInfo("MAGICJACK", "MagicJack", R.drawable.ic_wizard_magicjack, 20, new Locale[]{ Locale.US, Locale.CANADA}, false, false, MagicJack.class)); */ WIZARDS_DICT.put("ONSIP", new WizardInfo("ONSIP", "OnSIP", R.drawable.ic_wizard_onsip, 30, new Locale[]{ Locale.US}, false, false, OnSip.class)); /* WIZARDS_DICT.put("GIZMO5", new WizardInfo("GIZMO5", "Gizmo5", R.drawable.ic_wizard_gizmo5, 15, new Locale[]{ Locale.US}, false, false, Gizmo5.class)); */ WIZARDS_DICT.put("BTONE", new WizardInfo("BTONE", "BlueTone", R.drawable.ic_wizard_btone, 20, new Locale[]{ Locale.US}, false, false, BTone.class)); WIZARDS_DICT.put("IINET", new WizardInfo("IINET", "iinet", R.drawable.ic_wizard_iinet, 5, new Locale[]{new Locale("EN", "au")}, false, false, IiNet.class)); WIZARDS_DICT.put("VPHONE", new WizardInfo("VPHONE", "VTel", R.drawable.ic_wizard_vphone, 5, new Locale[]{new Locale("EN", "au")}, false, false, VPhone.class)); WIZARDS_DICT.put("MYNETPHONE", new WizardInfo("MYNETPHONE", "My Net Phone", R.drawable.ic_wizard_mynetphone, 5, new Locale[]{new Locale("EN", "au")}, false, false, MyNetPhone.class)); WIZARDS_DICT.put("UKRTEL", new WizardInfo("UKRTEL", "UkrTelecom", R.drawable.ic_wizard_ukrtelecom, 10, new Locale[]{new Locale("UK", "ua")}, false, false, UkrTelecom.class)); WIZARDS_DICT.put("IP2MOBILE", new WizardInfo("IP2MOBILE", "ip2Mobile", R.drawable.ic_wizard_ip2mobile, 10, new Locale[]{new Locale("DK", "dk")}, false, false, Ip2Mobile.class)); WIZARDS_DICT.put("SPEAKEZI", new WizardInfo("SPEAKEZI", "Speakezi Telecoms", R.drawable.ic_wizard_speakezi, 30, new Locale[] {new Locale("EN", "za"), new Locale("AF", "za")}, false, false, Speakezi.class)); WIZARDS_DICT.put("POZITEL", new WizardInfo("POZITEL", "Pozitel", R.drawable.ic_wizard_pozitel, 30, new Locale[] {new Locale("TR", "tr")}, false, false, Pozitel.class)); WIZARDS_DICT.put("MONDOTALK", new WizardInfo("MONDOTALK", "Mondotalk", R.drawable.ic_wizard_mondotalk, 35, new Locale[] { Locale.ENGLISH, Locale.ITALIAN, Locale.GERMAN, new Locale("ES"), new Locale("PT"), locale("cs_CZ"),new Locale("sk"), new Locale("sl"), locale("zh_CN"), locale("zh_TW"), new Locale("ja"), new Locale("ko"), new Locale("ar_AE") }, false, false, Mondotalk.class)); WIZARDS_DICT.put("A1", new WizardInfo("A1", "A1", R.drawable.ic_wizard_a1, 20, new Locale[] {new Locale("DE", "at")}, false, false, A1.class)); WIZARDS_DICT.put("SCARLET", new WizardInfo("SCARLET", "scarlet.be", R.drawable.ic_wizard_scarlet, 10, new Locale[]{ locale("fr_BE"), locale("nl_BE"), locale("nl_NL") }, false, false, Scarlet.class)); WIZARDS_DICT.put("VONO", new WizardInfo("VONO", "vono", R.drawable.ic_wizard_vono, 10, new Locale[] {new Locale("PT", "br")}, false, false, Vono.class)); WIZARDS_DICT.put("OVH", new WizardInfo("OVH", "Ovh", R.drawable.ic_wizard_ovh, 20, new Locale[]{ Locale.FRANCE, locale("fr_BE"), Locale.GERMANY, Locale.UK }, false, false, Ovh.class)); WIZARDS_DICT.put("FAYN", new WizardInfo("FAYN", "FAYN", R.drawable.ic_wizard_fayn, 30, new Locale[]{ new Locale("CS", "cz"), }, false, false, Fayn.class)); WIZARDS_DICT.put("VIVA", new WizardInfo("VIVA", "Viva VoIP", R.drawable.ic_wizard_viva, 30, new Locale[]{ new Locale("EL", "gr"), }, false, false, Viva.class)); WIZARDS_DICT.put("SAPO", new WizardInfo("SAPO", "Sapo", R.drawable.ic_wizard_sapo, 20, new Locale[] {new Locale("PT", "pt")}, false, false, Sapo.class)); WIZARDS_DICT.put("BROADVOICE", new WizardInfo("BROADVOICE", "BroadVoice", R.drawable.ic_wizard_broadvoice, 19, new Locale[]{Locale.US}, false, false, BroadVoice.class)); WIZARDS_DICT.put("SIPTEL", new WizardInfo("SIPTEL", "Siptel", R.drawable.ic_wizard_siptel, 10, new Locale[] {new Locale("PT", "pt")}, false, false, SiptelPt.class)); WIZARDS_DICT.put("OPTIMUS", new WizardInfo("OPTIMUS", "Optimus", R.drawable.ic_wizard_optimus, 9, new Locale[] {new Locale("PT", "pt")}, false, false, Optimus.class)); WIZARDS_DICT.put("IPSHKA", new WizardInfo("IPSHKA", "IPshka", R.drawable.ic_wizard_ipshka, 10, new Locale[]{new Locale("UK", "ua")}, false, false, IPshka.class)); WIZARDS_DICT.put("ZADARMA", new WizardInfo("ZADARMA", "Zadarma", R.drawable.ic_wizard_zadarma, 10, new Locale[]{new Locale("UK", "ua"), locale("ru_RU"), locale("cs_CZ"), locale("ro_RO"), locale("hr_HR"), locale("bg_BG"),}, false, false, Zadarma.class)); WIZARDS_DICT.put("BLUEFACE", new WizardInfo("BLUEFACE", "Blueface", R.drawable.ic_wizard_blueface, 19, new Locale[]{ Locale.UK, new Locale("EN", "ie") }, false, false, Blueface.class)); WIZARDS_DICT.put("IPCOMMS", new WizardInfo("IPCOMMS", "IPComms", R.drawable.ic_wizard_ipcomms, 19, new Locale[]{ Locale.US, Locale.CANADA }, false, false, IPComms.class)); WIZARDS_DICT.put("INGETEL", new WizardInfo("INGETEL", "Ingetel Mobile", R.drawable.ic_wizard_ingetel, 20, new Locale[]{ locale("es_ES") }, false, false, Ingetel.class)); WIZARDS_DICT.put("VOIPTELIE", new WizardInfo("VOIPTELIE", "Voiptel Mobile", R.drawable.ic_wizard_voiptelie, 20, new Locale[]{ Locale.UK, Locale.CANADA, Locale.US, locale("en_IE"), locale("en_AU"), locale("es_ES"), locale("es_CO") }, false, false, VoipTel.class)); WIZARDS_DICT.put("EASYBELL", new WizardInfo("EASYBELL", "EasyBell", R.drawable.ic_wizard_easybell, 20, new Locale[]{ Locale.GERMANY }, false, false, EasyBell.class)); WIZARDS_DICT.put("NETELIP", new WizardInfo("NETELIP", "NETELIP", R.drawable.ic_wizard_netelip, 5, new Locale[]{ new Locale("es"), new Locale("pt"), Locale.FRENCH, Locale.GERMAN, Locale.ENGLISH, locale("bg_BG"), locale("nl_NL"), Locale.ITALY, Locale.CHINA, new Locale("sv"), locale("da_DA"), locale("nb_NO"), locale("nn_NO"), locale("ru_RU"), locale("tr_TR"), locale("el_GR"), locale("hu_HU"), locale("cs_CZ"), locale("ro_RO"), locale("hr_HR"), locale("uk_UA"), locale("ja_JP") }, false, false, Netelip.class)); WIZARDS_DICT.put("TELSOME", new WizardInfo("TELSOME", "Telsome", R.drawable.ic_wizard_telsome, 19, new Locale[]{ locale("es_ES") }, false, false, Telsome.class)); WIZARDS_DICT.put("INNOTEL", new WizardInfo("INNOTEL", "Innotel", R.drawable.ic_wizard_innotel, 19, new Locale[]{ locale("hu_HU") }, false, false, Innotel.class)); WIZARDS_DICT.put("EUROTELEFON", new WizardInfo("EUROTELEFON", "EuroTELEFON", R.drawable.ic_wizard_eurotelefon, 19, new Locale[]{ new Locale("pl") }, false, false, EuroTelefon.class)); WIZARDS_DICT.put("ODORIK", new WizardInfo("ODORIK", "Odorik.cz", R.drawable.ic_wizard_odorik, 19, new Locale[]{ locale("cs_CZ"),new Locale("sk"), new Locale("sl"), locale("uk_UA") }, false, false, Odorik.class)); WIZARDS_DICT.put("FREEPHONELINECA", new WizardInfo("FREEPHONELINECA", "Freephoneline.ca", R.drawable.ic_wizard_freephonelineca, 19, new Locale[]{ Locale.CANADA, locale("fr_CA") }, false, false, FreephoneLineCa.class)); WIZARDS_DICT.put("BABYTEL", new WizardInfo("BABYTEL", "Babytel", R.drawable.ic_wizard_babytel, 45, new Locale[]{ Locale.CANADA, locale("fr_CA") }, false, false, Babytel.class)); WIZARDS_DICT.put("SIPNET", new WizardInfo("SIPNET", "Sipnet", R.drawable.ic_wizard_sipnet, 10, new Locale[]{ locale("ru_RU") }, false, false, Sipnet.class)); WIZARDS_DICT.put("CELLIP", new WizardInfo("CELLIP", "Cellip", R.drawable.ic_wizard_cellip, 10, new Locale[]{ new Locale("sv") }, false, false, Cellip.class)); WIZARDS_DICT.put("SBOHEMPEVNALINKO", new WizardInfo("SBOHEMPEVNALINKO", "sbohempevnalinko.cz", R.drawable.ic_wizard_sbohempevnalinko, 19, new Locale[]{ locale("cs_CZ") }, false, false, Sbohempevnalinko.class)); WIZARDS_DICT.put("GRADWELL", new WizardInfo("GRADWELL", "Gradwell", R.drawable.ic_wizard_gradwell, 19, new Locale[]{ Locale.UK }, false, false, Gradwell.class)); WIZARDS_DICT.put("BGTEL", new WizardInfo("BGTEL", "BG-Tel", R.drawable.ic_wizard_bgtel, 10, new Locale[]{ locale("bg_BG") , Locale.CANADA, new Locale("EL", "gr"), Locale.US, Locale.GERMANY}, false, false, BGTel.class)); WIZARDS_DICT.put("BELCENTRALE", new WizardInfo("BELCENTRALE", "Belcentrale", R.drawable.ic_wizard_belcentrale, 20, new Locale[]{ locale("nl_BE"), locale("nl_NL"), locale("fr_BE") }, false, false, BelCentrale.class)); WIZARDS_DICT.put("FREECONET", new WizardInfo("FREECONET", "Freeconet", R.drawable.ic_wizard_freeconet, 19, new Locale[]{ new Locale("pl") }, false, false, Freeconet.class)); WIZARDS_DICT.put("TLENOFON", new WizardInfo("TLENOFON", "Tlenofon", R.drawable.ic_wizard_tlenofon, 19, new Locale[]{ new Locale("pl") }, false, false, Tlenofon.class)); WIZARDS_DICT.put("VANBERGSYSTEMS", new WizardInfo("VANBERGSYSTEMS", "Vanbergsystems", R.drawable.ic_wizard_vanbergsystems, 19, new Locale[]{ new Locale("pl") }, false, false, Vanbergsystems.class)); WIZARDS_DICT.put("SMARTO", new WizardInfo("SMARTO", "Smarto", R.drawable.ic_wizard_smarto, 19, new Locale[]{ new Locale("pl") }, false, false, Smarto.class)); WIZARDS_DICT.put("INTERPHONE365", new WizardInfo("INTERPHONE365", "INTERPHONE365", R.drawable.ic_wizard_interphone365, 19, new Locale[]{ locale("es_AR"), locale("es_ES") }, false, false, Interphone365.class)); WIZARDS_DICT.put("BEEZTEL", new WizardInfo("BEEZTEL", "Beeztel", R.drawable.ic_wizard_beeztel, 19, new Locale[]{ new Locale("es"), new Locale("en"), new Locale("pt"), new Locale("fr") }, false, false, Beeztel.class)); WIZARDS_DICT.put("COTAS", new WizardInfo("COTAS", "Cotas Line@net", R.drawable.ic_wizard_cotas, 19, new Locale[]{ locale("es_CO") }, false, false, Cotas.class)); WIZARDS_DICT.put("BALSES", new WizardInfo("BALSES", "Balses", R.drawable.ic_wizard_balses, 19, new Locale[]{ locale("tr_TR") }, false, false, Balses.class)); WIZARDS_DICT.put("ZONPT", new WizardInfo("ZONPT", "Zon Phone", R.drawable.ic_wizard_zonpt, 19, new Locale[]{ locale("pt_PT") }, false, false, ZonPt.class)); WIZARDS_DICT.put("ORBTALK", new WizardInfo("ORBTALK", "Orbtalk", R.drawable.ic_wizard_orbtalk, 19, new Locale[]{ Locale.UK, Locale.US }, false, false, Orbtalk.class)); WIZARDS_DICT.put("HALOOCENTRALA", new WizardInfo("HALOOCENTRALA", "Ha-loo centrala", R.drawable.ic_wizard_haloo_centrala, 19, new Locale[]{ new Locale("CS", "cz"), }, false, false, HalooCentrala.class)); WIZARDS_DICT.put("HALOO", new WizardInfo("HALOO", "Ha-loo", R.drawable.ic_wizard_haloo, 19, new Locale[]{ new Locale("CS", "cz"), }, false, false, Haloo.class)); WIZARDS_DICT.put("VOIPBEL", new WizardInfo("VOIPBEL", "VoIPBel", R.drawable.ic_wizard_voipbel, 19, new Locale[]{ locale("nl_BE"), locale("nl_NL"), locale("fr_BE") }, false, false, VoipBel.class)); WIZARDS_DICT.put("GLOBTELECOM", new WizardInfo("GLOBTELECOM", "GVoip", R.drawable.ic_wizard_globtelecom, 10, new Locale[]{locale("ru_RU"),}, false, false, Globtelecom.class)); WIZARDS_DICT.put("CONGSTARTEL", new WizardInfo("CONGSTARTEL", "Congstar Telekom", R.drawable.ic_wizard_congstar, 10, new Locale[]{Locale.GERMANY}, false, false, CongstarTelekom.class)); WIZARDS_DICT.put("CONGSTARQSC", new WizardInfo("CONGSTARQSC", "Congstar QSC", R.drawable.ic_wizard_congstar, 10, new Locale[]{Locale.GERMANY}, false, false, CongstarQSC.class)); WIZARDS_DICT.put("VOIPLLAMA", new WizardInfo("VOIPLLAMA", "VOIPLLAMA", R.drawable.ic_wizard_voipllama, 10, new Locale[]{Locale.ITALY, locale("es_ES") }, false, false, VoipLlama.class)); WIZARDS_DICT.put("XNET", new WizardInfo("XNET", "XNet", R.drawable.ic_wizard_xnet, 10, new Locale[]{new Locale("EN", "nz") }, false, false, XNet.class)); WIZARDS_DICT.put("MUNDOR", new WizardInfo("MUNDOR", "Mundo-R", R.drawable.ic_wizard_mundor, 10, new Locale[]{ locale("es_ES") }, false, false, MundoR.class)); WIZARDS_DICT.put("VEGATEL", new WizardInfo("VEGATEL", "Vegatel", R.drawable.ic_wizard_vega, 10, new Locale[]{ locale("ru_RU") }, false, false, Vegatel.class)); WIZARDS_DICT.put("MOBILE4U", new WizardInfo("MOBILE4U", "Mobile4u", R.drawable.ic_wizard_mobile4u, 10, new Locale[]{ locale("hu_HU") }, false, false, Mobile4U.class)); WIZARDS_DICT.put("FRINGTALKTW", new WizardInfo("FRINGTALKTW", "fringTalk", R.drawable.ic_wizard_fringtalktw, 10, new Locale[]{ locale("zh_TW") }, false, false, FringTalkTw.class)); WIZARDS_DICT.put("VOIPMUCH", new WizardInfo("VOIPMUCH", "VoIP Much", R.drawable.ic_wizard_voipmuch, 20, new Locale[]{Locale.US, Locale.CANADA}, false, false, VoipMuch.class)); WIZARDS_DICT.put("VOIPPLANET", new WizardInfo("VOIPPLANET", "VoIP Planet", R.drawable.ic_wizard_voipplanet, 10, new Locale[]{ locale("nl_NL") }, false, false, VoipPlanet.class)); WIZARDS_DICT.put("ZENG_CN", new WizardInfo("ZENG_CN", "智通", R.drawable.ic_wizard_zeng, 9, new Locale[]{ locale("zh_CN"), locale("zh_TW")}, false, false, ZengCn.class)); WIZARDS_DICT.put("SIPME", new WizardInfo("SIPME", "sipme", R.drawable.ic_wizard_sipme, 9, new Locale[]{ new Locale("he") }, false, false, SipMe.class)); WIZARDS_DICT.put("TONLINE", new WizardInfo("TONLINE", "t-online.de", R.drawable.ic_wizard_t_online, 9, new Locale[]{ Locale.GERMAN }, false, false, TOnline.class)); WIZARDS_DICT.put("VOOCALL", new WizardInfo("VOOCALL", "voocall.cz", R.drawable.ic_wizard_voocall, 9, new Locale[]{ locale("cs_CZ") }, false, false, Voocall.class)); WIZARDS_DICT.put("MOBEX", new WizardInfo("MOBEX", "Mobex", R.drawable.ic_wizard_mobex, 9, new Locale[] {new Locale("PT", "br")}, false, false, Mobex.class)); WIZARDS_DICT.put("SVANTO", new WizardInfo("SVANTO", "Svanto", R.drawable.ic_wizard_svanto, 5, new Locale[] { new Locale("pl"), Locale.FRANCE, locale("fr_BE"), locale("nl_BE"), locale("nl_NL"), locale("fr_CH"), locale("de_CH"), Locale.GERMANY, locale("es_ES"), locale("pt_PT") }, false, false, Svanto.class)); WIZARDS_DICT.put("VITELITY", new WizardInfo("VITELITY", "Vitelity", R.drawable.ic_wizard_vitelity, 9, new Locale[] {Locale.US}, false, false, Vitelity.class)); WIZARDS_DICT.put("FRITZBOX", new WizardInfo("FRITZBOX", "Fritz!Box", R.drawable.ic_wizard_fritzbox, 9, new Locale[] {Locale.GERMANY}, false, false, Fritzbox.class)); WIZARDS_DICT.put("BLICNET", new WizardInfo("BLICNET", "Blicnet", R.drawable.ic_wizard_blicnet, 19, new Locale[] {locale("bs") , new Locale("sr"), new Locale("hr")}, false, false, Blicnet.class)); WIZARDS_DICT.put("MEGAVOIP", new WizardInfo("MEGAVOIP", "Megavoip Telecom", R.drawable.ic_wizard_megavoip, 12, new Locale[] {new Locale("PT", "br")}, false, false, MegaVoip.class)); WIZARDS_DICT.put("MULTIFONRU", new WizardInfo("MULTIFONRU", "Multifon.ru", R.drawable.ic_wizard_multifon, 12, new Locale[] {locale("ru_RU")}, false, false, MultifonRu.class)); WIZARDS_DICT.put("VOIPDOUP", new WizardInfo("VOIPDOUP", "Voipdoup", R.drawable.ic_wizard_voipdoup, 19, new Locale[]{ locale("zh_CN"), locale("zh_TW")}, false, false, Voipdoup.class)); WIZARDS_DICT.put("AJTEL", new WizardInfo("AJTEL", "Ajtel", R.drawable.ic_wizard_ajtel, 19, new Locale[]{ new Locale("es") }, false, false, Ajtel.class)); WIZARDS_DICT.put("CALLROMANIA", new WizardInfo("CALLROMANIA", "CallRomania", R.drawable.ic_wizard_callromania, 12, new Locale[]{ locale("ro_RO"), new Locale("es_ES"), Locale.ITALY, Locale.GERMANY, Locale.FRANCE, Locale.UK, Locale.US }, false, false, CallRomania.class)); WIZARDS_DICT.put("ANV", new WizardInfo("ANV", "ANV", R.drawable.ic_wizard_anv, 5, new Locale[] {new Locale("PT", "pt")}, false, false, Anv.class)); WIZARDS_DICT.put("INTERTELECOMGR", new WizardInfo("INTERTELECOMGR", "Inter Telecom", R.drawable.ic_wizard_intertelecom, 9, new Locale[] {locale("el_GR"), locale("ru_RU"), locale("bg_BG"), locale("el_CY") }, false, false, InterTelecomGr.class)); WIZARDS_DICT.put("DELLVOICE", new WizardInfo("DELLVOICE", "Dell Voice", R.drawable.ic_wizard_dell, 9, new Locale[] {Locale.CANADA, Locale.CANADA_FRENCH}, false, false, DellVoice.class)); WIZARDS_DICT.put("FONGO", new WizardInfo("FONGO", "Fongo", R.drawable.ic_wizard_fongo, 9, new Locale[] {Locale.CANADA, Locale.CANADA_FRENCH}, false, false, DellVoice.class)); WIZARDS_DICT.put("CHATTABOXX", new WizardInfo("CHATTABOXX", "Chattaboxx", R.drawable.ic_wizard_chattaboxx, 9, new Locale[] {locale("en_BS")}, false, false, Chattaboxx.class)); WIZARDS_DICT.put("EASYCALLGR", new WizardInfo("EASYCALLGR", "EasyCall.Gr", R.drawable.ic_wizard_easycallgr, 19, new Locale[] {locale("el_GR")}, false, false, EasyCallGr.class)); WIZARDS_DICT.put("TENET", new WizardInfo("TENET", "TeNeT", R.drawable.ic_wizard_tenet, 10, new Locale[]{new Locale("UK", "ua")}, false, false, TeNet.class)); WIZARDS_DICT.put("MODULUS", new WizardInfo("MODULUS", "Modulus", R.drawable.ic_wizard_modulus, 30, new Locale[]{ new Locale("EL", "gr"), }, false, false, Modulus.class)); WIZARDS_DICT.put("MWEB", new WizardInfo("MWEB", "MWeb", R.drawable.ic_wizard_mweb, 30, new Locale[]{ new Locale("EN", "za"), }, false, false, MWeb.class)); WIZARDS_DICT.put("LOLAWIRELESS", new WizardInfo("LOLAWIRELESS", "Lola Wireless", R.drawable.ic_wizard_lolawireless, 20, new Locale[]{Locale.US}, false, false, LolaWireless.class)); WIZARDS_DICT.put("FIXE2MOB", new WizardInfo("FIXE2MOB", "Fixe2Mob", R.drawable.ic_wizard_fix2mod, 5, new Locale[]{Locale.FRANCE}, false, false, Fix2Mob.class)); WIZARDS_DICT.put("DELTATELECOM", new WizardInfo("DELTATELECOM", "JSC - DeltaTelecom", R.drawable.ic_wizard_deltatelecom, 20, new Locale[]{ locale("ru_RU"), }, false, false, DeltaTelecom.class)); WIZARDS_DICT.put("FREESPEECHIE", new WizardInfo("FREESPEECHIE", "Freespeech.ie", R.drawable.ic_wizard_freespeech, 20, new Locale[]{ Locale.UK, new Locale("EN", "ie") }, false, false, Freespeech.class)); WIZARDS_DICT.put("ANDREWSANDARNOLD", new WizardInfo("ANDREWSANDARNOLD", "Andrews and Arnold", R.drawable.ic_wizard_aaisp, 20, new Locale[]{ Locale.UK }, false, false, Aaisp.class)); WIZARDS_DICT.put("YESMY", new WizardInfo("YESMY", "Yes.my", R.drawable.ic_wizard_yesmy, 10, new Locale[]{ locale("ms_MY") }, false, false, YesMy.class)); WIZARDS_DICT.put("NETFONECA", new WizardInfo("NETFONECA", "Netfone.ca", R.drawable.ic_wizard_voipportal, 10, new Locale[]{Locale.CANADA}, false, false, NetfoneCa.class)); WIZARDS_DICT.put("FUSIONIP", new WizardInfo("FUSIONIP", "FUSION IP-Phone SMART", R.drawable.ic_wizard_fusion, 10, new Locale[]{Locale.JAPAN}, false, false, Fusion.class)); WIZARDS_DICT.put("YOUMAGIC", new WizardInfo("YOUMAGIC", "YouMagic", R.drawable.ic_wizard_youmagic, 30, new Locale[]{ locale("ru_RU") }, false, false, YouMagic.class)); WIZARDS_DICT.put("OPTIMUMLIGHTPATH", new WizardInfo("OPTIMUMLIGHTPATH", "Optimum LightPath", R.drawable.ic_wizard_optimum_lightpath, 10, new Locale[]{Locale.US}, false, false, OptimumLightPath.class)); WIZARDS_DICT.put("BGOPENNET", new WizardInfo("BGOPENNET", "BGOPEN.NET", R.drawable.ic_wizard_bgopen, 10, new Locale[]{ locale("bg_BG") }, false, false, BgOpen.class)); WIZARDS_DICT.put("MEGAFONBG", new WizardInfo("MEGAFONBG", "МЕГАФОН", R.drawable.ic_wizard_megafon, 10, new Locale[]{ locale("bg_BG") }, false, false, MegafonBg.class)); WIZARDS_DICT.put("SIGNUMTEL", new WizardInfo("SIGNUMTEL", "Signumtel.hr", R.drawable.ic_wizard_signumtel, 10, new Locale[]{ locale("bs") , new Locale("sr"), new Locale("hr"), new Locale("mk") }, false, false, Signumtel.class)); WIZARDS_DICT.put("SKYTEL", new WizardInfo("SKYTEL", "Skytel", R.drawable.ic_wizard_skytel, 10, new Locale[]{ locale("zh_TW") }, false, false, Skytel.class)); WIZARDS_DICT.put("ZENTC", new WizardInfo("ZENTC", "Zentc", R.drawable.ic_wizard_zentc, 10, new Locale[]{ locale("zh_TW") }, false, false, Zentc.class)); WIZARDS_DICT.put("EHA", new WizardInfo("EHA", "e-ha", R.drawable.ic_wizard_eha, 10, new Locale[]{ locale("zh_TW") }, false, false, EHa.class)); WIZARDS_DICT.put("TELEMEGA", new WizardInfo("TELEMEGA", "Telemega", R.drawable.ic_wizard_telemega, 10, new Locale[]{ Locale.US }, false, false, Telemega.class)); WIZARDS_DICT.put("QUAESTEL", new WizardInfo("QUAESTEL", "QuaesTel", R.drawable.ic_wizard_qtel, 10, new Locale[]{ locale("hu_HU") }, false, false, QuaesTel.class)); WIZARDS_DICT.put("LLAMAXINTER", new WizardInfo("LLAMAXINTER", "Llamadas X Internet", R.drawable.ic_wizard_llamadas_xinternet, 10, new Locale[]{ locale("es_MX") }, false, false, LlamadasXInternet.class)); WIZARDS_DICT.put("OCN", new WizardInfo("OCN", "OCN", R.drawable.ic_wizard_ocn, 10, new Locale[]{Locale.JAPAN}, false, false, Ocn.class)); WIZARDS_DICT.put("TELEKOM_SRBIJA", new WizardInfo("TELEKOM_SRBIJA", "Telekom Srbija", R.drawable.ic_wizard_telekom_srbija, 10, new Locale[]{new Locale("sr")}, false, false, TelekomSrbija.class)); WIZARDS_DICT.put("MTEL", new WizardInfo("MTEL", "m:tel", R.drawable.ic_wizard_mtel, 10, new Locale[]{new Locale("sr")}, false, false, MTel.class)); WIZARDS_DICT.put("TRAVELTELE", new WizardInfo("TRAVELTELE", "Travel Telekom", R.drawable.ic_wizard_traveltele, 45, new Locale[]{new Locale("UK", "ua"), locale("ru_RU"), locale("cs_CZ"), locale("be_BY"), locale("uz_UZ"), locale("kk_KZ") }, false, false, TravelTele.class)); WIZARDS_DICT.put("SIPCENTRIC", new WizardInfo("SIPCENTRIC", "Sipcentric", R.drawable.ic_wizard_sipcentric, 45, new Locale[]{Locale.UK }, false, false, SipCentric.class)); WIZARDS_DICT.put("CALLMYWAY", new WizardInfo("CALLMYWAY", "CallMyWay", R.drawable.ic_wizard_callmyway, 5, new Locale[]{locale("es_MX"), locale("es_CR")}, false, false, CallMyWay.class)); WIZARDS_DICT.put("050PLUS", new WizardInfo("050PLUS", "050Plus", R.drawable.ic_wizard_050plus, 5, new Locale[]{Locale.JAPAN}, false, false, Zero50plus.class)); WIZARDS_DICT.put("GATHERCALL", new WizardInfo("GATHERCALL", "GatherCall", R.drawable.ic_wizard_voiptelie, 45, new Locale[]{Locale.UK, Locale.US, new Locale("EN", "ie"), locale("en_AU") }, false, false, GatherCall.class)); WIZARDS_DICT.put("CONEXION", new WizardInfo("CONEXION", "Conexion", R.drawable.ic_wizard_cnx, 45, new Locale[]{new Locale("ES", "pa")}, false, false, Conexion.class)); WIZARDS_DICT.put("SPIRIT", new WizardInfo("SPIRIT", "Spirit World", R.drawable.ic_wizard_spirit, 19, new Locale[]{ Locale.US, Locale.CANADA }, false, false, Spirit.class)); WIZARDS_DICT.put("DIGITEL", new WizardInfo("DIGITEL", "DigiTel", R.drawable.ic_wizard_digitel, 19, new Locale[]{ Locale.ITALY}, false, false, DigiTel.class)); WIZARDS_DICT.put("MEGATEL", new WizardInfo("MEGATEL", "MegaTel", R.drawable.ic_wizard_megatel, 15, new Locale[]{new Locale("BG"), new Locale("UA"), new Locale("RF"), new Locale("KZ"), new Locale("BY"), new Locale("MK"), new Locale("UK"), }, false, false, MegaTel.class)); WIZARDS_DICT.put("CLICKPHONE", new WizardInfo("CLICKPHONE", "ClickPhone", R.drawable.ic_wizard_clickphone, 9, new Locale[]{locale("ro_RO"), Locale.ITALY, locale("el_GR"), locale("bg_BG"), locale("es_ES"), Locale.UK, Locale.US, Locale.CANADA, Locale.GERMANY}, false, false, ClickPhone.class)); WIZARDS_DICT.put("BGCALL", new WizardInfo("BGCALL", "BG-call", R.drawable.ic_wizard_bgcall, 10, new Locale[]{ locale("bg_BG") }, false, false, BgCall.class)); WIZARDS_DICT.put("WORLDDIALPOINT", new WizardInfo("WORLDDIALPOINT", "WorldDialPoint", R.drawable.ic_wizard_worlddialpoint, 45, new Locale[]{Locale.JAPAN, locale("en_AU"), locale("en_NZ"), locale("en_SG"), locale("ms_MY"), locale("zh_CN"), locale("zh_TW"),}, false,false, WorldDialPoint.class)); WIZARDS_DICT.put("ZOONTELECOM", new WizardInfo("ZOONTELECOM", "Zoon Suite", R.drawable.ic_wizard_zoontelecom, 45, new Locale[]{locale("es_ES")}, false,false, ZoonTelecom.class)); WIZARDS_DICT.put("FALAVIP", new WizardInfo("FALAVIP", "Falavip", R.drawable.ic_wizard_falavip, 10, new Locale[] {new Locale("PT", "br")}, false, false, Falavip.class)); WIZARDS_DICT.put("ABATEL", new WizardInfo("ABATEL", "ABA Tel", R.drawable.ic_wizard_abatel, 10, new Locale[] {new Locale("sr")}, false, false, AbaTel.class)); WIZARDS_DICT.put("ABAGLOBAL", new WizardInfo("ABAGLOBAL", "ABAglobal", R.drawable.ic_wizard_abaglobal, 10, new Locale[] {new Locale("sr")}, false, false, AbaGlobal.class)); WIZARDS_DICT.put("INOVENT", new WizardInfo("INOVENT", "Inovent", R.drawable.ic_wizard_inovent, 10, new Locale[]{ locale("bg_BG") }, false, false, Inovent.class)); WIZARDS_DICT.put("ADIPTEL", new WizardInfo("ADIPTEL", "ADIPTEL", R.drawable.ic_wizard_adiptel, 8, new Locale[]{ locale("es") }, false, false, AdipTel.class)); WIZARDS_DICT.put("INDONIX", new WizardInfo("INDONIX", "Indonix", R.drawable.ic_wizard_indonix, 8, new Locale[]{ locale("id") }, false, false, Indonix.class)); WIZARDS_DICT.put("VIPTEL", new WizardInfo("VIPTEL", "VIPTel", R.drawable.ic_wizard_viptel, 10, new Locale[]{ locale("sk") }, false, false, VIPTel.class)); WIZARDS_DICT.put("SOHO66", new WizardInfo("SOHO66", "Soho66", R.drawable.ic_wizard_soho66, 10, new Locale[]{ Locale.UK }, false, false, Soho66.class)); WIZARDS_DICT.put("HIBRITEL", new WizardInfo("HIBRITEL", "Hibritel", R.drawable.ic_wizard_hibritel, 10, new Locale[]{ locale("es_ES") }, false, false, Hibritel.class)); WIZARDS_DICT.put("POLFON", new WizardInfo("POLFON", "polfon", R.drawable.ic_wizard_polfon, 19, new Locale[]{ new Locale("pl") }, false, false, Polfon.class)); WIZARDS_DICT.put("TELPHIN", new WizardInfo("TELPHIN", "Telphin", R.drawable.ic_wizard_telphin, 45, new Locale[]{ locale("ru_RU") }, false, false, Telphin.class)); WIZARDS_DICT.put("NETGSM", new WizardInfo("NETGSM", "Netgsm", R.drawable.ic_wizard_netgsm, 30, new Locale[] {new Locale("TR", "tr")}, false, false, NetGSM.class)); WIZARDS_DICT.put("NETGSMSANTRAL", new WizardInfo("NETGSMSANTRAL", "Netgsm Sanal Santral", R.drawable.ic_wizard_netgsmsantral, 30, new Locale[] {new Locale("TR", "tr")}, false, false, NetGSMSantral.class)); WIZARDS_DICT.put("GTEL", new WizardInfo("GTEL", "GTel", R.drawable.ic_wizard_gtel, 30, new Locale[] {new Locale("AR", "tn"), new Locale("FR", "tn")}, false, false, GTel.class)); WIZARDS_DICT.put("MANGOTELECOM", new WizardInfo("MANGOTELECOM", "Mango Telecom", R.drawable.ic_wizard_mangotelecom, 10, new Locale[]{ locale("ru_RU") }, false, false, MangoTelecom.class)); WIZARDS_DICT.put("NEOFONTPPL", new WizardInfo("NEOFONTPPL", "Neofon.tp.pl", R.drawable.ic_wizard_neofontppl, 10, new Locale[]{ new Locale("pl") }, false, false, NeofonTpPl.class)); WIZARDS_DICT.put("YESCALL", new WizardInfo("YESCALL", "YesCall", R.drawable.ic_wizard_yescall, 9, new Locale[]{ locale("zh_CN"), locale("zh_TW")}, false, false, YesCall.class)); WIZARDS_DICT.put("FERAREDIALER", new WizardInfo("FERAREDIALER", "Ferare Dialer", R.drawable.ic_wizard_ferare, 10, new Locale[] {new Locale("sr")}, false, false, FerareDialer.class)); WIZARDS_DICT.put("CARDTEL", new WizardInfo("CARDTEL", "CardTel", R.drawable.ic_wizard_cardtel, 10, new Locale[] {new Locale("RU"), new Locale("BG"), new Locale("UA"), new Locale("RF"), new Locale("KZ"), new Locale("BY"), new Locale("MK"), new Locale("UK")}, false, false, CardTel.class)); WIZARDS_DICT.put("TELOPAR", new WizardInfo("TELOPAR", "Novatrope", R.drawable.ic_wizard_telopar, 10, new Locale[] {Locale.US}, false, false, Telopar.class)); WIZARDS_DICT.put("SKYIPTELECOM", new WizardInfo("SKYIPTELECOM", "SKYiptelecom", R.drawable.ic_wizard_skyiptelecom, 10, new Locale[] {new Locale("RU"), new Locale("BG"), new Locale("UA"), new Locale("RF"), new Locale("KZ"), new Locale("BY"), new Locale("MK"), new Locale("UK")}, false, false, SKYiptelecom.class)); WIZARDS_DICT.put("HAPPYCALL", new WizardInfo("HAPPYCALL", "HappyCall", R.drawable.ic_wizard_happycall, 19, new Locale[]{ new Locale("pl") }, false, false, HappyCall.class)); WIZARDS_DICT.put("SPIKON", new WizardInfo("SPIKON", "Spikon", R.drawable.ic_wizard_spikon, 19, new Locale[]{ new Locale("pl") }, false, false, Spikon.class)); WIZARDS_DICT.put("BRVOZ", new WizardInfo("BRVOZ", "BRVOZ Telecom", R.drawable.ic_wizard_brvoz, 19, new Locale[]{ new Locale("PT", "br"), new Locale("PT", "pt") }, false, false, Brvoz.class)); WIZARDS_DICT.put("VOSTRON", new WizardInfo("VOSTRON", "Vostron", R.drawable.ic_wizard_vostron, 30, new Locale[]{Locale.UK }, false, false, Vostron.class)); WIZARDS_DICT.put("BRASILVOIP", new WizardInfo("BRASILVOIP", "BrasilVoip", R.drawable.ic_wizard_brasilvoip, 19, new Locale[]{new Locale("PT", "br")}, false, false, BrasilVoip.class)); WIZARDS_DICT.put("FALETEL", new WizardInfo("FALETEL", "Faletel", R.drawable.ic_wizard_faletel, 19, new Locale[]{new Locale("PT", "br")}, false, false, Faletel.class)); WIZARDS_DICT.put("TELEFONET", new WizardInfo("TELEFONET", "Telefonet", R.drawable.ic_wizard_telefonet, 19, new Locale[]{new Locale("PT", "br")}, false, false, Telefonet.class)); WIZARDS_DICT.put("DIALSPORATEL", new WizardInfo("DIALSPORATEL", "Dialsporatel", R.drawable.ic_wizard_dialspora, 20, new Locale[]{ Locale.UK }, false, false, DialsporaTel.class)); WIZARDS_DICT.put("AVANVOIP", new WizardInfo("AVANVOIP", "AVANVOIP", R.drawable.ic_wizard_avanvoip, 20, new Locale[]{ new Locale("ES", "es") }, false, false, AVANVOIP.class)); WIZARDS_DICT.put("SOLIDVOICE", new WizardInfo("SOLIDVOICE", "solidvoice", R.drawable.ic_wizard_solidvoice, 30, new Locale[]{ Locale.US, new Locale("EN", "cm")}, false, false, SolidVoice.class)); }else { WizardInfo info = CustomDistribution.getCustomDistributionWizard(); if(info != null) { WIZARDS_DICT.put(info.id, info); } } initDone = true; } private static Map<String, Object> wizardInfoToMap(WizardInfo infos, boolean usePriorityInt) { Map<String, Object> map = new HashMap<String, Object>(); map.put(LABEL, infos.label); map.put(ID, infos.id); map.put(ICON, infos.icon); map.put(PRIORITY, infos.priority); map.put(PRIORITY_INT, usePriorityInt); return map; } //Ok, what could have be done is declaring an interface but not able with static fields // I'll later check whether this is more interesting to declare an interface or an info class // used to declare wizards public static WizardInfo getWizardClassInfos(Class<?> wizard) { Method method; try { method = wizard.getMethod("getWizardInfo", (Class[]) null); return (WizardInfo) method.invoke(null, (Object[]) null); } catch (Exception e) { //Generic catch : we are not interested in more details e.printStackTrace(); } return null; } public static HashMap<String, WizardInfo> getWizardsList(){ if(!initDone){ initWizards(); } return WIZARDS_DICT; } public static WizardInfo getWizardClass(String wizardId) { if(!initDone){ initWizards(); } return WIZARDS_DICT.get(wizardId); } public static int getWizardIconRes(String wizardId) { // Update account image WizardInfo wizard_infos = WizardUtils.getWizardClass(wizardId); if (wizard_infos != null) { if(!wizard_infos.isGeneric) { return wizard_infos.icon; } } return R.drawable.ic_launcher_phone; } public static Bitmap getWizardBitmap(Context ctxt, SipProfile account) { if(account.icon == null) { Resources r = ctxt.getResources(); BitmapDrawable bd = ((BitmapDrawable) r.getDrawable(WizardUtils.getWizardIconRes(account.wizard))); account.icon = bd.getBitmap(); } return account.icon; } private static ArrayList<HashMap<String, String>> wizardGroups = null; public static ArrayList<HashMap<String, String>> getWizardsGroups(Context context) { if(wizardGroups != null) { return wizardGroups; } wizardGroups = new ArrayList<HashMap<String, String>>(); boolean hasLocal = false; boolean hasGeneric = false; boolean hasWorld = false; boolean hasOther = false; Set<Entry<String, WizardInfo>> wizards = getWizardsList().entrySet(); for( Entry<String, WizardInfo> wizard : wizards) { boolean found = false; if(wizard.getValue().isGeneric) { hasGeneric = true; found = true; }else if(wizard.getValue().isWorld) { hasWorld = true; found = true; } if(!found) { for (Locale country : wizard.getValue().countries) { if(country != null) { if(country.getCountry().equals(Locale.getDefault().getCountry())) { hasLocal = true; found = true; break; }else if(country.getCountry().equalsIgnoreCase("")) { if(country.getLanguage().equals(Locale.getDefault().getLanguage())) { hasLocal = true; found = true; break; } } } } } if(!found) { hasOther = true; } if(hasLocal && hasGeneric && hasOther && hasWorld) { break; } } HashMap<String, String> m; //Local if(hasLocal) { m = new HashMap<String, String>(); m.put(LANG_DISPLAY, Locale.getDefault().getDisplayCountry()); wizardGroups.add(m); } //Generic if(hasGeneric) { m = new HashMap<String, String>(); m.put(LANG_DISPLAY, context.getString(R.string.generic_wizards_text)); wizardGroups.add(m); } if(hasWorld) { //World m = new HashMap<String, String>(); m.put(LANG_DISPLAY, context.getString(R.string.world_wide_providers_text)); wizardGroups.add(m); } if(hasOther) { //Others m = new HashMap<String, String>(); m.put(LANG_DISPLAY, context.getString(R.string.other_country_providers_text)); wizardGroups.add(m); } return wizardGroups; } public static ArrayList<ArrayList<Map<String, Object>>> getWizardsGroupedList() { ArrayList<Map<String, Object>> locale_list = new ArrayList<Map<String, Object>>(); ArrayList<Map<String, Object>> generic_list = new ArrayList<Map<String, Object>>(); ArrayList<Map<String, Object>> world_list = new ArrayList<Map<String, Object>>(); ArrayList<Map<String, Object>> others_list = new ArrayList<Map<String, Object>>(); Set<Entry<String, WizardInfo>> wizards = getWizardsList().entrySet(); for( Entry<String, WizardInfo> wizard : wizards) { boolean found = false; for (Locale country : wizard.getValue().countries) { if(country != null) { if(country.getCountry().equals(Locale.getDefault().getCountry())) { found = true; locale_list.add(wizardInfoToMap(wizard.getValue(), true)); break; }else if(country.getCountry().equalsIgnoreCase("")) { if(country.getLanguage().equals(Locale.getDefault().getLanguage())) { found = true; locale_list.add(wizardInfoToMap(wizard.getValue(), true)); break; } } } } if(!found) { if(wizard.getValue().isGeneric) { generic_list.add(wizardInfoToMap(wizard.getValue(), true)); found = true; }else if(wizard.getValue().isWorld) { world_list.add(wizardInfoToMap(wizard.getValue(), false)); found = true; } } if(!found) { others_list.add(wizardInfoToMap(wizard.getValue(), false)); } } WizardPrioComparator comparator = new WizardPrioComparator(); Collections.sort(locale_list, comparator); Collections.sort(generic_list, comparator); Collections.sort(world_list, comparator); Collections.sort(others_list, comparator); ArrayList<ArrayList<Map<String, Object>>> result = new ArrayList<ArrayList<Map<String,Object>>>(); if(locale_list.size() > 0) { result.add(locale_list); } if(generic_list.size() > 0) { result.add(generic_list); } if(world_list.size() > 0) { result.add(world_list); } if(others_list.size() > 0) { result.add(others_list); } return result; } }