From 5ce7a5524a157d00ae9fe239b5fc75605a28a18a Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 12 Aug 2024 10:48:31 +0200 Subject: [PATCH] Added custom settings to directly go to third party sip account login & pre-fill some fields --- .../java/org/linphone/core/CorePreferences.kt | 16 ++++++++++++ .../telecom/TelecomAndroidAutoService.kt | 4 +-- .../ui/assistant/fragment/LandingFragment.kt | 20 ++++++++++---- .../ThirdPartySipAccountLoginFragment.kt | 7 ++++- .../viewmodel/AccountLoginViewModel.kt | 8 ++++++ .../ThirdPartySipAccountLoginViewModel.kt | 26 +++++++++++++++++-- .../res/navigation/assistant_nav_graph.xml | 10 +++++++ app/src/main/res/values/strings.xml | 12 +++++++-- 8 files changed, 91 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/org/linphone/core/CorePreferences.kt b/app/src/main/java/org/linphone/core/CorePreferences.kt index a8a6d068d..b0594e278 100644 --- a/app/src/main/java/org/linphone/core/CorePreferences.kt +++ b/app/src/main/java/org/linphone/core/CorePreferences.kt @@ -220,6 +220,22 @@ class CorePreferences @UiThread constructor(private val context: Context) { val useUsernameAsSingleSignOnLoginHint: Boolean get() = config.getBool("ui", "use_username_as_sso_login_hint", true) + @get:WorkerThread + val thirdPartySipAccountDefaultTransport: String + get() = config.getString("ui", "assistant_third_party_sip_account_transport", "tls")!! + + @get:WorkerThread + val thirdPartySipAccountDefaultDomain: String + get() = config.getString("ui", "assistant_third_party_sip_account_domain", "")!! + + @get:WorkerThread + val assistantDirectlyGoToThirdPartySipAccountLogin: Boolean + get() = config.getBool( + "ui", + "assistant_go_directly_to_third_party_sip_account_login", + false + ) + @get:WorkerThread val automaticallyShowDialpad: Boolean get() = config.getBool("ui", "automatically_show_dialpad", false) diff --git a/app/src/main/java/org/linphone/telecom/TelecomAndroidAutoService.kt b/app/src/main/java/org/linphone/telecom/TelecomAndroidAutoService.kt index 673957ace..b75b13b59 100644 --- a/app/src/main/java/org/linphone/telecom/TelecomAndroidAutoService.kt +++ b/app/src/main/java/org/linphone/telecom/TelecomAndroidAutoService.kt @@ -32,10 +32,10 @@ class TelecomAndroidAutoService : CarAppService() { override fun createHostValidator(): HostValidator { val host = hostInfo - Log.e("$TAG Host is [${host?.packageName}] with UID [${host?.uid}]") + Log.i("$TAG Host is [${host?.packageName}] with UID [${host?.uid}]") val validator = HostValidator.Builder(applicationContext) - .addAllowedHosts(R.array.hosts_allowlist_sample_copy) // androidx.car.app.R.array.hosts_allowlist_sampl + .addAllowedHosts(R.array.hosts_allowlist_sample_copy) // androidx.car.app.R.array.hosts_allowlist_sample .build() if (host != null) { val allowed = validator.isValidHost(host) diff --git a/app/src/main/java/org/linphone/ui/assistant/fragment/LandingFragment.kt b/app/src/main/java/org/linphone/ui/assistant/fragment/LandingFragment.kt index c0a9c1c84..1d44b5e61 100644 --- a/app/src/main/java/org/linphone/ui/assistant/fragment/LandingFragment.kt +++ b/app/src/main/java/org/linphone/ui/assistant/fragment/LandingFragment.kt @@ -90,7 +90,7 @@ class LandingFragment : GenericFragment() { binding.setThirdPartySipAccountLoginClickListener { if (viewModel.conditionsAndPrivacyPolicyAccepted) { - goToLoginThirdPartySipAccountFragment() + goToLoginThirdPartySipAccountFragment(false) } else { showAcceptConditionsAndPrivacyDialog(goToThirdPartySipAccountLogin = true) } @@ -116,7 +116,7 @@ class LandingFragment : GenericFragment() { } viewModel.accountLoggedInEvent.observe(viewLifecycleOwner) { - it.consume { firstAccount -> + it.consume { Log.i("$TAG Account successfully logged-in, leaving assistant") requireActivity().finish() } @@ -131,6 +131,12 @@ class LandingFragment : GenericFragment() { } } + viewModel.skipLandingToThirdPartySipAccountEvent.observe(viewLifecycleOwner) { + it.consume { + goToLoginThirdPartySipAccountFragment(true) + } + } + coreContext.postOnCoreThread { val dialPlan = PhoneNumberUtils.getDeviceDialPlan(requireContext()) if (dialPlan != null) { @@ -145,8 +151,12 @@ class LandingFragment : GenericFragment() { findNavController().navigate(action) } - private fun goToLoginThirdPartySipAccountFragment() { - val action = LandingFragmentDirections.actionLandingFragmentToThirdPartySipAccountWarningFragment() + private fun goToLoginThirdPartySipAccountFragment(skipWarning: Boolean) { + val action = if (skipWarning) { + LandingFragmentDirections.actionLandingFragmentToThirdPartySipAccountLoginFragment() + } else { + LandingFragmentDirections.actionLandingFragmentToThirdPartySipAccountWarningFragment() + } findNavController().navigate(action) } @@ -177,7 +187,7 @@ class LandingFragment : GenericFragment() { if (goToAccountCreate) { goToRegisterFragment() } else if (goToThirdPartySipAccountLogin) { - goToLoginThirdPartySipAccountFragment() + goToLoginThirdPartySipAccountFragment(false) } } } diff --git a/app/src/main/java/org/linphone/ui/assistant/fragment/ThirdPartySipAccountLoginFragment.kt b/app/src/main/java/org/linphone/ui/assistant/fragment/ThirdPartySipAccountLoginFragment.kt index 1fcdf275a..99bbf1215 100644 --- a/app/src/main/java/org/linphone/ui/assistant/fragment/ThirdPartySipAccountLoginFragment.kt +++ b/app/src/main/java/org/linphone/ui/assistant/fragment/ThirdPartySipAccountLoginFragment.kt @@ -88,7 +88,6 @@ class ThirdPartySipAccountLoginFragment : GenericFragment() { adapter.setDropDownViewResource(R.layout.generic_dropdown_cell) binding.transport.adapter = adapter binding.transport.onItemSelectedListener = dropdownListener - binding.transport.setSelection(viewModel.availableTransports.size - 1) binding.viewModel = viewModel observeToastEvents(viewModel) @@ -120,6 +119,12 @@ class ThirdPartySipAccountLoginFragment : GenericFragment() { } } + viewModel.defaultTransportIndexEvent.observe(viewLifecycleOwner) { + it.consume { index -> + binding.transport.setSelection(index) + } + } + coreContext.bearerAuthenticationRequestedEvent.observe(viewLifecycleOwner) { it.consume { pair -> val serverUrl = pair.first diff --git a/app/src/main/java/org/linphone/ui/assistant/viewmodel/AccountLoginViewModel.kt b/app/src/main/java/org/linphone/ui/assistant/viewmodel/AccountLoginViewModel.kt index f90554d9d..8f9577d5c 100644 --- a/app/src/main/java/org/linphone/ui/assistant/viewmodel/AccountLoginViewModel.kt +++ b/app/src/main/java/org/linphone/ui/assistant/viewmodel/AccountLoginViewModel.kt @@ -73,6 +73,10 @@ open class AccountLoginViewModel @UiThread constructor() : GenericViewModel() { MutableLiveData>() } + val skipLandingToThirdPartySipAccountEvent: MutableLiveData> by lazy { + MutableLiveData>() + } + var conditionsAndPrivacyPolicyAccepted = false private lateinit var newlyCreatedAuthInfo: AuthInfo @@ -129,6 +133,10 @@ open class AccountLoginViewModel @UiThread constructor() : GenericViewModel() { hideScanQrCode.postValue(corePreferences.hideAssistantScanQrCode) hideThirdPartyAccount.postValue(corePreferences.hideAssistantThirdPartySipAccount) conditionsAndPrivacyPolicyAccepted = corePreferences.conditionsAndPrivacyPolicyAccepted + + if (corePreferences.assistantDirectlyGoToThirdPartySipAccountLogin) { + skipLandingToThirdPartySipAccountEvent.postValue(Event(true)) + } } showPassword.value = false diff --git a/app/src/main/java/org/linphone/ui/assistant/viewmodel/ThirdPartySipAccountLoginViewModel.kt b/app/src/main/java/org/linphone/ui/assistant/viewmodel/ThirdPartySipAccountLoginViewModel.kt index b5813bf6d..a866399a9 100644 --- a/app/src/main/java/org/linphone/ui/assistant/viewmodel/ThirdPartySipAccountLoginViewModel.kt +++ b/app/src/main/java/org/linphone/ui/assistant/viewmodel/ThirdPartySipAccountLoginViewModel.kt @@ -67,9 +67,17 @@ class ThirdPartySipAccountLoginViewModel @UiThread constructor() : GenericViewMo val registrationInProgress = MutableLiveData() - val accountLoggedInEvent = MutableLiveData>() + val accountLoggedInEvent: MutableLiveData> by lazy { + MutableLiveData>() + } - val accountLoginErrorEvent = MutableLiveData>() + val accountLoginErrorEvent: MutableLiveData> by lazy { + MutableLiveData>() + } + + val defaultTransportIndexEvent: MutableLiveData> by lazy { + MutableLiveData>() + } val availableTransports = arrayListOf() @@ -135,6 +143,20 @@ class ThirdPartySipAccountLoginViewModel @UiThread constructor() : GenericViewMo availableTransports.add(TransportType.Udp.name.uppercase(Locale.getDefault())) availableTransports.add(TransportType.Tcp.name.uppercase(Locale.getDefault())) availableTransports.add(TransportType.Tls.name.uppercase(Locale.getDefault())) + + coreContext.postOnCoreThread { + domain.postValue(corePreferences.thirdPartySipAccountDefaultDomain) + + val defaultTransport = corePreferences.thirdPartySipAccountDefaultTransport.uppercase( + Locale.getDefault() + ) + val index = if (defaultTransport.isNotEmpty()) { + availableTransports.indexOf(defaultTransport) + } else { + availableTransports.size - 1 + } + defaultTransportIndexEvent.postValue(Event(index)) + } } @UiThread diff --git a/app/src/main/res/navigation/assistant_nav_graph.xml b/app/src/main/res/navigation/assistant_nav_graph.xml index da7361a12..4e406f83e 100644 --- a/app/src/main/res/navigation/assistant_nav_graph.xml +++ b/app/src/main/res/navigation/assistant_nav_graph.xml @@ -134,6 +134,16 @@ app:popEnterAnim="@anim/slide_in_left" app:popExitAnim="@anim/slide_out_right" app:launchSingleTop="true" /> + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6b6bcb588..58aba061e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -855,8 +855,7 @@ Save LDAP configuration Plays the call recording - + fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead @@ -866,5 +865,14 @@ 1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead + + c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, + com.google.android.apps.automotive.templates.host + + dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, + com.google.android.apps.automotive.templates.host + + 50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, + com.google.android.apps.automotive.templates.host \ No newline at end of file