mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-22 09:49:30 +01:00
Add mentions for v2 group chats.
This commit is contained in:
committed by
Greyson Parrelli
parent
0bb9c1d650
commit
b2d4c5d14b
@@ -4,6 +4,7 @@ import androidx.annotation.NonNull;
|
||||
|
||||
import com.annimon.stream.ComparatorCompat;
|
||||
|
||||
import org.thoughtcrime.securesms.conversation.ConversationMessage;
|
||||
import org.thoughtcrime.securesms.database.model.MessageRecord;
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||
|
||||
@@ -17,7 +18,7 @@ final class MessageDetails {
|
||||
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);
|
||||
|
||||
private final MessageRecord messageRecord;
|
||||
private final ConversationMessage conversationMessage;
|
||||
|
||||
private final Collection<RecipientDeliveryStatus> pending;
|
||||
private final Collection<RecipientDeliveryStatus> sent;
|
||||
@@ -25,8 +26,8 @@ final class MessageDetails {
|
||||
private final Collection<RecipientDeliveryStatus> read;
|
||||
private final Collection<RecipientDeliveryStatus> notSent;
|
||||
|
||||
MessageDetails(MessageRecord messageRecord, List<RecipientDeliveryStatus> recipients) {
|
||||
this.messageRecord = messageRecord;
|
||||
MessageDetails(@NonNull ConversationMessage conversationMessage, @NonNull List<RecipientDeliveryStatus> recipients) {
|
||||
this.conversationMessage = conversationMessage;
|
||||
|
||||
pending = new TreeSet<>(RECIPIENT_COMPARATOR);
|
||||
sent = new TreeSet<>(RECIPIENT_COMPARATOR);
|
||||
@@ -34,7 +35,7 @@ final class MessageDetails {
|
||||
read = new TreeSet<>(RECIPIENT_COMPARATOR);
|
||||
notSent = new TreeSet<>(RECIPIENT_COMPARATOR);
|
||||
|
||||
if (messageRecord.isOutgoing()) {
|
||||
if (conversationMessage.getMessageRecord().isOutgoing()) {
|
||||
for (RecipientDeliveryStatus status : recipients) {
|
||||
switch (status.getDeliveryStatus()) {
|
||||
case UNKNOWN:
|
||||
@@ -59,8 +60,8 @@ final class MessageDetails {
|
||||
}
|
||||
}
|
||||
|
||||
@NonNull MessageRecord getMessageRecord() {
|
||||
return messageRecord;
|
||||
@NonNull ConversationMessage getConversationMessage() {
|
||||
return conversationMessage;
|
||||
}
|
||||
|
||||
@NonNull Collection<RecipientDeliveryStatus> getPending() {
|
||||
|
||||
@@ -124,7 +124,7 @@ public final class MessageDetailsActivity extends PassphraseRequiredActivity {
|
||||
assert getSupportActionBar() != null;
|
||||
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(color.toActionBarColor(this)));
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
if (Build.VERSION.SDK_INT >= 21) {
|
||||
getWindow().setStatusBarColor(color.toStatusBarColor(this));
|
||||
}
|
||||
}
|
||||
@@ -132,9 +132,9 @@ public final class MessageDetailsActivity extends PassphraseRequiredActivity {
|
||||
private List<MessageDetailsViewState<?>> convertToRows(MessageDetails details) {
|
||||
List<MessageDetailsViewState<?>> list = new ArrayList<>();
|
||||
|
||||
list.add(new MessageDetailsViewState<>(details.getMessageRecord(), MessageDetailsViewState.MESSAGE_HEADER));
|
||||
list.add(new MessageDetailsViewState<>(details.getConversationMessage(), MessageDetailsViewState.MESSAGE_HEADER));
|
||||
|
||||
if (details.getMessageRecord().isOutgoing()) {
|
||||
if (details.getConversationMessage().getMessageRecord().isOutgoing()) {
|
||||
addRecipients(list, RecipientHeader.NOT_SENT, details.getNotSent());
|
||||
addRecipients(list, RecipientHeader.READ, details.getRead());
|
||||
addRecipients(list, RecipientHeader.DELIVERED, details.getDelivered());
|
||||
|
||||
@@ -10,6 +10,7 @@ import androidx.recyclerview.widget.ListAdapter;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.conversation.ConversationMessage;
|
||||
import org.thoughtcrime.securesms.database.model.MessageRecord;
|
||||
import org.thoughtcrime.securesms.mms.GlideRequests;
|
||||
|
||||
@@ -45,7 +46,7 @@ final class MessageDetailsAdapter extends ListAdapter<MessageDetailsAdapter.Mess
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
|
||||
if (holder instanceof MessageHeaderViewHolder) {
|
||||
((MessageHeaderViewHolder) holder).bind((MessageRecord) getItem(position).data, running);
|
||||
((MessageHeaderViewHolder) holder).bind((ConversationMessage) getItem(position).data, running);
|
||||
} else if (holder instanceof RecipientHeaderViewHolder) {
|
||||
((RecipientHeaderViewHolder) holder).bind((RecipientHeader) getItem(position).data);
|
||||
} else if (holder instanceof RecipientViewHolder) {
|
||||
@@ -60,7 +61,7 @@ final class MessageDetailsAdapter extends ListAdapter<MessageDetailsAdapter.Mess
|
||||
if (payloads.isEmpty()) {
|
||||
super.onBindViewHolder(holder, position, payloads);
|
||||
} else if (holder instanceof MessageHeaderViewHolder) {
|
||||
((MessageHeaderViewHolder) holder).partialBind((MessageRecord) getItem(position).data, running);
|
||||
((MessageHeaderViewHolder) holder).partialBind((ConversationMessage) getItem(position).data, running);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -8,11 +8,14 @@ import androidx.annotation.WorkerThread;
|
||||
import androidx.lifecycle.LiveData;
|
||||
import androidx.lifecycle.MutableLiveData;
|
||||
|
||||
import org.thoughtcrime.securesms.conversation.ConversationMessage;
|
||||
import org.thoughtcrime.securesms.conversation.ConversationMessage.ConversationMessageFactory;
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.database.GroupDatabase;
|
||||
import org.thoughtcrime.securesms.database.GroupReceiptDatabase;
|
||||
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch;
|
||||
import org.thoughtcrime.securesms.database.documents.NetworkFailure;
|
||||
import org.thoughtcrime.securesms.database.model.Mention;
|
||||
import org.thoughtcrime.securesms.database.model.MessageRecord;
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
@@ -86,7 +89,7 @@ final class MessageDetailsRepository {
|
||||
}
|
||||
}
|
||||
|
||||
return new MessageDetails(messageRecord, recipients);
|
||||
return new MessageDetails(ConversationMessageFactory.createWithUnresolvedData(context, messageRecord), recipients);
|
||||
}
|
||||
|
||||
private @Nullable NetworkFailure getNetworkFailure(MessageRecord messageRecord, Recipient recipient) {
|
||||
|
||||
@@ -13,6 +13,7 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.conversation.ConversationItem;
|
||||
import org.thoughtcrime.securesms.conversation.ConversationMessage;
|
||||
import org.thoughtcrime.securesms.conversation.ConversationMessage.ConversationMessageFactory;
|
||||
import org.thoughtcrime.securesms.database.model.MessageRecord;
|
||||
import org.thoughtcrime.securesms.mms.GlideRequests;
|
||||
import org.thoughtcrime.securesms.sms.MessageSender;
|
||||
@@ -63,25 +64,30 @@ final class MessageHeaderViewHolder extends RecyclerView.ViewHolder {
|
||||
receivedStub = itemView.findViewById(R.id.message_details_header_message_view_received_multimedia);
|
||||
}
|
||||
|
||||
void bind(MessageRecord messageRecord, boolean running) {
|
||||
bindMessageView(messageRecord);
|
||||
void bind(ConversationMessage conversationMessage, boolean running) {
|
||||
MessageRecord messageRecord = conversationMessage.getMessageRecord();
|
||||
bindMessageView(conversationMessage);
|
||||
bindErrorState(messageRecord);
|
||||
bindSentReceivedDates(messageRecord);
|
||||
bindExpirationTime(messageRecord, running);
|
||||
bindTransport(messageRecord);
|
||||
}
|
||||
|
||||
void partialBind(MessageRecord messageRecord, boolean running) {
|
||||
bindExpirationTime(messageRecord, running);
|
||||
void partialBind(ConversationMessage conversationMessage, boolean running) {
|
||||
bindExpirationTime(conversationMessage.getMessageRecord(), running);
|
||||
}
|
||||
|
||||
private void bindMessageView(MessageRecord messageRecord) {
|
||||
private void bindMessageView(ConversationMessage conversationMessage) {
|
||||
if (conversationItem == null) {
|
||||
if (messageRecord.isGroupAction()) conversationItem = (ConversationItem) updateStub.inflate();
|
||||
else if (messageRecord.isOutgoing()) conversationItem = (ConversationItem) sentStub.inflate();
|
||||
else conversationItem = (ConversationItem) receivedStub.inflate();
|
||||
if (conversationMessage.getMessageRecord().isGroupAction()) {
|
||||
conversationItem = (ConversationItem) updateStub.inflate();
|
||||
} else if (conversationMessage.getMessageRecord().isOutgoing()) {
|
||||
conversationItem = (ConversationItem) sentStub.inflate();
|
||||
} else {
|
||||
conversationItem = (ConversationItem) receivedStub.inflate();
|
||||
}
|
||||
}
|
||||
conversationItem.bind(new ConversationMessage(messageRecord), Optional.absent(), Optional.absent(), glideRequests, Locale.getDefault(), new HashSet<>(), messageRecord.getRecipient(), null, false);
|
||||
conversationItem.bind(conversationMessage, Optional.absent(), Optional.absent(), glideRequests, Locale.getDefault(), new HashSet<>(), conversationMessage.getMessageRecord().getRecipient(), null, false);
|
||||
}
|
||||
|
||||
private void bindErrorState(MessageRecord messageRecord) {
|
||||
|
||||
Reference in New Issue
Block a user