mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-20 16:49:40 +01:00
Story info page should mirror message details.
This commit is contained in:
committed by
Greyson Parrelli
parent
742d1bece0
commit
2041756513
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user