Fix resend button visibility logic.

This commit is contained in:
Sagar
2025-04-15 19:46:42 +05:30
committed by Cody Henthorne
parent bd03f21cdf
commit d13a803dcd

View File

@@ -23,17 +23,22 @@ import androidx.media3.common.MediaItem;
import com.bumptech.glide.RequestManager; import com.bumptech.glide.RequestManager;
import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.concurrent.SignalExecutors;
import org.thoughtcrime.securesms.BindableConversationItem;
import org.thoughtcrime.securesms.R; 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.ConversationItem;
import org.thoughtcrime.securesms.conversation.ConversationMessage; import org.thoughtcrime.securesms.conversation.ConversationMessage;
import org.thoughtcrime.securesms.conversation.colors.Colorizable; import org.thoughtcrime.securesms.conversation.colors.Colorizable;
import org.thoughtcrime.securesms.conversation.colors.Colorizer; import org.thoughtcrime.securesms.conversation.colors.Colorizer;
import org.thoughtcrime.securesms.conversation.ConversationItemDisplayMode; 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.MessageRecord;
import org.thoughtcrime.securesms.database.model.MmsMessageRecord;
import org.thoughtcrime.securesms.giph.mp4.GiphyMp4Playable; import org.thoughtcrime.securesms.giph.mp4.GiphyMp4Playable;
import org.thoughtcrime.securesms.giph.mp4.GiphyMp4PlaybackPolicyEnforcer; import org.thoughtcrime.securesms.giph.mp4.GiphyMp4PlaybackPolicyEnforcer;
import org.thoughtcrime.securesms.messagedetails.MessageDetailsAdapter.Callbacks; import org.thoughtcrime.securesms.messagedetails.MessageDetailsAdapter.Callbacks;
import org.thoughtcrime.securesms.mms.Slide;
import org.thoughtcrime.securesms.sms.MessageSender; import org.thoughtcrime.securesms.sms.MessageSender;
import org.thoughtcrime.securesms.util.DateUtils; import org.thoughtcrime.securesms.util.DateUtils;
import org.thoughtcrime.securesms.util.ExpirationUtil; import org.thoughtcrime.securesms.util.ExpirationUtil;
@@ -44,6 +49,7 @@ import org.thoughtcrime.securesms.util.ProjectionList;
import java.sql.Date; import java.sql.Date;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.HashSet; import java.util.HashSet;
import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@@ -137,7 +143,7 @@ final class MessageHeaderViewHolder extends RecyclerView.ViewHolder implements G
} }
private void bindErrorState(MessageRecord messageRecord) { private void bindErrorState(MessageRecord messageRecord) {
if (messageRecord.hasFailedWithNetworkFailures()) { if (isFailedWithNetworkFailures(messageRecord)) {
errorText.setVisibility(View.VISIBLE); errorText.setVisibility(View.VISIBLE);
resendButton.setVisibility(View.VISIBLE); resendButton.setVisibility(View.VISIBLE);
resendButton.setOnClickListener(unused -> { resendButton.setOnClickListener(unused -> {
@@ -145,7 +151,7 @@ final class MessageHeaderViewHolder extends RecyclerView.ViewHolder implements G
SignalExecutors.BOUNDED.execute(() -> MessageSender.resend(itemView.getContext().getApplicationContext(), messageRecord)); SignalExecutors.BOUNDED.execute(() -> MessageSender.resend(itemView.getContext().getApplicationContext(), messageRecord));
}); });
messageMetadata.setVisibility(View.GONE); messageMetadata.setVisibility(View.GONE);
} else if (messageRecord.isFailed()) { } else if (isPermanentFailed(messageRecord)) {
errorText.setVisibility(View.VISIBLE); errorText.setVisibility(View.VISIBLE);
resendButton.setVisibility(View.GONE); resendButton.setVisibility(View.GONE);
resendButton.setOnClickListener(null); 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<Slide> 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) { private void bindSentReceivedDates(MessageRecord messageRecord) {
sentDate.setOnLongClickListener(null); sentDate.setOnLongClickListener(null);
receivedDate.setOnLongClickListener(null); receivedDate.setOnLongClickListener(null);