forked from github/wulkanowy-mirror
Display bad credentials error in the message box above login form (#1525)
This commit is contained in:
parent
6615e68430
commit
a43ffcdef4
@ -166,7 +166,7 @@ ext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation "io.github.wulkanowy:sdk:1.2.3"
|
implementation "io.github.wulkanowy:sdk:8f3721f1f9"
|
||||||
|
|
||||||
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
|
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
|
||||||
|
|
||||||
|
@ -103,9 +103,8 @@ class LoginActivity : BaseActivity<LoginPresenter, ActivityLoginBinding>(), Logi
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun notifyInitSymbolFragment(loginData: Triple<String, String, String>) {
|
override fun notifyInitSymbolFragment(loginData: Triple<String, String, String>) {
|
||||||
(loginAdapter.getFragmentInstance(1) as? LoginSymbolFragment)?.onParentInitSymbolFragment(
|
(loginAdapter.getFragmentInstance(1) as? LoginSymbolFragment)
|
||||||
loginData
|
?.onParentInitSymbolFragment(loginData)
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun notifyInitStudentSelectFragment(studentsWithSemesters: List<StudentWithSemesters>) {
|
override fun notifyInitStudentSelectFragment(studentsWithSemesters: List<StudentWithSemesters>) {
|
||||||
|
@ -13,7 +13,7 @@ import javax.inject.Inject
|
|||||||
|
|
||||||
class LoginErrorHandler @Inject constructor(resources: Resources) : ErrorHandler(resources) {
|
class LoginErrorHandler @Inject constructor(resources: Resources) : ErrorHandler(resources) {
|
||||||
|
|
||||||
var onBadCredentials: () -> Unit = {}
|
var onBadCredentials: (String?) -> Unit = {}
|
||||||
|
|
||||||
var onInvalidToken: (String) -> Unit = {}
|
var onInvalidToken: (String) -> Unit = {}
|
||||||
|
|
||||||
@ -25,7 +25,7 @@ class LoginErrorHandler @Inject constructor(resources: Resources) : ErrorHandler
|
|||||||
|
|
||||||
override fun proceed(error: Throwable) {
|
override fun proceed(error: Throwable) {
|
||||||
when (error) {
|
when (error) {
|
||||||
is BadCredentialsException -> onBadCredentials()
|
is BadCredentialsException -> onBadCredentials(error.message)
|
||||||
is SQLiteConstraintException -> onStudentDuplicate(resources.getString(R.string.login_duplicate_student))
|
is SQLiteConstraintException -> onStudentDuplicate(resources.getString(R.string.login_duplicate_student))
|
||||||
is TokenDeadException -> onInvalidToken(resources.getString(R.string.login_expired_token))
|
is TokenDeadException -> onInvalidToken(resources.getString(R.string.login_expired_token))
|
||||||
is InvalidTokenException -> onInvalidToken(resources.getString(R.string.login_invalid_token))
|
is InvalidTokenException -> onInvalidToken(resources.getString(R.string.login_invalid_token))
|
||||||
|
@ -51,10 +51,12 @@ class LoginAdvancedFragment :
|
|||||||
private lateinit var hostSymbols: Array<String>
|
private lateinit var hostSymbols: Array<String>
|
||||||
|
|
||||||
override val formHostValue: String
|
override val formHostValue: String
|
||||||
get() = hostValues.getOrNull(hostKeys.indexOf(binding.loginFormHost.text.toString())).orEmpty()
|
get() = hostValues.getOrNull(hostKeys.indexOf(binding.loginFormHost.text.toString()))
|
||||||
|
.orEmpty()
|
||||||
|
|
||||||
override val formHostSymbol: String
|
override val formHostSymbol: String
|
||||||
get() = hostSymbols.getOrNull(hostKeys.indexOf(binding.loginFormHost.text.toString())).orEmpty()
|
get() = hostSymbols.getOrNull(hostKeys.indexOf(binding.loginFormHost.text.toString()))
|
||||||
|
.orEmpty()
|
||||||
|
|
||||||
override val formPinValue: String
|
override val formPinValue: String
|
||||||
get() = binding.loginFormPin.text.toString().trim()
|
get() = binding.loginFormPin.text.toString().trim()
|
||||||
@ -92,39 +94,62 @@ class LoginAdvancedFragment :
|
|||||||
loginFormSignIn.setOnClickListener { presenter.onSignInClick() }
|
loginFormSignIn.setOnClickListener { presenter.onSignInClick() }
|
||||||
|
|
||||||
loginTypeSwitch.setOnCheckedChangeListener { _, checkedId ->
|
loginTypeSwitch.setOnCheckedChangeListener { _, checkedId ->
|
||||||
presenter.onLoginModeSelected(when (checkedId) {
|
presenter.onLoginModeSelected(
|
||||||
R.id.loginTypeApi -> Sdk.Mode.API
|
when (checkedId) {
|
||||||
R.id.loginTypeScrapper -> Sdk.Mode.SCRAPPER
|
R.id.loginTypeApi -> Sdk.Mode.API
|
||||||
else -> Sdk.Mode.HYBRID
|
R.id.loginTypeScrapper -> Sdk.Mode.SCRAPPER
|
||||||
})
|
else -> Sdk.Mode.HYBRID
|
||||||
|
}
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
loginFormPin.setOnEditorDoneSignIn { loginFormSignIn.callOnClick() }
|
loginFormPin.setOnEditorDoneSignIn { loginFormSignIn.callOnClick() }
|
||||||
loginFormPass.setOnEditorDoneSignIn { loginFormSignIn.callOnClick() }
|
loginFormPass.setOnEditorDoneSignIn { loginFormSignIn.callOnClick() }
|
||||||
|
|
||||||
loginFormSymbol.setAdapter(ArrayAdapter(requireContext(), android.R.layout.simple_list_item_1, resources.getStringArray(R.array.symbols_values)))
|
loginFormSymbol.setAdapter(
|
||||||
|
ArrayAdapter(
|
||||||
|
requireContext(),
|
||||||
|
android.R.layout.simple_list_item_1,
|
||||||
|
resources.getStringArray(R.array.symbols_values)
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
with(binding.loginFormHost) {
|
with(binding.loginFormHost) {
|
||||||
setText(hostKeys.getOrNull(0).orEmpty())
|
setText(hostKeys.getOrNull(0).orEmpty())
|
||||||
setAdapter(LoginSymbolAdapter(context, R.layout.support_simple_spinner_dropdown_item, hostKeys))
|
setAdapter(
|
||||||
|
LoginSymbolAdapter(
|
||||||
|
context,
|
||||||
|
R.layout.support_simple_spinner_dropdown_item,
|
||||||
|
hostKeys
|
||||||
|
)
|
||||||
|
)
|
||||||
setOnClickListener { if (binding.loginFormContainer.visibility == GONE) dismissDropDown() }
|
setOnClickListener { if (binding.loginFormContainer.visibility == GONE) dismissDropDown() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun showMobileApiWarningMessage() {
|
override fun showMobileApiWarningMessage() {
|
||||||
binding.loginFormAdvancedWarningInfo.text = getString(R.string.login_advanced_warning_mobile_api)
|
binding.loginFormAdvancedWarningInfo.text =
|
||||||
|
getString(R.string.login_advanced_warning_mobile_api)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun showScraperWarningMessage() {
|
override fun showScraperWarningMessage() {
|
||||||
binding.loginFormAdvancedWarningInfo.text = getString(R.string.login_advanced_warning_scraper)
|
binding.loginFormAdvancedWarningInfo.text =
|
||||||
|
getString(R.string.login_advanced_warning_scraper)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun showHybridWarningMessage() {
|
override fun showHybridWarningMessage() {
|
||||||
binding.loginFormAdvancedWarningInfo.text = getString(R.string.login_advanced_warning_hybrid)
|
binding.loginFormAdvancedWarningInfo.text =
|
||||||
|
getString(R.string.login_advanced_warning_hybrid)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setDefaultCredentials(username: String, pass: String, symbol: String, token: String, pin: String) {
|
override fun setDefaultCredentials(
|
||||||
|
username: String,
|
||||||
|
pass: String,
|
||||||
|
symbol: String,
|
||||||
|
token: String,
|
||||||
|
pin: String
|
||||||
|
) {
|
||||||
with(binding) {
|
with(binding) {
|
||||||
loginFormUsername.setText(username)
|
loginFormUsername.setText(username)
|
||||||
loginFormPass.setText(pass)
|
loginFormPass.setText(pass)
|
||||||
@ -177,10 +202,10 @@ class LoginAdvancedFragment :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setErrorPassIncorrect() {
|
override fun setErrorPassIncorrect(message: String?) {
|
||||||
with(binding.loginFormPassLayout) {
|
with(binding.loginFormPassLayout) {
|
||||||
requestFocus()
|
requestFocus()
|
||||||
error = getString(R.string.login_incorrect_password)
|
error = message ?: getString(R.string.login_incorrect_password)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -296,11 +321,13 @@ class LoginAdvancedFragment :
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun notifyParentAccountLogged(studentsWithSemesters: List<StudentWithSemesters>) {
|
override fun notifyParentAccountLogged(studentsWithSemesters: List<StudentWithSemesters>) {
|
||||||
(activity as? LoginActivity)?.onFormFragmentAccountLogged(studentsWithSemesters, Triple(
|
(activity as? LoginActivity)?.onFormFragmentAccountLogged(
|
||||||
binding.loginFormUsername.text.toString(),
|
studentsWithSemesters, Triple(
|
||||||
binding.loginFormPass.text.toString(),
|
binding.loginFormUsername.text.toString(),
|
||||||
resources.getStringArray(R.array.hosts_values)[1]
|
binding.loginFormPass.text.toString(),
|
||||||
))
|
resources.getStringArray(R.array.hosts_values)[1]
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
|
@ -34,9 +34,9 @@ class LoginAdvancedPresenter @Inject constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun onBadCredentials() {
|
private fun onBadCredentials(message: String?) {
|
||||||
view?.run {
|
view?.run {
|
||||||
setErrorPassIncorrect()
|
setErrorPassIncorrect(message)
|
||||||
showSoftKeyboard()
|
showSoftKeyboard()
|
||||||
Timber.i("Entered wrong username or password")
|
Timber.i("Entered wrong username or password")
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,7 @@ interface LoginAdvancedView : BaseView {
|
|||||||
|
|
||||||
fun setErrorPassInvalid(focus: Boolean)
|
fun setErrorPassInvalid(focus: Boolean)
|
||||||
|
|
||||||
fun setErrorPassIncorrect()
|
fun setErrorPassIncorrect(message: String?)
|
||||||
|
|
||||||
fun clearUsernameError()
|
fun clearUsernameError()
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@ import android.os.Bundle
|
|||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.View.GONE
|
import android.view.View.GONE
|
||||||
import android.view.View.VISIBLE
|
import android.view.View.VISIBLE
|
||||||
|
import androidx.core.view.isVisible
|
||||||
import androidx.core.widget.doOnTextChanged
|
import androidx.core.widget.doOnTextChanged
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import io.github.wulkanowy.R
|
import io.github.wulkanowy.R
|
||||||
@ -41,10 +42,12 @@ class LoginFormFragment : BaseFragment<FragmentLoginFormBinding>(R.layout.fragme
|
|||||||
get() = binding.loginFormPass.text.toString()
|
get() = binding.loginFormPass.text.toString()
|
||||||
|
|
||||||
override val formHostValue: String
|
override val formHostValue: String
|
||||||
get() = hostValues.getOrNull(hostKeys.indexOf(binding.loginFormHost.text.toString())).orEmpty()
|
get() = hostValues.getOrNull(hostKeys.indexOf(binding.loginFormHost.text.toString()))
|
||||||
|
.orEmpty()
|
||||||
|
|
||||||
override val formHostSymbol: String
|
override val formHostSymbol: String
|
||||||
get() = hostSymbols.getOrNull(hostKeys.indexOf(binding.loginFormHost.text.toString())).orEmpty()
|
get() = hostSymbols.getOrNull(hostKeys.indexOf(binding.loginFormHost.text.toString()))
|
||||||
|
.orEmpty()
|
||||||
|
|
||||||
override val nicknameLabel: String
|
override val nicknameLabel: String
|
||||||
get() = getString(R.string.login_nickname_hint)
|
get() = getString(R.string.login_nickname_hint)
|
||||||
@ -88,7 +91,13 @@ class LoginFormFragment : BaseFragment<FragmentLoginFormBinding>(R.layout.fragme
|
|||||||
|
|
||||||
with(binding.loginFormHost) {
|
with(binding.loginFormHost) {
|
||||||
setText(hostKeys.getOrNull(0).orEmpty())
|
setText(hostKeys.getOrNull(0).orEmpty())
|
||||||
setAdapter(LoginSymbolAdapter(context, R.layout.support_simple_spinner_dropdown_item, hostKeys))
|
setAdapter(
|
||||||
|
LoginSymbolAdapter(
|
||||||
|
context,
|
||||||
|
R.layout.support_simple_spinner_dropdown_item,
|
||||||
|
hostKeys
|
||||||
|
)
|
||||||
|
)
|
||||||
setOnClickListener { if (binding.loginFormContainer.visibility == GONE) dismissDropDown() }
|
setOnClickListener { if (binding.loginFormContainer.visibility == GONE) dismissDropDown() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -142,24 +151,31 @@ class LoginFormFragment : BaseFragment<FragmentLoginFormBinding>(R.layout.fragme
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setErrorPassIncorrect() {
|
override fun setErrorPassIncorrect(message: String?) {
|
||||||
with(binding.loginFormPassLayout) {
|
val error = message ?: getString(R.string.login_incorrect_password_default)
|
||||||
error = getString(R.string.login_incorrect_password)
|
|
||||||
|
with(binding) {
|
||||||
|
loginFormUsernameLayout.error = " "
|
||||||
|
loginFormPassLayout.error = " "
|
||||||
|
loginFormErrorBox.text = getString(R.string.login_incorrect_password, error)
|
||||||
|
loginFormErrorBox.isVisible = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setErrorEmailInvalid(domain: String) {
|
override fun setErrorEmailInvalid(domain: String) {
|
||||||
with(binding.loginFormUsernameLayout) {
|
with(binding.loginFormUsernameLayout) {
|
||||||
error = getString(R.string.login_invalid_custom_email,domain)
|
error = getString(R.string.login_invalid_custom_email, domain)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun clearUsernameError() {
|
override fun clearUsernameError() {
|
||||||
binding.loginFormUsernameLayout.error = null
|
binding.loginFormUsernameLayout.error = null
|
||||||
|
binding.loginFormErrorBox.isVisible = false
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun clearPassError() {
|
override fun clearPassError() {
|
||||||
binding.loginFormPassLayout.error = null
|
binding.loginFormPassLayout.error = null
|
||||||
|
binding.loginFormErrorBox.isVisible = false
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun showSoftKeyboard() {
|
override fun showSoftKeyboard() {
|
||||||
@ -183,12 +199,18 @@ class LoginFormFragment : BaseFragment<FragmentLoginFormBinding>(R.layout.fragme
|
|||||||
binding.loginFormVersion.text = "v${appInfo.versionName}"
|
binding.loginFormVersion.text = "v${appInfo.versionName}"
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun notifyParentAccountLogged(studentsWithSemesters: List<StudentWithSemesters>, loginData: Triple<String, String, String>) {
|
override fun notifyParentAccountLogged(
|
||||||
|
studentsWithSemesters: List<StudentWithSemesters>,
|
||||||
|
loginData: Triple<String, String, String>
|
||||||
|
) {
|
||||||
(activity as? LoginActivity)?.onFormFragmentAccountLogged(studentsWithSemesters, loginData)
|
(activity as? LoginActivity)?.onFormFragmentAccountLogged(studentsWithSemesters, loginData)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun openPrivacyPolicyPage() {
|
override fun openPrivacyPolicyPage() {
|
||||||
context?.openInternetBrowser("https://wulkanowy.github.io/polityka-prywatnosci.html", ::showMessage)
|
context?.openInternetBrowser(
|
||||||
|
"https://wulkanowy.github.io/polityka-prywatnosci.html",
|
||||||
|
::showMessage
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun showContact(show: Boolean) {
|
override fun showContact(show: Boolean) {
|
||||||
@ -210,7 +232,10 @@ class LoginFormFragment : BaseFragment<FragmentLoginFormBinding>(R.layout.fragme
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun openFaqPage() {
|
override fun openFaqPage() {
|
||||||
context?.openInternetBrowser("https://wulkanowy.github.io/czesto-zadawane-pytania/dlaczego-nie-moge-sie-zalogowac", ::showMessage)
|
context?.openInternetBrowser(
|
||||||
|
"https://wulkanowy.github.io/czesto-zadawane-pytania/dlaczego-nie-moge-sie-zalogowac",
|
||||||
|
::showMessage
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
@ -223,7 +248,8 @@ class LoginFormFragment : BaseFragment<FragmentLoginFormBinding>(R.layout.fragme
|
|||||||
chooserTitle = requireContext().getString(R.string.login_email_intent_title),
|
chooserTitle = requireContext().getString(R.string.login_email_intent_title),
|
||||||
email = "wulkanowyinc@gmail.com",
|
email = "wulkanowyinc@gmail.com",
|
||||||
subject = requireContext().getString(R.string.login_email_subject),
|
subject = requireContext().getString(R.string.login_email_subject),
|
||||||
body = requireContext().getString(R.string.login_email_text,
|
body = requireContext().getString(
|
||||||
|
R.string.login_email_text,
|
||||||
"${appInfo.systemManufacturer} ${appInfo.systemModel}",
|
"${appInfo.systemManufacturer} ${appInfo.systemModel}",
|
||||||
appInfo.systemVersion.toString(),
|
appInfo.systemVersion.toString(),
|
||||||
appInfo.versionName,
|
appInfo.versionName,
|
||||||
|
@ -30,7 +30,7 @@ class LoginFormPresenter @Inject constructor(
|
|||||||
showVersion()
|
showVersion()
|
||||||
|
|
||||||
loginErrorHandler.onBadCredentials = {
|
loginErrorHandler.onBadCredentials = {
|
||||||
setErrorPassIncorrect()
|
setErrorPassIncorrect(it)
|
||||||
showSoftKeyboard()
|
showSoftKeyboard()
|
||||||
Timber.i("Entered wrong username or password")
|
Timber.i("Entered wrong username or password")
|
||||||
}
|
}
|
||||||
|
@ -37,7 +37,7 @@ interface LoginFormView : BaseView {
|
|||||||
|
|
||||||
fun setErrorPassInvalid(focus: Boolean)
|
fun setErrorPassInvalid(focus: Boolean)
|
||||||
|
|
||||||
fun setErrorPassIncorrect()
|
fun setErrorPassIncorrect(message: String?)
|
||||||
|
|
||||||
fun setErrorEmailInvalid(domain: String)
|
fun setErrorEmailInvalid(domain: String)
|
||||||
|
|
||||||
|
@ -110,10 +110,8 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="32dp"
|
android:layout_marginStart="32dp"
|
||||||
android:layout_marginLeft="32dp"
|
|
||||||
android:layout_marginTop="32dp"
|
android:layout_marginTop="32dp"
|
||||||
android:layout_marginEnd="32dp"
|
android:layout_marginEnd="32dp"
|
||||||
android:layout_marginRight="32dp"
|
|
||||||
android:gravity="center_horizontal"
|
android:gravity="center_horizontal"
|
||||||
android:text="@string/login_header_default"
|
android:text="@string/login_header_default"
|
||||||
android:textSize="16sp"
|
android:textSize="16sp"
|
||||||
@ -126,6 +124,20 @@
|
|||||||
app:layout_constraintVertical_chainStyle="packed"
|
app:layout_constraintVertical_chainStyle="packed"
|
||||||
app:layout_goneMarginTop="64dp" />
|
app:layout_goneMarginTop="64dp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/loginFormErrorBox"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="32dp"
|
||||||
|
android:layout_marginTop="32dp"
|
||||||
|
android:layout_marginEnd="32dp"
|
||||||
|
android:textAppearance="?attr/textAppearanceCaption"
|
||||||
|
android:textColor="@color/mtrl_error"
|
||||||
|
android:textSize="14sp"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/loginFormHeader"
|
||||||
|
tools:text="Nazwa użytkownika lub hasło są niepoprawne albo hasło do konta wygasło"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
android:id="@+id/loginFormUsernameLayout"
|
android:id="@+id/loginFormUsernameLayout"
|
||||||
@ -134,15 +146,15 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="24dp"
|
android:layout_marginStart="24dp"
|
||||||
android:layout_marginLeft="24dp"
|
android:layout_marginLeft="24dp"
|
||||||
android:layout_marginTop="48dp"
|
android:layout_marginTop="28dp"
|
||||||
android:layout_marginEnd="24dp"
|
android:layout_marginEnd="24dp"
|
||||||
android:layout_marginRight="24dp"
|
android:layout_marginRight="24dp"
|
||||||
android:hint="@string/login_nickname_hint"
|
android:hint="@string/login_nickname_hint"
|
||||||
app:errorEnabled="true"
|
app:errorEnabled="true"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/loginFormPassLayout"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/loginFormHeader">
|
app:layout_constraintTop_toBottomOf="@+id/loginFormErrorBox"
|
||||||
|
app:layout_goneMarginTop="48dp">
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputEditText
|
<com.google.android.material.textfield.TextInputEditText
|
||||||
android:id="@+id/loginFormUsername"
|
android:id="@+id/loginFormUsername"
|
||||||
@ -170,7 +182,6 @@
|
|||||||
android:hint="@string/login_password_hint"
|
android:hint="@string/login_password_hint"
|
||||||
app:errorEnabled="true"
|
app:errorEnabled="true"
|
||||||
app:errorIconDrawable="@null"
|
app:errorIconDrawable="@null"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/loginFormRecoverLink"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/loginFormUsernameLayout"
|
app:layout_constraintTop_toBottomOf="@+id/loginFormUsernameLayout"
|
||||||
@ -200,7 +211,6 @@
|
|||||||
android:textAppearance="?android:textAppearance"
|
android:textAppearance="?android:textAppearance"
|
||||||
app:backgroundTint="?android:windowBackground"
|
app:backgroundTint="?android:windowBackground"
|
||||||
app:fontFamily="sans-serif-medium"
|
app:fontFamily="sans-serif-medium"
|
||||||
app:layout_constraintBottom_toTopOf="@id/loginFormHostLayout"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/loginFormPassLayout"
|
app:layout_constraintTop_toBottomOf="@+id/loginFormPassLayout"
|
||||||
tools:visibility="visible" />
|
tools:visibility="visible" />
|
||||||
@ -217,7 +227,6 @@
|
|||||||
android:layout_marginRight="24dp"
|
android:layout_marginRight="24dp"
|
||||||
android:hint="@string/login_host_hint"
|
android:hint="@string/login_host_hint"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/loginFormAdvancedButton"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/loginFormRecoverLink">
|
app:layout_constraintTop_toBottomOf="@+id/loginFormRecoverLink">
|
||||||
@ -262,14 +271,13 @@
|
|||||||
android:id="@+id/loginFormPrivacyLink"
|
android:id="@+id/loginFormPrivacyLink"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="24dp"
|
|
||||||
android:gravity="start|center_vertical"
|
android:gravity="start|center_vertical"
|
||||||
android:text="@string/login_privacy_policy"
|
android:text="@string/login_privacy_policy"
|
||||||
android:textColor="?android:textColorSecondary"
|
android:textColor="?android:textColorSecondary"
|
||||||
android:textSize="12sp"
|
android:textSize="12sp"
|
||||||
app:fontFamily="sans-serif-medium"
|
app:fontFamily="sans-serif-medium"
|
||||||
app:layout_constraintStart_toStartOf="@id/loginFormAdvancedButton"
|
app:layout_constraintStart_toStartOf="@id/loginFormAdvancedButton"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/loginFormAdvancedButton"
|
app:layout_constraintTop_toTopOf="@+id/loginFormVersion"
|
||||||
tools:visibility="visible" />
|
tools:visibility="visible" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
@ -42,7 +42,8 @@
|
|||||||
<string name="login_symbol_hint">Symbol</string>
|
<string name="login_symbol_hint">Symbol</string>
|
||||||
<string name="login_sign_in">Přihlásit</string>
|
<string name="login_sign_in">Přihlásit</string>
|
||||||
<string name="login_invalid_password">Toto heslo je příliš krátké</string>
|
<string name="login_invalid_password">Toto heslo je příliš krátké</string>
|
||||||
<string name="login_incorrect_password">Přihlašovací údaje jsou nesprávné. Ujistěte se, že je v poli níže vybrána správná variace deníku UONET+</string>
|
<string name="login_incorrect_password_default">Přihlašovací údaje jsou nesprávné</string>
|
||||||
|
<string name="login_incorrect_password">%1$s. Ujistěte se, že je v poli níže vybrána správná variace deníku UONET+</string>
|
||||||
<string name="login_invalid_pin">Neplatný PIN</string>
|
<string name="login_invalid_pin">Neplatný PIN</string>
|
||||||
<string name="login_invalid_token">Neplatný token</string>
|
<string name="login_invalid_token">Neplatný token</string>
|
||||||
<string name="login_expired_token">Token vypršel</string>
|
<string name="login_expired_token">Token vypršel</string>
|
||||||
|
@ -42,7 +42,8 @@
|
|||||||
<string name="login_symbol_hint">Symbol</string>
|
<string name="login_symbol_hint">Symbol</string>
|
||||||
<string name="login_sign_in">Anmelden</string>
|
<string name="login_sign_in">Anmelden</string>
|
||||||
<string name="login_invalid_password">Passwort ist zu kurz</string>
|
<string name="login_invalid_password">Passwort ist zu kurz</string>
|
||||||
<string name="login_incorrect_password">Anmeldedaten sind falsch. Stellen Sie sicher, dass die richtige UONET+ Registervariation im unteren Feld ausgewählt ist</string>
|
<string name="login_incorrect_password_default">Anmeldedaten sind falsch</string>
|
||||||
|
<string name="login_incorrect_password">%1$s. Stellen Sie sicher, dass die richtige UONET+ Registervariation im unteren Feld ausgewählt ist</string>
|
||||||
<string name="login_invalid_pin">Ungültige PIN</string>
|
<string name="login_invalid_pin">Ungültige PIN</string>
|
||||||
<string name="login_invalid_token">Ungültige token</string>
|
<string name="login_invalid_token">Ungültige token</string>
|
||||||
<string name="login_expired_token">Token ist nicht mehr gültig</string>
|
<string name="login_expired_token">Token ist nicht mehr gültig</string>
|
||||||
|
@ -42,7 +42,8 @@
|
|||||||
<string name="login_symbol_hint">Symbol</string>
|
<string name="login_symbol_hint">Symbol</string>
|
||||||
<string name="login_sign_in">Zaloguj</string>
|
<string name="login_sign_in">Zaloguj</string>
|
||||||
<string name="login_invalid_password">To hasło jest za krótkie</string>
|
<string name="login_invalid_password">To hasło jest za krótkie</string>
|
||||||
<string name="login_incorrect_password">Dane logowania są niepoprawne. Upewnij się, że została wybrana odpowiednia odmiana dziennika UONET+ w polu poniżej</string>
|
<string name="login_incorrect_password_default">Dane logowania są niepoprawne</string>
|
||||||
|
<string name="login_incorrect_password">%1$s. Upewnij się, że poniżej została wybrana odpowiednia odmiana dziennika UONET+</string>
|
||||||
<string name="login_invalid_pin">Nieprawidłowy PIN</string>
|
<string name="login_invalid_pin">Nieprawidłowy PIN</string>
|
||||||
<string name="login_invalid_token">Nieprawidłowy token</string>
|
<string name="login_invalid_token">Nieprawidłowy token</string>
|
||||||
<string name="login_expired_token">Token stracił ważność</string>
|
<string name="login_expired_token">Token stracił ważność</string>
|
||||||
|
@ -42,7 +42,8 @@
|
|||||||
<string name="login_symbol_hint">Symbol</string>
|
<string name="login_symbol_hint">Symbol</string>
|
||||||
<string name="login_sign_in">Войти</string>
|
<string name="login_sign_in">Войти</string>
|
||||||
<string name="login_invalid_password">Слишком короткий пароль</string>
|
<string name="login_invalid_password">Слишком короткий пароль</string>
|
||||||
<string name="login_incorrect_password">Данные для входа неверны. Убедитесь, что в поле ниже выбран правильный вариант регистра UONET+</string>
|
<string name="login_incorrect_password_default">Данные для входа неверны</string>
|
||||||
|
<string name="login_incorrect_password">%1$s. Убедитесь, что в поле ниже выбран правильный вариант регистра UONET+</string>
|
||||||
<string name="login_invalid_pin">Неправильный PIN</string>
|
<string name="login_invalid_pin">Неправильный PIN</string>
|
||||||
<string name="login_invalid_token">Неверный token</string>
|
<string name="login_invalid_token">Неверный token</string>
|
||||||
<string name="login_expired_token">Token просрочен</string>
|
<string name="login_expired_token">Token просрочен</string>
|
||||||
|
@ -42,7 +42,8 @@
|
|||||||
<string name="login_symbol_hint">Symbol</string>
|
<string name="login_symbol_hint">Symbol</string>
|
||||||
<string name="login_sign_in">Prihlásiť</string>
|
<string name="login_sign_in">Prihlásiť</string>
|
||||||
<string name="login_invalid_password">Toto heslo je príliš krátke</string>
|
<string name="login_invalid_password">Toto heslo je príliš krátke</string>
|
||||||
<string name="login_incorrect_password">Prihlasovacie údaje sú nesprávne. Uistite sa, že je v poli nižšie vybraná správna variácie denníka UONET+</string>
|
<string name="login_incorrect_password_default">Prihlasovacie údaje sú nesprávne</string>
|
||||||
|
<string name="login_incorrect_password">%1$s. Uistite sa, že je v poli nižšie vybraná správna variácie denníka UONET+</string>
|
||||||
<string name="login_invalid_pin">Neplatný PIN</string>
|
<string name="login_invalid_pin">Neplatný PIN</string>
|
||||||
<string name="login_invalid_token">Neplatný token</string>
|
<string name="login_invalid_token">Neplatný token</string>
|
||||||
<string name="login_expired_token">Platnosť tokenu vypršala</string>
|
<string name="login_expired_token">Platnosť tokenu vypršala</string>
|
||||||
|
@ -42,7 +42,8 @@
|
|||||||
<string name="login_symbol_hint">Symbol</string>
|
<string name="login_symbol_hint">Symbol</string>
|
||||||
<string name="login_sign_in">Увійти</string>
|
<string name="login_sign_in">Увійти</string>
|
||||||
<string name="login_invalid_password">Занадто короткий пароль</string>
|
<string name="login_invalid_password">Занадто короткий пароль</string>
|
||||||
<string name="login_incorrect_password">Дані для входу неправильні. Переконайтеся, що у полі нижче вказано правильний варіант реєстрації UONET+</string>
|
<string name="login_incorrect_password_default">Дані для входу неправильні</string>
|
||||||
|
<string name="login_incorrect_password">%1$s. Переконайтеся, що у полі нижче вказано правильний варіант реєстрації UONET+</string>
|
||||||
<string name="login_invalid_pin">Неправильний PIN</string>
|
<string name="login_invalid_pin">Неправильний PIN</string>
|
||||||
<string name="login_invalid_token">Неправильний token</string>
|
<string name="login_invalid_token">Неправильний token</string>
|
||||||
<string name="login_expired_token">Минув термін дії токену</string>
|
<string name="login_expired_token">Минув термін дії токену</string>
|
||||||
|
@ -46,7 +46,8 @@
|
|||||||
<string name="login_symbol_hint">Symbol</string>
|
<string name="login_symbol_hint">Symbol</string>
|
||||||
<string name="login_sign_in">Sign in</string>
|
<string name="login_sign_in">Sign in</string>
|
||||||
<string name="login_invalid_password">Password too short</string>
|
<string name="login_invalid_password">Password too short</string>
|
||||||
<string name="login_incorrect_password">Login details are incorrect. Make sure the correct UONET+ register variation is selected in the field below</string>
|
<string name="login_incorrect_password_default">Login details are incorrect</string>
|
||||||
|
<string name="login_incorrect_password">%1$s. Make sure the correct UONET+ register variation is selected below</string>
|
||||||
<string name="login_invalid_pin">Invalid PIN</string>
|
<string name="login_invalid_pin">Invalid PIN</string>
|
||||||
<string name="login_invalid_token">Invalid token</string>
|
<string name="login_invalid_token">Invalid token</string>
|
||||||
<string name="login_expired_token">Token expired</string>
|
<string name="login_expired_token">Token expired</string>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user