diff --git a/app/src/main/kotlin/com/tutpro/baresip/ChatsScreen.kt b/app/src/main/kotlin/com/tutpro/baresip/ChatsScreen.kt index 0d67215f..f900aed6 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/ChatsScreen.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/ChatsScreen.kt @@ -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> = remember { mutableStateOf(emptyList()) } + var areMessagesLoaded by remember { mutableStateOf(false) } + + var refreshTrigger by remember { mutableIntStateOf(0) } val lifecycleOwner = LocalLifecycleOwner.current - val uaMessages: MutableState> = 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 { } } return res.toList() +} + +private fun deleteMessages(uaMessages: MutableState>, 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) } \ No newline at end of file diff --git a/app/src/main/kotlin/com/tutpro/baresip/Message.kt b/app/src/main/kotlin/com/tutpro/baresip/Message.kt index 0c381062..d175951c 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/Message.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/Message.kt @@ -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())