aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/java/com/android/internal/telephony/IccSmsInterfaceManager.java2
-rw-r--r--src/java/com/android/internal/telephony/SmsNumberUtils.java94
2 files changed, 70 insertions, 26 deletions
diff --git a/src/java/com/android/internal/telephony/IccSmsInterfaceManager.java b/src/java/com/android/internal/telephony/IccSmsInterfaceManager.java
index 56a9069bba..73d52fb6d1 100644
--- a/src/java/com/android/internal/telephony/IccSmsInterfaceManager.java
+++ b/src/java/com/android/internal/telephony/IccSmsInterfaceManager.java
@@ -1071,7 +1071,7 @@ public class IccSmsInterfaceManager {
private String filterDestAddress(String destAddr) {
String result = null;
- result = SmsNumberUtils.filterDestAddr(mContext, destAddr);
+ result = SmsNumberUtils.filterDestAddr(mPhone, destAddr);
return result != null ? result : destAddr;
}
diff --git a/src/java/com/android/internal/telephony/SmsNumberUtils.java b/src/java/com/android/internal/telephony/SmsNumberUtils.java
index 8672ffce69..b785a675f7 100644
--- a/src/java/com/android/internal/telephony/SmsNumberUtils.java
+++ b/src/java/com/android/internal/telephony/SmsNumberUtils.java
@@ -23,6 +23,8 @@ import java.util.List;
import android.content.Context;
import android.os.SystemProperties;
+import android.os.Build;
+import android.text.TextUtils;
import android.content.ContentResolver;
import android.database.Cursor;
import android.database.SQLException;
@@ -41,7 +43,7 @@ import com.android.internal.telephony.HbpcdLookup.MccLookup;
*/
public class SmsNumberUtils {
private static final String TAG = "SmsNumberUtils";
- private static final boolean DBG = false;
+ private static final boolean DBG = Build.IS_DEBUGGABLE;
private static final String PLUS_SIGN = "+";
@@ -528,7 +530,7 @@ public class SmsNumberUtils {
/**
* Filter the destination number if using VZW sim card.
*/
- public static String filterDestAddr(Context context, String destAddr) {
+ public static String filterDestAddr(PhoneBase phoneBase, String destAddr) {
if (DBG) Rlog.d(TAG, "enter filterDestAddr. destAddr=\"" + destAddr + "\"" );
if (destAddr == null || !PhoneNumberUtils.isGlobalPhoneNumber(destAddr)) {
@@ -539,12 +541,12 @@ public class SmsNumberUtils {
final String networkOperator = TelephonyManager.getDefault().getNetworkOperator();
String result = null;
- if (isVZWSimCard()) {
- final int networkType = getNetworkType(networkOperator);
+ if (needToConvert(phoneBase)) {
+ final int networkType = getNetworkType(phoneBase);
if (networkType != -1) {
String networkMcc = networkOperator.substring(0, 3);
if (networkMcc != null && networkMcc.trim().length() > 0) {
- result = formatNumber(context, destAddr, networkMcc, networkType);
+ result = formatNumber(phoneBase.getContext(), destAddr, networkMcc, networkType);
}
}
}
@@ -556,17 +558,17 @@ public class SmsNumberUtils {
/**
* Returns the current network type
*/
- private static int getNetworkType(String networkOperator) {
+ private static int getNetworkType(PhoneBase phoneBase) {
int networkType = -1;
int phoneType = TelephonyManager.getDefault().getPhoneType();
if (phoneType == TelephonyManager.PHONE_TYPE_GSM) {
networkType = GSM_UMTS_NETWORK;
} else if (phoneType == TelephonyManager.PHONE_TYPE_CDMA) {
- if (isVZWNetwork(networkOperator)) {
- networkType = CDMA_HOME_NETWORK;
- } else {
+ if (isInternationalRoaming(phoneBase)) {
networkType = CDMA_ROAMING_NETWORK;
+ } else {
+ networkType = CDMA_HOME_NETWORK;
}
} else {
if (DBG) Rlog.w(TAG, "warning! unknown mPhoneType value=" + phoneType);
@@ -575,24 +577,66 @@ public class SmsNumberUtils {
return networkType;
}
- /**
- * VZW Network Operator List.
- * Refers to the wiki link : http://en.wikipedia.org/wiki/Mobile_Network_Code
- */
- private final static List<String> sVZWNetworkOperatorList = Arrays.asList("310004", "310005",
- "310012", "311480");
-
- private final static List<String> sVZWSimcardOperatorList = Arrays.asList("20404", "310004",
- "311480");
-
- private static boolean isVZWSimCard() {
- String simOperator =
- SystemProperties.get(TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC);
- return sVZWSimcardOperatorList.contains(simOperator);
+ private static boolean isInternationalRoaming(PhoneBase phoneBase) {
+ String operatorIsoCountry = phoneBase.getSystemProperty(
+ TelephonyProperties.PROPERTY_OPERATOR_ISO_COUNTRY, "");
+ String simIsoCountry = phoneBase.getSystemProperty(
+ TelephonyProperties.PROPERTY_ICC_OPERATOR_ISO_COUNTRY, "");
+ boolean internationalRoaming = !TextUtils.isEmpty(operatorIsoCountry)
+ && !TextUtils.isEmpty(simIsoCountry)
+ && !simIsoCountry.equals(operatorIsoCountry);
+ if (internationalRoaming) {
+ if ("us".equals(simIsoCountry)) {
+ internationalRoaming = !"vi".equals(operatorIsoCountry);
+ } else if ("vi".equals(simIsoCountry)) {
+ internationalRoaming = !"us".equals(operatorIsoCountry);
+ }
+ }
+ return internationalRoaming;
}
- private static boolean isVZWNetwork(String networkOperator) {
- return sVZWNetworkOperatorList.contains(networkOperator);
+ private static boolean needToConvert(PhoneBase phoneBase) {
+ boolean bNeedToConvert = false;
+ String[] listArray = phoneBase.getContext().getResources()
+ .getStringArray(com.android.internal.R.array
+ .config_sms_convert_destination_number_support);
+ if (listArray != null && listArray.length > 0) {
+ for (int i=0; i<listArray.length; i++) {
+ if (!TextUtils.isEmpty(listArray[i])) {
+ String[] needToConvertArray = listArray[i].split(";");
+ if (needToConvertArray != null && needToConvertArray.length > 0) {
+ if (needToConvertArray.length == 1) {
+ bNeedToConvert = "true".equalsIgnoreCase(needToConvertArray[0]);
+ } else if (needToConvertArray.length == 2 &&
+ !TextUtils.isEmpty(needToConvertArray[1]) &&
+ compareGid1(phoneBase, needToConvertArray[1])) {
+ bNeedToConvert = "true".equalsIgnoreCase(needToConvertArray[0]);
+ break;
+ }
+ }
+ }
+ }
+ }
+ return bNeedToConvert;
}
+ private static boolean compareGid1(PhoneBase phoneBase, String serviceGid1) {
+ String gid1 = phoneBase.getGroupIdLevel1();
+ boolean ret = true;
+
+ if (TextUtils.isEmpty(serviceGid1)) {
+ if (DBG) Rlog.d(TAG, "compareGid1 serviceGid is empty, return " + ret);
+ return ret;
+ }
+
+ int gid_length = serviceGid1.length();
+ // Check if gid1 match service GID1
+ if (!((gid1 != null) && (gid1.length() >= gid_length) &&
+ gid1.substring(0, gid_length).equalsIgnoreCase(serviceGid1))) {
+ if (DBG) Rlog.d(TAG, " gid1 " + gid1 + " serviceGid1 " + serviceGid1);
+ ret = false;
+ }
+ if (DBG) Rlog.d(TAG, "compareGid1 is " + (ret?"Same":"Different"));
+ return ret;
+ }
}