Show the full reply chain in the 'see replies' bottom sheet.

This commit is contained in:
Greyson Parrelli
2022-07-01 13:36:54 -04:00
committed by GitHub
parent a44c3c5c2f
commit daab296172
6 changed files with 59 additions and 16 deletions

View File

@@ -947,7 +947,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
}
private boolean hasQuote(MessageRecord messageRecord) {
return MessageRecordUtil.hasQuote(messageRecord) && (!isCondensedMode || !previousMessage.isPresent());
return MessageRecordUtil.hasQuote(messageRecord);
}
private boolean hasSharedContact(MessageRecord messageRecord) {
@@ -1696,7 +1696,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
}
private void setHasBeenQuoted(@NonNull ConversationMessage message) {
if (message.hasBeenQuoted() && quotedIndicator != null) {
if (message.hasBeenQuoted() && !isCondensedMode && quotedIndicator != null) {
quotedIndicator.setVisibility(VISIBLE);
quotedIndicator.setOnClickListener(quotedIndicatorClickListener);
} else if (quotedIndicator != null) {

View File

@@ -81,6 +81,10 @@ class MessageQuotesBottomSheet : FixedRoundedCornerBottomSheetDialogFragment() {
val recyclerViewColorizer = RecyclerViewColorizer(list)
disposables += viewModel.getMessages().subscribe { messages ->
if (messages.isEmpty()) {
dismiss()
}
messageAdapter.submitList(messages) {
(list.layoutManager as LinearLayoutManager).scrollToPositionWithOffset(messages.size - 1, 100)
}

View File

@@ -12,10 +12,13 @@ import org.thoughtcrime.securesms.conversation.ConversationMessage
import org.thoughtcrime.securesms.conversation.colors.GroupAuthorNameColorHelper
import org.thoughtcrime.securesms.conversation.colors.NameColor
import org.thoughtcrime.securesms.database.SignalDatabase
import org.thoughtcrime.securesms.database.model.MediaMmsMessageRecord
import org.thoughtcrime.securesms.database.model.MessageId
import org.thoughtcrime.securesms.database.model.MessageRecord
import org.thoughtcrime.securesms.database.model.Quote
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.util.getQuote
class MessageQuotesViewModel(
application: Application,
@@ -27,27 +30,36 @@ class MessageQuotesViewModel(
fun getMessages(): Observable<List<ConversationMessage>> {
return Observable.create<List<ConversationMessage>> { emitter ->
val records: List<MessageRecord> = SignalDatabase.mmsSms.getAllMessagesThatQuote(messageId)
val helper = ConversationDataSource.ReactionHelper()
helper.addAll(records)
helper.fetchReactions()
val quotes = helper.buildUpdatedModels(records)
.map { ConversationMessage.ConversationMessageFactory.createWithUnresolvedData(getApplication(), it) }
val originalRecord: MessageRecord? = if (messageId.mms) {
SignalDatabase.mms.getMessageRecordOrNull(messageId.id)
} else {
SignalDatabase.sms.getMessageRecordOrNull(messageId.id)
}
if (originalRecord != null) {
val originalMessage: ConversationMessage = ConversationMessage.ConversationMessageFactory.createWithUnresolvedData(getApplication(), originalRecord, originalRecord.getDisplayBody(getApplication()), 0)
emitter.onNext(quotes + listOf(originalMessage))
} else {
emitter.onNext(quotes)
if (originalRecord == null) {
emitter.onNext(emptyList())
return@create
}
val replyRecords: List<MessageRecord> = SignalDatabase.mmsSms.getAllMessagesThatQuote(messageId)
val reactionHelper = ConversationDataSource.ReactionHelper()
reactionHelper.addAll(replyRecords)
reactionHelper.fetchReactions()
val replies = reactionHelper.buildUpdatedModels(replyRecords)
.map { replyRecord ->
val replyQuote: Quote? = replyRecord.getQuote()
if (replyQuote != null && replyQuote.id == originalRecord.dateSent) {
(replyRecord as MediaMmsMessageRecord).withoutQuote()
} else {
replyRecord
}
}
.map { ConversationMessage.ConversationMessageFactory.createWithUnresolvedData(getApplication(), it) }
val originalMessage: ConversationMessage = ConversationMessage.ConversationMessageFactory.createWithUnresolvedData(getApplication(), originalRecord, originalRecord.getDisplayBody(getApplication()), 0)
emitter.onNext(replies + listOf(originalMessage))
}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())