summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--InCallUI/src/com/android/incallui/CallerInfo.java2
-rw-r--r--src/com/android/dialer/calllog/ContactInfoHelper.java26
-rw-r--r--tests/src/com/android/dialer/calllog/ContactInfoHelperTest.java29
3 files changed, 51 insertions, 6 deletions
diff --git a/InCallUI/src/com/android/incallui/CallerInfo.java b/InCallUI/src/com/android/incallui/CallerInfo.java
index f270678e0..f3d0e0763 100644
--- a/InCallUI/src/com/android/incallui/CallerInfo.java
+++ b/InCallUI/src/com/android/incallui/CallerInfo.java
@@ -322,7 +322,7 @@ public class CallerInfo {
info.userType = ContactsUtils.determineUserType(directoryId, contactId);
info.nameAlternative = ContactInfoHelper.lookUpDisplayNameAlternative(
- context, info.lookupKeyOrNull, info.userType);
+ context, info.lookupKeyOrNull, info.userType, directoryId);
}
cursor.close();
}
diff --git a/src/com/android/dialer/calllog/ContactInfoHelper.java b/src/com/android/dialer/calllog/ContactInfoHelper.java
index 6e84a92f9..abbddd241 100644
--- a/src/com/android/dialer/calllog/ContactInfoHelper.java
+++ b/src/com/android/dialer/calllog/ContactInfoHelper.java
@@ -14,6 +14,8 @@
package com.android.dialer.calllog;
+import com.google.common.primitives.Longs;
+
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
@@ -33,6 +35,7 @@ import android.util.Log;
import com.android.contacts.common.ContactsUtils;
import com.android.contacts.common.ContactsUtils.UserType;
import com.android.contacts.common.compat.CompatUtils;
+import com.android.contacts.common.compat.DirectoryCompat;
import com.android.contacts.common.util.Constants;
import com.android.contacts.common.util.PermissionsUtil;
import com.android.contacts.common.util.PhoneNumberHelper;
@@ -163,6 +166,9 @@ public class ContactInfoHelper {
return ContactInfo.EMPTY;
}
+ final String directory = uri.getQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY);
+ final Long directoryId = directory == null ? null : Longs.tryParse(directory);
+
Cursor phoneLookupCursor = null;
try {
String[] projection = PhoneQuery.getPhoneLookupProjection(uri);
@@ -183,7 +189,7 @@ public class ContactInfoHelper {
String lookupKey = phoneLookupCursor.getString(PhoneQuery.LOOKUP_KEY);
ContactInfo contactInfo = createPhoneLookupContactInfo(phoneLookupCursor, lookupKey);
contactInfo.nameAlternative = lookUpDisplayNameAlternative(mContext, lookupKey,
- contactInfo.userType);
+ contactInfo.userType, directoryId);
return contactInfo;
} finally {
phoneLookupCursor.close();
@@ -210,11 +216,24 @@ public class ContactInfoHelper {
}
public static String lookUpDisplayNameAlternative(Context context, String lookupKey,
- @UserType long userType) {
+ @UserType long userType, @Nullable Long directoryId) {
// Query {@link Contacts#CONTENT_LOOKUP_URI} directly with work lookup key is not allowed.
if (lookupKey == null || userType == ContactsUtils.USER_TYPE_WORK) {
return null;
}
+
+ if (directoryId != null) {
+ // Query {@link Contacts#CONTENT_LOOKUP_URI} with work lookup key is not allowed.
+ if (DirectoryCompat.isEnterpriseDirectoryId(directoryId)) {
+ return null;
+ }
+
+ // Skip this to avoid an extra remote network call for alternative name
+ if (DirectoryCompat.isRemoteDirectory(directoryId)) {
+ return null;
+ }
+ }
+
final Uri uri = Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, lookupKey);
Cursor cursor = null;
try {
@@ -224,6 +243,9 @@ public class ContactInfoHelper {
if (cursor != null && cursor.moveToFirst()) {
return cursor.getString(PhoneQuery.NAME_ALTERNATIVE);
}
+ } catch (IllegalArgumentException e) {
+ // Avoid dialer crash when lookup key is not valid
+ Log.e(TAG, "IllegalArgumentException in lookUpDisplayNameAlternative", e);
} finally {
if (cursor != null) {
cursor.close();
diff --git a/tests/src/com/android/dialer/calllog/ContactInfoHelperTest.java b/tests/src/com/android/dialer/calllog/ContactInfoHelperTest.java
index e53eb7893..df385f425 100644
--- a/tests/src/com/android/dialer/calllog/ContactInfoHelperTest.java
+++ b/tests/src/com/android/dialer/calllog/ContactInfoHelperTest.java
@@ -17,6 +17,7 @@
package com.android.dialer.calllog;
import android.net.Uri;
+import android.provider.ContactsContract;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.PhoneLookup;
import android.test.AndroidTestCase;
@@ -101,14 +102,14 @@ public class ContactInfoHelperTest extends AndroidTestCase {
public void testLookupDisplayNameAlternative_NullLookup() {
Assert.assertNull(mContactInfoHelper.lookUpDisplayNameAlternative(mContext, null,
- ContactsUtils.USER_TYPE_CURRENT));
+ ContactsUtils.USER_TYPE_CURRENT, null));
}
public void testLookupDisplayNameAlternative_NoResults() {
setUpQueryExpectations(displayNameAlternativeUri,
PhoneQuery.DISPLAY_NAME_ALTERNATIVE_PROJECTION);
Assert.assertNull(mContactInfoHelper.lookUpDisplayNameAlternative(mContext,
- TEST_LOOKUP_KEY, ContactsUtils.USER_TYPE_CURRENT));
+ TEST_LOOKUP_KEY, ContactsUtils.USER_TYPE_CURRENT, null));
mContext.verify();
}
@@ -117,10 +118,32 @@ public class ContactInfoHelperTest extends AndroidTestCase {
PhoneQuery.DISPLAY_NAME_ALTERNATIVE_PROJECTION, TEST_DISPLAY_NAME_ALTERNATIVE_ROW);
Assert.assertEquals(TEST_DISPLAY_NAME_ALTERNATIVE,
mContactInfoHelper.lookUpDisplayNameAlternative(mContext, TEST_LOOKUP_KEY
- , ContactsUtils.USER_TYPE_CURRENT));
+ , ContactsUtils.USER_TYPE_CURRENT, null));
mContext.verify();
}
+ public void testLookupDisplayNameAlternative_EnterpriseLocalDirectory() {
+ Assert.assertNull(mContactInfoHelper.lookUpDisplayNameAlternative(mContext, TEST_LOOKUP_KEY,
+ ContactsUtils.USER_TYPE_WORK, ContactsContract.Directory.ENTERPRISE_DEFAULT));
+ Assert.assertNull(mContactInfoHelper.lookUpDisplayNameAlternative(mContext, TEST_LOOKUP_KEY,
+ ContactsUtils.USER_TYPE_CURRENT, ContactsContract.Directory.ENTERPRISE_DEFAULT));
+ }
+
+ public void testLookupDisplayNameAlternative_EnterpriseRemoteDirectory() {
+ Assert.assertNull(mContactInfoHelper.lookUpDisplayNameAlternative(mContext, TEST_LOOKUP_KEY,
+ ContactsUtils.USER_TYPE_WORK,
+ ContactsContract.Directory.ENTERPRISE_DEFAULT + 10));
+ Assert.assertNull(mContactInfoHelper.lookUpDisplayNameAlternative(mContext, TEST_LOOKUP_KEY,
+ ContactsUtils.USER_TYPE_CURRENT,
+ ContactsContract.Directory.ENTERPRISE_DEFAULT + 10));
+ }
+
+ public void testLookupDisplayNameAlternative_PersonalRemoteDirectory() {
+ Assert.assertNull(mContactInfoHelper.lookUpDisplayNameAlternative(mContext, null,
+ ContactsUtils.USER_TYPE_CURRENT,
+ ContactsContract.Directory.DEFAULT + 10));
+ }
+
/*
* Sets up query expectations to return the given row for all queries for the given
* uri and projection. If row is null, an empty cursor is returned for query calls