diff options
author | zachh <zachh@google.com> | 2018-01-17 16:32:18 -0800 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-01-17 16:37:56 -0800 |
commit | 6d123ee49dadb918acf5a3c57fee57d3aff6bab2 (patch) | |
tree | 9f6712592e098fe5c26f8609285aa5c373896aba | |
parent | 10f6e8222a5ee1cc2da1b107c3a344b34c726501 (diff) |
Relax number matching when coalescing rows in new call log.
We currently require two numbers to be a PhoneNumberUtil.MatchType.EXACT_MATCH to coalesce them, but this means that two numbers like "456-7890" and "408 456-7890" won't ever be collapsed.
This is potentially a likely situation since it is possible to dial numbers without an area code so we should better support it (and the old call log coalesces such numbers today).
Bug: 70989626
Test: unit
PiperOrigin-RevId: 182289194
Change-Id: If884d5a1f2631116a2729e0635f9a97aeca3e057
-rw-r--r-- | java/com/android/dialer/calllog/database/Coalescer.java | 2 | ||||
-rw-r--r-- | java/com/android/dialer/phonenumberproto/DialerPhoneNumberUtil.java | 26 |
2 files changed, 21 insertions, 7 deletions
diff --git a/java/com/android/dialer/calllog/database/Coalescer.java b/java/com/android/dialer/calllog/database/Coalescer.java index 9b788140a..3c2585e01 100644 --- a/java/com/android/dialer/calllog/database/Coalescer.java +++ b/java/com/android/dialer/calllog/database/Coalescer.java @@ -181,7 +181,7 @@ public class Coalescer { if (!meetsAssistedDialingCriteria(row1, row2)) { return false; } - return dialerPhoneNumberUtil.isExactMatch(number1, number2); + return dialerPhoneNumberUtil.isMatch(number1, number2); } /** diff --git a/java/com/android/dialer/phonenumberproto/DialerPhoneNumberUtil.java b/java/com/android/dialer/phonenumberproto/DialerPhoneNumberUtil.java index 8969737d4..d37f7fa1d 100644 --- a/java/com/android/dialer/phonenumberproto/DialerPhoneNumberUtil.java +++ b/java/com/android/dialer/phonenumberproto/DialerPhoneNumberUtil.java @@ -70,6 +70,14 @@ public class DialerPhoneNumberUtil { } dialerPhoneNumber.setRawInput(rawInput.build()); + // If the number is a service number, just store the raw input and don't bother trying to parse + // it. PhoneNumberUtil#parse ignores these characters which can lead to confusing behavior, such + // as the numbers "#123" and "123" being considered the same. The "#" can appear in the middle + // of a service number and the "*" can appear at the beginning (see a bug). + if (numberToParse != null && (numberToParse.contains("#") || numberToParse.startsWith("*"))) { + return dialerPhoneNumber.build(); + } + try { dialerPhoneNumber.setDialerInternalPhoneNumber( Converter.pojoToProto(phoneNumberUtil.parse(numberToParse, defaultRegion))); @@ -95,21 +103,27 @@ public class DialerPhoneNumberUtil { } /** - * Returns true if the two numbers were parseable by libphonenumber and are an {@link - * MatchType#EXACT_MATCH} or if they have the same raw input. + * Returns true if the two numbers were parseable by libphonenumber and are a {@link + * MatchType#SHORT_NSN_MATCH} or {@link MatchType#NSN_MATCH} or {@link MatchType#EXACT_MATCH} or + * if they have the same raw input. + * + * @see PhoneNumberUtil#isNumberMatch(PhoneNumber, PhoneNumber) */ @WorkerThread - public boolean isExactMatch( + public boolean isMatch( @NonNull DialerPhoneNumber firstNumberIn, @NonNull DialerPhoneNumber secondNumberIn) { Assert.isWorkerThread(); if (!Assert.isNotNull(firstNumberIn).hasDialerInternalPhoneNumber() || !Assert.isNotNull(secondNumberIn).hasDialerInternalPhoneNumber()) { return firstNumberIn.getRawInput().equals(secondNumberIn.getRawInput()); } - return isNumberMatch( + MatchType matchType = + isNumberMatch( firstNumberIn.getDialerInternalPhoneNumber(), - secondNumberIn.getDialerInternalPhoneNumber()) - == MatchType.EXACT_MATCH; + secondNumberIn.getDialerInternalPhoneNumber()); + return matchType == MatchType.SHORT_NSN_MATCH + || matchType == MatchType.NSN_MATCH + || matchType == MatchType.EXACT_MATCH; } /** |