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.