summaryrefslogtreecommitdiffstats
path: root/telephony
diff options
context:
space:
mode:
Diffstat (limited to 'telephony')
-rw-r--r--telephony/java/android/telephony/PhoneNumberUtils.java59
-rw-r--r--telephony/java/com/android/internal/telephony/DriverCall.java3
-rwxr-xr-xtelephony/java/com/android/internal/telephony/cdma/CDMAPhone.java20
-rwxr-xr-xtelephony/java/com/android/internal/telephony/cdma/CdmaConnection.java2
-rw-r--r--telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java6
-rwxr-xr-xtelephony/java/com/android/internal/telephony/gsm/GSMPhone.java2
-rw-r--r--telephony/java/com/android/internal/telephony/gsm/GsmConnection.java2
7 files changed, 64 insertions, 30 deletions
diff --git a/telephony/java/android/telephony/PhoneNumberUtils.java b/telephony/java/android/telephony/PhoneNumberUtils.java
index 1aa1c76..6b33f52 100644
--- a/telephony/java/android/telephony/PhoneNumberUtils.java
+++ b/telephony/java/android/telephony/PhoneNumberUtils.java
@@ -207,6 +207,42 @@ public class PhoneNumberUtils
}
/**
+ * Extracts the network address portion and canonicalize.
+ *
+ * This function is equivalent to extractNetworkPortion(), except
+ * for allowing the PLUS character to occur at arbitrary positions
+ * in the address portion, not just the first position.
+ *
+ * @hide
+ */
+ public static String extractNetworkPortionAlt(String phoneNumber) {
+ if (phoneNumber == null) {
+ return null;
+ }
+
+ int len = phoneNumber.length();
+ StringBuilder ret = new StringBuilder(len);
+ boolean haveSeenPlus = false;
+
+ for (int i = 0; i < len; i++) {
+ char c = phoneNumber.charAt(i);
+ if (c == '+') {
+ if (haveSeenPlus) {
+ continue;
+ }
+ haveSeenPlus = true;
+ }
+ if (isDialable(c)) {
+ ret.append(c);
+ } else if (isStartsPostDial (c)) {
+ break;
+ }
+ }
+
+ return ret.toString();
+ }
+
+ /**
* Strips separators from a phone number string.
* @param phoneNumber phone number to strip.
* @return phone string stripped of separators.
@@ -342,6 +378,8 @@ public class PhoneNumberUtils
compareLoosely(String a, String b) {
int ia, ib;
int matched;
+ int numNonDialableCharsInA = 0;
+ int numNonDialableCharsInB = 0;
if (a == null || b == null) return a == b;
@@ -362,6 +400,7 @@ public class PhoneNumberUtils
if (!isDialable(ca)) {
ia--;
skipCmp = true;
+ numNonDialableCharsInA++;
}
cb = b.charAt(ib);
@@ -369,6 +408,7 @@ public class PhoneNumberUtils
if (!isDialable(cb)) {
ib--;
skipCmp = true;
+ numNonDialableCharsInB++;
}
if (!skipCmp) {
@@ -380,13 +420,16 @@ public class PhoneNumberUtils
}
if (matched < MIN_MATCH) {
- int aLen = a.length();
+ int effectiveALen = a.length() - numNonDialableCharsInA;
+ int effectiveBLen = b.length() - numNonDialableCharsInB;
+
- // if the input strings match, but their lengths < MIN_MATCH,
- // treat them as equal.
- if (aLen == b.length() && aLen == matched) {
+ // if the number of dialable chars in a and b match, but the matched chars < MIN_MATCH,
+ // treat them as equal (i.e. 404-04 and 40404)
+ if (effectiveALen == effectiveBLen && effectiveALen == matched) {
return true;
}
+
return false;
}
@@ -590,7 +633,7 @@ public class PhoneNumberUtils
*/
public static String
toCallerIDMinMatch(String phoneNumber) {
- String np = extractNetworkPortion(phoneNumber);
+ String np = extractNetworkPortionAlt(phoneNumber);
return internalGetStrippedReversed(np, MIN_MATCH);
}
@@ -603,7 +646,7 @@ public class PhoneNumberUtils
*/
public static String
getStrippedReversed(String phoneNumber) {
- String np = extractNetworkPortion(phoneNumber);
+ String np = extractNetworkPortionAlt(phoneNumber);
if (np == null) return null;
@@ -1247,7 +1290,7 @@ public class PhoneNumberUtils
// Strip the separators from the number before comparing it
// to the list.
- number = extractNetworkPortion(number);
+ number = extractNetworkPortionAlt(number);
// retrieve the list of emergency numbers
String numbers = SystemProperties.get("ro.ril.ecclist");
@@ -1290,7 +1333,7 @@ public class PhoneNumberUtils
// Strip the separators from the number before comparing it
// to the list.
- number = extractNetworkPortion(number);
+ number = extractNetworkPortionAlt(number);
// compare tolerates null so we need to make sure that we
// don't return true when both are null.
diff --git a/telephony/java/com/android/internal/telephony/DriverCall.java b/telephony/java/com/android/internal/telephony/DriverCall.java
index 0d9a60f..66f6b9c 100644
--- a/telephony/java/com/android/internal/telephony/DriverCall.java
+++ b/telephony/java/com/android/internal/telephony/DriverCall.java
@@ -73,8 +73,7 @@ public class DriverCall implements Comparable {
if (p.hasMore()) {
// Some lame implementations return strings
// like "NOT AVAILABLE" in the CLCC line
- ret.number = PhoneNumberUtils.extractNetworkPortion(
- p.nextString());
+ ret.number = PhoneNumberUtils.extractNetworkPortionAlt(p.nextString());
if (ret.number.length() == 0) {
ret.number = null;
diff --git a/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java b/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java
index 22fbe8b..a5d3b22 100755
--- a/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java
@@ -257,12 +257,6 @@ public class CDMAPhone extends PhoneBase {
}
public ServiceState getServiceState() {
- int roamInd = mSST.ss.getCdmaRoamingIndicator();
- int defRoamInd = mSST.ss.getCdmaDefaultRoamingIndicator();
-
- mSST.ss.setCdmaEriIconIndex(mEriManager.getCdmaEriIconIndex(roamInd, defRoamInd));
- mSST.ss.setCdmaEriIconMode(mEriManager.getCdmaEriIconMode(roamInd, defRoamInd));
-
return mSST.ss;
}
@@ -804,10 +798,6 @@ public class CDMAPhone extends PhoneBase {
}
void notifyServiceStateChanged(ServiceState ss) {
- // TODO this seems really inefficient. Can't we calc this when the fundamentals change and store in the
- // service state?
- ss.setCdmaEriIconIndex(this.getCdmaEriIconIndex());
- ss.setCdmaEriIconMode(this.getCdmaEriIconMode());
super.notifyServiceStateChangedP(ss);
}
@@ -1317,7 +1307,7 @@ public class CDMAPhone extends PhoneBase {
@Override
public boolean isOtaSpNumber(String dialStr){
boolean isOtaSpNum = false;
- String dialableStr = PhoneNumberUtils.extractNetworkPortion(dialStr);
+ String dialableStr = PhoneNumberUtils.extractNetworkPortionAlt(dialStr);
if (dialableStr != null) {
isOtaSpNum = isIs683OtaSpDialStr(dialableStr);
if (isOtaSpNum == false) {
@@ -1330,9 +1320,7 @@ public class CDMAPhone extends PhoneBase {
@Override
public int getCdmaEriIconIndex() {
- int roamInd = getServiceState().getCdmaRoamingIndicator();
- int defRoamInd = getServiceState().getCdmaDefaultRoamingIndicator();
- return mEriManager.getCdmaEriIconIndex(roamInd, defRoamInd);
+ return getServiceState().getCdmaEriIconIndex();
}
/**
@@ -1342,9 +1330,7 @@ public class CDMAPhone extends PhoneBase {
*/
@Override
public int getCdmaEriIconMode() {
- int roamInd = getServiceState().getCdmaRoamingIndicator();
- int defRoamInd = getServiceState().getCdmaDefaultRoamingIndicator();
- return mEriManager.getCdmaEriIconMode(roamInd, defRoamInd);
+ return getServiceState().getCdmaEriIconMode();
}
/**
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaConnection.java b/telephony/java/com/android/internal/telephony/cdma/CdmaConnection.java
index f637d33..08946d2 100755
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaConnection.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaConnection.java
@@ -154,7 +154,7 @@ public class CdmaConnection extends Connection {
dialString = formatDialString(dialString);
Log.d(LOG_TAG, "[CDMAConn] CdmaConnection:formated dialString=" + dialString);
- this.address = PhoneNumberUtils.extractNetworkPortion(dialString);
+ this.address = PhoneNumberUtils.extractNetworkPortionAlt(dialString);
this.postDialString = PhoneNumberUtils.extractPostDialPortion(dialString);
index = -1;
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
index 3051e2f..03acf5c 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
@@ -811,6 +811,12 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
}
}
+ int roamingIndicator = newSS.getCdmaRoamingIndicator();
+ newSS.setCdmaEriIconIndex(phone.mEriManager.getCdmaEriIconIndex(roamingIndicator,
+ mDefaultRoamingIndicator));
+ newSS.setCdmaEriIconMode(phone.mEriManager.getCdmaEriIconMode(roamingIndicator,
+ mDefaultRoamingIndicator));
+
// NOTE: Some operator may require overriding mCdmaRoaming
// (set by the modem), depending on the mRoamingIndicator.
diff --git a/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java b/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java
index 5614c12..56499a8 100755
--- a/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java
@@ -729,7 +729,7 @@ public class GSMPhone extends PhoneBase {
}
// Only look at the Network portion for mmi
- String networkPortion = PhoneNumberUtils.extractNetworkPortion(newDialString);
+ String networkPortion = PhoneNumberUtils.extractNetworkPortionAlt(newDialString);
GsmMmiCode mmi = GsmMmiCode.newFromDialString(networkPortion, this);
if (LOCAL_DEBUG) Log.d(LOG_TAG,
"dialing w/ mmi '" + mmi + "'...");
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmConnection.java b/telephony/java/com/android/internal/telephony/gsm/GsmConnection.java
index 445be39..4788a01 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmConnection.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmConnection.java
@@ -144,7 +144,7 @@ public class GsmConnection extends Connection {
this.dialString = dialString;
- this.address = PhoneNumberUtils.extractNetworkPortion(dialString);
+ this.address = PhoneNumberUtils.extractNetworkPortionAlt(dialString);
this.postDialString = PhoneNumberUtils.extractPostDialPortion(dialString);
index = -1;