diff --git a/src/org/thoughtcrime/securesms/database/ThreadDatabase.java b/src/org/thoughtcrime/securesms/database/ThreadDatabase.java index f567793b1d..7ef28452e8 100644 --- a/src/org/thoughtcrime/securesms/database/ThreadDatabase.java +++ b/src/org/thoughtcrime/securesms/database/ThreadDatabase.java @@ -19,6 +19,7 @@ package org.thoughtcrime.securesms.database; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; +import android.database.MergeCursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.text.TextUtils; @@ -32,10 +33,12 @@ import org.thoughtcrime.securesms.database.model.ThreadRecord; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientFactory; import org.thoughtcrime.securesms.recipients.Recipients; +import org.thoughtcrime.securesms.util.Util; import org.whispersystems.libaxolotl.InvalidMessageException; import java.util.Arrays; import java.util.HashSet; +import java.util.LinkedList; import java.util.List; import java.util.Set; @@ -258,24 +261,31 @@ public class ThreadDatabase extends Database { if (filter == null || filter.size() == 0) return null; - List recipientIds = DatabaseFactory.getAddressDatabase(context).getCanonicalAddressIds(filter); + List rawRecipientIds = DatabaseFactory.getAddressDatabase(context).getCanonicalAddressIds(filter); - if (recipientIds == null || recipientIds.size() == 0) + if (rawRecipientIds == null || rawRecipientIds.size() == 0) return null; - String selection = RECIPIENT_IDS + " = ?"; - String[] selectionArgs = new String[recipientIds.size()]; + SQLiteDatabase db = databaseHelper.getReadableDatabase(); + List> partitionedRecipientIds = Util.partition(rawRecipientIds, 900); + List cursors = new LinkedList<>(); - for (int i=0;i recipientIds : partitionedRecipientIds) { + String selection = RECIPIENT_IDS + " = ?"; + String[] selectionArgs = new String[recipientIds.size()]; - int i= 0; - for (long id : recipientIds) { - selectionArgs[i++] = id+""; + for (int i=0;i 1 ? new MergeCursor(cursors.toArray(new Cursor[cursors.size()])) : cursors.get(0); setNotifyConverationListListeners(cursor); return cursor; } diff --git a/src/org/thoughtcrime/securesms/util/Util.java b/src/org/thoughtcrime/securesms/util/Util.java index 515c7f377b..84d16ff804 100644 --- a/src/org/thoughtcrime/securesms/util/Util.java +++ b/src/org/thoughtcrime/securesms/util/Util.java @@ -20,15 +20,11 @@ import android.annotation.SuppressLint; import android.annotation.TargetApi; import android.content.Context; import android.content.pm.PackageManager; -import android.graphics.Shader; import android.graphics.Typeface; -import android.graphics.drawable.BitmapDrawable; -import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Build.VERSION; import android.os.Build.VERSION_CODES; import android.provider.Telephony; -import android.telephony.SmsManager; import android.telephony.TelephonyManager; import android.text.Spannable; import android.text.SpannableString; @@ -37,7 +33,6 @@ import android.text.style.StyleSpan; import android.widget.EditText; import org.thoughtcrime.securesms.BuildConfig; -import org.thoughtcrime.securesms.TextSecureExpiredException; import org.thoughtcrime.securesms.mms.OutgoingLegacyMmsConnection; import org.whispersystems.textsecure.api.util.InvalidNumberException; import org.whispersystems.textsecure.api.util.PhoneNumberFormatter; @@ -202,6 +197,19 @@ public class Util { return null; } + public static List> partition(List list, int partitionSize) { + List> results = new LinkedList<>(); + + for (int index=0;index split(String source, String delimiter) { List results = new LinkedList<>();