mirror of
https://github.com/element-hq/element-android
synced 2024-10-27 13:17:23 +03:00
Merge pull request #578 from vector-im/feature/fix_focus_login
Fix infinite focus on HS field
This commit is contained in:
commit
8a9e6497e8
3 changed files with 24 additions and 4 deletions
|
@ -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
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Loading…
Reference in a new issue