From d13a803dcdb89f8218e245daa20aad30c605b464 Mon Sep 17 00:00:00 2001 From: Sagar <85388413+Sagar0-0@users.noreply.github.com> Date: Tue, 15 Apr 2025 19:46:42 +0530 Subject: [PATCH] Fix resend button visibility logic. --- .../MessageHeaderViewHolder.java | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageHeaderViewHolder.java b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageHeaderViewHolder.java index 290db3b2c1..d788b49944 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageHeaderViewHolder.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageHeaderViewHolder.java @@ -23,17 +23,22 @@ import androidx.media3.common.MediaItem; import com.bumptech.glide.RequestManager; import org.signal.core.util.concurrent.SignalExecutors; -import org.thoughtcrime.securesms.BindableConversationItem; import org.thoughtcrime.securesms.R; +import org.thoughtcrime.securesms.attachments.Attachment; +import org.thoughtcrime.securesms.attachments.DatabaseAttachment; +import org.thoughtcrime.securesms.components.transfercontrols.TransferControlView; import org.thoughtcrime.securesms.conversation.ConversationItem; import org.thoughtcrime.securesms.conversation.ConversationMessage; import org.thoughtcrime.securesms.conversation.colors.Colorizable; import org.thoughtcrime.securesms.conversation.colors.Colorizer; import org.thoughtcrime.securesms.conversation.ConversationItemDisplayMode; +import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.database.model.MessageRecord; +import org.thoughtcrime.securesms.database.model.MmsMessageRecord; import org.thoughtcrime.securesms.giph.mp4.GiphyMp4Playable; import org.thoughtcrime.securesms.giph.mp4.GiphyMp4PlaybackPolicyEnforcer; import org.thoughtcrime.securesms.messagedetails.MessageDetailsAdapter.Callbacks; +import org.thoughtcrime.securesms.mms.Slide; import org.thoughtcrime.securesms.sms.MessageSender; import org.thoughtcrime.securesms.util.DateUtils; import org.thoughtcrime.securesms.util.ExpirationUtil; @@ -44,6 +49,7 @@ import org.thoughtcrime.securesms.util.ProjectionList; import java.sql.Date; import java.text.SimpleDateFormat; import java.util.HashSet; +import java.util.List; import java.util.Locale; import java.util.Optional; import java.util.concurrent.TimeUnit; @@ -137,7 +143,7 @@ final class MessageHeaderViewHolder extends RecyclerView.ViewHolder implements G } private void bindErrorState(MessageRecord messageRecord) { - if (messageRecord.hasFailedWithNetworkFailures()) { + if (isFailedWithNetworkFailures(messageRecord)) { errorText.setVisibility(View.VISIBLE); resendButton.setVisibility(View.VISIBLE); resendButton.setOnClickListener(unused -> { @@ -145,7 +151,7 @@ final class MessageHeaderViewHolder extends RecyclerView.ViewHolder implements G SignalExecutors.BOUNDED.execute(() -> MessageSender.resend(itemView.getContext().getApplicationContext(), messageRecord)); }); messageMetadata.setVisibility(View.GONE); - } else if (messageRecord.isFailed()) { + } else if (isPermanentFailed(messageRecord)) { errorText.setVisibility(View.VISIBLE); resendButton.setVisibility(View.GONE); resendButton.setOnClickListener(null); @@ -158,6 +164,24 @@ final class MessageHeaderViewHolder extends RecyclerView.ViewHolder implements G } } + private boolean isMmsFailedWithState(MessageRecord messageRecord, int expectedTransferState) { + if (messageRecord instanceof MmsMessageRecord) { + List slides = ((MmsMessageRecord) messageRecord).getSlideDeck().getSlides(); + return TransferControlView.getTransferState(slides) == expectedTransferState && messageRecord.isOutgoing(); + } + return false; + } + + private boolean isPermanentFailed(MessageRecord messageRecord) { + return isMmsFailedWithState(messageRecord, AttachmentTable.TRANSFER_PROGRESS_PERMANENT_FAILURE) + || (!(messageRecord instanceof MmsMessageRecord) && messageRecord.isFailed()); + } + + private boolean isFailedWithNetworkFailures(MessageRecord messageRecord) { + return isMmsFailedWithState(messageRecord, AttachmentTable.TRANSFER_PROGRESS_FAILED) + || (!(messageRecord instanceof MmsMessageRecord) && messageRecord.hasFailedWithNetworkFailures()); + } + private void bindSentReceivedDates(MessageRecord messageRecord) { sentDate.setOnLongClickListener(null); receivedDate.setOnLongClickListener(null);