diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/DisplayRecord.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/DisplayRecord.java index d1e22a3239..f578309ecb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/DisplayRecord.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/DisplayRecord.java @@ -206,6 +206,10 @@ public abstract class DisplayRecord { deliveryStatus < SmsDatabase.Status.STATUS_PENDING) || deliveryReceiptCount > 0; } + public boolean isRemoteViewed() { + return viewReceiptCount > 0; + } + public boolean isRemoteRead() { return readReceiptCount > 0; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetails.java b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetails.java index 2fb7679781..bce082298a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetails.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetails.java @@ -24,6 +24,7 @@ final class MessageDetails { private final Collection delivered; private final Collection read; private final Collection notSent; + private final Collection viewed; MessageDetails(@NonNull ConversationMessage conversationMessage, @NonNull List recipients) { this.conversationMessage = conversationMessage; @@ -33,6 +34,7 @@ final class MessageDetails { delivered = new TreeSet<>(RECIPIENT_COMPARATOR); read = new TreeSet<>(RECIPIENT_COMPARATOR); notSent = new TreeSet<>(RECIPIENT_COMPARATOR); + viewed = new TreeSet<>(RECIPIENT_COMPARATOR); if (conversationMessage.getMessageRecord().isOutgoing()) { for (RecipientDeliveryStatus status : recipients) { @@ -52,6 +54,8 @@ final class MessageDetails { case READ: read.add(status); break; + case VIEWED: + viewed.add(status); } } } else { @@ -82,4 +86,8 @@ final class MessageDetails { @NonNull Collection getNotSent() { return notSent; } + + @NonNull Collection getViewed() { + return viewed; + } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsActivity.java b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsActivity.java index a3f6d6765e..0f21943c6a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsActivity.java @@ -147,6 +147,7 @@ public final class MessageDetailsActivity extends PassphraseRequiredActivity { if (details.getConversationMessage().getMessageRecord().isOutgoing()) { addRecipients(list, RecipientHeader.NOT_SENT, details.getNotSent()); + addRecipients(list, RecipientHeader.VIEWED, details.getViewed()); addRecipients(list, RecipientHeader.READ, details.getRead()); addRecipients(list, RecipientHeader.DELIVERED, details.getDelivered()); addRecipients(list, RecipientHeader.SENT_TO, details.getSent()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsRepository.java b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsRepository.java index 0ab36826a0..18e541d096 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsRepository.java @@ -113,10 +113,11 @@ final class MessageDetailsRepository { } private @NonNull RecipientDeliveryStatus.Status getStatusFor(MessageRecord messageRecord) { - if (messageRecord.isRemoteRead()) 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.isRemoteViewed()) return RecipientDeliveryStatus.Status.VIEWED; + if (messageRecord.isRemoteRead()) 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; return RecipientDeliveryStatus.Status.UNKNOWN; } @@ -128,6 +129,7 @@ final class MessageDetailsRepository { else if (groupStatus == GroupReceiptDatabase.STATUS_UNDELIVERED && !pending) return RecipientDeliveryStatus.Status.SENT; else if (groupStatus == GroupReceiptDatabase.STATUS_UNDELIVERED) return RecipientDeliveryStatus.Status.PENDING; else if (groupStatus == GroupReceiptDatabase.STATUS_UNKNOWN) return RecipientDeliveryStatus.Status.UNKNOWN; + else if (groupStatus == GroupReceiptDatabase.STATUS_VIEWED) return RecipientDeliveryStatus.Status.VIEWED; throw new AssertionError(); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/RecipientDeliveryStatus.java b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/RecipientDeliveryStatus.java index 49a8d493f0..08ac7fb68c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/RecipientDeliveryStatus.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/RecipientDeliveryStatus.java @@ -11,7 +11,7 @@ import org.thoughtcrime.securesms.recipients.Recipient; final class RecipientDeliveryStatus { enum Status { - UNKNOWN, PENDING, SENT, DELIVERED, READ + UNKNOWN, PENDING, SENT, DELIVERED, READ, VIEWED } private final MessageRecord messageRecord; diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/RecipientHeader.java b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/RecipientHeader.java index 600fe6ee2a..fcbe284078 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/RecipientHeader.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/RecipientHeader.java @@ -10,7 +10,8 @@ enum RecipientHeader { SENT_FROM(R.string.message_details_recipient_header__sent_from), DELIVERED(R.string.message_details_recipient_header__delivered_to), READ(R.string.message_details_recipient_header__read_by), - NOT_SENT(R.string.message_details_recipient_header__not_sent); + NOT_SENT(R.string.message_details_recipient_header__not_sent), + VIEWED(R.string.message_details_recipient_header__viewed); private final int headerText; diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 62a1de1ce7..892ef57e6d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2145,6 +2145,7 @@ Delivered to Read by Not sent + Viewed by Failed to send