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.