package com.android.mms.transaction; import java.util.ArrayList; import java.util.Iterator; import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.os.RemoteException; import android.os.ServiceManager; import android.telephony.PhoneNumberUtils; import com.android.internal.telephony.ITelephony; import com.android.internal.telephony.PhoneFactory; import com.android.mms.MmsApp; import com.android.mms.ui.MessageUtils; /** * 11-10-21 * @author luning * */ public class FDNUtils { public final static String FDN_DISABLE = "FDN_DISABLE"; private final Uri fdnUri = Uri.parse("content://icc/fdn"); private final Uri fdnUri1 = Uri.parse("content://icc1/fdn"); private static ArrayList<String> fdnNumbers = new ArrayList<String>(); //private static FDNUtils fdnInfo; private int mPhoneId; private static FDNUtils[] fdnInfo; static { fdnInfo = new FDNUtils[PhoneFactory.getPhoneCount()]; for (int i = 0; i < PhoneFactory.getPhoneCount(); i++) { fdnInfo[i] = new FDNUtils(i); } } private FDNUtils(int phoneID){ mPhoneId = phoneID; } public static FDNUtils getInstance(){ return getInstance(PhoneFactory.getDefaultPhoneId()); } public static FDNUtils getInstance(int phoneId){ return fdnInfo[phoneId]; } public void queryFDN(Context context) { Cursor cur = null; fdnNumbers.clear(); try { do { Uri tempUri = fdnUri; if(mPhoneId > 0){ tempUri = fdnUri1; } cur = context.getContentResolver().query(tempUri, new String[] { "name", "number" }, null, null, null); if (null != cur && 0 == cur.getCount()) { cur.close(); break; } if (null != cur && 0 < cur.getCount()) { if (cur.moveToFirst()) { do { String number = cur.getString(1); fdnNumbers.add(number); } while (cur.moveToNext()); cur.close(); break; } } } while (true); } catch (Exception e) { e.printStackTrace(); } finally { if (null != cur && !cur.isClosed()) { cur.close(); } } } public boolean isFDNDisable(String number) { if (PhoneNumberUtils.isEmergencyNumber(number)) { return false; } return !isFoundFdn(number); } private boolean isFoundFdn(String number) { int index = -1; int count = 1; // cr118635 begin if ((number.startsWith("**052")) && number.endsWith("#")) { return true; } if ((number.startsWith("**042")) && number.endsWith("#")) { return true; } // cr118635 end if (fdnNumbers.size() == 0) { return false; } for (Iterator<String> it = fdnNumbers.iterator(); it.hasNext();) { if (number.equals(it.next())) { index = count; break; } count++; } if (index > 0) { return true; } return false; } public boolean isSmscDisable() { if (MmsApp.getApplication().getTelephonyManager(mPhoneId).hasIccCard()) { ITelephony iTelephony = null; if(MessageUtils.isMSMS){ iTelephony =ITelephony.Stub.asInterface( ServiceManager.getService( PhoneFactory.getServiceName(Context.TELEPHONY_SERVICE,mPhoneId))); }else{ iTelephony = ITelephony.Stub.asInterface(ServiceManager .getService(Context.TELEPHONY_SERVICE)); } String smsc = null; if (null != iTelephony) { try { smsc = iTelephony.getSmsc(); } catch (RemoteException e) { smsc = null; e.printStackTrace(); } } if (null != smsc) { return !isFoundFdn(smsc); } } return true; } }