diff --git a/src/org/thoughtcrime/securesms/contacts/ContactAccessor.java b/src/org/thoughtcrime/securesms/contacts/ContactAccessor.java index a44edc31f6..fe45889002 100644 --- a/src/org/thoughtcrime/securesms/contacts/ContactAccessor.java +++ b/src/org/thoughtcrime/securesms/contacts/ContactAccessor.java @@ -32,6 +32,8 @@ import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; import android.telephony.PhoneNumberUtils; +import org.thoughtcrime.securesms.database.DatabaseFactory; +import org.thoughtcrime.securesms.database.GroupDatabase; import org.thoughtcrime.securesms.database.TextSecureDirectory; import java.util.ArrayList; @@ -39,6 +41,8 @@ import java.util.Collection; import java.util.LinkedList; import java.util.List; +import static org.thoughtcrime.securesms.database.GroupDatabase.GroupRecord; + /** * This class was originally a layer of indirection between * ContactAccessorNewApi and ContactAccesorOldApi, which corresponded @@ -215,14 +219,14 @@ public class ContactAccessor { return contacts; } - public List getNumbersForThreadSearchFilter(String constraint, ContentResolver contentResolver) { - LinkedList numberList = new LinkedList(); + public List getNumbersForThreadSearchFilter(Context context, String constraint) { + LinkedList numberList = new LinkedList<>(); Cursor cursor = null; try { - cursor = contentResolver.query(Uri.withAppendedPath(Phone.CONTENT_FILTER_URI, - Uri.encode(constraint)), - null, null, null, null); + cursor = context.getContentResolver().query(Uri.withAppendedPath(Phone.CONTENT_FILTER_URI, + Uri.encode(constraint)), + null, null, null, null); while (cursor != null && cursor.moveToNext()) { numberList.add(cursor.getString(cursor.getColumnIndexOrThrow(Phone.NUMBER))); @@ -233,6 +237,20 @@ public class ContactAccessor { cursor.close(); } + GroupDatabase.Reader reader = null; + GroupRecord record; + + try { + reader = DatabaseFactory.getGroupDatabase(context).getGroupsFilteredByTitle(constraint); + + while ((record = reader.getNext()) != null) { + numberList.add(record.getEncodedId()); + } + } finally { + if (reader != null) + reader.close(); + } + return numberList; } diff --git a/src/org/thoughtcrime/securesms/database/GroupDatabase.java b/src/org/thoughtcrime/securesms/database/GroupDatabase.java index 060224be79..933cc43f13 100644 --- a/src/org/thoughtcrime/securesms/database/GroupDatabase.java +++ b/src/org/thoughtcrime/securesms/database/GroupDatabase.java @@ -79,6 +79,14 @@ public class GroupDatabase extends Database { return record; } + public Reader getGroupsFilteredByTitle(String constraint) { + Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, null, TITLE + " LIKE ?", + new String[]{"%" + constraint + "%"}, + null, null, null); + + return new Reader(cursor); + } + public Recipients getGroupMembers(byte[] groupId, boolean includeSelf) { String localNumber = TextSecurePreferences.getLocalNumber(context); List members = getCurrentMembers(groupId); @@ -296,6 +304,10 @@ public class GroupDatabase extends Database { } } + public String getEncodedId() { + return id; + } + public String getTitle() { return title; } diff --git a/src/org/thoughtcrime/securesms/database/loaders/ConversationListLoader.java b/src/org/thoughtcrime/securesms/database/loaders/ConversationListLoader.java index f9e3ef5300..abc0b27247 100644 --- a/src/org/thoughtcrime/securesms/database/loaders/ConversationListLoader.java +++ b/src/org/thoughtcrime/securesms/database/loaders/ConversationListLoader.java @@ -22,7 +22,7 @@ public class ConversationListLoader extends AbstractCursorLoader { public Cursor getCursor() { if (filter != null && filter.trim().length() != 0) { List numbers = ContactAccessor.getInstance() - .getNumbersForThreadSearchFilter(filter, context.getContentResolver()); + .getNumbersForThreadSearchFilter(filter, context); return DatabaseFactory.getThreadDatabase(context).getFilteredConversationList(numbers); } else {