Fixed crash related to deleting messages

This commit is contained in:
Juha Heinanen
2026-02-04 01:09:53 +02:00
parent da1627bf72
commit 3884aee4cb
2 changed files with 26 additions and 27 deletions

View File

@ -54,6 +54,7 @@ import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
@ -106,18 +107,24 @@ fun NavGraphBuilder.chatsScreenRoute(navController: NavController) {
@Composable
private fun ChatsScreen(navController: NavController, aor: String) {
val account = Account.ofAor(aor)!!
val ctx = LocalContext.current
val account = Account.ofAor(aor)!!
val uaMessages: MutableState<List<Message>> = remember { mutableStateOf(emptyList()) }
var areMessagesLoaded by remember { mutableStateOf(false) }
var refreshTrigger by remember { mutableIntStateOf(0) }
val lifecycleOwner = LocalLifecycleOwner.current
val uaMessages: MutableState<List<Message>> = remember { mutableStateOf(emptyList()) }
LaunchedEffect(aor, refreshTrigger) {
uaMessages.value = loadMessages(account)
areMessagesLoaded = true
}
DisposableEffect(lifecycleOwner) {
val observer = LifecycleEventObserver { _, event ->
if (event == Lifecycle.Event.ON_RESUME) {
Log.d(TAG, "Resumed to ChatsScreen for AOR: $aor")
uaMessages.value = loadMessages(account)
}
if (event == Lifecycle.Event.ON_RESUME)
refreshTrigger++
}
lifecycleOwner.lifecycle.addObserver(observer)
onDispose {
@ -125,12 +132,6 @@ private fun ChatsScreen(navController: NavController, aor: String) {
}
}
var areMessagesLoaded by remember { mutableStateOf(false) }
LaunchedEffect(aor) {
uaMessages.value = loadMessages(account)
areMessagesLoaded = true
}
Scaffold(
modifier = Modifier
.fillMaxSize()
@ -212,9 +213,7 @@ private fun TopAppBar(
when (selectedItem) {
delete -> {
positiveAction.value = {
Message.clearMessagesOfAor(account.aor)
Message.save()
uaMessages.value = listOf()
deleteMessages(uaMessages, account, "")
account.unreadMessages = false
}
showDialog.value = true
@ -362,8 +361,7 @@ private fun Chats(
)
positiveButtonText.value = ctx.getString(R.string.delete)
positiveAction.value = {
Message.deleteAorPeerMessages(aor, message.peerUri)
uaMessages.value = loadMessages(account)
deleteMessages(uaMessages, account, message.peerUri)
}
neutralButtonText.value = ""
} else {
@ -375,7 +373,7 @@ private fun Chats(
}
neutralButtonText.value = ctx.getString(R.string.delete)
neutralAction.value = {
Message.deleteAorPeerMessages(aor, message.peerUri)
deleteMessages(uaMessages, account, message.peerUri)
}
}
showDialog.value = true
@ -644,4 +642,14 @@ private fun loadMessages(account: Account) : List<Message> {
}
}
return res.toList()
}
private fun deleteMessages(uaMessages: MutableState<List<Message>>, account: Account, peerUri: String) {
val updatedMessages = BaresipService.messages.toMutableList()
updatedMessages.removeAll {
it.aor == account.aor && (peerUri == "" || it.peerUri == peerUri)
}
BaresipService.messages = updatedMessages.toList()
Message.save()
uaMessages.value = loadMessages(account)
}

View File

@ -61,15 +61,6 @@ class Message(val aor: String, val peerUri: String, val message: String, val tim
}
}
fun deleteAorPeerMessages(aor: String, peerUri: String) {
val updatedMessages = BaresipService.messages.toMutableList()
for (message in updatedMessages)
if (message.aor == aor && message.peerUri == peerUri)
updatedMessages.remove(message)
BaresipService.messages = updatedMessages.toList()
save()
}
fun updateAorMessage(aor: String, time: Long) {
val updatedMessages = BaresipService.messages.toMutableList()
for (message in updatedMessages.reversed())