From 51a521594f00def0d695f7db49a243476a4919f8 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Thu, 15 Jul 2021 10:10:14 -0400 Subject: [PATCH] Fix crash when deleting threads directly after backup restore. --- .../securesms/database/ThreadDatabase.java | 10 ++++++---- .../thoughtcrime/securesms/util/ConversationUtil.java | 9 +++------ 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java index 3ee2547d32..2359749e6c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java @@ -905,7 +905,8 @@ public class ThreadDatabase extends Database { } public void deleteConversation(long threadId) { - SQLiteDatabase db = databaseHelper.getWritableDatabase(); + SQLiteDatabase db = databaseHelper.getWritableDatabase(); + RecipientId recipientIdForThreadId = getRecipientIdForThreadId(threadId); db.beginTransaction(); try { @@ -922,11 +923,12 @@ public class ThreadDatabase extends Database { notifyConversationListListeners(); notifyConversationListeners(threadId); - ConversationUtil.clearShortcuts(context, Collections.singleton(threadId)); + ConversationUtil.clearShortcuts(context, Collections.singleton(recipientIdForThreadId)); } public void deleteConversations(Set selectedConversations) { - SQLiteDatabase db = databaseHelper.getWritableDatabase(); + SQLiteDatabase db = databaseHelper.getWritableDatabase(); + List recipientIdsForThreadIds = getRecipientIdsForThreadIds(selectedConversations); db.beginTransaction(); try { @@ -952,7 +954,7 @@ public class ThreadDatabase extends Database { notifyConversationListListeners(); notifyConversationListeners(selectedConversations); - ConversationUtil.clearShortcuts(context, selectedConversations); + ConversationUtil.clearShortcuts(context, recipientIdsForThreadIds); } public void deleteAllConversations() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/ConversationUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/ConversationUtil.java index fa37473671..1ed0205bc2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/ConversationUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/ConversationUtil.java @@ -5,7 +5,6 @@ import android.content.Context; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import androidx.annotation.WorkerThread; import androidx.core.app.Person; import androidx.core.content.pm.ShortcutInfoCompat; @@ -26,10 +25,10 @@ import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; -import java.util.Set; /** * ConversationUtil encapsulates support for Android 11+'s new Conversations system @@ -92,11 +91,9 @@ public final class ConversationUtil { /** * Clears the shortcuts tied to a given thread. */ - public static void clearShortcuts(@NonNull Context context, @NonNull Set threadIds) { + public static void clearShortcuts(@NonNull Context context, @NonNull Collection recipientIds) { SignalExecutors.BOUNDED.execute(() -> { - List recipientIds = DatabaseFactory.getThreadDatabase(context).getRecipientIdsForThreadIds(threadIds); - - ShortcutManagerCompat.removeLongLivedShortcuts(context, Stream.of(recipientIds).map(ConversationUtil::getShortcutId).toList()); + ShortcutManagerCompat.removeLongLivedShortcuts(context, Stream.of(recipientIds).withoutNulls().map(ConversationUtil::getShortcutId).toList()); }); }