From 8af6977085f443c2348c4880c9cedf13f93f35f1 Mon Sep 17 00:00:00 2001 From: QuentinArguillere Date: Tue, 24 Sep 2024 17:39:10 +0200 Subject: [PATCH] Display toast when network change state. Also, remove "hasDefaultAccount" key from coreContext, instead check if accounts is empty. --- Linphone/Core/CoreContext.swift | 25 +++++++++++-------- Linphone/LinphoneApp.swift | 5 ++-- Linphone/Localizable.xcstrings | 6 +++++ .../Viewmodel/AccountLoginViewModel.swift | 6 ----- Linphone/UI/Main/Fragments/ToastView.swift | 9 ++++++- 5 files changed, 31 insertions(+), 20 deletions(-) diff --git a/Linphone/Core/CoreContext.swift b/Linphone/Core/CoreContext.swift index 54863a9d3..1191cc080 100644 --- a/Linphone/Core/CoreContext.swift +++ b/Linphone/Core/CoreContext.swift @@ -39,7 +39,6 @@ final class CoreContext: ObservableObject { var coreVersion: String = Core.getVersion @Published var loggedIn: Bool = false @Published var loggingInProgress: Bool = false - @Published var hasDefaultAccount: Bool = false @Published var coreIsStarted: Bool = false @Published var accounts: [AccountModel] = [] @@ -87,10 +86,15 @@ final class CoreContext: ObservableObject { monitor.pathUpdateHandler = { path in let isConnected = path.status == .satisfied if self.networkStatusIsConnected != isConnected { - if isConnected { - Log.info("Network is now satisfied") - } else { - Log.error("Network is now \(path.status)") + DispatchQueue.main.async { + if isConnected { + Log.info("Network is now satisfied") + ToastViewModel.shared.toastMessage = "Success_toast_network_connected" + } else { + Log.error("Network is now \(path.status)") + ToastViewModel.shared.toastMessage = "Unavailable_network" + } + ToastViewModel.shared.displayToast = true } self.networkStatusIsConnected = isConnected } @@ -160,13 +164,11 @@ final class CoreContext: ObservableObject { self.actionsToPerformOnCoreQueueWhenCoreIsStarted.forEach { $0(core) } self.actionsToPerformOnCoreQueueWhenCoreIsStarted.removeAll() - let hasDefaultAccount = self.mCore.defaultAccount != nil ? true : false var accountModels: [AccountModel] = [] for account in self.mCore.accountList { accountModels.append(AccountModel(account: account, corePublisher: self.mCore.publisher)) } DispatchQueue.main.async { - self.hasDefaultAccount = hasDefaultAccount self.coreIsStarted = true self.accounts = accountModels } @@ -263,14 +265,17 @@ final class CoreContext: ObservableObject { } else if state == .Cleared { self.loggingInProgress = false self.loggedIn = false - self.hasDefaultAccount = false ToastViewModel.shared.toastMessage = "Success_account_logged_out" ToastViewModel.shared.displayToast = true } else { self.loggingInProgress = false self.loggedIn = false - ToastViewModel.shared.toastMessage = "Registration_failed" - ToastViewModel.shared.displayToast = true + if self.networkStatusIsConnected { + // If network is disconnected, a toast message with key "Unavailable_network" should already be displayed + ToastViewModel.shared.toastMessage = "Registration_failed" + ToastViewModel.shared.displayToast = true + } + } } }, onAccountAdded: { (_: Core, _: Account) in diff --git a/Linphone/LinphoneApp.swift b/Linphone/LinphoneApp.swift index dce056b89..636ce5427 100644 --- a/Linphone/LinphoneApp.swift +++ b/Linphone/LinphoneApp.swift @@ -94,15 +94,14 @@ struct LinphoneApp: App { ToastView() .zIndex(3) } - } else if !coreContext.hasDefaultAccount || sharedMainViewModel.displayProfileMode { + } else if coreContext.accounts.isEmpty || sharedMainViewModel.displayProfileMode { ZStack { AssistantView() ToastView() .zIndex(3) } - } else if coreContext.hasDefaultAccount - && coreContext.loggedIn + } else if !coreContext.accounts.isEmpty && contactViewModel != nil && editContactViewModel != nil && historyViewModel != nil diff --git a/Linphone/Localizable.xcstrings b/Linphone/Localizable.xcstrings index 05408cf40..6fdd2ee8b 100644 --- a/Linphone/Localizable.xcstrings +++ b/Linphone/Localizable.xcstrings @@ -1787,6 +1787,12 @@ }, "Mosaïque" : { + }, + "Network is not reachable" : { + + }, + "Network is now reachable again" : { + }, "New call" : { diff --git a/Linphone/UI/Assistant/Viewmodel/AccountLoginViewModel.swift b/Linphone/UI/Assistant/Viewmodel/AccountLoginViewModel.swift index 822236ef1..ebebd6c32 100644 --- a/Linphone/UI/Assistant/Viewmodel/AccountLoginViewModel.swift +++ b/Linphone/UI/Assistant/Viewmodel/AccountLoginViewModel.swift @@ -123,9 +123,6 @@ class AccountLoginViewModel: ObservableObject { // Also set the newly added account as default core.defaultAccount = account - DispatchQueue.main.async { - self.coreContext.hasDefaultAccount = true - } self.domain = "sip.linphone.org" self.transportType = "TLS" @@ -157,9 +154,6 @@ class AccountLoginViewModel: ObservableObject { // To completely remove an Account if let account = core.defaultAccount { core.removeAccount(account: account) - DispatchQueue.main.async { - self.coreContext.hasDefaultAccount = false - } // To remove all accounts use core.clearAccounts() diff --git a/Linphone/UI/Main/Fragments/ToastView.swift b/Linphone/UI/Main/Fragments/ToastView.swift index de4886ef6..279be4ce1 100644 --- a/Linphone/UI/Main/Fragments/ToastView.swift +++ b/Linphone/UI/Main/Fragments/ToastView.swift @@ -130,12 +130,19 @@ struct ToastView: View { .padding(8) case "Unavailable_network": - Text("Could not reach network") + Text("Network is not reachable") .multilineTextAlignment(.center) .foregroundStyle(Color.redDanger500) .default_text_style(styleSize: 15) .padding(8) + case "Success_toast_network_connected": + Text("Network is now reachable again") + .multilineTextAlignment(.center) + .foregroundStyle(Color.greenSuccess500) + .default_text_style(styleSize: 15) + .padding(8) + case "Success_account_logged_out": Text("Account successfully logged out") .multilineTextAlignment(.center)