From 918b0d678d5b66ed5ab1de40122b01ade73294a1 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 9 May 2023 11:26:08 +0200 Subject: [PATCH] Show authentication requested dialog if needed --- .../linphone/activities/main/MainActivity.kt | 48 +++++++++++++++++++ .../java/org/linphone/core/CoreContext.kt | 5 ++ app/src/main/res/values-fr/strings.xml | 3 ++ app/src/main/res/values/strings.xml | 3 ++ 4 files changed, 59 insertions(+) diff --git a/app/src/main/java/org/linphone/activities/main/MainActivity.kt b/app/src/main/java/org/linphone/activities/main/MainActivity.kt index f170c5be5..c145e8a73 100644 --- a/app/src/main/java/org/linphone/activities/main/MainActivity.kt +++ b/app/src/main/java/org/linphone/activities/main/MainActivity.kt @@ -58,6 +58,7 @@ import org.linphone.activities.main.viewmodels.SharedMainViewModel import org.linphone.activities.navigateToDialer import org.linphone.compatibility.Compatibility import org.linphone.contact.ContactsUpdatedListenerStub +import org.linphone.core.AuthInfo import org.linphone.core.CorePreferences import org.linphone.core.tools.Log import org.linphone.databinding.MainActivityBinding @@ -143,6 +144,14 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin } } + coreContext.authenticationRequestedEvent.observe( + this + ) { + it.consume { authInfo -> + showAuthenticationRequestedDialog(authInfo) + } + } + if (coreContext.core.accountList.isEmpty()) { if (corePreferences.firstStart) { startActivity(Intent(this, AssistantActivity::class.java)) @@ -630,4 +639,43 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin dialog.show() } + + private fun showAuthenticationRequestedDialog( + authInfo: AuthInfo + ) { + val identity = "${authInfo.username}@${authInfo.domain}" + Log.i("[Main Activity] Showing authentication required dialog for account [$identity]") + + val dialogViewModel = DialogViewModel( + getString(R.string.dialog_authentication_required_message, identity), + getString(R.string.dialog_authentication_required_title) + ) + dialogViewModel.showPassword = true + dialogViewModel.passwordTitle = getString( + R.string.settings_password_protection_dialog_input_hint + ) + val dialog = DialogUtils.getDialog(this, dialogViewModel) + + dialogViewModel.showCancelButton { + dialog.dismiss() + } + + dialogViewModel.showOkButton( + { + Log.i( + "[Main Activity] Updating password for account [$identity] using auth info [$authInfo]" + ) + val newPassword = dialogViewModel.password + authInfo.password = newPassword + coreContext.core.addAuthInfo(authInfo) + + coreContext.core.refreshRegisters() + + dialog.dismiss() + }, + getString(R.string.dialog_authentication_required_change_password_label) + ) + + dialog.show() + } } diff --git a/app/src/main/java/org/linphone/core/CoreContext.kt b/app/src/main/java/org/linphone/core/CoreContext.kt index c80b6d605..202e0c181 100644 --- a/app/src/main/java/org/linphone/core/CoreContext.kt +++ b/app/src/main/java/org/linphone/core/CoreContext.kt @@ -117,6 +117,10 @@ class CoreContext( MutableLiveData>() } + val authenticationRequestedEvent: MutableLiveData> by lazy { + MutableLiveData>() + } + val coroutineScope = CoroutineScope(Dispatchers.Main + SupervisorJob()) private val loggingService = Factory.instance().loggingService @@ -169,6 +173,7 @@ class CoreContext( Log.w( "[Context] Authentication requested for account [${authInfo.username}@${authInfo.domain}] with realm [${authInfo.realm}] using method [$method]" ) + authenticationRequestedEvent.value = Event(authInfo) } override fun onPushNotificationReceived(core: Core, payload: String?) { diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 4ca897fd9..40f6a45c0 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -785,4 +785,7 @@ Pour créer un compte avec votre email : Votre périphérique ne semble pas supporter les notifications \'push\'.\n\nVous ne pourrez donc pas créer des comptes dans l\'application mais vous pouvez toujours le faire sur notre site internet : Votre compte n\'est pas activé, veuillez cliquer sur le lien que vous avez reçu par courriel + Authentification requise + La connexion a échouée car l\'authentification est manquante ou invalide pour le compte\n%s.\n\nVous pouvez fournir le mot de passe à nouveau ou vérifier la configuration de votre compte dans les paramètres. + Confirmer \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cc6f60741..9637f0a94 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -774,6 +774,9 @@ Would you like to try opening it as a plain text file? Do you want to download and apply configuration from this URL? Apply + Authentication needed + Connection failed because authentication is missing or invalid for account \n%s.\n\nYou can provide password again, or check your account configuration in the settings. + Confirm Add a SIP address field