From 56f732144ddd98e937c2e5002a2f6ab887fbce4e Mon Sep 17 00:00:00 2001 From: "benoit.martins" Date: Thu, 6 Feb 2025 22:34:44 +0100 Subject: [PATCH] Fix notification click redirection to chatroom --- .../Fragments/ConversationFragment.swift | 6 +++++- .../ViewModel/ConversationViewModel.swift | 17 ++++++++++------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/Linphone/UI/Main/Conversations/Fragments/ConversationFragment.swift b/Linphone/UI/Main/Conversations/Fragments/ConversationFragment.swift index 792da3ed0..eef729d0a 100644 --- a/Linphone/UI/Main/Conversations/Fragments/ConversationFragment.swift +++ b/Linphone/UI/Main/Conversations/Fragments/ConversationFragment.swift @@ -28,6 +28,8 @@ struct ConversationFragment: View { @State private var orientation = UIDevice.current.orientation private var idiom: UIUserInterfaceIdiom { UIDevice.current.userInterfaceIdiom } + @EnvironmentObject var navigationManager: NavigationManager + @ObservedObject var contactsManager = ContactsManager.shared @ObservedObject private var sharedMainViewModel = SharedMainViewModel.shared @@ -165,7 +167,9 @@ struct ConversationFragment: View { } .onChange(of: scenePhase) { newPhase in if newPhase == .active { - conversationViewModel.resetDisplayedChatRoom() + if conversationViewModel.displayedConversation != nil && (navigationManager.peerAddr == nil || navigationManager.peerAddr!.contains(conversationViewModel.displayedConversation!.remoteSipUri)) { + conversationViewModel.resetDisplayedChatRoom() + } } } } diff --git a/Linphone/UI/Main/Conversations/ViewModel/ConversationViewModel.swift b/Linphone/UI/Main/Conversations/ViewModel/ConversationViewModel.swift index 92f5d9f9b..898fee9ae 100644 --- a/Linphone/UI/Main/Conversations/ViewModel/ConversationViewModel.swift +++ b/Linphone/UI/Main/Conversations/ViewModel/ConversationViewModel.swift @@ -1777,18 +1777,21 @@ class ConversationViewModel: ObservableObject { self.selectedMessage = nil self.resetMessage() self.removeConversationDelegate() - withAnimation { - self.displayedConversation = conversationModel - } - CoreContext.shared.doOnCoreQueue { core in let nilParams: ConferenceParams? = nil if let newChatRoom = core.searchChatRoom(params: nilParams, localAddr: nil, remoteAddr: conversationModel.chatRoom.peerAddress, participants: nil) { - self.addConversationDelegate(chatRoom: newChatRoom) + if LinphoneUtils.getChatRoomId(room: newChatRoom) == conversationModel.id { + self.addConversationDelegate(chatRoom: newChatRoom) + let conversation = ConversationModel(chatRoom: newChatRoom) + DispatchQueue.main.async { + withAnimation { + self.displayedConversation = conversation + } + self.getMessages() + } + } } } - - self.getMessages() } func resetDisplayedChatRoom() {