Merge "Small improvements to matchesCallFilter functionality" into sc-v2-dev

This commit is contained in:
Yuri Lin
2022-03-17 17:03:07 +00:00
committed by Android (Google) Code Review
3 changed files with 33 additions and 34 deletions

View File

@@ -70,11 +70,15 @@ public class ValidateNotificationPeople implements NotificationSignalExtractor {
"validate_notification_people_enabled";
private static final String[] LOOKUP_PROJECTION = { Contacts._ID, Contacts.LOOKUP_KEY,
Contacts.STARRED, Contacts.HAS_PHONE_NUMBER };
private static final String[] PHONE_LOOKUP_PROJECTION =
{ ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER };
private static final int MAX_PEOPLE = 10;
private static final int PEOPLE_CACHE_SIZE = 200;
/** Columns used to look up phone numbers for contacts. */
@VisibleForTesting
static final String[] PHONE_LOOKUP_PROJECTION =
{ ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER,
ContactsContract.CommonDataKinds.Phone.NUMBER };
/** Indicates that the notification does not reference any valid contacts. */
static final float NONE = 0f;
@@ -548,14 +552,21 @@ public class ValidateNotificationPeople implements NotificationSignalExtractor {
return mPhoneLookupKey;
}
// Merge phone number found in this lookup and store it in mPhoneNumbers.
// Merge phone numbers found in this lookup and store them in mPhoneNumbers.
public void mergePhoneNumber(Cursor cursor) {
final int phoneNumIdx = cursor.getColumnIndex(
final int normalizedNumIdx = cursor.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER);
if (phoneNumIdx >= 0) {
mPhoneNumbers.add(cursor.getString(phoneNumIdx));
if (normalizedNumIdx >= 0) {
mPhoneNumbers.add(cursor.getString(normalizedNumIdx));
} else {
if (DEBUG) Slog.d(TAG, "invalid cursor: no NORMALIZED_NUMBER");
if (DEBUG) Slog.d(TAG, "cursor data not found: no NORMALIZED_NUMBER");
}
final int numIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
if (numIdx >= 0) {
mPhoneNumbers.add(cursor.getString(numIdx));
} else {
if (DEBUG) Slog.d(TAG, "cursor data not found: no NUMBER");
}
}

View File

@@ -40,8 +40,6 @@ import com.android.internal.messages.nano.SystemMessageProto;
import com.android.internal.util.NotificationMessagingUtil;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.Date;
public class ZenModeFiltering {
@@ -402,16 +400,10 @@ public class ZenModeFiltering {
if (person == null) continue;
final Uri uri = Uri.parse(person);
if ("tel".equals(uri.getScheme())) {
String tel = uri.getSchemeSpecificPart();
// while ideally we should not need to do this, sometimes we have seen tel
// numbers given in a url-encoded format
try {
tel = URLDecoder.decode(tel, "UTF-8");
} catch (UnsupportedEncodingException e) {
// ignore, keep the original tel string
Slog.w(TAG, "unsupported encoding in tel: uri input");
}
mTelCalls.put(tel, now);
// while ideally we should not need to decode this, sometimes we have seen tel
// numbers given in an encoded format
String tel = Uri.decode(uri.getSchemeSpecificPart());
if (tel != null) mTelCalls.put(tel, now);
} else {
// for non-tel calls, store the entire string, uri-component and all
mOtherCalls.put(person, now);
@@ -422,7 +414,7 @@ public class ZenModeFiltering {
// provided; these are in the format of just a phone number string
if (phoneNumbers != null) {
for (String num : phoneNumbers) {
mTelCalls.put(num, now);
if (num != null) mTelCalls.put(num, now);
}
}
}
@@ -442,17 +434,13 @@ public class ZenModeFiltering {
return true;
} else {
// see if a number that matches via areSameNumber exists
String numberToCheck = number;
try {
numberToCheck = URLDecoder.decode(number, "UTF-8");
} catch (UnsupportedEncodingException e) {
// ignore, continue to use the original string
Slog.w(TAG, "unsupported encoding in tel: uri input");
}
for (String prev : mTelCalls.keySet()) {
if (PhoneNumberUtils.areSamePhoneNumber(
numberToCheck, prev, defaultCountryCode)) {
return true;
String numberToCheck = Uri.decode(number);
if (numberToCheck != null) {
for (String prev : mTelCalls.keySet()) {
if (PhoneNumberUtils.areSamePhoneNumber(
numberToCheck, prev, defaultCountryCode)) {
return true;
}
}
}
}

View File

@@ -274,7 +274,7 @@ public class ValidateNotificationPeopleTest extends UiServiceTestCase {
new ValidateNotificationPeople().searchContactsAndLookupNumbers(mockContext, lookupUri);
verify(mockContentResolver, never()).query(
eq(ContactsContract.CommonDataKinds.Phone.CONTENT_URI),
eq(new String[] { ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER }),
eq(ValidateNotificationPeople.PHONE_LOOKUP_PROJECTION),
contains(ContactsContract.Contacts.LOOKUP_KEY),
any(), // selection args
isNull()); // sort order
@@ -308,7 +308,7 @@ public class ValidateNotificationPeopleTest extends UiServiceTestCase {
// in the case of a phone lookup, return null cursor; that's not an error case
// and we're not checking the actual storing of the phone data here.
when(mockContentResolver.query(eq(ContactsContract.CommonDataKinds.Phone.CONTENT_URI),
eq(new String[] { ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER }),
eq(ValidateNotificationPeople.PHONE_LOOKUP_PROJECTION),
contains(ContactsContract.Contacts.LOOKUP_KEY),
any(), isNull())).thenReturn(null);
@@ -317,7 +317,7 @@ public class ValidateNotificationPeopleTest extends UiServiceTestCase {
new ValidateNotificationPeople().searchContactsAndLookupNumbers(mockContext, lookupUri);
verify(mockContentResolver, times(1)).query(
eq(ContactsContract.CommonDataKinds.Phone.CONTENT_URI),
eq(new String[] { ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER }),
eq(ValidateNotificationPeople.PHONE_LOOKUP_PROJECTION),
contains(ContactsContract.Contacts.LOOKUP_KEY),
eq(new String[] { "testlookupkey" }), // selection args
isNull()); // sort order