From 01b31623925c2ac9282a13f7e7fc47866a6883f8 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 17 Jun 2020 16:25:35 +0200 Subject: [PATCH] Added forgot password link on linphone account assistant + updated invalid credentials dialog to allow continuing even if not registered --- .../fragments/AccountLoginFragment.kt | 19 +++++++++++++++++-- .../fragments/GenericAccountLoginFragment.kt | 10 ++++++++-- .../viewmodels/AccountLoginViewModel.kt | 17 +++++++++++++---- .../viewmodels/GenericLoginViewModel.kt | 17 +++++++++++++---- .../assistant_account_login_fragment.xml | 14 ++++++++++++++ app/src/main/res/values/strings.xml | 3 +++ 6 files changed, 68 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/org/linphone/activities/assistant/fragments/AccountLoginFragment.kt b/app/src/main/java/org/linphone/activities/assistant/fragments/AccountLoginFragment.kt index 76d95ed48..7abb12dbd 100644 --- a/app/src/main/java/org/linphone/activities/assistant/fragments/AccountLoginFragment.kt +++ b/app/src/main/java/org/linphone/activities/assistant/fragments/AccountLoginFragment.kt @@ -20,6 +20,8 @@ package org.linphone.activities.assistant.fragments import android.app.Dialog +import android.content.Intent +import android.net.Uri import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -74,6 +76,13 @@ class AccountLoginFragment : AbstractPhoneFragment() { CountryPickerFragment(viewModel).show(childFragmentManager, "CountryPicker") } + binding.setForgotPasswordClickListener { + val intent = Intent(Intent.ACTION_VIEW) + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + intent.data = Uri.parse(getString(R.string.assistant_forgotten_password_link)) + startActivity(intent) + } + viewModel.goToSmsValidationEvent.observe(viewLifecycleOwner, Observer { it.consume { if (findNavController().currentDestination?.id == R.id.accountLoginFragment) { @@ -102,9 +111,15 @@ class AccountLoginFragment : AbstractPhoneFragment() { val dialogViewModel = DialogViewModel(getString(R.string.assistant_error_invalid_credentials)) val dialog: Dialog = DialogUtils.getDialog(requireContext(), dialogViewModel) - dialogViewModel.showDeleteButton({ + dialogViewModel.showCancelButton { + viewModel.removeInvalidProxyConfig() dialog.dismiss() - }, getString(R.string.dialog_ok)) + } + + dialogViewModel.showDeleteButton({ + viewModel.continueEvenIfInvalidCredentials() + dialog.dismiss() + }, getString(R.string.assistant_continue_even_if_credentials_invalid)) dialog.show() } diff --git a/app/src/main/java/org/linphone/activities/assistant/fragments/GenericAccountLoginFragment.kt b/app/src/main/java/org/linphone/activities/assistant/fragments/GenericAccountLoginFragment.kt index 78168d500..d2ebe0361 100644 --- a/app/src/main/java/org/linphone/activities/assistant/fragments/GenericAccountLoginFragment.kt +++ b/app/src/main/java/org/linphone/activities/assistant/fragments/GenericAccountLoginFragment.kt @@ -80,9 +80,15 @@ class GenericAccountLoginFragment : Fragment() { val dialogViewModel = DialogViewModel(getString(R.string.assistant_error_invalid_credentials)) val dialog: Dialog = DialogUtils.getDialog(requireContext(), dialogViewModel) - dialogViewModel.showDeleteButton({ + dialogViewModel.showCancelButton { + viewModel.removeInvalidProxyConfig() dialog.dismiss() - }, getString(R.string.dialog_ok)) + } + + dialogViewModel.showDeleteButton({ + viewModel.continueEvenIfInvalidCredentials() + dialog.dismiss() + }, getString(R.string.assistant_continue_even_if_credentials_invalid)) dialog.show() } diff --git a/app/src/main/java/org/linphone/activities/assistant/viewmodels/AccountLoginViewModel.kt b/app/src/main/java/org/linphone/activities/assistant/viewmodels/AccountLoginViewModel.kt index 9f0b23650..b5f102991 100644 --- a/app/src/main/java/org/linphone/activities/assistant/viewmodels/AccountLoginViewModel.kt +++ b/app/src/main/java/org/linphone/activities/assistant/viewmodels/AccountLoginViewModel.kt @@ -91,10 +91,6 @@ class AccountLoginViewModel(accountCreator: AccountCreator) : AbstractPhoneViewM core.removeListener(this) } else if (state == RegistrationState.Failed) { invalidCredentialsEvent.value = Event(true) - val authInfo = cfg.findAuthInfo() - if (authInfo != null) core.removeAuthInfo(authInfo) - core.removeProxyConfig(cfg) - proxyConfigToCheck = null core.removeListener(this) } } @@ -132,6 +128,19 @@ class AccountLoginViewModel(accountCreator: AccountCreator) : AbstractPhoneViewM super.onCleared() } + fun removeInvalidProxyConfig() { + val cfg = proxyConfigToCheck + cfg ?: return + val authInfo = cfg.findAuthInfo() + if (authInfo != null) coreContext.core.removeAuthInfo(authInfo) + coreContext.core.removeProxyConfig(cfg) + proxyConfigToCheck = null + } + + fun continueEvenIfInvalidCredentials() { + leaveAssistantEvent.value = Event(true) + } + fun login() { if (loginWithUsernamePassword.value == true) { accountCreator.username = username.value diff --git a/app/src/main/java/org/linphone/activities/assistant/viewmodels/GenericLoginViewModel.kt b/app/src/main/java/org/linphone/activities/assistant/viewmodels/GenericLoginViewModel.kt index 6819fa9db..53741d087 100644 --- a/app/src/main/java/org/linphone/activities/assistant/viewmodels/GenericLoginViewModel.kt +++ b/app/src/main/java/org/linphone/activities/assistant/viewmodels/GenericLoginViewModel.kt @@ -75,10 +75,6 @@ class GenericLoginViewModel(private val accountCreator: AccountCreator) : ViewMo core.removeListener(this) } else if (state == RegistrationState.Failed) { invalidCredentialsEvent.value = Event(true) - val authInfo = cfg.findAuthInfo() - if (authInfo != null) core.removeAuthInfo(authInfo) - core.removeProxyConfig(cfg) - proxyConfigToCheck = null core.removeListener(this) } } @@ -104,6 +100,19 @@ class GenericLoginViewModel(private val accountCreator: AccountCreator) : ViewMo transport.value = transportType } + fun removeInvalidProxyConfig() { + val cfg = proxyConfigToCheck + cfg ?: return + val authInfo = cfg.findAuthInfo() + if (authInfo != null) coreContext.core.removeAuthInfo(authInfo) + coreContext.core.removeProxyConfig(cfg) + proxyConfigToCheck = null + } + + fun continueEvenIfInvalidCredentials() { + leaveAssistantEvent.value = Event(true) + } + fun createProxyConfig() { waitForServerAnswer.value = true coreContext.core.addListener(coreListener) diff --git a/app/src/main/res/layout/assistant_account_login_fragment.xml b/app/src/main/res/layout/assistant_account_login_fragment.xml index 3e7c07a4c..1bc9f5aff 100644 --- a/app/src/main/res/layout/assistant_account_login_fragment.xml +++ b/app/src/main/res/layout/assistant_account_login_fragment.xml @@ -11,6 +11,9 @@ + @@ -219,6 +222,17 @@ android:hint="@string/password" android:textColor="@color/black_color" /> + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 294c00b02..9f84a262e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -266,9 +266,12 @@ Please confirm your country code and enter your phone number Please enter your username and password of &appName; account Use your username and password instead of your phone number + Forgot your password? + https://linphone.org/freesip/recover Login Finish configuration Confirmation code + Continue Use SIP account