mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-03-02 23:38:34 +00:00
Fix message info screen updates.
This commit is contained in:
@@ -41,6 +41,7 @@ import org.signal.storageservice.protos.groups.local.DecryptedGroupChange;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.components.emoji.EmojiProvider;
|
||||
import org.thoughtcrime.securesms.components.emoji.parsing.EmojiParser;
|
||||
import org.thoughtcrime.securesms.components.transfercontrols.TransferControlView;
|
||||
import org.thoughtcrime.securesms.database.MessageTypes;
|
||||
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch;
|
||||
import org.thoughtcrime.securesms.database.documents.NetworkFailure;
|
||||
@@ -55,6 +56,7 @@ import org.thoughtcrime.securesms.emoji.EmojiSource;
|
||||
import org.thoughtcrime.securesms.emoji.JumboEmoji;
|
||||
import org.thoughtcrime.securesms.groups.GroupMigrationMembershipChange;
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore;
|
||||
import org.thoughtcrime.securesms.mms.Slide;
|
||||
import org.thoughtcrime.securesms.profiles.ProfileName;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
@@ -853,6 +855,17 @@ public abstract class MessageRecord extends DisplayRecord {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean isAttachmentInExpectedState(int expectedTransferState) {
|
||||
if (this instanceof MmsMessageRecord) {
|
||||
List<Slide> slides = ((MmsMessageRecord) this).getSlideDeck().getSlides();
|
||||
if (slides.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
return TransferControlView.getTransferState(slides) == expectedTransferState;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static final class InviteAddState {
|
||||
|
||||
private final boolean invited;
|
||||
|
||||
@@ -9,17 +9,21 @@ import androidx.lifecycle.LiveData;
|
||||
import androidx.lifecycle.MutableLiveData;
|
||||
|
||||
import org.signal.core.util.concurrent.SignalExecutors;
|
||||
import org.thoughtcrime.securesms.components.transfercontrols.TransferControlView;
|
||||
import org.thoughtcrime.securesms.conversation.ConversationMessage.ConversationMessageFactory;
|
||||
import org.thoughtcrime.securesms.database.AttachmentTable;
|
||||
import org.thoughtcrime.securesms.database.DatabaseObserver;
|
||||
import org.thoughtcrime.securesms.database.GroupTable;
|
||||
import org.thoughtcrime.securesms.database.GroupReceiptTable;
|
||||
import org.thoughtcrime.securesms.database.GroupTable;
|
||||
import org.thoughtcrime.securesms.database.NoSuchMessageException;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch;
|
||||
import org.thoughtcrime.securesms.database.documents.NetworkFailure;
|
||||
import org.thoughtcrime.securesms.database.model.MessageId;
|
||||
import org.thoughtcrime.securesms.database.model.MessageRecord;
|
||||
import org.thoughtcrime.securesms.database.model.MmsMessageRecord;
|
||||
import org.thoughtcrime.securesms.dependencies.AppDependencies;
|
||||
import org.thoughtcrime.securesms.mms.Slide;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
import org.whispersystems.signalservice.api.push.DistributionId;
|
||||
@@ -122,7 +126,7 @@ public final class MessageDetailsRepository {
|
||||
|
||||
recipients.add(new RecipientDeliveryStatus(messageRecord,
|
||||
recipient,
|
||||
getStatusFor(info.getStatus(), messageRecord.isPending(), recipientFailure),
|
||||
getStatusFor(messageRecord, info.getStatus(), messageRecord.isPending(), recipientFailure),
|
||||
info.isUnidentified(),
|
||||
info.getTimestamp(),
|
||||
failure,
|
||||
@@ -158,24 +162,44 @@ public final class MessageDetailsRepository {
|
||||
}
|
||||
|
||||
private @NonNull RecipientDeliveryStatus.Status getStatusFor(MessageRecord messageRecord) {
|
||||
if (messageRecord.isViewed()) return RecipientDeliveryStatus.Status.VIEWED;
|
||||
if (messageRecord.hasReadReceipt()) return RecipientDeliveryStatus.Status.READ;
|
||||
if (messageRecord.isDelivered()) return RecipientDeliveryStatus.Status.DELIVERED;
|
||||
if (messageRecord.isSent()) return RecipientDeliveryStatus.Status.SENT;
|
||||
if (messageRecord.isPending()) return RecipientDeliveryStatus.Status.PENDING;
|
||||
if (messageRecord.isViewed()) {
|
||||
return RecipientDeliveryStatus.Status.VIEWED;
|
||||
} else if (messageRecord.hasReadReceipt()) {
|
||||
return RecipientDeliveryStatus.Status.READ;
|
||||
} else if (messageRecord.isDelivered()) {
|
||||
return RecipientDeliveryStatus.Status.DELIVERED;
|
||||
} else if (messageRecord.isSent()) {
|
||||
return RecipientDeliveryStatus.Status.SENT;
|
||||
} else if (messageRecord.isAttachmentInExpectedState(AttachmentTable.TRANSFER_PROGRESS_FAILED) || (!(messageRecord instanceof MmsMessageRecord) && messageRecord.hasFailedWithNetworkFailures())) {
|
||||
return RecipientDeliveryStatus.Status.UNKNOWN;
|
||||
} else if (messageRecord.isAttachmentInExpectedState(AttachmentTable.TRANSFER_PROGRESS_STARTED) || messageRecord.isPending()) {
|
||||
return RecipientDeliveryStatus.Status.PENDING;
|
||||
}
|
||||
|
||||
return RecipientDeliveryStatus.Status.UNKNOWN;
|
||||
}
|
||||
|
||||
private @NonNull RecipientDeliveryStatus.Status getStatusFor(int groupStatus, boolean pending, boolean failed) {
|
||||
if (groupStatus == GroupReceiptTable.STATUS_READ) return RecipientDeliveryStatus.Status.READ;
|
||||
else if (groupStatus == GroupReceiptTable.STATUS_DELIVERED) return RecipientDeliveryStatus.Status.DELIVERED;
|
||||
else if (groupStatus == GroupReceiptTable.STATUS_UNDELIVERED && failed) return RecipientDeliveryStatus.Status.UNKNOWN;
|
||||
else if (groupStatus == GroupReceiptTable.STATUS_UNDELIVERED && !pending) return RecipientDeliveryStatus.Status.SENT;
|
||||
else if (groupStatus == GroupReceiptTable.STATUS_UNDELIVERED) return RecipientDeliveryStatus.Status.PENDING;
|
||||
else if (groupStatus == GroupReceiptTable.STATUS_UNKNOWN) return RecipientDeliveryStatus.Status.UNKNOWN;
|
||||
else if (groupStatus == GroupReceiptTable.STATUS_VIEWED) return RecipientDeliveryStatus.Status.VIEWED;
|
||||
else if (groupStatus == GroupReceiptTable.STATUS_SKIPPED) return RecipientDeliveryStatus.Status.SKIPPED;
|
||||
private @NonNull RecipientDeliveryStatus.Status getStatusFor(MessageRecord messageRecord, int groupStatus, boolean pending, boolean failed) {
|
||||
if (groupStatus == GroupReceiptTable.STATUS_READ) {
|
||||
return RecipientDeliveryStatus.Status.READ;
|
||||
} else if (groupStatus == GroupReceiptTable.STATUS_DELIVERED) {
|
||||
return RecipientDeliveryStatus.Status.DELIVERED;
|
||||
} else if (groupStatus == GroupReceiptTable.STATUS_UNDELIVERED && failed) {
|
||||
return RecipientDeliveryStatus.Status.UNKNOWN;
|
||||
} else if (messageRecord.isAttachmentInExpectedState(AttachmentTable.TRANSFER_PROGRESS_FAILED) || (!(messageRecord instanceof MmsMessageRecord) && messageRecord.hasFailedWithNetworkFailures())) {
|
||||
return RecipientDeliveryStatus.Status.UNKNOWN;
|
||||
} else if (groupStatus == GroupReceiptTable.STATUS_UNDELIVERED && !pending) {
|
||||
return RecipientDeliveryStatus.Status.SENT;
|
||||
} else if (messageRecord.isAttachmentInExpectedState(AttachmentTable.TRANSFER_PROGRESS_STARTED) || groupStatus == GroupReceiptTable.STATUS_UNDELIVERED) {
|
||||
return RecipientDeliveryStatus.Status.PENDING;
|
||||
} else if (groupStatus == GroupReceiptTable.STATUS_UNKNOWN) {
|
||||
return RecipientDeliveryStatus.Status.UNKNOWN;
|
||||
} else if (groupStatus == GroupReceiptTable.STATUS_VIEWED) {
|
||||
return RecipientDeliveryStatus.Status.VIEWED;
|
||||
} else if (groupStatus == GroupReceiptTable.STATUS_SKIPPED) {
|
||||
return RecipientDeliveryStatus.Status.SKIPPED;
|
||||
}
|
||||
|
||||
throw new AssertionError();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,8 +24,6 @@ import com.bumptech.glide.RequestManager;
|
||||
|
||||
import org.signal.core.util.concurrent.SignalExecutors;
|
||||
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;
|
||||
@@ -165,11 +163,7 @@ 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;
|
||||
return messageRecord.isAttachmentInExpectedState(expectedTransferState) && messageRecord.isOutgoing();
|
||||
}
|
||||
|
||||
private boolean isPermanentFailed(MessageRecord messageRecord) {
|
||||
|
||||
@@ -10,9 +10,15 @@ import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.badges.BadgeImageView;
|
||||
import org.thoughtcrime.securesms.components.AvatarImageView;
|
||||
import org.thoughtcrime.securesms.components.FromTextView;
|
||||
import org.thoughtcrime.securesms.components.transfercontrols.TransferControlView;
|
||||
import org.thoughtcrime.securesms.database.AttachmentTable;
|
||||
import org.thoughtcrime.securesms.database.model.MessageRecord;
|
||||
import org.thoughtcrime.securesms.database.model.MmsMessageRecord;
|
||||
import org.thoughtcrime.securesms.mms.Slide;
|
||||
import org.thoughtcrime.securesms.util.DateUtils;
|
||||
import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
final class RecipientViewHolder extends RecyclerView.ViewHolder {
|
||||
@@ -51,7 +57,7 @@ final class RecipientViewHolder extends RecyclerView.ViewHolder {
|
||||
conflictButton.setVisibility(View.VISIBLE);
|
||||
error.setText(itemView.getContext().getString(R.string.message_details_recipient__new_safety_number));
|
||||
conflictButton.setOnClickListener(unused -> callbacks.onErrorClicked(data.getMessageRecord()));
|
||||
} else if ((data.getNetworkFailure() != null && !data.getMessageRecord().isPending()) || (!data.getMessageRecord().getToRecipient().isPushGroup() && data.getMessageRecord().isFailed())) {
|
||||
} else if (isFailed(data)) {
|
||||
timestamp.setVisibility(View.GONE);
|
||||
error.setVisibility(View.VISIBLE);
|
||||
conflictButton.setVisibility(View.GONE);
|
||||
@@ -69,4 +75,17 @@ final class RecipientViewHolder extends RecyclerView.ViewHolder {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isFailed(RecipientDeliveryStatus data) {
|
||||
if (data.getDeliveryStatus() == RecipientDeliveryStatus.Status.PENDING) {
|
||||
return false;
|
||||
}
|
||||
|
||||
MessageRecord messageRecord = data.getMessageRecord();
|
||||
if (messageRecord.isAttachmentInExpectedState(AttachmentTable.TRANSFER_PROGRESS_FAILED)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return (data.getNetworkFailure() != null && !data.getMessageRecord().isPending()) || (!data.getMessageRecord().getToRecipient().isPushGroup() && data.getMessageRecord().isFailed());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user