Skip to content

Commit 2f3dc24

Browse files
committed
adds 8 character predicate for registering passwords
- removes confusing extension in favour of splitting the error resets and submit enabled states
1 parent 400d805 commit 2f3dc24

File tree

4 files changed

+22
-29
lines changed

4 files changed

+22
-29
lines changed

vector/src/main/java/im/vector/app/core/extensions/TextInputLayout.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ fun TextInputLayout.hasContent() = !editText().text.isNullOrEmpty()
4646
fun TextInputLayout.clearErrorOnChange(lifecycleOwner: LifecycleOwner) {
4747
onTextChange(lifecycleOwner) {
4848
error = null
49+
isErrorEnabled = false
4950
}
5051
}
5152

vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCombinedLoginFragment.kt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import androidx.autofill.HintConstants
2525
import androidx.core.view.isVisible
2626
import androidx.lifecycle.lifecycleScope
2727
import im.vector.app.R
28+
import im.vector.app.core.extensions.clearErrorOnChange
2829
import im.vector.app.core.extensions.content
2930
import im.vector.app.core.extensions.editText
3031
import im.vector.app.core.extensions.hideKeyboard
@@ -41,8 +42,10 @@ import im.vector.app.features.login.render
4142
import im.vector.app.features.onboarding.OnboardingAction
4243
import im.vector.app.features.onboarding.OnboardingViewEvents
4344
import im.vector.app.features.onboarding.OnboardingViewState
45+
import kotlinx.coroutines.flow.combine
4446
import kotlinx.coroutines.flow.launchIn
4547
import org.matrix.android.sdk.api.auth.data.SsoIdentityProvider
48+
import reactivecircus.flowbinding.android.widget.textChanges
4649
import javax.inject.Inject
4750

4851
class FtueAuthCombinedLoginFragment @Inject constructor(
@@ -66,8 +69,12 @@ class FtueAuthCombinedLoginFragment @Inject constructor(
6669

6770
private fun setupSubmitButton() {
6871
views.loginSubmit.setOnClickListener { submit() }
69-
observeContentChangesAndResetErrors(views.loginInput, views.loginPasswordInput, views.loginSubmit)
70-
.launchIn(viewLifecycleOwner.lifecycleScope)
72+
views.loginInput.clearErrorOnChange(viewLifecycleOwner)
73+
views.loginPasswordInput.clearErrorOnChange(viewLifecycleOwner)
74+
75+
combine(views.loginInput.editText().textChanges(), views.loginPasswordInput.editText().textChanges()) { account, password ->
76+
views.loginSubmit.isEnabled = account.isNotEmpty() && password.isNotEmpty()
77+
}.launchIn(viewLifecycleOwner.lifecycleScope)
7178
}
7279

7380
private fun submit() {

vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCombinedRegisterFragment.kt

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import androidx.lifecycle.lifecycleScope
2828
import com.airbnb.mvrx.withState
2929
import com.google.android.material.dialog.MaterialAlertDialogBuilder
3030
import im.vector.app.R
31+
import im.vector.app.core.extensions.clearErrorOnChange
3132
import im.vector.app.core.extensions.content
3233
import im.vector.app.core.extensions.editText
3334
import im.vector.app.core.extensions.hasSurroundingSpaces
@@ -48,8 +49,8 @@ import im.vector.app.features.onboarding.OnboardingAction
4849
import im.vector.app.features.onboarding.OnboardingAction.AuthenticateAction
4950
import im.vector.app.features.onboarding.OnboardingViewEvents
5051
import im.vector.app.features.onboarding.OnboardingViewState
52+
import kotlinx.coroutines.flow.combine
5153
import kotlinx.coroutines.flow.launchIn
52-
import kotlinx.coroutines.flow.onEach
5354
import org.matrix.android.sdk.api.auth.data.SsoIdentityProvider
5455
import org.matrix.android.sdk.api.failure.isHomeserverUnavailable
5556
import org.matrix.android.sdk.api.failure.isInvalidPassword
@@ -61,6 +62,8 @@ import org.matrix.android.sdk.api.failure.isWeakPassword
6162
import reactivecircus.flowbinding.android.widget.textChanges
6263
import javax.inject.Inject
6364

65+
private const val MINIMUM_PASSWORD_LENGTH = 8
66+
6467
class FtueAuthCombinedRegisterFragment @Inject constructor() : AbstractSSOFtueAuthFragment<FragmentFtueCombinedRegisterBinding>() {
6568

6669
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentFtueCombinedRegisterBinding {
@@ -86,8 +89,14 @@ class FtueAuthCombinedRegisterFragment @Inject constructor() : AbstractSSOFtueAu
8689

8790
private fun setupSubmitButton() {
8891
views.createAccountSubmit.setOnClickListener { submit() }
89-
observeContentChangesAndResetErrors(views.createAccountInput, views.createAccountPasswordInput, views.createAccountSubmit)
90-
.launchIn(viewLifecycleOwner.lifecycleScope)
92+
views.createAccountInput.clearErrorOnChange(viewLifecycleOwner)
93+
views.createAccountPasswordInput.clearErrorOnChange(viewLifecycleOwner)
94+
95+
combine(views.createAccountInput.editText().textChanges(), views.createAccountPasswordInput.editText().textChanges()) { account, password ->
96+
val accountIsValid = account.isNotEmpty()
97+
val passwordIsValid = password.length >= MINIMUM_PASSWORD_LENGTH
98+
views.createAccountSubmit.isEnabled = accountIsValid && passwordIsValid
99+
}.launchIn(viewLifecycleOwner.lifecycleScope)
91100
}
92101

93102
private fun submit() {

vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueExtensions.kt

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,10 @@
1616

1717
package im.vector.app.features.onboarding.ftueauth
1818

19-
import android.widget.Button
20-
import com.google.android.material.textfield.TextInputLayout
2119
import im.vector.app.R
22-
import im.vector.app.core.extensions.hasContentFlow
2320
import im.vector.app.features.login.SignMode
2421
import im.vector.app.features.onboarding.OnboardingAction
2522
import im.vector.app.features.themes.ThemeProvider
26-
import kotlinx.coroutines.flow.Flow
27-
import kotlinx.coroutines.flow.combine
28-
import kotlinx.coroutines.flow.onEach
2923

3024
fun SignMode.toAuthenticateAction(login: String, password: String, initialDeviceName: String): OnboardingAction.AuthenticateAction {
3125
return when (this) {
@@ -36,24 +30,6 @@ fun SignMode.toAuthenticateAction(login: String, password: String, initialDevice
3630
}
3731
}
3832

39-
/**
40-
* A flow to monitor content changes from both username/id and password fields,
41-
* clearing errors and enabling/disabling the submission button on non empty content changes.
42-
*/
43-
fun observeContentChangesAndResetErrors(username: TextInputLayout, password: TextInputLayout, submit: Button): Flow<*> {
44-
return combine(
45-
username.hasContentFlow { it.trim() },
46-
password.hasContentFlow(),
47-
transform = { usernameHasContent, passwordHasContent -> usernameHasContent && passwordHasContent }
48-
).onEach {
49-
username.error = null
50-
username.isErrorEnabled = false
51-
password.error = null
52-
username.isErrorEnabled = false
53-
submit.isEnabled = it
54-
}
55-
}
56-
5733
fun ThemeProvider.ftueBreakerBackground() = when (isLightTheme()) {
5834
true -> R.drawable.bg_gradient_ftue_breaker
5935
false -> R.drawable.bg_color_background

0 commit comments

Comments
 (0)