From 0037515c35d6dede76fb235e9edfb850bde6b5eb Mon Sep 17 00:00:00 2001 From: Taras <tarassmakula@gmail.com> Date: Thu, 4 Aug 2022 16:27:53 +0300 Subject: [PATCH] Change logic for signup stages --- .../java/org/futo/circles/core/Constants.kt | 3 ++- .../feature/sign_up/SignUpDataSource.kt | 23 +++++++++++++++---- .../circles/feature/sign_up/SignUpFragment.kt | 1 + .../SelectSignUpTypeDataSource.kt | 3 ++- app/src/main/res/values/strings.xml | 1 + 5 files changed, 24 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/futo/circles/core/Constants.kt b/app/src/main/java/org/futo/circles/core/Constants.kt index b6c5ad8b0..eaff532c2 100644 --- a/app/src/main/java/org/futo/circles/core/Constants.kt +++ b/app/src/main/java/org/futo/circles/core/Constants.kt @@ -2,7 +2,8 @@ package org.futo.circles.core const val FILE_PROVIDER_AUTHORITY_PREFIX = ".provider" -const val REGISTRATION_TOKEN_KEY_PREFIX = "login.registration_token" +const val REGISTRATION_TOKEN_KEY_PREFIX = "registration_token" +const val REGISTRATION_SUBSCRIPTION_KEY_PREFIX = "subscription.google" const val TERMS_URL_EXTENSION = "_matrix/consent" const val VALIDATION_TOKEN_SUBMIT_URL_PREFIX = "_matrix/identity/api/v1/validate/email/submitToken" diff --git a/app/src/main/java/org/futo/circles/feature/sign_up/SignUpDataSource.kt b/app/src/main/java/org/futo/circles/feature/sign_up/SignUpDataSource.kt index e237053c9..231bbd8bc 100644 --- a/app/src/main/java/org/futo/circles/feature/sign_up/SignUpDataSource.kt +++ b/app/src/main/java/org/futo/circles/feature/sign_up/SignUpDataSource.kt @@ -6,6 +6,7 @@ import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.coroutines.coroutineScope import org.futo.circles.R +import org.futo.circles.core.REGISTRATION_SUBSCRIPTION_KEY_PREFIX import org.futo.circles.core.REGISTRATION_TOKEN_KEY_PREFIX import org.futo.circles.core.SingleEventLiveData import org.futo.circles.core.matrix.pass_phrase.create.CreatePassPhraseDataSource @@ -18,7 +19,7 @@ import org.matrix.android.sdk.api.auth.registration.RegistrationResult import org.matrix.android.sdk.api.auth.registration.Stage import org.matrix.android.sdk.api.session.Session -enum class NavigationEvents { TokenValidation, AcceptTerm, ValidateEmail } +enum class NavigationEvents { TokenValidation, Subscription, AcceptTerm, ValidateEmail } class SignUpDataSource( private val context: Context, @@ -37,6 +38,8 @@ class SignUpDataSource( private set var currentHomeServerUrl: String = "" + private set + private var passphrase: String = "" private var userName: String = "" @@ -44,7 +47,8 @@ class SignUpDataSource( stages: List<Stage>, name: String, password: String, - homeServerUrl: String + homeServerUrl: String, + isSubscription: Boolean ) { currentStage = null stagesToComplete.clear() @@ -52,7 +56,7 @@ class SignUpDataSource( passphrase = password currentHomeServerUrl = homeServerUrl - stagesToComplete.addAll(stages.filter { it.mandatory }) + setupStages(stages, isSubscription) navigateToNextStage() } @@ -66,6 +70,16 @@ class SignUpDataSource( subtitleLiveData.postValue("") } + private fun setupStages(stages: List<Stage>, isSubscription: Boolean) { + val otherStages = stages.filterIsInstance<Stage.Other>() + val firstStage = otherStages.firstOrNull { + if (isSubscription) it.type.endsWith(REGISTRATION_SUBSCRIPTION_KEY_PREFIX) + else it.type.endsWith(REGISTRATION_TOKEN_KEY_PREFIX) + } ?: throw IllegalArgumentException(context.getString(R.string.wrong_signup_config)) + stagesToComplete.add(firstStage) + stagesToComplete.addAll(stages.filter { it.mandatory }) + } + private suspend fun finishRegistration(session: Session) = createResult { MatrixInstanceProvider.matrix.authenticationService().reset() MatrixSessionProvider.awaitForSessionStart(session) @@ -103,11 +117,11 @@ class SignUpDataSource( private fun handleStageOther(type: String): NavigationEvents = if (type.endsWith(REGISTRATION_TOKEN_KEY_PREFIX)) NavigationEvents.TokenValidation + else if (type.endsWith(REGISTRATION_SUBSCRIPTION_KEY_PREFIX)) NavigationEvents.Subscription else throw IllegalArgumentException( context.getString(R.string.not_supported_stage_format, type) ) - private fun updatePageSubtitle() { val size = stagesToComplete.size val number = getCurrentStageIndex() + 1 @@ -115,5 +129,4 @@ class SignUpDataSource( subtitleLiveData.postValue(subtitle) } - } \ No newline at end of file diff --git a/app/src/main/java/org/futo/circles/feature/sign_up/SignUpFragment.kt b/app/src/main/java/org/futo/circles/feature/sign_up/SignUpFragment.kt index 4138c3306..ffa334408 100644 --- a/app/src/main/java/org/futo/circles/feature/sign_up/SignUpFragment.kt +++ b/app/src/main/java/org/futo/circles/feature/sign_up/SignUpFragment.kt @@ -57,6 +57,7 @@ class SignUpFragment : Fragment(R.layout.sign_up_fragment), BackPressOwner { private fun handleNavigation(event: NavigationEvents) { val directionId = when (event) { NavigationEvents.TokenValidation -> R.id.to_validateToken + NavigationEvents.Subscription -> R.id.to_subscriptions NavigationEvents.AcceptTerm -> R.id.to_acceptTerms NavigationEvents.ValidateEmail -> R.id.to_validateEmail } diff --git a/app/src/main/java/org/futo/circles/feature/sign_up/sign_up_type/SelectSignUpTypeDataSource.kt b/app/src/main/java/org/futo/circles/feature/sign_up/sign_up_type/SelectSignUpTypeDataSource.kt index 44c53bec3..63752002b 100644 --- a/app/src/main/java/org/futo/circles/feature/sign_up/sign_up_type/SelectSignUpTypeDataSource.kt +++ b/app/src/main/java/org/futo/circles/feature/sign_up/sign_up_type/SelectSignUpTypeDataSource.kt @@ -44,7 +44,8 @@ class SelectSignUpTypeDataSource( it.flowResult.missingStages, name, password, - homeServerUrl + homeServerUrl, + isSubscription ) } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cce116fba..3e098c36a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -238,6 +238,7 @@ <string name="enable_cross_signing_message">Confirm auth to enable cross signing</string> <string name="device_media">Device media</string> <string name="subscriptions">Subscriptions</string> + <string name="wrong_signup_config">Wrong signup config!</string> <string-array name="report_categories"> <item>@string/crude_language</item> -- GitLab