Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fd7b4f1d authored by Wei Huang's avatar Wei Huang
Browse files

bug #2180646: make comparing "404-04" and "40404" return true in PhoneNumberUtils.compare().

- when comparing two numbers whose dialable char length is less than the MIN_MATCH (7), treat them as equal if the dialable portion of the numbers match.
- update unit test.
parent 7fad4ee7
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -378,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;

@@ -398,6 +400,7 @@ public class PhoneNumberUtils
            if (!isDialable(ca)) {
                ia--;
                skipCmp = true;
                numNonDialableCharsInA++;
            }

            cb = b.charAt(ib);
@@ -405,6 +408,7 @@ public class PhoneNumberUtils
            if (!isDialable(cb)) {
                ib--;
                skipCmp = true;
                numNonDialableCharsInB++;
            }

            if (!skipCmp) {
@@ -416,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;
        }

+3 −0
Original line number Diff line number Diff line
@@ -314,6 +314,9 @@ public class PhoneNumberUtilsTest extends TestCase {
        // 444 is not a valid country code, but
        // matchIntlPrefixAndCC doesnt know this
        assertTrue(PhoneNumberUtils.compare("+444 207 792 3490", "0 207 792 3490"));

        // compare SMS short code
        assertTrue(PhoneNumberUtils.compare("404-04", "40404"));
    }