diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java index 0f8ca44dd8..df052b6cbf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java @@ -814,7 +814,9 @@ public class ConversationFragment extends LoggingFragment implements Multiselect items.add(new ActionItem(R.drawable.ic_reply_24_tinted, getResources().getString(R.string.conversation_selection__menu_reply), () -> { maybeShowSwipeToReplyTooltip(); handleReplyMessage(getSelectedConversationMessage()); - actionMode.finish(); + if (actionMode != null) { + actionMode.finish(); + } })); } @@ -825,28 +827,36 @@ public class ConversationFragment extends LoggingFragment implements Multiselect if (menuState.shouldShowSaveAttachmentAction()) { items.add(new ActionItem(R.drawable.ic_save_24_tinted, getResources().getString(R.string.conversation_selection__menu_save), () -> { handleSaveAttachment((MediaMmsMessageRecord) getSelectedConversationMessage().getMessageRecord()); - actionMode.finish(); + if (actionMode != null) { + actionMode.finish(); + } })); } if (menuState.shouldShowCopyAction()) { items.add(new ActionItem(R.drawable.ic_copy_24_tinted, getResources().getString(R.string.conversation_selection__menu_copy), () -> { handleCopyMessage(selectedParts); - actionMode.finish(); + if (actionMode != null) { + actionMode.finish(); + } })); } if (menuState.shouldShowDetailsAction()) { items.add(new ActionItem(R.drawable.ic_info_tinted_24, getResources().getString(R.string.conversation_selection__menu_message_details), () -> { handleDisplayDetails(getSelectedConversationMessage()); - actionMode.finish(); + if (actionMode != null) { + actionMode.finish(); + } })); } if (menuState.shouldShowDeleteAction()) { items.add(new ActionItem(R.drawable.ic_delete_tinted_24, getResources().getString(R.string.conversation_selection__menu_delete), () -> { handleDeleteMessages(selectedParts); - actionMode.finish(); + if (actionMode != null) { + actionMode.finish(); + } })); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java index 8a4bbf5578..8dba0e50ec 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java @@ -2171,6 +2171,11 @@ public class ConversationParentFragment extends Fragment sendButton.setOnClickListener(sendButtonListener); sendButton.setEnabled(true); sendButton.addOnSelectionChangedListener((newMessageSendType, manuallySelected) -> { + if (getContext() == null) { + Log.w(TAG, "onSelectionChanged called in detached state. Ignoring."); + return; + } + calculateCharactersRemaining(); updateLinkPreviewState(); linkPreviewViewModel.onTransportChanged(newMessageSendType.usesSmsTransport()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/views/CircularProgressMaterialButton.kt b/app/src/main/java/org/thoughtcrime/securesms/util/views/CircularProgressMaterialButton.kt index a7617b4fdf..b4aadffe70 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/views/CircularProgressMaterialButton.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/util/views/CircularProgressMaterialButton.kt @@ -82,6 +82,10 @@ class CircularProgressMaterialButton @JvmOverloads constructor( } private fun transformTo(state: State, animate: Boolean) { + if (!isAttachedToWindow) { + return + } + if (state == currentState && state == requestedState) { return }