package org.thoughtcrime.securesms.messagedetails; import androidx.annotation.NonNull; import androidx.lifecycle.LiveData; import androidx.lifecycle.Transformations; import androidx.lifecycle.ViewModel; import androidx.lifecycle.ViewModelProvider; import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import java.util.Objects; final class MessageDetailsViewModel extends ViewModel { private final LiveData recipient; private final LiveData messageDetails; private MessageDetailsViewModel(RecipientId recipientId, String type, Long messageId) { recipient = Recipient.live(recipientId).getLiveData(); MessageDetailsRepository repository = new MessageDetailsRepository(); LiveData messageRecord = repository.getMessageRecord(type, messageId); messageDetails = Transformations.switchMap(messageRecord, repository::getMessageDetails); } @NonNull LiveData getMessageDetails() { return messageDetails; } @NonNull LiveData getRecipient() { return recipient; } static final class Factory implements ViewModelProvider.Factory { private final RecipientId recipientId; private final String type; private final Long messageId; Factory(RecipientId recipientId, String type, Long messageId) { this.recipientId = recipientId; this.type = type; this.messageId = messageId; } @Override public @NonNull T create(@NonNull Class modelClass) { return Objects.requireNonNull(modelClass.cast(new MessageDetailsViewModel(recipientId, type, messageId))); } } }