From 47f64829bd534d1396ed86c59d15ac7f43f5b611 Mon Sep 17 00:00:00 2001 From: Taras <tarassmakula@gmail.com> Date: Wed, 22 Jun 2022 18:07:55 +0300 Subject: [PATCH] Add server location to signup --- .../SelectSignUpTypeDataSource.kt | 42 +++++++--- .../sign_up_type/SelectSignUpTypeFragment.kt | 16 +++- .../sign_up_type/SelectSignUpTypeViewModel.kt | 4 +- .../layout/select_sign_up_type_fragment.xml | 77 ++++++++++++++++--- 4 files changed, 114 insertions(+), 25 deletions(-) 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 d4b82c6a7..e62c13d91 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 @@ -1,10 +1,13 @@ package org.futo.circles.feature.sign_up.sign_up_type import android.content.Context +import android.net.Uri import org.futo.circles.R +import org.futo.circles.core.HomeServerUtils import org.futo.circles.extensions.createResult import org.futo.circles.feature.sign_up.SignUpDataSource import org.futo.circles.provider.MatrixInstanceProvider +import org.matrix.android.sdk.api.auth.data.HomeServerConnectionConfig import org.matrix.android.sdk.api.auth.registration.RegistrationResult class SelectSignUpTypeDataSource( @@ -14,22 +17,37 @@ class SelectSignUpTypeDataSource( private val authService by lazy { MatrixInstanceProvider.matrix.authenticationService() } - private val registrationWizard by lazy { authService.getRegistrationWizard() } - fun clearSubtitle() { signUpDataSource.clearSubtitle() } - suspend fun startNewRegistration(name: String, password: String) = createResult { - authService.cancelPendingLoginOrRegistration() - (registrationWizard.createAccount( - name, password, - context.getString(R.string.initial_device_name, context.getString(R.string.app_name)) - ) - as? RegistrationResult.FlowResponse) - ?.let { - signUpDataSource.startSignUpStages(it.flowResult.missingStages, password) - } + suspend fun startNewRegistration(name: String, password: String, domain: String) = + createResult { + val homeServerUrl = HomeServerUtils.getHomeServerUrlFromDomain(domain) + authService.cancelPendingLoginOrRegistration() + authService.getLoginFlow(buildHomeServerConfig(homeServerUrl)) + (authService.getRegistrationWizard().createAccount( + name, password, + context.getString( + R.string.initial_device_name, + context.getString(R.string.app_name) + ) + ) + as? RegistrationResult.FlowResponse) + ?.let { + signUpDataSource.startSignUpStages( + it.flowResult.missingStages, + password, + homeServerUrl + ) + } + } + + private fun buildHomeServerConfig(url: String): HomeServerConnectionConfig { + return HomeServerConnectionConfig + .Builder() + .withHomeServerUri(Uri.parse(url)) + .build() } } \ No newline at end of file diff --git a/app/src/main/java/org/futo/circles/feature/sign_up/sign_up_type/SelectSignUpTypeFragment.kt b/app/src/main/java/org/futo/circles/feature/sign_up/sign_up_type/SelectSignUpTypeFragment.kt index 1b5fa5c9e..ddadd218d 100644 --- a/app/src/main/java/org/futo/circles/feature/sign_up/sign_up_type/SelectSignUpTypeFragment.kt +++ b/app/src/main/java/org/futo/circles/feature/sign_up/sign_up_type/SelectSignUpTypeFragment.kt @@ -6,6 +6,8 @@ import androidx.core.widget.doAfterTextChanged import androidx.fragment.app.Fragment import by.kirich1409.viewbindingdelegate.viewBinding import org.futo.circles.R +import org.futo.circles.core.EU_SERVER_DOMAIN +import org.futo.circles.core.US_SERVER_DOMAIN import org.futo.circles.core.fragment.HasLoadingState import org.futo.circles.databinding.SelectSignUpTypeFragmentBinding import org.futo.circles.extensions.getText @@ -34,8 +36,20 @@ class SelectSignUpTypeFragment : Fragment(R.layout.select_sign_up_type_fragment) tilPassword.editText?.doAfterTextChanged { setTokenButtonEnabled() } btnToken.setOnClickListener { startLoading(btnToken) - viewModel.startSignUp(tilUserName.getText(), tilPassword.getText()) + viewModel.startSignUp( + tilUserName.getText(), + tilPassword.getText(), + tvServerDomain.text.toString() + ) } + serverLocationGroup.setOnCheckedChangeListener { _, checkedId -> + tvServerDomain.text = when (checkedId) { + btnUS.id -> US_SERVER_DOMAIN + btnEU.id -> EU_SERVER_DOMAIN + else -> US_SERVER_DOMAIN + } + } + serverLocationGroup.check(btnUS.id) } } diff --git a/app/src/main/java/org/futo/circles/feature/sign_up/sign_up_type/SelectSignUpTypeViewModel.kt b/app/src/main/java/org/futo/circles/feature/sign_up/sign_up_type/SelectSignUpTypeViewModel.kt index 1c197b9f7..e9874360b 100644 --- a/app/src/main/java/org/futo/circles/feature/sign_up/sign_up_type/SelectSignUpTypeViewModel.kt +++ b/app/src/main/java/org/futo/circles/feature/sign_up/sign_up_type/SelectSignUpTypeViewModel.kt @@ -11,10 +11,10 @@ class SelectSignUpTypeViewModel( val startSignUpEventLiveData = SingleEventLiveData<Response<Unit?>>() - fun startSignUp(name: String, password: String) { + fun startSignUp(name: String, password: String, serverDomain: String) { launchBg { startSignUpEventLiveData.postValue( - dataSource.startNewRegistration(name, password) + dataSource.startNewRegistration(name, password, serverDomain) ) } } diff --git a/app/src/main/res/layout/select_sign_up_type_fragment.xml b/app/src/main/res/layout/select_sign_up_type_fragment.xml index 4968ecb59..36df53e2a 100644 --- a/app/src/main/res/layout/select_sign_up_type_fragment.xml +++ b/app/src/main/res/layout/select_sign_up_type_fragment.xml @@ -1,10 +1,11 @@ <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:paddingHorizontal="36dp" - android:paddingVertical="16dp"> + android:paddingHorizontal="24dp" + android:paddingVertical="8dp"> <androidx.constraintlayout.widget.Guideline android:id="@+id/guidelineLogo" @@ -22,17 +23,59 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> + + <TextView + android:id="@+id/tvServerLocationTitle" + style="@style/headline" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginEnd="8dp" + android:text="@string/server_location" + app:layout_constraintBottom_toBottomOf="@id/serverLocationGroup" + app:layout_constraintEnd_toStartOf="@+id/serverLocationGroup" + app:layout_constraintHorizontal_chainStyle="packed" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="@id/serverLocationGroup" /> + + <RadioGroup + android:id="@+id/serverLocationGroup" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="horizontal" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toEndOf="@id/tvServerLocationTitle" + app:layout_constraintTop_toBottomOf="@id/guidelineLogo"> + + <com.google.android.material.radiobutton.MaterialRadioButton + android:id="@+id/btnUS" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:paddingHorizontal="8dp" + android:text="@string/us" + android:textAppearance="@style/headline" /> + + <com.google.android.material.radiobutton.MaterialRadioButton + android:id="@+id/btnEU" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:paddingHorizontal="8dp" + android:text="@string/eu" + android:textAppearance="@style/headline" /> + + </RadioGroup> + <com.google.android.material.textfield.TextInputLayout android:id="@+id/tilUserName" style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginTop="16dp" + android:layout_marginEnd="4dp" android:hint="@string/username" app:layout_constraintBottom_toTopOf="@id/tilPassword" - app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintEnd_toStartOf="@id/tvServerDomain" + app:layout_constraintHorizontal_weight="0.6" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@id/guidelineLogo"> + app:layout_constraintTop_toBottomOf="@id/serverLocationGroup"> <com.google.android.material.textfield.TextInputEditText android:layout_width="match_parent" @@ -44,6 +87,20 @@ </com.google.android.material.textfield.TextInputLayout> + <TextView + android:id="@+id/tvServerDomain" + style="@style/footNote" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:ellipsize="end" + android:lines="1" + app:layout_constraintBottom_toBottomOf="@id/tilUserName" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_weight="0.4" + app:layout_constraintStart_toEndOf="@id/tilUserName" + app:layout_constraintTop_toTopOf="@id/tilUserName" + tools:text="eu.kombucha.social" /> + <com.google.android.material.textfield.TextInputLayout android:id="@+id/tilPassword" style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox" @@ -68,7 +125,7 @@ <TextView android:id="@+id/tvTokenTitle" - style="@style/title2" + style="@style/headline" android:layout_width="0dp" android:layout_height="wrap_content" android:gravity="center" @@ -77,7 +134,7 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tilPassword" - app:layout_constraintVertical_bias="0.3" + app:layout_constraintVertical_bias="0.2" app:layout_constraintVertical_chainStyle="packed" /> <org.futo.circles.view.LoadingButton @@ -97,8 +154,8 @@ style="@style/headline" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginTop="24dp" - android:layout_marginBottom="24dp" + android:layout_marginTop="8dp" + android:layout_marginBottom="8dp" android:gravity="center" android:text="@string/or" app:layout_constraintBottom_toTopOf="@id/tvSubscriptionTitle" @@ -109,7 +166,7 @@ <TextView android:id="@+id/tvSubscriptionTitle" - style="@style/title2" + style="@style/headline" android:layout_width="0dp" android:layout_height="wrap_content" android:gravity="center" -- GitLab