From 7151485a05461e51eac7c31ad472c0092eacd89a Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 12 Sep 2025 14:59:47 +0200 Subject: [PATCH] Fixed account labelled as Disabled instead of Disconnected if network isn't reachable --- .../linphone/ui/main/model/AccountModel.kt | 126 +++++++++++------- .../viewmodel/AccountProfileViewModel.kt | 7 +- app/src/main/res/layout/account_list_cell.xml | 2 +- app/src/main/res/values-fr/strings.xml | 2 + app/src/main/res/values/strings.xml | 2 + 5 files changed, 87 insertions(+), 52 deletions(-) diff --git a/app/src/main/java/org/linphone/ui/main/model/AccountModel.kt b/app/src/main/java/org/linphone/ui/main/model/AccountModel.kt index 1d030e215..65100beb5 100644 --- a/app/src/main/java/org/linphone/ui/main/model/AccountModel.kt +++ b/app/src/main/java/org/linphone/ui/main/model/AccountModel.kt @@ -183,6 +183,81 @@ class AccountModel } } + @WorkerThread + fun computeNotificationsCount() { + notificationsCount.postValue(account.unreadChatMessageCount + account.missedCallsCount) + } + + @WorkerThread + fun updateRegistrationState() { + val state = if (account.state == RegistrationState.None) { + // If the account has been disabled manually, use the Cleared status instead of None + if (!account.params.isRegisterEnabled) { + Log.w( + "$TAG Account real registration state is None but using Cleared instead as it was manually disabled by the user" + ) + RegistrationState.Cleared + } else { + account.state + } + } else { + account.state + } + registrationState.postValue(state) + + val label = when (state) { + RegistrationState.Cleared -> { + AppUtils.getString( + R.string.drawer_menu_account_connection_status_cleared + ) + } + RegistrationState.Progress -> AppUtils.getString( + R.string.drawer_menu_account_connection_status_progress + ) + RegistrationState.Failed -> { + AppUtils.getString( + R.string.drawer_menu_account_connection_status_failed + ) + } + RegistrationState.Ok -> { + AppUtils.getString( + R.string.drawer_menu_account_connection_status_connected + ) + } + RegistrationState.None -> { + AppUtils.getString( + R.string.drawer_menu_account_connection_status_disconnected + ) + } + RegistrationState.Refreshing -> AppUtils.getString( + R.string.drawer_menu_account_connection_status_refreshing + ) + else -> "$state" + } + registrationStateLabel.postValue(label) + Log.i("$TAG Account registration state is [$state]") + + val summary = when (state) { + RegistrationState.Cleared -> AppUtils.getString( + R.string.manage_account_status_cleared_summary + ) + RegistrationState.Refreshing, RegistrationState.Progress -> AppUtils.getString( + R.string.manage_account_status_progress_summary + ) + RegistrationState.Failed -> AppUtils.getString( + R.string.manage_account_status_failed_summary + ) + RegistrationState.Ok -> AppUtils.getString( + R.string.manage_account_status_connected_summary + ) + RegistrationState.None -> AppUtils.getString( + R.string.manage_account_status_disconnected_summary + ) + else -> "$state" + } + registrationStateSummary.postValue(summary) + } + @WorkerThread private fun update() { Log.i( @@ -206,56 +281,7 @@ class AccountModel isDefault.postValue(coreContext.core.defaultAccount == account) computeNotificationsCount() - val state = account.state - registrationState.postValue(state) - - val label = when (state) { - RegistrationState.None, RegistrationState.Cleared -> { - AppUtils.getString( - R.string.drawer_menu_account_connection_status_cleared - ) - } - RegistrationState.Progress -> AppUtils.getString( - R.string.drawer_menu_account_connection_status_progress - ) - RegistrationState.Failed -> { - AppUtils.getString( - R.string.drawer_menu_account_connection_status_failed - ) - } - RegistrationState.Ok -> { - AppUtils.getString( - R.string.drawer_menu_account_connection_status_connected - ) - } - RegistrationState.Refreshing -> AppUtils.getString( - R.string.drawer_menu_account_connection_status_refreshing - ) - else -> "${account.state}" - } - registrationStateLabel.postValue(label) - - val summary = when (account.state) { - RegistrationState.None, RegistrationState.Cleared -> AppUtils.getString( - R.string.manage_account_status_cleared_summary - ) - RegistrationState.Refreshing, RegistrationState.Progress -> AppUtils.getString( - R.string.manage_account_status_progress_summary - ) - RegistrationState.Failed -> AppUtils.getString( - R.string.manage_account_status_failed_summary - ) - RegistrationState.Ok -> AppUtils.getString( - R.string.manage_account_status_connected_summary - ) - else -> "${account.state}" - } - registrationStateSummary.postValue(summary) - } - - @WorkerThread - fun computeNotificationsCount() { - notificationsCount.postValue(account.unreadChatMessageCount + account.missedCallsCount) + updateRegistrationState() } } diff --git a/app/src/main/java/org/linphone/ui/main/settings/viewmodel/AccountProfileViewModel.kt b/app/src/main/java/org/linphone/ui/main/settings/viewmodel/AccountProfileViewModel.kt index 5006a3e4f..c34fe0da9 100644 --- a/app/src/main/java/org/linphone/ui/main/settings/viewmodel/AccountProfileViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/settings/viewmodel/AccountProfileViewModel.kt @@ -375,7 +375,7 @@ class AccountProfileViewModel @UiThread fun toggleRegister() { - coreContext.postOnCoreThread { + coreContext.postOnCoreThread { core -> val params = account.params val copy = params.clone() copy.isRegisterEnabled = !params.isRegisterEnabled @@ -384,6 +384,11 @@ class AccountProfileViewModel ) account.params = copy registerEnabled.postValue(account.params.isRegisterEnabled) + + if (!core.isNetworkReachable) { + // To reflect the difference between Disabled & Disconnected + accountModel.value?.updateRegistrationState() + } } } diff --git a/app/src/main/res/layout/account_list_cell.xml b/app/src/main/res/layout/account_list_cell.xml index 5f562216a..96ad6242c 100644 --- a/app/src/main/res/layout/account_list_cell.xml +++ b/app/src/main/res/layout/account_list_cell.xml @@ -70,7 +70,7 @@ android:background="@drawable/shape_squircle_main2_200_background" android:gravity="center" android:text="@{model.registrationStateLabel, default=@string/drawer_menu_account_connection_status_connected}" - android:textColor="@{model.registrationState == RegistrationState.Ok ? @color/success_500 : model.registrationState == RegistrationState.Failed ? @color/danger_500 : model.registrationState == RegistrationState.Cleared || model.registrationState == RegistrationState.None ? @color/warning_600 : @color/main2_500, default=@color/success_500}" + android:textColor="@{model.registrationState == RegistrationState.Ok ? @color/success_500 : model.registrationState == RegistrationState.Failed ? @color/danger_500 : model.registrationState == RegistrationState.Cleared ? @color/warning_600 : @color/main2_500, default=@color/success_500}" android:textSize="12sp" app:layout_constraintHorizontal_bias="0" app:layout_constraintStart_toStartOf="@id/name" diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index c8c2cfa96..89ee9c11f 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -143,6 +143,7 @@ Mon compte Connecté + Déconnecté Rafraîchissement… Désactivé Connexion… @@ -305,6 +306,7 @@ Modifier Supprimer Vous êtes en ligne, on peut vous joindre. + Vous êtes hors ligne, probablement car vous n\'êtes pas actuellement connecté à internet. Compte désactivé, vous ne recevrez ni appel ni message. Connexion en cours, merci de patienter… Erreur de connexion, vérifiez vos paramètres. diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 01da02b42..1df8ba1ef 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -192,6 +192,7 @@ Manage the profile Connected + Disconnected Refreshing Disabled Connecting… @@ -359,6 +360,7 @@ Edit picture Remove picture This account in online, everybody can call you. + This account in offline, probably because you aren\'t connected to internet right now. Account has been disabled, you won\'t receive any call or message. Account is connecting to the server, please wait… Account connection failed, check your settings.