From fe7e9e1d5a083bfe376df0d54bcf632f60012dcf Mon Sep 17 00:00:00 2001 From: calderwoodra Date: Tue, 17 Oct 2017 15:54:45 -0700 Subject: Contacts are now searchable by company name. This change coalesces Cp2 contacts into a new cursor so that they can be associated with the Company name. The following logs can help explain how the data is organizes in the original cursor: display Name (A Pixel), lookupKey (3535i7a9673fc89b77de3), mimeType (vnd.android.cursor.item/name), data1 (A Pixel) display Name (A Pixel), lookupKey (3535i7a9673fc89b77de3), mimeType (vnd.android.cursor.item/note), data1 () display Name (A Pixel), lookupKey (3535i7a9673fc89b77de3), mimeType (vnd.android.cursor.item/group_membership), data1 (1) display Name (A Pixel), lookupKey (3535i7a9673fc89b77de3), mimeType (vnd.android.cursor.item/phone_v2), data1 (+1 650-200-7932) display Name (A Pixel), lookupKey (3535i7a9673fc89b77de3), mimeType (vnd.android.cursor.item/phone_v2), data1 (+1 540-555-6666) display Name (A Pixel), lookupKey (3535i7a9673fc89b77de3), mimeType (vnd.android.cursor.item/organization), data1 (Walmart) This is an example of what is returned for a single contact. We can easily associate contact rows together using the lookup key and determine which rows have relevant data by checking the mime type. I use the data here to coalesce the contacts together into one row for easy parsing in ContactFilterCursor. Rows with mime type phone_v2 contain contact information (for example, this contact has 2 phone numbers). Rows with mime type organization contain contact's company information (for example, this contact works at Walmart). Bug: 67675742,64894607,67848713 Test: existing + SCCT.filter_companyName PiperOrigin-RevId: 172528797 Change-Id: I5c9f66ff0c27276869295eff97bb0216f92995be --- .../searchfragment/remote/RemoteContactViewHolder.java | 14 +++++++------- .../searchfragment/remote/RemoteContactsCursorLoader.java | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) (limited to 'java/com/android/dialer/searchfragment/remote') diff --git a/java/com/android/dialer/searchfragment/remote/RemoteContactViewHolder.java b/java/com/android/dialer/searchfragment/remote/RemoteContactViewHolder.java index df3eacc5b..8a02eb9b9 100644 --- a/java/com/android/dialer/searchfragment/remote/RemoteContactViewHolder.java +++ b/java/com/android/dialer/searchfragment/remote/RemoteContactViewHolder.java @@ -64,7 +64,7 @@ public final class RemoteContactViewHolder extends RecyclerView.ViewHolder */ public void bind(SearchCursor cursor, String query) { number = cursor.getString(Projections.PHONE_NUMBER); - String name = cursor.getString(Projections.PHONE_DISPLAY_NAME); + String name = cursor.getString(Projections.DISPLAY_NAME); String label = getLabel(context.getResources(), cursor); String secondaryInfo = TextUtils.isEmpty(label) @@ -78,12 +78,12 @@ public final class RemoteContactViewHolder extends RecyclerView.ViewHolder if (shouldShowPhoto(cursor)) { nameView.setVisibility(View.VISIBLE); photo.setVisibility(View.VISIBLE); - String photoUri = cursor.getString(Projections.PHONE_PHOTO_URI); + String photoUri = cursor.getString(Projections.PHOTO_URI); ContactPhotoManager.getInstance(context) .loadDialerThumbnailOrPhoto( photo, getContactUri(cursor), - cursor.getLong(Projections.PHONE_PHOTO_ID), + cursor.getLong(Projections.PHOTO_ID), photoUri == null ? null : Uri.parse(photoUri), name, LetterTileDrawable.TYPE_DEFAULT); @@ -96,11 +96,11 @@ public final class RemoteContactViewHolder extends RecyclerView.ViewHolder // Show the contact photo next to only the first number if a contact has multiple numbers private boolean shouldShowPhoto(SearchCursor cursor) { int currentPosition = cursor.getPosition(); - String currentLookupKey = cursor.getString(Projections.PHONE_LOOKUP_KEY); + String currentLookupKey = cursor.getString(Projections.LOOKUP_KEY); cursor.moveToPosition(currentPosition - 1); if (!cursor.isHeader() && !cursor.isBeforeFirst()) { - String previousLookupKey = cursor.getString(Projections.PHONE_LOOKUP_KEY); + String previousLookupKey = cursor.getString(Projections.LOOKUP_KEY); cursor.moveToPosition(currentPosition); return !currentLookupKey.equals(previousLookupKey); } @@ -121,8 +121,8 @@ public final class RemoteContactViewHolder extends RecyclerView.ViewHolder } private static Uri getContactUri(SearchCursor cursor) { - long contactId = cursor.getLong(Projections.PHONE_ID); - String lookupKey = cursor.getString(Projections.PHONE_LOOKUP_KEY); + long contactId = cursor.getLong(Projections.ID); + String lookupKey = cursor.getString(Projections.LOOKUP_KEY); return Contacts.getLookupUri(contactId, lookupKey) .buildUpon() .appendQueryParameter( diff --git a/java/com/android/dialer/searchfragment/remote/RemoteContactsCursorLoader.java b/java/com/android/dialer/searchfragment/remote/RemoteContactsCursorLoader.java index 37695be50..eb472732f 100644 --- a/java/com/android/dialer/searchfragment/remote/RemoteContactsCursorLoader.java +++ b/java/com/android/dialer/searchfragment/remote/RemoteContactsCursorLoader.java @@ -54,7 +54,7 @@ public final class RemoteContactsCursorLoader extends CursorLoader { super( context, null, - Projections.PHONE_PROJECTION, + Projections.DATA_PROJECTION, IGNORE_NUMBER_TOO_LONG_CLAUSE, null, Phone.SORT_KEY_PRIMARY); -- cgit v1.2.3