From 0fe03e2eec77b5d218ec86a16b2532ec0d8a87f4 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 19 Apr 2024 16:04:20 +0200 Subject: [PATCH] Removed SSO fragment, only keep activity --- .../ui/assistant/SingleSignOnActivity.kt | 51 +++++++- .../ui/assistant/fragment/LandingFragment.kt | 26 ---- .../fragment/SingleSignOnFragment.kt | 114 ------------------ .../assistant/viewmodel/LandingViewModel.kt | 8 -- .../assistant_single_sign_on_activity.xml | 90 +++++++++++--- .../assistant_single_sign_on_fragment.xml | 92 -------------- .../res/navigation/assistant_nav_graph.xml | 24 ---- app/src/main/res/values/styles.xml | 2 +- 8 files changed, 123 insertions(+), 284 deletions(-) delete mode 100644 app/src/main/java/org/linphone/ui/assistant/fragment/SingleSignOnFragment.kt delete mode 100644 app/src/main/res/layout/assistant_single_sign_on_fragment.xml diff --git a/app/src/main/java/org/linphone/ui/assistant/SingleSignOnActivity.kt b/app/src/main/java/org/linphone/ui/assistant/SingleSignOnActivity.kt index e77f6ef3b..39a5e3c70 100644 --- a/app/src/main/java/org/linphone/ui/assistant/SingleSignOnActivity.kt +++ b/app/src/main/java/org/linphone/ui/assistant/SingleSignOnActivity.kt @@ -19,10 +19,13 @@ */ package org.linphone.ui.assistant +import android.content.Intent import android.os.Bundle import androidx.annotation.UiThread import androidx.databinding.DataBindingUtil import androidx.lifecycle.ViewModelProvider +import net.openid.appauth.AuthorizationException +import net.openid.appauth.AuthorizationResponse import org.linphone.R import org.linphone.core.tools.Log import org.linphone.databinding.AssistantSingleSignOnActivityBinding @@ -33,6 +36,8 @@ import org.linphone.ui.assistant.viewmodel.SingleSignOnViewModel class SingleSignOnActivity : GenericActivity() { companion object { private const val TAG = "[Single Sign On Activity]" + + private const val ACTIVITY_RESULT_ID = 666 } private lateinit var binding: AssistantSingleSignOnActivityBinding @@ -42,13 +47,12 @@ class SingleSignOnActivity : GenericActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - viewModel = run { - ViewModelProvider(this)[SingleSignOnViewModel::class.java] - } - binding = DataBindingUtil.setContentView(this, R.layout.assistant_single_sign_on_activity) binding.lifecycleOwner = this + viewModel = ViewModelProvider(this)[SingleSignOnViewModel::class.java] + binding.viewModel = viewModel + setUpToastsArea(binding.toastsArea) if (intent != null) { @@ -62,5 +66,44 @@ class SingleSignOnActivity : GenericActivity() { viewModel.singleSignOnUrl.value = ssoUrl } } + + viewModel.singleSignOnUrl.observe(this) { url -> + Log.i("$TAG SSO URL found [$url], setting it up") + viewModel.setUp() + } + + viewModel.singleSignOnProcessCompletedEvent.observe(this) { + it.consume { + Log.i("$TAG Process complete, leaving assistant") + finish() + } + } + + viewModel.startAuthIntentEvent.observe(this) { + it.consume { intent -> + Log.i("$TAG Starting auth intent activity") + startActivityForResult(intent, ACTIVITY_RESULT_ID) + } + } + + viewModel.onErrorEvent.observe(this) { + it.consume { errorMessage -> + showRedToast( + errorMessage, + R.drawable.warning_circle + ) + } + } + } + + @Deprecated("Deprecated in Java") + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + if (requestCode == ACTIVITY_RESULT_ID && data != null) { + val resp = AuthorizationResponse.fromIntent(data) + val ex = AuthorizationException.fromIntent(data) + viewModel.processAuthIntentResponse(resp, ex) + } + + super.onActivityResult(requestCode, resultCode, data) } } 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 ce0af01f3..f41b2bcae 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 @@ -138,34 +138,8 @@ class LandingFragment : Fragment() { ) } } - - /*viewModel.redirectToDigestAuthEvent.observe(viewLifecycleOwner) { - it.consume { address -> - goToLoginFragment(address) - } - } - - viewModel.redirectToSingleSignOnEvent.observe(viewLifecycleOwner) { - it.consume { address -> - goToSingleSignOnFragment(address) - } - }*/ } - /*private fun goToLoginFragment(identity: String) { - Log.i( - "$TAG Going to Linphone credentials based authentication fragment for SIP account [$identity]" - ) - val action = LandingFragmentDirections.actionLandingFragmentToLoginFragment(identity) - findNavController().navigate(action) - } - - private fun goToSingleSignOnFragment(identity: String) { - Log.i("$TAG Going to Single Sign On fragment for SIP account [$identity]") - val action = LandingFragmentDirections.actionLandingFragmentToSingleSignOnFragment() - findNavController().navigate(action) - }*/ - private fun goToRegisterFragment() { val action = LandingFragmentDirections.actionLandingFragmentToRegisterFragment() findNavController().navigate(action) diff --git a/app/src/main/java/org/linphone/ui/assistant/fragment/SingleSignOnFragment.kt b/app/src/main/java/org/linphone/ui/assistant/fragment/SingleSignOnFragment.kt deleted file mode 100644 index cde2f5ebe..000000000 --- a/app/src/main/java/org/linphone/ui/assistant/fragment/SingleSignOnFragment.kt +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (c) 2010-2023 Belledonne Communications SARL. - * - * This file is part of linphone-android - * (see https://www.linphone.org). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.linphone.ui.assistant.fragment - -import android.content.Intent -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.annotation.UiThread -import androidx.fragment.app.Fragment -import androidx.lifecycle.ViewModelProvider -import androidx.navigation.fragment.findNavController -import net.openid.appauth.AuthorizationException -import net.openid.appauth.AuthorizationResponse -import org.linphone.R -import org.linphone.core.tools.Log -import org.linphone.databinding.AssistantSingleSignOnFragmentBinding -import org.linphone.ui.GenericActivity -import org.linphone.ui.assistant.viewmodel.SingleSignOnViewModel - -@UiThread -class SingleSignOnFragment : Fragment() { - companion object { - private const val TAG = "[Single Sign On Fragment]" - - private const val ACTIVITY_RESULT_ID = 666 - } - - private lateinit var binding: AssistantSingleSignOnFragmentBinding - - private lateinit var viewModel: SingleSignOnViewModel - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View { - binding = AssistantSingleSignOnFragmentBinding.inflate(layoutInflater) - return binding.root - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - - binding.lifecycleOwner = viewLifecycleOwner - - viewModel = requireActivity().run { - ViewModelProvider(this)[SingleSignOnViewModel::class.java] - } - binding.viewModel = viewModel - - viewModel.singleSignOnUrl.observe(viewLifecycleOwner) { url -> - Log.i("$TAG SSO URL found [$url], setting it up") - viewModel.setUp() - } - - viewModel.singleSignOnProcessCompletedEvent.observe(viewLifecycleOwner) { - it.consume { - Log.i("$TAG Process complete, leaving assistant") - requireActivity().finish() - } - } - - viewModel.startAuthIntentEvent.observe(viewLifecycleOwner) { - it.consume { intent -> - Log.i("$TAG Starting auth intent activity") - startActivityForResult(intent, ACTIVITY_RESULT_ID) - } - } - - viewModel.onErrorEvent.observe(viewLifecycleOwner) { - it.consume { errorMessage -> - (requireActivity() as GenericActivity).showRedToast( - errorMessage, - R.drawable.warning_circle - ) - try { - findNavController().popBackStack() - } catch (ise: IllegalStateException) { - // Excepted in SingleSignOnActivity as no NavController is set - } - } - } - } - - @Deprecated("Deprecated in Java") - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - if (requestCode == ACTIVITY_RESULT_ID && data != null) { - val resp = AuthorizationResponse.fromIntent(data) - val ex = AuthorizationException.fromIntent(data) - viewModel.processAuthIntentResponse(resp, ex) - } - - super.onActivityResult(requestCode, resultCode, data) - } -} diff --git a/app/src/main/java/org/linphone/ui/assistant/viewmodel/LandingViewModel.kt b/app/src/main/java/org/linphone/ui/assistant/viewmodel/LandingViewModel.kt index 63cdb6b42..ad9a2569c 100644 --- a/app/src/main/java/org/linphone/ui/assistant/viewmodel/LandingViewModel.kt +++ b/app/src/main/java/org/linphone/ui/assistant/viewmodel/LandingViewModel.kt @@ -37,14 +37,6 @@ class LandingViewModel @UiThread constructor() : AccountLoginViewModel() { val hideThirdPartyAccount = MutableLiveData() - /*val redirectToDigestAuthEvent: MutableLiveData> by lazy { - MutableLiveData>() - } - - val redirectToSingleSignOnEvent: MutableLiveData> by lazy { - MutableLiveData>() - }*/ - var conditionsAndPrivacyPolicyAccepted = false init { diff --git a/app/src/main/res/layout/assistant_single_sign_on_activity.xml b/app/src/main/res/layout/assistant_single_sign_on_activity.xml index 14a09bc53..83f105e40 100644 --- a/app/src/main/res/layout/assistant_single_sign_on_activity.xml +++ b/app/src/main/res/layout/assistant_single_sign_on_activity.xml @@ -1,45 +1,105 @@ + + + android:background="?attr/color_main2_000"> - + + + + - + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintBottom_toTopOf="@id/message"/> + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/assistant_single_sign_on_fragment.xml b/app/src/main/res/layout/assistant_single_sign_on_fragment.xml deleted file mode 100644 index 58cab4405..000000000 --- a/app/src/main/res/layout/assistant_single_sign_on_fragment.xml +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/navigation/assistant_nav_graph.xml b/app/src/main/res/navigation/assistant_nav_graph.xml index 6ab4de177..c5c79e34e 100644 --- a/app/src/main/res/navigation/assistant_nav_graph.xml +++ b/app/src/main/res/navigation/assistant_nav_graph.xml @@ -136,15 +136,6 @@ android:label="LandingFragment" tools:layout="@layout/assistant_landing_fragment" > - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index d35a3e4b4..7515dcd14 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -150,7 +150,7 @@ 14sp @color/in_call_label_color center - 1 + 1 end