aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGrace Jia <xiaotonj@google.com>2021-01-15 14:02:53 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-01-15 14:02:53 +0000
commit653cf4be1a2e56bc22928839c84b723d6a367007 (patch)
tree1d0e6394891fc59bd12f939cfd0537a78ad1f56e /src
parentb562da046c06bf565a2676a948b1b63432aa9e19 (diff)
parent35c681b6ed5d0ca049e4808612148f78dc603d86 (diff)
downloadContactsProvider-653cf4be1a2e56bc22928839c84b723d6a367007.tar.gz
Merge "Use new phone number match method in Java directly as a new filter in ContactsProvider2." am: 03db749ca3 am: 8884eb88a6 am: 35c681b6ed
Original change: https://android-review.googlesource.com/c/platform/packages/providers/ContactsProvider/+/1449515 MUST ONLY BE SUBMITTED BY AUTOMERGER Change-Id: Iaca4012e9d4491259a20710965a815af339df266
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 a87dc971..befafc05 100644
--- a/src/com/android/providers/contacts/ContactsProvider2.java
+++ b/src/com/android/providers/contacts/ContactsProvider2.java
@@ -123,6 +123,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;
@@ -6715,11 +6716,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.
@@ -6732,11 +6739,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;
+ }
}