kopia lustrzana https://github.com/ryukoposting/Signal-Android
Show reactions in quote bottom sheet.
rodzic
3e3ccd4b96
commit
a87fe78c33
|
@ -44,7 +44,7 @@ import java.util.stream.Collectors;
|
||||||
/**
|
/**
|
||||||
* Core data source for loading an individual conversation.
|
* Core data source for loading an individual conversation.
|
||||||
*/
|
*/
|
||||||
class ConversationDataSource implements PagedDataSource<MessageId, ConversationMessage> {
|
public class ConversationDataSource implements PagedDataSource<MessageId, ConversationMessage> {
|
||||||
|
|
||||||
private static final String TAG = Log.tag(ConversationDataSource.class);
|
private static final String TAG = Log.tag(ConversationDataSource.class);
|
||||||
|
|
||||||
|
@ -126,10 +126,10 @@ class ConversationDataSource implements PagedDataSource<MessageId, ConversationM
|
||||||
mentionHelper.fetchMentions(context);
|
mentionHelper.fetchMentions(context);
|
||||||
stopwatch.split("mentions");
|
stopwatch.split("mentions");
|
||||||
|
|
||||||
reactionHelper.fetchReactions(context);
|
reactionHelper.fetchReactions();
|
||||||
stopwatch.split("reactions");
|
stopwatch.split("reactions");
|
||||||
|
|
||||||
records = reactionHelper.buildUpdatedModels(context, records);
|
records = reactionHelper.buildUpdatedModels(records);
|
||||||
stopwatch.split("reaction-models");
|
stopwatch.split("reaction-models");
|
||||||
|
|
||||||
attachmentHelper.fetchAttachments(context);
|
attachmentHelper.fetchAttachments(context);
|
||||||
|
@ -252,7 +252,7 @@ class ConversationDataSource implements PagedDataSource<MessageId, ConversationM
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class ReactionHelper {
|
public static class ReactionHelper {
|
||||||
|
|
||||||
private Collection<MessageId> messageIds = new LinkedList<>();
|
private Collection<MessageId> messageIds = new LinkedList<>();
|
||||||
private Map<MessageId, List<ReactionRecord>> messageIdToReactions = new HashMap<>();
|
private Map<MessageId, List<ReactionRecord>> messageIdToReactions = new HashMap<>();
|
||||||
|
@ -261,11 +261,17 @@ class ConversationDataSource implements PagedDataSource<MessageId, ConversationM
|
||||||
messageIds.add(new MessageId(record.getId(), record.isMms()));
|
messageIds.add(new MessageId(record.getId(), record.isMms()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void fetchReactions(Context context) {
|
public void addAll(List<MessageRecord> records) {
|
||||||
|
for (MessageRecord record : records) {
|
||||||
|
add(record);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void fetchReactions() {
|
||||||
messageIdToReactions = SignalDatabase.reactions().getReactionsForMessages(messageIds);
|
messageIdToReactions = SignalDatabase.reactions().getReactionsForMessages(messageIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull List<MessageRecord> buildUpdatedModels(@NonNull Context context, @NonNull List<MessageRecord> records) {
|
public @NonNull List<MessageRecord> buildUpdatedModels(@NonNull List<MessageRecord> records) {
|
||||||
return records.stream()
|
return records.stream()
|
||||||
.map(record -> {
|
.map(record -> {
|
||||||
MessageId messageId = new MessageId(record.getId(), record.isMms());
|
MessageId messageId = new MessageId(record.getId(), record.isMms());
|
||||||
|
@ -276,7 +282,7 @@ class ConversationDataSource implements PagedDataSource<MessageId, ConversationM
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
static MessageRecord recordWithReactions(@NonNull MessageRecord record, List<ReactionRecord> reactions) {
|
private static MessageRecord recordWithReactions(@NonNull MessageRecord record, List<ReactionRecord> reactions) {
|
||||||
if (Util.hasItems(reactions)) {
|
if (Util.hasItems(reactions)) {
|
||||||
if (record instanceof MediaMmsMessageRecord) {
|
if (record instanceof MediaMmsMessageRecord) {
|
||||||
return ((MediaMmsMessageRecord) record).withReactions(reactions);
|
return ((MediaMmsMessageRecord) record).withReactions(reactions);
|
||||||
|
|
|
@ -128,7 +128,7 @@ class MessageQuotesBottomSheet : FixedRoundedCornerBottomSheetDialogFragment() {
|
||||||
|
|
||||||
override fun onReactionClicked(multiselectPart: MultiselectPart, messageId: Long, isMms: Boolean) {
|
override fun onReactionClicked(multiselectPart: MultiselectPart, messageId: Long, isMms: Boolean) {
|
||||||
dismiss()
|
dismiss()
|
||||||
getAdapterListener().onReactionClicked(multiselectPart, messageId, isMms)
|
getCallback().jumpToMessage(multiselectPart.conversationMessage.messageRecord)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onGroupMemberClicked(recipientId: RecipientId, groupId: GroupId) {
|
override fun onGroupMemberClicked(recipientId: RecipientId, groupId: GroupId) {
|
||||||
|
|
|
@ -7,6 +7,7 @@ import androidx.lifecycle.ViewModelProvider
|
||||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||||
import io.reactivex.rxjava3.core.Observable
|
import io.reactivex.rxjava3.core.Observable
|
||||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||||
|
import org.thoughtcrime.securesms.conversation.ConversationDataSource
|
||||||
import org.thoughtcrime.securesms.conversation.ConversationMessage
|
import org.thoughtcrime.securesms.conversation.ConversationMessage
|
||||||
import org.thoughtcrime.securesms.conversation.colors.GroupAuthorNameColorHelper
|
import org.thoughtcrime.securesms.conversation.colors.GroupAuthorNameColorHelper
|
||||||
import org.thoughtcrime.securesms.conversation.colors.NameColor
|
import org.thoughtcrime.securesms.conversation.colors.NameColor
|
||||||
|
@ -26,9 +27,13 @@ class MessageQuotesViewModel(
|
||||||
|
|
||||||
fun getMessages(): Observable<List<ConversationMessage>> {
|
fun getMessages(): Observable<List<ConversationMessage>> {
|
||||||
return Observable.create<List<ConversationMessage>> { emitter ->
|
return Observable.create<List<ConversationMessage>> { emitter ->
|
||||||
val quotes: List<ConversationMessage> = SignalDatabase
|
val records: List<MessageRecord> = SignalDatabase.mmsSms.getAllMessagesThatQuote(messageId)
|
||||||
.mmsSms
|
|
||||||
.getAllMessagesThatQuote(messageId)
|
val helper = ConversationDataSource.ReactionHelper()
|
||||||
|
helper.addAll(records)
|
||||||
|
helper.fetchReactions()
|
||||||
|
|
||||||
|
val quotes = helper.buildUpdatedModels(records)
|
||||||
.map { ConversationMessage.ConversationMessageFactory.createWithUnresolvedData(getApplication(), it) }
|
.map { ConversationMessage.ConversationMessageFactory.createWithUnresolvedData(getApplication(), it) }
|
||||||
|
|
||||||
val originalRecord: MessageRecord? = if (messageId.mms) {
|
val originalRecord: MessageRecord? = if (messageId.mms) {
|
||||||
|
|
Ładowanie…
Reference in New Issue