diff options
| author | Grace Jia <xiaotonj@google.com> | 2020-09-27 17:03:59 -0700 |
|---|---|---|
| committer | Grace Jia <xiaotonj@google.com> | 2021-01-13 19:48:42 +0000 |
| commit | f757e180c1e8423460888ee6e170616c975c5126 (patch) | |
| tree | 24eb9322733491e4fd267c130f3c40c8aec38927 /src | |
| parent | 2f1e244c7dee2231c29a14060cdaf526e6b276c8 (diff) | |
| download | platform_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.java | 15 | ||||
| -rw-r--r-- | src/com/android/providers/contacts/PhoneLookupWithStarPrefix.java | 33 |
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; + } } |
