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 f11c39656..6f1159abc 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 @@ -378,7 +378,7 @@ class AccountProfileViewModel @UiThread fun toggleRegister() { - coreContext.postOnCoreThread { + coreContext.postOnCoreThread { core -> val params = account.params val copy = params.clone() copy.isRegisterEnabled = !params.isRegisterEnabled @@ -387,6 +387,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 4b30071c2..47614770e 100644 --- a/app/src/main/res/layout/account_list_cell.xml +++ b/app/src/main/res/layout/account_list_cell.xml @@ -71,7 +71,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 28956bcd1..ac7236c06 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -151,6 +151,7 @@ Mon compte Connecté + Déconnecté Rafraîchissement… Désactivé Connexion… @@ -331,6 +332,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 4b5d61d4d..d752f78b4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -193,6 +193,7 @@ Manage the profile Connected + Disconnected Refreshing Disabled Connecting… @@ -373,6 +374,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.