From 1a12eb992df6ee0022d61199a90819d1414c499a Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Thu, 9 Jul 2026 11:20:44 -0300 Subject: [PATCH] Fix crash when trying to dismiss a detached dialog window. --- .../components/SignalProgressDialog.kt | 8 +++- .../ConversationListFragment.java | 42 +++++++------------ 2 files changed, 21 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/SignalProgressDialog.kt b/app/src/main/java/org/thoughtcrime/securesms/components/SignalProgressDialog.kt index a5bcd756d7..1e28dd8a00 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/SignalProgressDialog.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/SignalProgressDialog.kt @@ -48,11 +48,15 @@ class SignalProgressDialog private constructor( } fun hide() { - dialog.hide() + if (dialog.window?.decorView?.isAttachedToWindow == true) { + dialog.hide() + } } fun dismiss() { - dialog.dismiss() + if (dialog.window?.decorView?.isAttachedToWindow == true) { + dialog.dismiss() + } } companion object { diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java index 9bf8dda77f..993b8b8e58 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java @@ -27,7 +27,6 @@ import android.graphics.Canvas; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; -import android.os.AsyncTask; import android.os.Bundle; import android.text.TextUtils; import android.view.LayoutInflater; @@ -1224,33 +1223,22 @@ public class ConversationListFragment extends MainFragment implements Conversati final Set selectedConversations = new HashSet<>(ids); if (!selectedConversations.isEmpty()) { - new AsyncTask() { - private SignalProgressDialog dialog; + SignalProgressDialog progressDialog = SignalProgressDialog.show(requireActivity(), + context.getString(R.string.ConversationListFragment_deleting), + context.getResources().getQuantityString(R.plurals.ConversationListFragment_deleting_selected_conversations, conversationsCount), + true, + false); - @Override - protected void onPreExecute() { - dialog = SignalProgressDialog.show(requireActivity(), - context.getString(R.string.ConversationListFragment_deleting), - context.getResources().getQuantityString(R.plurals.ConversationListFragment_deleting_selected_conversations, conversationsCount), - true, - false); - } - - @Override - protected Void doInBackground(Void... params) { - Log.d(TAG, "[handleDelete] Deleting " + selectedConversations.size() + " chats"); - SignalDatabase.threads().deleteConversations(selectedConversations, true); - AppDependencies.getMessageNotifier().updateNotification(AppDependencies.getApplication()); - Log.d(TAG, "[handleDelete] Delete complete"); - return null; - } - - @Override - protected void onPostExecute(Void result) { - dialog.dismiss(); - endActionModeIfActive(); - } - }.executeOnExecutor(SignalExecutors.BOUNDED); + SimpleTask.run(getViewLifecycleOwner().getLifecycle(), () -> { + Log.d(TAG, "[handleDelete] Deleting " + selectedConversations.size() + " chats"); + SignalDatabase.threads().deleteConversations(selectedConversations, true); + AppDependencies.getMessageNotifier().updateNotification(AppDependencies.getApplication()); + Log.d(TAG, "[handleDelete] Delete complete"); + return null; + }, unused -> { + progressDialog.dismiss(); + endActionModeIfActive(); + }); } });