Merge pull request #6981 from vector-im/feature/adm/allow-optional-emails
Allowing optional email registration
This commit is contained in:
commit
bddb37ef7a
|
@ -0,0 +1 @@
|
||||||
|
FTUE - Fixes optional email registration step always being mandatory
|
|
@ -17,9 +17,11 @@
|
||||||
package im.vector.app.features.onboarding.ftueauth
|
package im.vector.app.features.onboarding.ftueauth
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.os.Parcelable
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import com.airbnb.mvrx.args
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import im.vector.app.R
|
import im.vector.app.R
|
||||||
import im.vector.app.core.extensions.associateContentStateWith
|
import im.vector.app.core.extensions.associateContentStateWith
|
||||||
|
@ -35,11 +37,18 @@ import im.vector.app.databinding.FragmentFtueEmailInputBinding
|
||||||
import im.vector.app.features.onboarding.OnboardingAction
|
import im.vector.app.features.onboarding.OnboardingAction
|
||||||
import im.vector.app.features.onboarding.OnboardingViewState
|
import im.vector.app.features.onboarding.OnboardingViewState
|
||||||
import im.vector.app.features.onboarding.RegisterAction
|
import im.vector.app.features.onboarding.RegisterAction
|
||||||
|
import kotlinx.parcelize.Parcelize
|
||||||
import org.matrix.android.sdk.api.auth.registration.RegisterThreePid
|
import org.matrix.android.sdk.api.auth.registration.RegisterThreePid
|
||||||
|
|
||||||
|
@Parcelize
|
||||||
|
data class FtueAuthEmailEntryFragmentArgument(
|
||||||
|
val mandatory: Boolean,
|
||||||
|
) : Parcelable
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class FtueAuthEmailEntryFragment :
|
class FtueAuthEmailEntryFragment : AbstractFtueAuthFragment<FragmentFtueEmailInputBinding>() {
|
||||||
AbstractFtueAuthFragment<FragmentFtueEmailInputBinding>() {
|
|
||||||
|
private val params: FtueAuthEmailEntryFragmentArgument by args()
|
||||||
|
|
||||||
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentFtueEmailInputBinding {
|
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentFtueEmailInputBinding {
|
||||||
return FragmentFtueEmailInputBinding.inflate(inflater, container, false)
|
return FragmentFtueEmailInputBinding.inflate(inflater, container, false)
|
||||||
|
@ -51,7 +60,11 @@ class FtueAuthEmailEntryFragment :
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupViews() {
|
private fun setupViews() {
|
||||||
views.emailEntryInput.associateContentStateWith(button = views.emailEntrySubmit, enabledPredicate = { it.isEmail() })
|
views.emailEntryInput.hint = getString(if (params.mandatory) R.string.ftue_auth_email_entry_title else R.string.login_set_email_optional_hint)
|
||||||
|
views.emailEntryInput.associateContentStateWith(
|
||||||
|
button = views.emailEntrySubmit,
|
||||||
|
enabledPredicate = { it.isEmail() || it.isEmptyAndOptional() },
|
||||||
|
)
|
||||||
views.emailEntryInput.setOnImeDoneListener { updateEmail() }
|
views.emailEntryInput.setOnImeDoneListener { updateEmail() }
|
||||||
views.emailEntryInput.clearErrorOnChange(viewLifecycleOwner)
|
views.emailEntryInput.clearErrorOnChange(viewLifecycleOwner)
|
||||||
views.emailEntrySubmit.debouncedClicks { updateEmail() }
|
views.emailEntrySubmit.debouncedClicks { updateEmail() }
|
||||||
|
@ -60,9 +73,14 @@ class FtueAuthEmailEntryFragment :
|
||||||
|
|
||||||
private fun updateEmail() {
|
private fun updateEmail() {
|
||||||
val email = views.emailEntryInput.content()
|
val email = views.emailEntryInput.content()
|
||||||
viewModel.handle(OnboardingAction.PostRegisterAction(RegisterAction.AddThreePid(RegisterThreePid.Email(email))))
|
when {
|
||||||
|
email.isEmptyAndOptional() -> viewModel.handle(OnboardingAction.PostRegisterAction(RegisterAction.RegisterDummy))
|
||||||
|
else -> viewModel.handle(OnboardingAction.PostRegisterAction(RegisterAction.AddThreePid(RegisterThreePid.Email(email))))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun String.isEmptyAndOptional() = isEmpty() && !params.mandatory
|
||||||
|
|
||||||
override fun updateWithState(state: OnboardingViewState) {
|
override fun updateWithState(state: OnboardingViewState) {
|
||||||
views.emailEntryHeaderSubtitle.text = getString(R.string.ftue_auth_email_subtitle, state.selectedHomeserver.userFacingUrl.toReducedUrl())
|
views.emailEntryHeaderSubtitle.text = getString(R.string.ftue_auth_email_subtitle, state.selectedHomeserver.userFacingUrl.toReducedUrl())
|
||||||
|
|
||||||
|
|
|
@ -411,7 +411,8 @@ class FtueAuthVariant(
|
||||||
private fun onEmail(stage: Stage) {
|
private fun onEmail(stage: Stage) {
|
||||||
when {
|
when {
|
||||||
vectorFeatures.isOnboardingCombinedRegisterEnabled() -> addRegistrationStageFragmentToBackstack(
|
vectorFeatures.isOnboardingCombinedRegisterEnabled() -> addRegistrationStageFragmentToBackstack(
|
||||||
FtueAuthEmailEntryFragment::class.java
|
FtueAuthEmailEntryFragment::class.java,
|
||||||
|
FtueAuthEmailEntryFragmentArgument(mandatory = stage.mandatory)
|
||||||
)
|
)
|
||||||
else -> addRegistrationStageFragmentToBackstack(
|
else -> addRegistrationStageFragmentToBackstack(
|
||||||
FtueAuthGenericTextInputFormFragment::class.java,
|
FtueAuthGenericTextInputFormFragment::class.java,
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
style="@style/LoginFormScrollView"
|
style="@style/LoginFormScrollView"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:background="?android:colorBackground"
|
android:background="?android:colorBackground"
|
||||||
|
@ -88,11 +89,11 @@
|
||||||
android:id="@+id/emailEntryInput"
|
android:id="@+id/emailEntryInput"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:hint="@string/ftue_auth_email_entry_title"
|
|
||||||
app:endIconMode="clear_text"
|
app:endIconMode="clear_text"
|
||||||
app:layout_constraintEnd_toEndOf="@id/emailEntryGutterEnd"
|
app:layout_constraintEnd_toEndOf="@id/emailEntryGutterEnd"
|
||||||
app:layout_constraintStart_toStartOf="@id/emailEntryGutterStart"
|
app:layout_constraintStart_toStartOf="@id/emailEntryGutterStart"
|
||||||
app:layout_constraintTop_toBottomOf="@id/titleContentSpacing">
|
app:layout_constraintTop_toBottomOf="@id/titleContentSpacing"
|
||||||
|
tools:hint="@string/ftue_auth_email_entry_title">
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputEditText
|
<com.google.android.material.textfield.TextInputEditText
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|
Loading…
Reference in New Issue