Disable input elements in LoginFragment and AddServerFragment when loading

Fix a bug when adding a server keeps loading
Fix "Invalid username or password" error message
This commit is contained in:
Jarne Demeulemeester 2022-08-21 16:59:33 +02:00
parent 7b85df6e69
commit 8f117ccacb
No known key found for this signature in database
GPG key ID: B61B7B150DB6A6D2
4 changed files with 53 additions and 12 deletions

View file

@ -97,15 +97,26 @@ class AddServerFragment : Fragment() {
private fun bindUiStateNormal() {
binding.buttonConnect.isEnabled = true
binding.progressCircular.isVisible = false
if (uiModeManager.currentModeType == Configuration.UI_MODE_TYPE_TELEVISION) {
(binding.editTextServerAddress as AppCompatEditText).isEnabled = true
} else {
binding.editTextServerAddressLayout!!.isEnabled = true
}
}
private fun bindUiStateError(uiState: AddServerViewModel.UiState.Error) {
binding.buttonConnect.isEnabled = true
binding.progressCircular.isVisible = false
if (uiModeManager.currentModeType == Configuration.UI_MODE_TYPE_TELEVISION) {
(binding.editTextServerAddress as AppCompatEditText).error = uiState.message
(binding.editTextServerAddress as AppCompatEditText).apply {
error = uiState.message
isEnabled = true
}
} else {
binding.editTextServerAddressLayout!!.error = uiState.message
binding.editTextServerAddressLayout!!.apply {
error = uiState.message
isEnabled = true
}
}
}
@ -113,9 +124,15 @@ class AddServerFragment : Fragment() {
binding.buttonConnect.isEnabled = false
binding.progressCircular.isVisible = true
if (uiModeManager.currentModeType == Configuration.UI_MODE_TYPE_TELEVISION) {
(binding.editTextServerAddress as AppCompatEditText).error = null
(binding.editTextServerAddress as AppCompatEditText).apply {
error = null
isEnabled = false
}
} else {
binding.editTextServerAddressLayout!!.error = null
binding.editTextServerAddressLayout!!.apply {
error = null
isEnabled = false
}
}
}

View file

@ -97,15 +97,30 @@ class LoginFragment : Fragment() {
private fun bindUiStateNormal() {
binding.buttonLogin.isEnabled = true
binding.progressCircular.isVisible = false
if (uiModeManager.currentModeType == Configuration.UI_MODE_TYPE_TELEVISION) {
(binding.editTextUsername as AppCompatEditText).isEnabled = true
(binding.editTextPassword as AppCompatEditText).isEnabled = true
} else {
binding.editTextUsernameLayout!!.isEnabled = true
binding.editTextPasswordLayout!!.isEnabled = true
}
}
private fun bindUiStateError(uiState: LoginViewModel.UiState.Error) {
binding.buttonLogin.isEnabled = true
binding.progressCircular.isVisible = false
if (uiModeManager.currentModeType == Configuration.UI_MODE_TYPE_TELEVISION) {
(binding.editTextUsername as AppCompatEditText).error = uiState.message
(binding.editTextUsername as AppCompatEditText).apply {
error = uiState.message
isEnabled = true
}
(binding.editTextPassword as AppCompatEditText).isEnabled = true
} else {
binding.editTextUsernameLayout!!.error = uiState.message
binding.editTextUsernameLayout!!.apply {
error = uiState.message
isEnabled = true
}
binding.editTextPasswordLayout!!.isEnabled = true
}
}
@ -113,9 +128,17 @@ class LoginFragment : Fragment() {
binding.buttonLogin.isEnabled = false
binding.progressCircular.isVisible = true
if (uiModeManager.currentModeType == Configuration.UI_MODE_TYPE_TELEVISION) {
(binding.editTextUsername as AppCompatEditText).error = null
(binding.editTextUsername as AppCompatEditText).apply {
error = null
isEnabled = false
}
(binding.editTextPassword as AppCompatEditText).isEnabled = false
} else {
binding.editTextUsernameLayout!!.error = null
binding.editTextUsernameLayout!!.apply {
error = null
isEnabled = false
}
binding.editTextPasswordLayout!!.isEnabled = false
}
}

View file

@ -95,7 +95,10 @@ constructor(
recommended
.onCompletion {
if (serverFound) return@onCompletion
if (serverFound) {
serverFound = false
return@onCompletion
}
when {
goodServers.isNotEmpty() -> {
val issuesString = createIssuesString(goodServers.first())

View file

@ -18,7 +18,6 @@ import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.jellyfin.sdk.model.api.AuthenticateUserByName
import timber.log.Timber
import javax.inject.Inject
import kotlin.Exception
@ -111,9 +110,8 @@ constructor(
_uiState.emit(UiState.Normal)
_navigateToMain.emit(true)
} catch (e: Exception) {
Timber.e(e)
val message =
if (e.cause?.message?.contains("401") == true) resources.getString(R.string.login_error_wrong_username_password) else resources.getString(
if (e.message?.contains("401") == true) resources.getString(R.string.login_error_wrong_username_password) else resources.getString(
R.string.unknown_error
)
_uiState.emit(UiState.Error(message))