From 51c294a6fc955f5586cd44da265215af3d0f8ab2 Mon Sep 17 00:00:00 2001
From: Adam Brown <adampsbrown@gmail.com>
Date: Thu, 31 Mar 2022 16:33:09 +0100
Subject: [PATCH] launching the edit selection from the ftue variant entry
 point

---
 .../onboarding/OnboardingViewEvents.kt         |  1 +
 .../features/onboarding/OnboardingViewModel.kt | 18 ++++++++----------
 .../FtueAuthCombinedRegisterFragment.kt        | 11 ++---------
 .../FtueAuthCombinedServerSelectionFragment.kt |  7 ++++++-
 .../onboarding/ftueauth/FtueAuthVariant.kt     |  7 +++++++
 5 files changed, 24 insertions(+), 20 deletions(-)

diff --git a/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewEvents.kt b/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewEvents.kt
index 853b0c330e..dddf350542 100644
--- a/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewEvents.kt
+++ b/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewEvents.kt
@@ -37,6 +37,7 @@ sealed class OnboardingViewEvents : VectorViewEvents {
     object OpenUseCaseSelection : OnboardingViewEvents()
     object OpenServerSelection : OnboardingViewEvents()
     object OpenCombinedRegister : OnboardingViewEvents()
+    object EditServerSelection : OnboardingViewEvents()
     data class OnServerSelectionDone(val serverType: ServerType) : OnboardingViewEvents()
     object OnLoginFlowRetrieved : OnboardingViewEvents()
     data class OnSignModeSelected(val signMode: SignMode) : OnboardingViewEvents()
diff --git a/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewModel.kt b/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewModel.kt
index 8a427abdd1..73b632e351 100644
--- a/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewModel.kt
+++ b/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewModel.kt
@@ -646,19 +646,17 @@ class OnboardingViewModel @AssistedInject constructor(
                 else                                                               -> LoginMode.Unsupported
             }
 
-            val serverSelection = ServerSelectionState(
-                    description = when (data.homeServerUrl) {
-                        matrixOrgUrl -> stringProvider.getString(R.string.ftue_auth_create_account_matrix_dot_org_server_description)
-                        else         -> null
-                    },
-                    userUrlInput = homeServerConnectionConfig.homeServerUri.toString(),
-                    hostedUrl = data.homeServerUrl
-            )
-
             setState {
                 copy(
+                        serverSelectionState = serverSelectionState.copy(
+                                description = when (data.homeServerUrl) {
+                                    matrixOrgUrl -> stringProvider.getString(R.string.ftue_auth_create_account_matrix_dot_org_server_description)
+                                    else         -> null
+                                },
+                                userUrlInput = homeServerConnectionConfig.homeServerUri.toString(),
+                                hostedUrl = data.homeServerUrl
+                        ),
                         isLoading = false,
-                        serverSelectionState = serverSelection,
                         loginMode = loginMode,
                         loginModeSupportedTypes = data.supportedLoginTypes.toList()
                 )
diff --git a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCombinedRegisterFragment.kt b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCombinedRegisterFragment.kt
index c24dc22de2..537adf977d 100644
--- a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCombinedRegisterFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCombinedRegisterFragment.kt
@@ -22,7 +22,6 @@ import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import android.view.inputmethod.EditorInfo
-import androidx.appcompat.app.AppCompatActivity
 import androidx.autofill.HintConstants
 import androidx.core.text.isDigitsOnly
 import androidx.core.view.isVisible
@@ -30,8 +29,6 @@ import androidx.lifecycle.lifecycleScope
 import com.airbnb.mvrx.withState
 import com.google.android.material.dialog.MaterialAlertDialogBuilder
 import im.vector.app.R
-import im.vector.app.core.extensions.addFragment
-import im.vector.app.core.extensions.commitTransaction
 import im.vector.app.core.extensions.content
 import im.vector.app.core.extensions.editText
 import im.vector.app.core.extensions.hasContentFlow
@@ -39,7 +36,6 @@ import im.vector.app.core.extensions.hasSurroundingSpaces
 import im.vector.app.core.extensions.hideKeyboard
 import im.vector.app.core.extensions.hidePassword
 import im.vector.app.core.extensions.realignPercentagesToParent
-import im.vector.app.core.extensions.toMvRxBundle
 import im.vector.app.core.extensions.toReducedUrl
 import im.vector.app.databinding.FragmentFtueSignUpCombinedBinding
 import im.vector.app.features.login.LoginMode
@@ -47,6 +43,7 @@ import im.vector.app.features.login.SSORedirectRouterActivity
 import im.vector.app.features.login.ServerType
 import im.vector.app.features.login.SocialLoginButtonsView
 import im.vector.app.features.onboarding.OnboardingAction
+import im.vector.app.features.onboarding.OnboardingViewEvents
 import im.vector.app.features.onboarding.OnboardingViewState
 import kotlinx.coroutines.flow.combine
 import kotlinx.coroutines.flow.launchIn
@@ -69,13 +66,9 @@ class FtueAuthCombinedRegisterFragment @Inject constructor() : AbstractSSOFtueAu
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
         setupSubmitButton()
-
         views.createAccountRoot.realignPercentagesToParent()
-
         views.editServerButton.debouncedClicks {
-            requireActivity().supportFragmentManager.commitTransaction(true) {
-                add(R.id.loginFragmentContainer, FtueAuthCombinedServerSelectionFragment(), null)
-            }
+            viewModel.handle(OnboardingAction.PostViewEvent(OnboardingViewEvents.EditServerSelection))
         }
 
         views.createAccountPasswordInput.editText().setOnEditorActionListener { _, actionId, _ ->
diff --git a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCombinedServerSelectionFragment.kt b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCombinedServerSelectionFragment.kt
index dbee2ad045..f94a243cd9 100644
--- a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCombinedServerSelectionFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCombinedServerSelectionFragment.kt
@@ -20,6 +20,7 @@ import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
+import im.vector.app.core.extensions.content
 import im.vector.app.core.extensions.editText
 import im.vector.app.core.extensions.realignPercentagesToParent
 import im.vector.app.core.extensions.toReducedUrl
@@ -29,7 +30,7 @@ import im.vector.app.features.onboarding.OnboardingViewEvents
 import im.vector.app.features.onboarding.OnboardingViewState
 import javax.inject.Inject
 
-class FtueAuthCombinedServerSelectionFragment @Inject constructor() : AbstractSSOFtueAuthFragment<FragmentFtueServerSelectionCombinedBinding>() {
+class FtueAuthCombinedServerSelectionFragment @Inject constructor() : AbstractFtueAuthFragment<FragmentFtueServerSelectionCombinedBinding>() {
 
     override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentFtueServerSelectionCombinedBinding {
         return FragmentFtueServerSelectionCombinedBinding.inflate(inflater, container, false)
@@ -42,6 +43,10 @@ class FtueAuthCombinedServerSelectionFragment @Inject constructor() : AbstractSS
         views.chooseServerToolbar.setNavigationOnClickListener {
             viewModel.handle(OnboardingAction.PostViewEvent(OnboardingViewEvents.OnBack))
         }
+
+        views.chooseServerSubmit.debouncedClicks {
+            viewModel.handle(OnboardingAction.UpdateHomeServer(views.chooseServerInput.content()))
+        }
     }
 
     override fun resetViewModel() {
diff --git a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthVariant.kt b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthVariant.kt
index 4c7bf47233..104a37f256 100644
--- a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthVariant.kt
+++ b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthVariant.kt
@@ -233,6 +233,13 @@ class FtueAuthVariant(
             OnboardingViewEvents.OnChooseProfilePicture                        -> onChooseProfilePicture()
             OnboardingViewEvents.OnPersonalizationComplete                     -> onPersonalizationComplete()
             OnboardingViewEvents.OnBack                                        -> activity.popBackstack()
+            OnboardingViewEvents.EditServerSelection                           -> {
+                activity.addFragmentToBackstack(
+                        views.loginFragmentContainer,
+                        FtueAuthCombinedServerSelectionFragment::class.java,
+                        option = commonOption
+                )
+            }
         }
     }