From 7b3163e1405513ac9aef91ced2048067bb3c6083 Mon Sep 17 00:00:00 2001 From: Adam Brown Date: Wed, 8 Dec 2021 17:07:57 +0000 Subject: [PATCH] cloning the splash fragment into the onboarding --- .../onboarding/OnboardingVariantFactory.kt | 3 +- .../ftueauth/AbstractFtueAuthFragment.kt | 6 +- .../ftueauth/FtueAuthSplashFragment.kt | 11 +- .../FtueAuthVariant.kt} | 53 ++--- .../main/res/layout/fragment_ftue_splash.xml | 212 ++++++++++++++++++ 5 files changed, 244 insertions(+), 41 deletions(-) rename vector/src/main/java/im/vector/app/features/onboarding/{OnboardingAuthVariant.kt => ftueauth/FtueAuthVariant.kt} (87%) create mode 100644 vector/src/main/res/layout/fragment_ftue_splash.xml diff --git a/vector/src/main/java/im/vector/app/features/onboarding/OnboardingVariantFactory.kt b/vector/src/main/java/im/vector/app/features/onboarding/OnboardingVariantFactory.kt index ea0ada56ba..58b5f6265d 100644 --- a/vector/src/main/java/im/vector/app/features/onboarding/OnboardingVariantFactory.kt +++ b/vector/src/main/java/im/vector/app/features/onboarding/OnboardingVariantFactory.kt @@ -18,6 +18,7 @@ package im.vector.app.features.onboarding import im.vector.app.features.VectorFeatures import im.vector.app.features.login2.LoginViewModel2 +import im.vector.app.features.onboarding.ftueauth.FtueAuthVariant import javax.inject.Inject class OnboardingVariantFactory @Inject constructor( @@ -29,7 +30,7 @@ class OnboardingVariantFactory @Inject constructor( loginViewModel2: Lazy ) = when (vectorFeatures.onboardingVariant()) { VectorFeatures.OnboardingVariant.LEGACY -> error("Legacy is not supported by the FTUE") - VectorFeatures.OnboardingVariant.FTUE_AUTH -> OnboardingAuthVariant( + VectorFeatures.OnboardingVariant.FTUE_AUTH -> FtueAuthVariant( views = activity.getBinding(), onboardingViewModel = onboardingViewModel.value, activity = activity, diff --git a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/AbstractFtueAuthFragment.kt b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/AbstractFtueAuthFragment.kt index 0caf2ea152..05dda789bb 100644 --- a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/AbstractFtueAuthFragment.kt +++ b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/AbstractFtueAuthFragment.kt @@ -63,11 +63,11 @@ abstract class AbstractFtueAuthFragment : VectorBaseFragment showFailure(viewEvents.throwable) else -> @@ -178,6 +178,6 @@ abstract class AbstractFtueAuthFragment : VectorBaseFragment() { +) : AbstractFtueAuthFragment() { override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentLoginSplashBinding { return FragmentLoginSplashBinding.inflate(inflater, container, false) @@ -63,7 +62,7 @@ class FtueAuthSplashFragment @Inject constructor( } private fun getStarted() { - loginViewModel.handle(LoginAction.OnGetStarted(resetLoginConfig = false)) + viewModel.handle(OnboardingAction.OnGetStarted(resetLoginConfig = false)) } override fun resetViewModel() { @@ -74,12 +73,12 @@ class FtueAuthSplashFragment @Inject constructor( if (throwable is Failure.NetworkConnection && throwable.ioException is UnknownHostException) { // Invalid homeserver from URL config - val url = loginViewModel.getInitialHomeServerUrl().orEmpty() + val url = viewModel.getInitialHomeServerUrl().orEmpty() MaterialAlertDialogBuilder(requireActivity()) .setTitle(R.string.dialog_title_error) .setMessage(getString(R.string.login_error_homeserver_from_url_not_found, url)) .setPositiveButton(R.string.login_error_homeserver_from_url_not_found_enter_manual) { _, _ -> - loginViewModel.handle(LoginAction.OnGetStarted(resetLoginConfig = true)) + viewModel.handle(OnboardingAction.OnGetStarted(resetLoginConfig = true)) } .setNegativeButton(R.string.action_cancel, null) .show() diff --git a/vector/src/main/java/im/vector/app/features/onboarding/OnboardingAuthVariant.kt b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthVariant.kt similarity index 87% rename from vector/src/main/java/im/vector/app/features/onboarding/OnboardingAuthVariant.kt rename to vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthVariant.kt index 49ceedc381..f17899dff6 100644 --- a/vector/src/main/java/im/vector/app/features/onboarding/OnboardingAuthVariant.kt +++ b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthVariant.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package im.vector.app.features.onboarding +package im.vector.app.features.onboarding.ftueauth import android.content.Intent import android.view.View @@ -42,21 +42,12 @@ import im.vector.app.features.login.SignMode import im.vector.app.features.login.TextInputFormFragmentMode import im.vector.app.features.login.isSupported import im.vector.app.features.login.terms.toLocalizedLoginTerms -import im.vector.app.features.onboarding.ftueauth.FtueAuthCaptchaFragment -import im.vector.app.features.onboarding.ftueauth.FtueAuthCaptchaFragmentArgument -import im.vector.app.features.onboarding.ftueauth.FtueAuthGenericTextInputFormFragment -import im.vector.app.features.onboarding.ftueauth.FtueAuthGenericTextInputFormFragmentArgument -import im.vector.app.features.onboarding.ftueauth.FtueAuthLoginFragment -import im.vector.app.features.onboarding.ftueauth.FtueAuthResetPasswordFragment -import im.vector.app.features.onboarding.ftueauth.FtueAuthResetPasswordMailConfirmationFragment -import im.vector.app.features.onboarding.ftueauth.FtueAuthResetPasswordSuccessFragment -import im.vector.app.features.onboarding.ftueauth.FtueAuthServerSelectionFragment -import im.vector.app.features.onboarding.ftueauth.FtueAuthServerUrlFormFragment -import im.vector.app.features.onboarding.ftueauth.FtueAuthSignUpSignInSelectionFragment -import im.vector.app.features.onboarding.ftueauth.FtueAuthSplashFragment -import im.vector.app.features.onboarding.ftueauth.FtueAuthWaitForEmailFragment -import im.vector.app.features.onboarding.ftueauth.FtueAuthWaitForEmailFragmentArgument -import im.vector.app.features.onboarding.ftueauth.FtueAuthWebFragment +import im.vector.app.features.onboarding.OnboardingAction +import im.vector.app.features.onboarding.OnboardingActivity +import im.vector.app.features.onboarding.OnboardingVariant +import im.vector.app.features.onboarding.OnboardingViewEvents +import im.vector.app.features.onboarding.OnboardingViewModel +import im.vector.app.features.onboarding.OnboardingViewState import im.vector.app.features.onboarding.ftueauth.terms.FtueAuthTermsFragment import im.vector.app.features.onboarding.ftueauth.terms.FtueAuthTermsFragmentArgument import org.matrix.android.sdk.api.auth.registration.FlowResult @@ -66,7 +57,7 @@ import org.matrix.android.sdk.api.extensions.tryOrNull private const val FRAGMENT_REGISTRATION_STAGE_TAG = "FRAGMENT_REGISTRATION_STAGE_TAG" private const val FRAGMENT_LOGIN_TAG = "FRAGMENT_LOGIN_TAG" -class OnboardingAuthVariant( +class FtueAuthVariant( private val views: ActivityLoginBinding, private val onboardingViewModel: OnboardingViewModel, private val activity: VectorBaseActivity, @@ -120,17 +111,17 @@ class OnboardingAuthVariant( activity.addFragment(views.loginFragmentContainer, FtueAuthSplashFragment::class.java) } - private fun handleOnboardingViewEvents(onboardingViewEvents: OnboardingViewEvents) { - when (onboardingViewEvents) { + private fun handleOnboardingViewEvents(viewEvents: OnboardingViewEvents) { + when (viewEvents) { is OnboardingViewEvents.RegistrationFlowResult -> { // Check that all flows are supported by the application - if (onboardingViewEvents.flowResult.missingStages.any { !it.isSupported() }) { + if (viewEvents.flowResult.missingStages.any { !it.isSupported() }) { // Display a popup to propose use web fallback onRegistrationStageNotSupported() } else { - if (onboardingViewEvents.isRegistrationStarted) { + if (viewEvents.isRegistrationStarted) { // Go on with registration flow - handleRegistrationNavigation(onboardingViewEvents.flowResult) + handleRegistrationNavigation(viewEvents.flowResult) } else { // First ask for login and password // I add a tag to indicate that this fragment is a registration stage. @@ -163,13 +154,13 @@ class OnboardingAuthVariant( // TODO Disabled because it provokes a flickering // ft.setCustomAnimations(enterAnim, exitAnim, popEnterAnim, popExitAnim) }) - is OnboardingViewEvents.OnServerSelectionDone -> onServerSelectionDone(onboardingViewEvents) - is OnboardingViewEvents.OnSignModeSelected -> onSignModeSelected(onboardingViewEvents) + is OnboardingViewEvents.OnServerSelectionDone -> onServerSelectionDone(viewEvents) + is OnboardingViewEvents.OnSignModeSelected -> onSignModeSelected(viewEvents) is OnboardingViewEvents.OnLoginFlowRetrieved -> activity.addFragmentToBackstack(views.loginFragmentContainer, FtueAuthSignUpSignInSelectionFragment::class.java, option = commonOption) - is OnboardingViewEvents.OnWebLoginError -> onWebLoginError(onboardingViewEvents) + is OnboardingViewEvents.OnWebLoginError -> onWebLoginError(viewEvents) is OnboardingViewEvents.OnForgetPasswordClicked -> activity.addFragmentToBackstack(views.loginFragmentContainer, FtueAuthResetPasswordFragment::class.java, @@ -195,7 +186,7 @@ class OnboardingAuthVariant( supportFragmentManager.popBackStack(FRAGMENT_REGISTRATION_STAGE_TAG, FragmentManager.POP_BACK_STACK_INCLUSIVE) activity.addFragmentToBackstack(views.loginFragmentContainer, FtueAuthWaitForEmailFragment::class.java, - FtueAuthWaitForEmailFragmentArgument(onboardingViewEvents.email), + FtueAuthWaitForEmailFragmentArgument(viewEvents.email), tag = FRAGMENT_REGISTRATION_STAGE_TAG, option = commonOption) } @@ -204,7 +195,7 @@ class OnboardingAuthVariant( supportFragmentManager.popBackStack(FRAGMENT_REGISTRATION_STAGE_TAG, FragmentManager.POP_BACK_STACK_INCLUSIVE) activity.addFragmentToBackstack(views.loginFragmentContainer, FtueAuthGenericTextInputFormFragment::class.java, - FtueAuthGenericTextInputFormFragmentArgument(TextInputFormFragmentMode.ConfirmMsisdn, true, onboardingViewEvents.msisdn), + FtueAuthGenericTextInputFormFragmentArgument(TextInputFormFragmentMode.ConfirmMsisdn, true, viewEvents.msisdn), tag = FRAGMENT_REGISTRATION_STAGE_TAG, option = commonOption) } @@ -215,11 +206,11 @@ class OnboardingAuthVariant( }.exhaustive } - private fun updateWithState(onboardingViewState: OnboardingViewState) { - if (onboardingViewState.isUserLogged()) { + private fun updateWithState(viewState: OnboardingViewState) { + if (viewState.isUserLogged()) { val intent = HomeActivity.newIntent( activity, - accountCreation = onboardingViewState.signMode == SignMode.SignUp + accountCreation = viewState.signMode == SignMode.SignUp ) activity.startActivity(intent) activity.finish() @@ -227,7 +218,7 @@ class OnboardingAuthVariant( } // Loading - views.loginLoading.isVisible = onboardingViewState.isLoading() + views.loginLoading.isVisible = viewState.isLoading() } private fun onWebLoginError(onWebLoginError: OnboardingViewEvents.OnWebLoginError) { diff --git a/vector/src/main/res/layout/fragment_ftue_splash.xml b/vector/src/main/res/layout/fragment_ftue_splash.xml new file mode 100644 index 0000000000..96b3a7cbfb --- /dev/null +++ b/vector/src/main/res/layout/fragment_ftue_splash.xml @@ -0,0 +1,212 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +