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() { private fun bindUiStateNormal() {
binding.buttonConnect.isEnabled = true binding.buttonConnect.isEnabled = true
binding.progressCircular.isVisible = false 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) { private fun bindUiStateError(uiState: AddServerViewModel.UiState.Error) {
binding.buttonConnect.isEnabled = true binding.buttonConnect.isEnabled = true
binding.progressCircular.isVisible = false binding.progressCircular.isVisible = false
if (uiModeManager.currentModeType == Configuration.UI_MODE_TYPE_TELEVISION) { 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 { } 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.buttonConnect.isEnabled = false
binding.progressCircular.isVisible = true binding.progressCircular.isVisible = true
if (uiModeManager.currentModeType == Configuration.UI_MODE_TYPE_TELEVISION) { if (uiModeManager.currentModeType == Configuration.UI_MODE_TYPE_TELEVISION) {
(binding.editTextServerAddress as AppCompatEditText).error = null (binding.editTextServerAddress as AppCompatEditText).apply {
error = null
isEnabled = false
}
} else { } else {
binding.editTextServerAddressLayout!!.error = null binding.editTextServerAddressLayout!!.apply {
error = null
isEnabled = false
}
} }
} }

View file

@ -97,15 +97,30 @@ class LoginFragment : Fragment() {
private fun bindUiStateNormal() { private fun bindUiStateNormal() {
binding.buttonLogin.isEnabled = true binding.buttonLogin.isEnabled = true
binding.progressCircular.isVisible = false 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) { private fun bindUiStateError(uiState: LoginViewModel.UiState.Error) {
binding.buttonLogin.isEnabled = true binding.buttonLogin.isEnabled = true
binding.progressCircular.isVisible = false binding.progressCircular.isVisible = false
if (uiModeManager.currentModeType == Configuration.UI_MODE_TYPE_TELEVISION) { 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 { } 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.buttonLogin.isEnabled = false
binding.progressCircular.isVisible = true binding.progressCircular.isVisible = true
if (uiModeManager.currentModeType == Configuration.UI_MODE_TYPE_TELEVISION) { 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 { } else {
binding.editTextUsernameLayout!!.error = null binding.editTextUsernameLayout!!.apply {
error = null
isEnabled = false
}
binding.editTextPasswordLayout!!.isEnabled = false
} }
} }

View file

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

View file

@ -18,7 +18,6 @@ import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.jellyfin.sdk.model.api.AuthenticateUserByName import org.jellyfin.sdk.model.api.AuthenticateUserByName
import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
import kotlin.Exception import kotlin.Exception
@ -111,9 +110,8 @@ constructor(
_uiState.emit(UiState.Normal) _uiState.emit(UiState.Normal)
_navigateToMain.emit(true) _navigateToMain.emit(true)
} catch (e: Exception) { } catch (e: Exception) {
Timber.e(e)
val message = 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 R.string.unknown_error
) )
_uiState.emit(UiState.Error(message)) _uiState.emit(UiState.Error(message))