Display toast when network change state. Also, remove "hasDefaultAccount" key from coreContext, instead check if accounts is empty.

This commit is contained in:
QuentinArguillere 2024-09-24 17:39:10 +02:00
parent 4fa2d92382
commit 8af6977085
5 changed files with 31 additions and 20 deletions

View file

@ -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 {
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,15 +265,18 @@ 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
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
var accountModels: [AccountModel] = []

View file

@ -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

View file

@ -1787,6 +1787,12 @@
},
"Mosaïque" : {
},
"Network is not reachable" : {
},
"Network is now reachable again" : {
},
"New call" : {

View file

@ -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()

View file

@ -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)