mirror of
https://github.com/oxen-io/session-android.git
synced 2025-06-09 04:08:33 +00:00
Fix crash on multi-archive.
This commit is contained in:
parent
c5c2fb31b1
commit
12a8d4e10b
@ -39,6 +39,8 @@ import org.thoughtcrime.securesms.components.registration.PulsingFloatingActionB
|
|||||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||||
import org.thoughtcrime.securesms.util.task.SnackbarAsyncTask;
|
import org.thoughtcrime.securesms.util.task.SnackbarAsyncTask;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
|
||||||
public class ConversationListArchiveFragment extends ConversationListFragment implements ActionMode.Callback
|
public class ConversationListArchiveFragment extends ConversationListFragment implements ActionMode.Callback
|
||||||
{
|
{
|
||||||
@ -107,13 +109,15 @@ public class ConversationListArchiveFragment extends ConversationListFragment im
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void archiveThread(long threadId) {
|
@WorkerThread
|
||||||
DatabaseFactory.getThreadDatabase(getActivity()).unarchiveConversation(threadId);
|
protected void archiveThreads(Set<Long> threadIds) {
|
||||||
|
DatabaseFactory.getThreadDatabase(getActivity()).setArchived(threadIds, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
@WorkerThread
|
@WorkerThread
|
||||||
protected void reverseArchiveThread(long threadId) {
|
protected void reverseArchiveThreads(Set<Long> threadIds) {
|
||||||
DatabaseFactory.getThreadDatabase(getActivity()).archiveConversation(threadId);
|
DatabaseFactory.getThreadDatabase(getActivity()).setArchived(threadIds, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("StaticFieldLeak")
|
@SuppressLint("StaticFieldLeak")
|
||||||
|
@ -678,16 +678,12 @@ public class ConversationListFragment extends MainFragment implements ActionMode
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void executeAction(@Nullable Void parameter) {
|
protected void executeAction(@Nullable Void parameter) {
|
||||||
for (long threadId : selectedConversations) {
|
archiveThreads(selectedConversations);
|
||||||
archiveThread(threadId);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void reverseAction(@Nullable Void parameter) {
|
protected void reverseAction(@Nullable Void parameter) {
|
||||||
for (long threadId : selectedConversations) {
|
reverseArchiveThreads(selectedConversations);
|
||||||
reverseArchiveThread(threadId);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
}
|
}
|
||||||
@ -975,13 +971,13 @@ public class ConversationListFragment extends MainFragment implements ActionMode
|
|||||||
}
|
}
|
||||||
|
|
||||||
@WorkerThread
|
@WorkerThread
|
||||||
protected void archiveThread(long threadId) {
|
protected void archiveThreads(Set<Long> threadIds) {
|
||||||
DatabaseFactory.getThreadDatabase(getActivity()).archiveConversation(threadId);
|
DatabaseFactory.getThreadDatabase(getActivity()).setArchived(threadIds, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@WorkerThread
|
@WorkerThread
|
||||||
protected void reverseArchiveThread(long threadId) {
|
protected void reverseArchiveThreads(Set<Long> threadIds) {
|
||||||
DatabaseFactory.getThreadDatabase(getActivity()).unarchiveConversation(threadId);
|
DatabaseFactory.getThreadDatabase(getActivity()).setArchived(threadIds, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("StaticFieldLeak")
|
@SuppressLint("StaticFieldLeak")
|
||||||
|
@ -544,7 +544,7 @@ public class ThreadDatabase extends Database {
|
|||||||
String query = RECIPIENT_ID + " = ?";
|
String query = RECIPIENT_ID + " = ?";
|
||||||
|
|
||||||
for (Map.Entry<RecipientId, Boolean> entry : status.entrySet()) {
|
for (Map.Entry<RecipientId, Boolean> entry : status.entrySet()) {
|
||||||
ContentValues values = new ContentValues(1);
|
ContentValues values = new ContentValues(2);
|
||||||
|
|
||||||
if (entry.getValue()) {
|
if (entry.getValue()) {
|
||||||
values.put(PINNED, "0");
|
values.put(PINNED, "0");
|
||||||
@ -561,6 +561,29 @@ public class ThreadDatabase extends Database {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setArchived(Set<Long> threadIds, boolean archive) {
|
||||||
|
SQLiteDatabase db = databaseHelper.getReadableDatabase();
|
||||||
|
|
||||||
|
db.beginTransaction();
|
||||||
|
try {
|
||||||
|
for (long threadId : threadIds) {
|
||||||
|
ContentValues values = new ContentValues(2);
|
||||||
|
|
||||||
|
if (archive) {
|
||||||
|
values.put(PINNED, "0");
|
||||||
|
}
|
||||||
|
|
||||||
|
values.put(ARCHIVED, archive ? "1" : "0");
|
||||||
|
db.update(TABLE_NAME, values, ID_WHERE, SqlUtil.buildArgs(threadId));
|
||||||
|
}
|
||||||
|
|
||||||
|
db.setTransactionSuccessful();
|
||||||
|
} finally {
|
||||||
|
db.endTransaction();
|
||||||
|
notifyConversationListListeners();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public @NonNull Set<RecipientId> getArchivedRecipients() {
|
public @NonNull Set<RecipientId> getArchivedRecipients() {
|
||||||
Set<RecipientId> archived = new HashSet<>();
|
Set<RecipientId> archived = new HashSet<>();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user