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 b6c5ad8b05fe5b89ee83d63722751142640ff20a..eaff532c22140cf34e025fe08957be7fd9189c0a 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 e237053c929544f27067409a7d662d77d1113847..231bbd8bc3676a2ba088e193d96987b34ffa50ca 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 4138c330639ed11dbde2058e23631c37c0548fae..ffa334408ae71fe1e96af5df887f9bbca046ad13 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 44c53bec314b1107cbdf8f343e9fc0d5764df753..63752002be30deadb01b432397237ca477424dec 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 cce116fba6c6d6314a45e37a331d250ed4c1795c..3e098c36a334b35284f4fa6d82cd7d98579003c7 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>