Merge "Hide invisible contacts in suggestion card." into ub-contactsdialer-a-dev
diff --git a/src/com/android/contacts/editor/AggregationSuggestionEngine.java b/src/com/android/contacts/editor/AggregationSuggestionEngine.java
index 14da019..4423a61 100644
--- a/src/com/android/contacts/editor/AggregationSuggestionEngine.java
+++ b/src/com/android/contacts/editor/AggregationSuggestionEngine.java
@@ -25,6 +25,7 @@
 import android.os.HandlerThread;
 import android.os.Message;
 import android.os.Process;
+import android.provider.ContactsContract;
 import android.provider.ContactsContract.CommonDataKinds.Email;
 import android.provider.ContactsContract.CommonDataKinds.Nickname;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
@@ -115,6 +116,7 @@
     private ContentObserver mContentObserver;
     private Uri mSuggestionsUri;
     private int mSuggestionsLimit = 3;
+    private boolean mPruneInvisibleContacts;
 
     public AggregationSuggestionEngine(Context context) {
         super("AggregationSuggestions", Process.THREAD_PRIORITY_BACKGROUND);
@@ -150,6 +152,10 @@
         mSuggestionsLimit = suggestionsLimit;
     }
 
+    public void setPruneInvisibleContacts (boolean pruneInvisibleContacts) {
+        mPruneInvisibleContacts = pruneInvisibleContacts;
+    }
+
     public void setListener(Listener listener) {
         mListener = listener;
     }
@@ -377,6 +383,27 @@
     }
 
     public List<Suggestion> getSuggestions() {
+        final ArrayList<Long> visibleContacts = new ArrayList<>();
+        if (mPruneInvisibleContacts) {
+            final Uri contactFilterUri = Data.CONTENT_URI.buildUpon()
+                    .appendQueryParameter(Data.VISIBLE_CONTACTS_ONLY, "true")
+                    .build();
+            final ContentResolver contentResolver = mContext.getContentResolver();
+            final Cursor contactCursor = contentResolver.query(contactFilterUri,
+                    new String[]{Data.CONTACT_ID}, null, null, null);
+            try {
+                if (contactCursor != null) {
+                    while (contactCursor.moveToNext()) {
+                        final long contactId = contactCursor.getLong(0);
+                        visibleContacts.add(contactId);
+                    }
+                }
+            } finally {
+                contactCursor.close();
+            }
+
+        }
+
         ArrayList<Suggestion> list = Lists.newArrayList();
         if (mDataCursor != null) {
             Suggestion suggestion = null;
@@ -384,6 +411,9 @@
             mDataCursor.moveToPosition(-1);
             while (mDataCursor.moveToNext()) {
                 long contactId = mDataCursor.getLong(DataQuery.CONTACT_ID);
+                if (mPruneInvisibleContacts && !visibleContacts.contains(contactId)) {
+                    continue;
+                }
                 if (contactId != currentContactId) {
                     suggestion = new Suggestion();
                     suggestion.contactId = contactId;
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index d501e77..bc2ef53 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -1316,6 +1316,7 @@
             mAggregationSuggestionEngine.setListener(this);
             mAggregationSuggestionEngine.setSuggestionsLimit(getResources().getInteger(
                     R.integer.quickcontact_suggestions_limit));
+            mAggregationSuggestionEngine.setPruneInvisibleContacts(true);
             mAggregationSuggestionEngine.start();
         }