Close MessageDetailsActivity when message is deleted

This commit is contained in:
Andrew 2024-02-08 12:05:34 +10:30
parent b56c3bd6c5
commit 779101ddc0
2 changed files with 19 additions and 0 deletions

View File

@ -5,9 +5,11 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.flow.receiveAsFlow
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import network.loki.messenger.R import network.loki.messenger.R
@ -26,6 +28,7 @@ import org.thoughtcrime.securesms.database.model.MessageRecord
import org.thoughtcrime.securesms.database.model.MmsMessageRecord import org.thoughtcrime.securesms.database.model.MmsMessageRecord
import org.thoughtcrime.securesms.mms.ImageSlide import org.thoughtcrime.securesms.mms.ImageSlide
import org.thoughtcrime.securesms.mms.Slide import org.thoughtcrime.securesms.mms.Slide
import org.thoughtcrime.securesms.repository.ConversationRepository
import org.thoughtcrime.securesms.ui.GetString import org.thoughtcrime.securesms.ui.GetString
import org.thoughtcrime.securesms.ui.TitledText import org.thoughtcrime.securesms.ui.TitledText
import java.util.Date import java.util.Date
@ -38,8 +41,11 @@ class MessageDetailsViewModel @Inject constructor(
private val lokiMessageDatabase: LokiMessageDatabase, private val lokiMessageDatabase: LokiMessageDatabase,
private val mmsSmsDatabase: MmsSmsDatabase, private val mmsSmsDatabase: MmsSmsDatabase,
private val threadDb: ThreadDatabase, private val threadDb: ThreadDatabase,
private val repository: ConversationRepository,
) : ViewModel() { ) : ViewModel() {
private var job: Job? = null
private val state = MutableStateFlow(MessageDetailsState()) private val state = MutableStateFlow(MessageDetailsState())
val stateFlow = state.asStateFlow() val stateFlow = state.asStateFlow()
@ -48,6 +54,8 @@ class MessageDetailsViewModel @Inject constructor(
var timestamp: Long = 0L var timestamp: Long = 0L
set(value) { set(value) {
job?.cancel()
field = value field = value
val record = mmsSmsDatabase.getMessageForTimestamp(timestamp) val record = mmsSmsDatabase.getMessageForTimestamp(timestamp)
@ -58,6 +66,12 @@ class MessageDetailsViewModel @Inject constructor(
val mmsRecord = record as? MmsMessageRecord val mmsRecord = record as? MmsMessageRecord
job = viewModelScope.launch {
repository.changes(record.threadId)
.filter { mmsSmsDatabase.getMessageForTimestamp(timestamp) == null }
.collect { event.send(Event.Finish) }
}
state.value = record.run { state.value = record.run {
val slides = mmsRecord?.slideDeck?.slides ?: emptyList() val slides = mmsRecord?.slideDeck?.slides ?: emptyList()

View File

@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.repository
import network.loki.messenger.libsession_util.util.ExpiryMode import network.loki.messenger.libsession_util.util.ExpiryMode
import android.content.ContentResolver import android.content.ContentResolver
import android.content.Context import android.content.Context
import app.cash.copper.Query
import app.cash.copper.flow.observeQuery import app.cash.copper.flow.observeQuery
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
@ -45,6 +46,7 @@ import kotlin.coroutines.suspendCoroutine
interface ConversationRepository { interface ConversationRepository {
fun maybeGetRecipientForThreadId(threadId: Long): Recipient? fun maybeGetRecipientForThreadId(threadId: Long): Recipient?
fun maybeGetBlindedRecipient(recipient: Recipient): Recipient? fun maybeGetBlindedRecipient(recipient: Recipient): Recipient?
fun changes(threadId: Long): Flow<Query>
fun recipientUpdateFlow(threadId: Long): Flow<Recipient?> fun recipientUpdateFlow(threadId: Long): Flow<Recipient?>
fun saveDraft(threadId: Long, text: String) fun saveDraft(threadId: Long, text: String)
fun getDraft(threadId: Long): String? fun getDraft(threadId: Long): String?
@ -117,6 +119,9 @@ class DefaultConversationRepository @Inject constructor(
) )
} }
override fun changes(threadId: Long): Flow<Query> =
contentResolver.observeQuery(DatabaseContentProviders.Conversation.getUriForThread(threadId))
override fun recipientUpdateFlow(threadId: Long): Flow<Recipient?> { override fun recipientUpdateFlow(threadId: Long): Flow<Recipient?> {
return contentResolver.observeQuery(DatabaseContentProviders.Conversation.getUriForThread(threadId)).map { return contentResolver.observeQuery(DatabaseContentProviders.Conversation.getUriForThread(threadId)).map {
maybeGetRecipientForThreadId(threadId) maybeGetRecipientForThreadId(threadId)