summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGrace Jia <xiaotonj@google.com>2020-09-27 17:03:59 -0700
committerGrace Jia <xiaotonj@google.com>2021-01-13 19:48:42 +0000
commitf757e180c1e8423460888ee6e170616c975c5126 (patch)
tree24eb9322733491e4fd267c130f3c40c8aec38927 /src
parent2f1e244c7dee2231c29a14060cdaf526e6b276c8 (diff)
downloadplatform_packages_providers_ContactsProvider-f757e180c1e8423460888ee6e170616c975c5126.tar.gz
platform_packages_providers_ContactsProvider-f757e180c1e8423460888ee6e170616c975c5126.tar.bz2
platform_packages_providers_ContactsProvider-f757e180c1e8423460888ee6e170616c975c5126.zip
Use new phone number match method in Java directly as a new filter in
ContactsProvider2. Change-Id: I4dceec842d624e3cd2a2dacbe3a69f5924fc30fc Bug: 174028667 Test: unit test
Diffstat (limited to 'src')
-rw-r--r--src/com/android/providers/contacts/ContactsProvider2.java15
-rw-r--r--src/com/android/providers/contacts/PhoneLookupWithStarPrefix.java33
2 files changed, 45 insertions, 3 deletions
diff --git a/src/com/android/providers/contacts/ContactsProvider2.java b/src/com/android/providers/contacts/ContactsProvider2.java
index 3a0f7db8..aad51c72 100644
--- a/src/com/android/providers/contacts/ContactsProvider2.java
+++ b/src/com/android/providers/contacts/ContactsProvider2.java
@@ -121,6 +121,7 @@ import android.util.Log;
import com.android.common.content.ProjectionMap;
import com.android.common.content.SyncStateContentProviderHelper;
import com.android.common.io.MoreCloseables;
+import com.android.i18n.phonenumbers.Phonenumber;
import com.android.internal.util.ArrayUtils;
import com.android.providers.contacts.ContactLookupKey.LookupKeySegment;
import com.android.providers.contacts.ContactsDatabaseHelper.AccountsColumns;
@@ -6707,11 +6708,17 @@ public class ContactsProvider2 extends AbstractContactsProvider
boolean foundResult = false;
Cursor cursor = doQuery(db, qb, projectionWithNumber, selection, selectionArgs,
sortOrder, groupBy, null, limit, cancellationSignal);
+
try {
if (cursor.getCount() > 0) {
foundResult = true;
- return PhoneLookupWithStarPrefix
+ cursor = PhoneLookupWithStarPrefix
.removeNonStarMatchesFromCursor(number, cursor);
+ if (!mDbHelper.get().getUseStrictPhoneNumberComparisonForTest()) {
+ cursor = PhoneLookupWithStarPrefix.removeNoMatchPhoneNumber(number,
+ cursor, mDbHelper.get().getCurrentCountryIso());
+ }
+ return cursor;
}
// Use the fall-back lookup method.
@@ -6724,11 +6731,13 @@ public class ContactsProvider2 extends AbstractContactsProvider
// numbers
mDbHelper.get().buildFallbackPhoneLookupAndContactQuery(qb, number);
- final Cursor fallbackCursor = doQuery(db, qb, projectionWithNumber,
+ Cursor fallbackCursor = doQuery(db, qb, projectionWithNumber,
selection, selectionArgs, sortOrder, groupBy, having, limit,
cancellationSignal);
- return PhoneLookupWithStarPrefix.removeNonStarMatchesFromCursor(
+ fallbackCursor = PhoneLookupWithStarPrefix.removeNonStarMatchesFromCursor(
number, fallbackCursor);
+ return PhoneLookupWithStarPrefix.removeNoMatchPhoneNumber(number,
+ fallbackCursor, mDbHelper.get().getCurrentCountryIso());
} finally {
if (!foundResult) {
// We'll be returning a different cursor, so close this one.
diff --git a/src/com/android/providers/contacts/PhoneLookupWithStarPrefix.java b/src/com/android/providers/contacts/PhoneLookupWithStarPrefix.java
index 7efc8910..ca29edc6 100644
--- a/src/com/android/providers/contacts/PhoneLookupWithStarPrefix.java
+++ b/src/com/android/providers/contacts/PhoneLookupWithStarPrefix.java
@@ -15,6 +15,7 @@
*/
package com.android.providers.contacts;
+import com.android.i18n.phonenumbers.Phonenumber;
import com.android.internal.annotations.VisibleForTesting;
import android.database.Cursor;
@@ -148,4 +149,36 @@ import android.util.Log;
return null;
}
}
+
+ /**
+ * Check each phone number in the given cursor to detemine if it's a match with the given phone
+ * number. Return the matching ones in a new cursor.
+ * @param number phone number to be match
+ * @param cursor contains a series of number s to be match
+ * @param defaultCountryIso The lowercase two letter ISO 3166-1 country code. It is recommended
+ * to pass in {@link TelephonyManager#getNetworkCountryIso()}.
+ * @return A new cursor with all matching phone numbers.
+ */
+ public static Cursor removeNoMatchPhoneNumber(String number, Cursor cursor,
+ String defaultCountryIso) {
+ if (number == null) {
+ return cursor;
+ }
+
+ final MatrixCursor matrixCursor = new MatrixCursor(cursor.getColumnNames());
+
+ cursor.moveToPosition(-1);
+ while (cursor.moveToNext()) {
+ final int numberIndex = cursor.getColumnIndex(PhoneLookup.NUMBER);
+ final String numberToMatch = cursor.getString(numberIndex);
+ if (PhoneNumberUtils.areSamePhoneNumber(number, numberToMatch, defaultCountryIso)) {
+ final MatrixCursor.RowBuilder b = matrixCursor.newRow();
+ for (int column = 0; column < cursor.getColumnCount(); column++) {
+ b.add(cursor.getColumnName(column), cursorValue(cursor, column));
+ }
+ }
+ }
+
+ return matrixCursor;
+ }
}