Merge pull request #578 from vector-im/feature/fix_focus_login

Fix infinite focus on HS field
This commit is contained in:
Benoit Marty 2019-09-23 10:05:43 +02:00 committed by GitHub
commit 8a9e6497e8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 24 additions and 4 deletions

View File

@ -18,6 +18,7 @@ package im.vector.riotx.features.login
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import android.view.inputmethod.EditorInfo
import android.widget.Toast import android.widget.Toast
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.transition.TransitionManager import androidx.transition.TransitionManager
@ -68,12 +69,19 @@ class LoginFragment : VectorBaseFragment() {
homeServerField.focusChanges() homeServerField.focusChanges()
.subscribe { .subscribe {
if (!it) { if (!it) {
// TODO Also when clicking on button?
viewModel.handle(LoginActions.UpdateHomeServer(homeServerField.text.toString())) viewModel.handle(LoginActions.UpdateHomeServer(homeServerField.text.toString()))
} }
} }
.disposeOnDestroy() .disposeOnDestroy()
homeServerField.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
viewModel.handle(LoginActions.UpdateHomeServer(homeServerField.text.toString()))
return@setOnEditorActionListener true
}
return@setOnEditorActionListener false
}
val initHsUrl = viewModel.getInitialHomeServerUrl() val initHsUrl = viewModel.getInitialHomeServerUrl()
if (initHsUrl != null) { if (initHsUrl != null) {
homeServerField.setText(initHsUrl) homeServerField.setText(initHsUrl)
@ -170,6 +178,10 @@ class LoginFragment : VectorBaseFragment() {
passwordContainer.isVisible = true passwordContainer.isVisible = true
authenticateButton.isVisible = true authenticateButton.isVisible = true
authenticateButtonSso.isVisible = false authenticateButtonSso.isVisible = false
if (loginField.text.isNullOrBlank() && passwordField.text.isNullOrBlank()) {
//Jump focus to login
loginField.requestFocus()
}
} }
LoginMode.Sso -> { LoginMode.Sso -> {
loginField.isVisible = false loginField.isVisible = false

View File

@ -137,16 +137,23 @@ class LoginViewModel @AssistedInject constructor(@Assisted initialState: LoginVi
} }
private fun handleUpdateHomeserver(action: LoginActions.UpdateHomeServer) { private fun handleUpdateHomeserver(action: LoginActions.UpdateHomeServer) = withState { state ->
currentTask?.cancel()
var newConfig : HomeServerConnectionConfig? = null
Try { Try {
val homeServerUri = action.homeServerUrl val homeServerUri = action.homeServerUrl
homeServerConnectionConfig = HomeServerConnectionConfig.Builder() newConfig = HomeServerConnectionConfig.Builder()
.withHomeServerUri(homeServerUri) .withHomeServerUri(homeServerUri)
.build() .build()
} }
//Do not retry if we already have flows for this config -> causes infinite focus loop
if (newConfig?.homeServerUri?.toString() == homeServerConnectionConfig?.homeServerUri?.toString()
&& state.asyncHomeServerLoginFlowRequest is Success) return@withState
currentTask?.cancel()
homeServerConnectionConfig = newConfig
val homeServerConnectionConfigFinal = homeServerConnectionConfig val homeServerConnectionConfigFinal = homeServerConnectionConfig
if (homeServerConnectionConfigFinal == null) { if (homeServerConnectionConfigFinal == null) {

View File

@ -104,6 +104,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:inputType="textUri" android:inputType="textUri"
android:imeOptions="actionDone"
android:maxLines="1" /> android:maxLines="1" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>