mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-23 12:38:33 +00:00
Fix resend button visibility logic.
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user