Add mentions for v2 group chats.

This commit is contained in:
Cody Henthorne
2020-08-05 16:45:52 -04:00
committed by Greyson Parrelli
parent 0bb9c1d650
commit b2d4c5d14b
90 changed files with 2279 additions and 372 deletions

View File

@@ -1,28 +1,33 @@
package org.thoughtcrime.securesms.longmessage;
import android.content.Context;
import android.text.TextUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.thoughtcrime.securesms.conversation.ConversationMessage;
import org.thoughtcrime.securesms.database.model.MessageRecord;
/**
* A wrapper around a {@link MessageRecord} and its extra text attachment expanded into a string
* A wrapper around a {@link ConversationMessage} and its extra text attachment expanded into a string
* held in memory.
*/
class LongMessage {
private final MessageRecord messageRecord;
private final String fullBody;
private final ConversationMessage conversationMessage;
private final String fullBody;
LongMessage(MessageRecord messageRecord, String fullBody) {
this.messageRecord = messageRecord;
this.fullBody = fullBody;
LongMessage(@NonNull ConversationMessage conversationMessage, @NonNull String fullBody) {
this.conversationMessage = conversationMessage;
this.fullBody = fullBody;
}
MessageRecord getMessageRecord() {
return messageRecord;
@NonNull MessageRecord getMessageRecord() {
return conversationMessage.getMessageRecord();
}
String getFullBody() {
return !TextUtils.isEmpty(fullBody) ? fullBody : messageRecord.getBody();
@NonNull CharSequence getFullBody(@NonNull Context context) {
return !TextUtils.isEmpty(fullBody) ? fullBody : conversationMessage.getDisplayBody(context);
}
}

View File

@@ -147,7 +147,7 @@ public class LongMessageActivity extends PassphraseRequiredActivity {
TextView text = bubble.findViewById(R.id.longmessage_text);
ConversationItemFooter footer = bubble.findViewById(R.id.longmessage_footer);
String trimmedBody = getTrimmedBody(message.get().getFullBody());
CharSequence trimmedBody = getTrimmedBody(message.get().getFullBody(this));
SpannableString styledBody = linkifyMessageBody(new SpannableString(trimmedBody));
bubble.setVisibility(View.VISIBLE);
@@ -158,9 +158,9 @@ public class LongMessageActivity extends PassphraseRequiredActivity {
});
}
private String getTrimmedBody(@NonNull String text) {
private CharSequence getTrimmedBody(@NonNull CharSequence text) {
return text.length() <= MAX_DISPLAY_LENGTH ? text
: text.substring(0, MAX_DISPLAY_LENGTH);
: text.subSequence(0, MAX_DISPLAY_LENGTH);
}
private SpannableString linkifyMessageBody(SpannableString messageBody) {

View File

@@ -6,6 +6,8 @@ import android.net.Uri;
import androidx.annotation.NonNull;
import androidx.annotation.WorkerThread;
import org.thoughtcrime.securesms.conversation.ConversationMessage;
import org.thoughtcrime.securesms.conversation.ConversationMessage.ConversationMessageFactory;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.MmsDatabase;
import org.thoughtcrime.securesms.database.SmsDatabase;
@@ -38,7 +40,7 @@ class LongMessageRepository {
if (isMms) {
callback.onComplete(getMmsLongMessage(context, mmsDatabase, messageId));
} else {
callback.onComplete(getSmsLongMessage(smsDatabase, messageId));
callback.onComplete(getSmsLongMessage(context, smsDatabase, messageId));
}
});
}
@@ -51,9 +53,9 @@ class LongMessageRepository {
TextSlide textSlide = record.get().getSlideDeck().getTextSlide();
if (textSlide != null && textSlide.getUri() != null) {
return Optional.of(new LongMessage(record.get(), readFullBody(context, textSlide.getUri())));
return Optional.of(new LongMessage(ConversationMessageFactory.createWithUnresolvedData(context, record.get()), readFullBody(context, textSlide.getUri())));
} else {
return Optional.of(new LongMessage(record.get(), ""));
return Optional.of(new LongMessage(ConversationMessageFactory.createWithUnresolvedData(context, record.get()), ""));
}
} else {
return Optional.absent();
@@ -61,11 +63,11 @@ class LongMessageRepository {
}
@WorkerThread
private Optional<LongMessage> getSmsLongMessage(@NonNull SmsDatabase smsDatabase, long messageId) {
private Optional<LongMessage> getSmsLongMessage(@NonNull Context context, @NonNull SmsDatabase smsDatabase, long messageId) {
Optional<MessageRecord> record = getSmsMessage(smsDatabase, messageId);
if (record.isPresent()) {
return Optional.of(new LongMessage(record.get(), ""));
return Optional.of(new LongMessage(ConversationMessageFactory.createWithUnresolvedData(context, record.get()), ""));
} else {
return Optional.absent();
}