From ff123943cb924955e9f4968b4a58e7ec953a1465 Mon Sep 17 00:00:00 2001 From: Moxie Marlinspike Date: Thu, 12 Nov 2015 15:12:39 -0800 Subject: [PATCH] Fully differentiate Signal vs non-Signal contacts // FREEBIE --- .../securesms/contacts/ContactsDatabase.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/org/thoughtcrime/securesms/contacts/ContactsDatabase.java b/src/org/thoughtcrime/securesms/contacts/ContactsDatabase.java index 8642d5e6e9..bed0a5fe48 100644 --- a/src/org/thoughtcrime/securesms/contacts/ContactsDatabase.java +++ b/src/org/thoughtcrime/securesms/contacts/ContactsDatabase.java @@ -157,11 +157,20 @@ public class ContactsDatabase { put(LABEL_COLUMN, ContactsContract.CommonDataKinds.Phone.LABEL); }}; - Cursor cursor = context.getContentResolver().query(uri, projection, - ContactsContract.Data.SYNC2 + " IS NULL OR " + - ContactsContract.Data.SYNC2 + " != ?", - new String[] {SYNC}, - sort); + String excludeSelection = ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " NOT IN (" + + "SELECT data.contact_id FROM raw_contacts, view_data data WHERE raw_contacts._id = data.raw_contact_id AND " + + "data.mimetype = '" + CONTACT_MIMETYPE + "')"; + + String fallbackSelection = ContactsContract.Data.SYNC2 + " IS NULL OR " + ContactsContract.Data.SYNC2 + " != '" + SYNC + "'"; + + Cursor cursor; + + try { + cursor = context.getContentResolver().query(uri, projection, excludeSelection, null, sort); + } catch (Exception e) { + Log.w(TAG, e); + cursor = context.getContentResolver().query(uri, projection, fallbackSelection, null, sort); + } return new ProjectionMappingCursor(cursor, projectionMap, new Pair(CONTACT_TYPE_COLUMN, NORMAL_TYPE));