Story info page should mirror message details.

This commit is contained in:
Alex Hart
2022-10-06 15:44:48 -03:00
committed by Greyson Parrelli
parent 742d1bece0
commit 2041756513
8 changed files with 122 additions and 174 deletions

View File

@@ -12,7 +12,7 @@ import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;
final class MessageDetails {
public final class MessageDetails {
private static final Comparator<RecipientDeliveryStatus> HAS_DISPLAY_NAME = (r1, r2) -> Boolean.compare(r2.getRecipient().hasAUserSetDisplayName(ApplicationDependencies.getApplication()), r1.getRecipient().hasAUserSetDisplayName(ApplicationDependencies.getApplication()));
private static final Comparator<RecipientDeliveryStatus> ALPHABETICAL = (r1, r2) -> r1.getRecipient().getDisplayName(ApplicationDependencies.getApplication()).compareToIgnoreCase(r2.getRecipient().getDisplayName(ApplicationDependencies.getApplication()));
private static final Comparator<RecipientDeliveryStatus> RECIPIENT_COMPARATOR = ComparatorCompat.chain(HAS_DISPLAY_NAME).thenComparing(ALPHABETICAL);
@@ -71,33 +71,33 @@ final class MessageDetails {
}
}
@NonNull ConversationMessage getConversationMessage() {
public @NonNull ConversationMessage getConversationMessage() {
return conversationMessage;
}
@NonNull Collection<RecipientDeliveryStatus> getPending() {
public @NonNull Collection<RecipientDeliveryStatus> getPending() {
return pending;
}
@NonNull Collection<RecipientDeliveryStatus> getSent() {
public @NonNull Collection<RecipientDeliveryStatus> getSent() {
return sent;
}
@NonNull Collection<RecipientDeliveryStatus> getSkipped() {return skipped;}
public @NonNull Collection<RecipientDeliveryStatus> getSkipped() {return skipped;}
@NonNull Collection<RecipientDeliveryStatus> getDelivered() {
public @NonNull Collection<RecipientDeliveryStatus> getDelivered() {
return delivered;
}
@NonNull Collection<RecipientDeliveryStatus> getRead() {
public @NonNull Collection<RecipientDeliveryStatus> getRead() {
return read;
}
@NonNull Collection<RecipientDeliveryStatus> getNotSent() {
public @NonNull Collection<RecipientDeliveryStatus> getNotSent() {
return notSent;
}
@NonNull Collection<RecipientDeliveryStatus> getViewed() {
public @NonNull Collection<RecipientDeliveryStatus> getViewed() {
return viewed;
}
}

View File

@@ -10,9 +10,11 @@ import androidx.lifecycle.MutableLiveData;
import org.signal.core.util.concurrent.SignalExecutors;
import org.thoughtcrime.securesms.conversation.ConversationMessage.ConversationMessageFactory;
import org.thoughtcrime.securesms.database.DatabaseObserver;
import org.thoughtcrime.securesms.database.GroupDatabase;
import org.thoughtcrime.securesms.database.GroupReceiptDatabase;
import org.thoughtcrime.securesms.database.MmsSmsDatabase;
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;
@@ -24,7 +26,10 @@ import org.thoughtcrime.securesms.recipients.Recipient;
import java.util.LinkedList;
import java.util.List;
final class MessageDetailsRepository {
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.schedulers.Schedulers;
public final class MessageDetailsRepository {
private final Context context = ApplicationDependencies.getApplication();
@@ -44,11 +49,33 @@ final class MessageDetailsRepository {
return liveData;
}
public @NonNull Observable<MessageDetails> getMessageDetails(@NonNull MessageId messageId) {
return Observable.<MessageDetails>create(emitter -> {
DatabaseObserver.MessageObserver messageObserver = mId -> {
try {
MessageRecord messageRecord = messageId.isMms() ? SignalDatabase.mms().getMessageRecord(messageId.getId())
: SignalDatabase.sms().getMessageRecord(messageId.getId());
MessageDetails messageDetails = getRecipientDeliveryStatusesInternal(messageRecord);
emitter.onNext(messageDetails);
} catch (NoSuchMessageException e) {
emitter.onError(e);
}
};
ApplicationDependencies.getDatabaseObserver().registerMessageUpdateObserver(messageObserver);
emitter.setCancellable(() -> ApplicationDependencies.getDatabaseObserver().unregisterObserver(messageObserver));
messageObserver.onMessageChanged(messageId);
}).observeOn(Schedulers.io());
}
@WorkerThread
private @NonNull MessageDetails getRecipientDeliveryStatusesInternal(@NonNull MessageRecord messageRecord) {
List<RecipientDeliveryStatus> recipients = new LinkedList<>();
if (!messageRecord.getRecipient().isGroup()) {
if (!messageRecord.getRecipient().isGroup() && !messageRecord.getRecipient().isDistributionList()) {
recipients.add(new RecipientDeliveryStatus(messageRecord,
messageRecord.getRecipient(),
getStatusFor(messageRecord),

View File

@@ -8,7 +8,7 @@ import org.thoughtcrime.securesms.database.documents.NetworkFailure;
import org.thoughtcrime.securesms.database.model.MessageRecord;
import org.thoughtcrime.securesms.recipients.Recipient;
final class RecipientDeliveryStatus {
public final class RecipientDeliveryStatus {
enum Status {
UNKNOWN, PENDING, SENT, DELIVERED, READ, VIEWED, SKIPPED,
@@ -32,31 +32,31 @@ final class RecipientDeliveryStatus {
this.keyMismatchFailure = keyMismatchFailure;
}
@NonNull MessageRecord getMessageRecord() {
public @NonNull MessageRecord getMessageRecord() {
return messageRecord;
}
@NonNull Status getDeliveryStatus() {
public @NonNull Status getDeliveryStatus() {
return deliveryStatus;
}
boolean isUnidentified() {
public boolean isUnidentified() {
return isUnidentified;
}
long getTimestamp() {
public long getTimestamp() {
return timestamp;
}
@NonNull Recipient getRecipient() {
public @NonNull Recipient getRecipient() {
return recipient;
}
@Nullable NetworkFailure getNetworkFailure() {
public @Nullable NetworkFailure getNetworkFailure() {
return networkFailure;
}
@Nullable IdentityKeyMismatch getKeyMismatchFailure() {
public @Nullable IdentityKeyMismatch getKeyMismatchFailure() {
return keyMismatchFailure;
}
}