Loading src/com/android/dialer/calllog/ContactInfoHelper.java +12 −8 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ import com.android.dialer.service.CachedNumberLookupService; import com.android.dialer.service.CachedNumberLookupService.CachedContactInfo; import com.android.dialer.util.TelecomUtil; import com.android.dialerbind.ObjectFactory; import com.google.common.annotations.VisibleForTesting; import org.json.JSONException; import org.json.JSONObject; Loading Loading @@ -82,17 +83,17 @@ public class ContactInfoHelper { if (PhoneNumberHelper.isUriNumber(number)) { // The number is a SIP address.. info = lookupContactFromUri(getContactInfoLookupUri(number)); info = lookupContactFromUri(getContactInfoLookupUri(number), true); if (info == null || info == ContactInfo.EMPTY) { // If lookup failed, check if the "username" of the SIP address is a phone number. String username = PhoneNumberHelper.getUsernameFromUriNumber(number); if (PhoneNumberUtils.isGlobalPhoneNumber(username)) { info = queryContactInfoForPhoneNumber(username, countryIso); info = queryContactInfoForPhoneNumber(username, countryIso, true); } } } else { // Look for a contact that has the given phone number. info = queryContactInfoForPhoneNumber(number, countryIso); info = queryContactInfoForPhoneNumber(number, countryIso, false); } final ContactInfo updatedInfo; Loading Loading @@ -153,7 +154,7 @@ public class ContactInfoHelper { * The {@link ContactInfo#formattedNumber} field is always set to {@code null} in the returned * value. */ public ContactInfo lookupContactFromUri(Uri uri) { ContactInfo lookupContactFromUri(Uri uri, boolean isSip) { if (uri == null) { return null; } Loading @@ -163,8 +164,10 @@ public class ContactInfoHelper { Cursor phoneLookupCursor = null; try { phoneLookupCursor = mContext.getContentResolver().query(uri, PhoneQuery.PHONE_LOOKUP_PROJECTION, null, null, null); String[] projection = (isSip) ? PhoneQuery.SIP_PHONE_LOOKUP_PROJECTION : PhoneQuery.PHONE_LOOKUP_PROJECTION; phoneLookupCursor = mContext.getContentResolver().query(uri, projection, null, null, null); } catch (NullPointerException e) { // Trap NPE from pre-N CP2 return null; Loading Loading @@ -241,12 +244,13 @@ public class ContactInfoHelper { * <p> * If the lookup fails for some other reason, it returns null. */ private ContactInfo queryContactInfoForPhoneNumber(String number, String countryIso) { private ContactInfo queryContactInfoForPhoneNumber(String number, String countryIso, boolean isSip) { if (TextUtils.isEmpty(number)) { return null; } ContactInfo info = lookupContactFromUri(getContactInfoLookupUri(number)); ContactInfo info = lookupContactFromUri(getContactInfoLookupUri(number), isSip); if (info != null && info != ContactInfo.EMPTY) { info.formattedNumber = formatPhoneNumber(number, null, countryIso); } else if (mCachedNumberLookupService != null) { Loading src/com/android/dialer/calllog/PhoneQuery.java +20 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.dialer.calllog; import android.provider.ContactsContract.Contacts; import android.provider.ContactsContract.Data; import android.provider.ContactsContract.PhoneLookup; /** Loading @@ -37,7 +38,25 @@ final class PhoneQuery { PhoneLookup.NORMALIZED_NUMBER, PhoneLookup.PHOTO_ID, PhoneLookup.LOOKUP_KEY, PhoneLookup.PHOTO_URI}; PhoneLookup.PHOTO_URI }; /** * Similar to {@link PHONE_LOOKUP_PROJECTION}. Due to a bug in framework, the column name of * contact id in normal phonelookup query is _id, but that in sip phonelookup query is * contact_id. */ public static final String[] SIP_PHONE_LOOKUP_PROJECTION = new String[] { Data.CONTACT_ID, PhoneLookup.DISPLAY_NAME, PhoneLookup.TYPE, PhoneLookup.LABEL, PhoneLookup.NUMBER, PhoneLookup.NORMALIZED_NUMBER, PhoneLookup.PHOTO_ID, PhoneLookup.LOOKUP_KEY, PhoneLookup.PHOTO_URI }; public static final int PERSON_ID = 0; public static final int NAME = 1; Loading tests/src/com/android/dialer/calllog/ContactInfoHelperTest.java +4 −4 Original line number Diff line number Diff line Loading @@ -58,7 +58,7 @@ public class ContactInfoHelperTest extends AndroidTestCase { } public void testLookupContactFromUri_NullUri() { Assert.assertNull(mContactInfoHelper.lookupContactFromUri(null)); Assert.assertNull(mContactInfoHelper.lookupContactFromUri(null, false)); } public void testLookupContactFromUri_NoResults() { Loading @@ -66,7 +66,7 @@ public class ContactInfoHelperTest extends AndroidTestCase { PhoneQuery.PHONE_LOOKUP_PROJECTION); Assert.assertEquals(ContactInfo.EMPTY, mContactInfoHelper.lookupContactFromUri( PhoneLookup.ENTERPRISE_CONTENT_FILTER_URI)); PhoneLookup.ENTERPRISE_CONTENT_FILTER_URI, false)); mContext.verify(); } Loading @@ -77,7 +77,7 @@ public class ContactInfoHelperTest extends AndroidTestCase { PhoneQuery.DISPLAY_NAME_ALTERNATIVE_PROJECTION); ContactInfo contactInfo = mContactInfoHelper.lookupContactFromUri( PhoneLookup.ENTERPRISE_CONTENT_FILTER_URI); PhoneLookup.ENTERPRISE_CONTENT_FILTER_URI, false); Assert.assertEquals(TEST_DISPLAY_NAME, contactInfo.name); Assert.assertNull(contactInfo.nameAlternative); mContext.verify(); Loading @@ -90,7 +90,7 @@ public class ContactInfoHelperTest extends AndroidTestCase { PhoneQuery.DISPLAY_NAME_ALTERNATIVE_PROJECTION, TEST_DISPLAY_NAME_ALTERNATIVE_ROW); ContactInfo contactInfo = mContactInfoHelper.lookupContactFromUri( PhoneLookup.ENTERPRISE_CONTENT_FILTER_URI); PhoneLookup.ENTERPRISE_CONTENT_FILTER_URI, false); Assert.assertEquals(TEST_DISPLAY_NAME, contactInfo.name); Assert.assertEquals(TEST_DISPLAY_NAME_ALTERNATIVE, contactInfo.nameAlternative); mContext.verify(); Loading Loading
src/com/android/dialer/calllog/ContactInfoHelper.java +12 −8 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ import com.android.dialer.service.CachedNumberLookupService; import com.android.dialer.service.CachedNumberLookupService.CachedContactInfo; import com.android.dialer.util.TelecomUtil; import com.android.dialerbind.ObjectFactory; import com.google.common.annotations.VisibleForTesting; import org.json.JSONException; import org.json.JSONObject; Loading Loading @@ -82,17 +83,17 @@ public class ContactInfoHelper { if (PhoneNumberHelper.isUriNumber(number)) { // The number is a SIP address.. info = lookupContactFromUri(getContactInfoLookupUri(number)); info = lookupContactFromUri(getContactInfoLookupUri(number), true); if (info == null || info == ContactInfo.EMPTY) { // If lookup failed, check if the "username" of the SIP address is a phone number. String username = PhoneNumberHelper.getUsernameFromUriNumber(number); if (PhoneNumberUtils.isGlobalPhoneNumber(username)) { info = queryContactInfoForPhoneNumber(username, countryIso); info = queryContactInfoForPhoneNumber(username, countryIso, true); } } } else { // Look for a contact that has the given phone number. info = queryContactInfoForPhoneNumber(number, countryIso); info = queryContactInfoForPhoneNumber(number, countryIso, false); } final ContactInfo updatedInfo; Loading Loading @@ -153,7 +154,7 @@ public class ContactInfoHelper { * The {@link ContactInfo#formattedNumber} field is always set to {@code null} in the returned * value. */ public ContactInfo lookupContactFromUri(Uri uri) { ContactInfo lookupContactFromUri(Uri uri, boolean isSip) { if (uri == null) { return null; } Loading @@ -163,8 +164,10 @@ public class ContactInfoHelper { Cursor phoneLookupCursor = null; try { phoneLookupCursor = mContext.getContentResolver().query(uri, PhoneQuery.PHONE_LOOKUP_PROJECTION, null, null, null); String[] projection = (isSip) ? PhoneQuery.SIP_PHONE_LOOKUP_PROJECTION : PhoneQuery.PHONE_LOOKUP_PROJECTION; phoneLookupCursor = mContext.getContentResolver().query(uri, projection, null, null, null); } catch (NullPointerException e) { // Trap NPE from pre-N CP2 return null; Loading Loading @@ -241,12 +244,13 @@ public class ContactInfoHelper { * <p> * If the lookup fails for some other reason, it returns null. */ private ContactInfo queryContactInfoForPhoneNumber(String number, String countryIso) { private ContactInfo queryContactInfoForPhoneNumber(String number, String countryIso, boolean isSip) { if (TextUtils.isEmpty(number)) { return null; } ContactInfo info = lookupContactFromUri(getContactInfoLookupUri(number)); ContactInfo info = lookupContactFromUri(getContactInfoLookupUri(number), isSip); if (info != null && info != ContactInfo.EMPTY) { info.formattedNumber = formatPhoneNumber(number, null, countryIso); } else if (mCachedNumberLookupService != null) { Loading
src/com/android/dialer/calllog/PhoneQuery.java +20 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.dialer.calllog; import android.provider.ContactsContract.Contacts; import android.provider.ContactsContract.Data; import android.provider.ContactsContract.PhoneLookup; /** Loading @@ -37,7 +38,25 @@ final class PhoneQuery { PhoneLookup.NORMALIZED_NUMBER, PhoneLookup.PHOTO_ID, PhoneLookup.LOOKUP_KEY, PhoneLookup.PHOTO_URI}; PhoneLookup.PHOTO_URI }; /** * Similar to {@link PHONE_LOOKUP_PROJECTION}. Due to a bug in framework, the column name of * contact id in normal phonelookup query is _id, but that in sip phonelookup query is * contact_id. */ public static final String[] SIP_PHONE_LOOKUP_PROJECTION = new String[] { Data.CONTACT_ID, PhoneLookup.DISPLAY_NAME, PhoneLookup.TYPE, PhoneLookup.LABEL, PhoneLookup.NUMBER, PhoneLookup.NORMALIZED_NUMBER, PhoneLookup.PHOTO_ID, PhoneLookup.LOOKUP_KEY, PhoneLookup.PHOTO_URI }; public static final int PERSON_ID = 0; public static final int NAME = 1; Loading
tests/src/com/android/dialer/calllog/ContactInfoHelperTest.java +4 −4 Original line number Diff line number Diff line Loading @@ -58,7 +58,7 @@ public class ContactInfoHelperTest extends AndroidTestCase { } public void testLookupContactFromUri_NullUri() { Assert.assertNull(mContactInfoHelper.lookupContactFromUri(null)); Assert.assertNull(mContactInfoHelper.lookupContactFromUri(null, false)); } public void testLookupContactFromUri_NoResults() { Loading @@ -66,7 +66,7 @@ public class ContactInfoHelperTest extends AndroidTestCase { PhoneQuery.PHONE_LOOKUP_PROJECTION); Assert.assertEquals(ContactInfo.EMPTY, mContactInfoHelper.lookupContactFromUri( PhoneLookup.ENTERPRISE_CONTENT_FILTER_URI)); PhoneLookup.ENTERPRISE_CONTENT_FILTER_URI, false)); mContext.verify(); } Loading @@ -77,7 +77,7 @@ public class ContactInfoHelperTest extends AndroidTestCase { PhoneQuery.DISPLAY_NAME_ALTERNATIVE_PROJECTION); ContactInfo contactInfo = mContactInfoHelper.lookupContactFromUri( PhoneLookup.ENTERPRISE_CONTENT_FILTER_URI); PhoneLookup.ENTERPRISE_CONTENT_FILTER_URI, false); Assert.assertEquals(TEST_DISPLAY_NAME, contactInfo.name); Assert.assertNull(contactInfo.nameAlternative); mContext.verify(); Loading @@ -90,7 +90,7 @@ public class ContactInfoHelperTest extends AndroidTestCase { PhoneQuery.DISPLAY_NAME_ALTERNATIVE_PROJECTION, TEST_DISPLAY_NAME_ALTERNATIVE_ROW); ContactInfo contactInfo = mContactInfoHelper.lookupContactFromUri( PhoneLookup.ENTERPRISE_CONTENT_FILTER_URI); PhoneLookup.ENTERPRISE_CONTENT_FILTER_URI, false); Assert.assertEquals(TEST_DISPLAY_NAME, contactInfo.name); Assert.assertEquals(TEST_DISPLAY_NAME_ALTERNATIVE, contactInfo.nameAlternative); mContext.verify(); Loading