Merge "Fix snippetizing cursor"
diff --git a/src/com/android/contacts/list/ContactListItemView.java b/src/com/android/contacts/list/ContactListItemView.java
index 7e81dcd..c8778c2 100644
--- a/src/com/android/contacts/list/ContactListItemView.java
+++ b/src/com/android/contacts/list/ContactListItemView.java
@@ -33,6 +33,9 @@
 import android.graphics.Rect;
 import android.graphics.Typeface;
 import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.Contacts;
 import android.text.TextUtils;
 import android.text.TextUtils.TruncateAt;
 import android.util.AttributeSet;
@@ -46,6 +49,11 @@
 import android.widget.QuickContactBadge;
 import android.widget.TextView;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
 /**
  * A custom view for an item in the contact list.
  * The view contains the contact's photo, a set of text views (for name, status, etc...) and
@@ -1094,8 +1102,25 @@
             setSnippet(null);
             return;
         }
+        String snippet;
+        String columnContent = cursor.getString(summarySnippetColumnIndex);
 
-        String snippet = cursor.getString(summarySnippetColumnIndex);
+        // Do client side snippeting if provider didn't do it
+        Bundle extras = cursor.getExtras();
+        if (extras.getBoolean(ContactsContract.DEFERRED_SNIPPETING)) {
+            int displayNameIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
+
+            snippet = ContactsContract.snippetize(columnContent,
+                    displayNameIndex < 0 ? null : cursor.getString(displayNameIndex),
+                            extras.getString(ContactsContract.DEFERRED_SNIPPETING_QUERY),
+                            DefaultContactListAdapter.SNIPPET_START_MATCH,
+                            DefaultContactListAdapter.SNIPPET_END_MATCH,
+                            DefaultContactListAdapter.SNIPPET_ELLIPSIS,
+                            DefaultContactListAdapter.SNIPPET_MAX_TOKENS);
+        } else {
+            snippet = columnContent;
+        }
+
         if (snippet != null) {
             int from = 0;
             int to = snippet.length();
diff --git a/src/com/android/contacts/list/DefaultContactListAdapter.java b/src/com/android/contacts/list/DefaultContactListAdapter.java
index f202522..2a8d665 100644
--- a/src/com/android/contacts/list/DefaultContactListAdapter.java
+++ b/src/com/android/contacts/list/DefaultContactListAdapter.java
@@ -85,6 +85,7 @@
                 }
                 builder.appendQueryParameter(SearchSnippetColumns.SNIPPET_ARGS_PARAM_KEY,
                         SNIPPET_ARGS);
+                builder.appendQueryParameter(SearchSnippetColumns.DEFERRED_SNIPPETING_KEY,"1");
                 loader.setUri(builder.build());
                 loader.setProjection(FILTER_PROJECTION);
             }