From 05122fc476e17e4c0a5372dea3dfa3a7e05ecbfe Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Tue, 11 Oct 2022 13:35:47 +0300 Subject: [PATCH] android: Update chats when enter the app from background (#1196) * android: Update chats when enter the app from background * Nullify current chat id if the chat was deleted in background --- .../app/src/main/java/chat/simplex/app/SimplexApp.kt | 8 ++++++++ .../app/src/main/java/chat/simplex/app/model/ChatModel.kt | 6 ++++++ .../src/main/java/chat/simplex/app/model/SimpleXAPI.kt | 2 +- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/apps/android/app/src/main/java/chat/simplex/app/SimplexApp.kt b/apps/android/app/src/main/java/chat/simplex/app/SimplexApp.kt index 369addf822..2bf139c356 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/SimplexApp.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/SimplexApp.kt @@ -94,6 +94,14 @@ class SimplexApp: Application(), LifecycleEventObserver { Log.d(TAG, "onStateChanged: $event") withApi { when (event) { + Lifecycle.Event.ON_START -> { + if (chatModel.chatRunning.value == true) { + kotlin.runCatching { + val chats = chatController.apiGetChats() + chatModel.updateChats(chats) + }.onFailure { Log.e(TAG, it.stackTraceToString()) } + } + } Lifecycle.Event.ON_RESUME -> { if (chatModel.onboardingStage.value == OnboardingStage.OnboardingComplete) { chatController.showBackgroundServiceNoticeIfNeeded() diff --git a/apps/android/app/src/main/java/chat/simplex/app/model/ChatModel.kt b/apps/android/app/src/main/java/chat/simplex/app/model/ChatModel.kt index 8407896bda..c95c152b27 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/model/ChatModel.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/model/ChatModel.kt @@ -114,6 +114,12 @@ class ChatModel(val controller: ChatController) { } chats.clear() chats.addAll(mergedChats) + + val cId = chatId.value + // If chat is null, it was deleted in background after apiGetChats call + if (cId != null && getChat(cId) == null) { + chatId.value = null + } } fun updateNetworkStatus(id: ChatId, status: Chat.NetworkStatus) { diff --git a/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt b/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt index e41b7e4a43..4557cf8bc1 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt @@ -377,7 +377,7 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a suspend fun apiGetChats(): List { val r = sendCmd(CC.ApiGetChats()) if (r is CR.ApiChats ) return r.chats - throw Error("failed getting the list of chats: ${r.responseType} ${r.details}") + throw Exception("failed getting the list of chats: ${r.responseType} ${r.details}") } suspend fun apiGetChat(type: ChatType, id: Long, pagination: ChatPagination = ChatPagination.Last(ChatPagination.INITIAL_COUNT), search: String = ""): Chat? {