From 3dc68df0b856eace41aaca6bd0266da023c18835 Mon Sep 17 00:00:00 2001 From: Tony Mak Date: Fri, 11 Mar 2016 15:06:14 +0000 Subject: Query lookup uri with work lookup key directly is not allowed Query lookup uri with work lookup key directly is not allowed, app crashes if doing so. And actually, all APIs do not support work lookup key except those explicitly say it does. This Cls changed two places: 1. Do not pass lookup uri with work lookup to NotificationManager to avoid NotificationManager using the uri to query. 2. Dialer perform query for alternative display name using lookup key. But if it is a work contact, do not do so. Bug: 27146678 Change-Id: Ie59c37ff43b6f953a96564c446d79d8812f5ada1 --- InCallUI/src/com/android/incallui/CallerInfo.java | 9 +++------ InCallUI/src/com/android/incallui/StatusBarNotifier.java | 9 ++++++--- 2 files changed, 9 insertions(+), 9 deletions(-) (limited to 'InCallUI/src/com/android/incallui') diff --git a/InCallUI/src/com/android/incallui/CallerInfo.java b/InCallUI/src/com/android/incallui/CallerInfo.java index a638e114c..f270678e0 100644 --- a/InCallUI/src/com/android/incallui/CallerInfo.java +++ b/InCallUI/src/com/android/incallui/CallerInfo.java @@ -237,12 +237,6 @@ public class CallerInfo { info.name = cursor.getString(columnIndex); } - columnIndex = cursor.getColumnIndex(PhoneLookup.LOOKUP_KEY); - if (columnIndex != -1) { - info.nameAlternative = ContactInfoHelper.lookUpDisplayNameAlternative( - context, cursor.getString(columnIndex)); - } - // Look for the number columnIndex = cursor.getColumnIndex(PhoneLookup.NUMBER); if (columnIndex != -1) { @@ -326,6 +320,9 @@ public class CallerInfo { : contactRef.getQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY); final Long directoryId = directory == null ? null : Longs.tryParse(directory); info.userType = ContactsUtils.determineUserType(directoryId, contactId); + + info.nameAlternative = ContactInfoHelper.lookUpDisplayNameAlternative( + context, info.lookupKeyOrNull, info.userType); } cursor.close(); } diff --git a/InCallUI/src/com/android/incallui/StatusBarNotifier.java b/InCallUI/src/com/android/incallui/StatusBarNotifier.java index 173fe42ec..7d212aa8e 100644 --- a/InCallUI/src/com/android/incallui/StatusBarNotifier.java +++ b/InCallUI/src/com/android/incallui/StatusBarNotifier.java @@ -36,6 +36,7 @@ import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.media.AudioAttributes; import android.net.Uri; +import android.provider.ContactsContract.Contacts; import android.support.annotation.Nullable; import android.telecom.Call.Details; import android.telecom.PhoneAccount; @@ -229,7 +230,6 @@ public class StatusBarNotifier implements InCallPresenter.InCallStateListener, * Sets up the main Ui for the notification */ private void buildAndSendNotification(Call originalCall, ContactCacheEntry contactInfo) { - // This can get called to update an existing notification after contact information has come // back. However, it can happen much later. Before we continue, we need to make sure that // the call being passed in is still the one we want to show in the notification. @@ -440,11 +440,14 @@ public class StatusBarNotifier implements InCallPresenter.InCallStateListener, private void addPersonReference(Notification.Builder builder, ContactCacheEntry contactInfo, Call call) { - if (contactInfo.lookupUri != null) { + // Query {@link Contacts#CONTENT_LOOKUP_URI} directly with work lookup key is not allowed. + // So, do not pass {@link Contacts#CONTENT_LOOKUP_URI} to NotificationManager to avoid + // NotificationManager using it. + if (contactInfo.lookupUri != null && contactInfo.userType != ContactsUtils.USER_TYPE_WORK) { builder.addPerson(contactInfo.lookupUri.toString()); } else if (!TextUtils.isEmpty(call.getNumber())) { builder.addPerson(Uri.fromParts(PhoneAccount.SCHEME_TEL, - call.getNumber(), null).toString()); + call.getNumber(), null).toString()); } } -- cgit v1.2.3