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 {
|
||||
implementation "io.github.wulkanowy:sdk:1.2.3"
|
||||
implementation "io.github.wulkanowy:sdk:8f3721f1f9"
|
||||
|
||||
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>) {
|
||||
(loginAdapter.getFragmentInstance(1) as? LoginSymbolFragment)?.onParentInitSymbolFragment(
|
||||
loginData
|
||||
)
|
||||
(loginAdapter.getFragmentInstance(1) as? LoginSymbolFragment)
|
||||
?.onParentInitSymbolFragment(loginData)
|
||||
}
|
||||
|
||||
override fun notifyInitStudentSelectFragment(studentsWithSemesters: List<StudentWithSemesters>) {
|
||||
|
@ -13,7 +13,7 @@ import javax.inject.Inject
|
||||
|
||||
class LoginErrorHandler @Inject constructor(resources: Resources) : ErrorHandler(resources) {
|
||||
|
||||
var onBadCredentials: () -> Unit = {}
|
||||
var onBadCredentials: (String?) -> Unit = {}
|
||||
|
||||
var onInvalidToken: (String) -> Unit = {}
|
||||
|
||||
@ -25,7 +25,7 @@ class LoginErrorHandler @Inject constructor(resources: Resources) : ErrorHandler
|
||||
|
||||
override fun proceed(error: Throwable) {
|
||||
when (error) {
|
||||
is BadCredentialsException -> onBadCredentials()
|
||||
is BadCredentialsException -> onBadCredentials(error.message)
|
||||
is SQLiteConstraintException -> onStudentDuplicate(resources.getString(R.string.login_duplicate_student))
|
||||
is TokenDeadException -> onInvalidToken(resources.getString(R.string.login_expired_token))
|
||||
is InvalidTokenException -> onInvalidToken(resources.getString(R.string.login_invalid_token))
|
||||
|
@ -51,10 +51,12 @@ class LoginAdvancedFragment :
|
||||
private lateinit var hostSymbols: Array<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
|
||||
get() = hostSymbols.getOrNull(hostKeys.indexOf(binding.loginFormHost.text.toString())).orEmpty()
|
||||
get() = hostSymbols.getOrNull(hostKeys.indexOf(binding.loginFormHost.text.toString()))
|
||||
.orEmpty()
|
||||
|
||||
override val formPinValue: String
|
||||
get() = binding.loginFormPin.text.toString().trim()
|
||||
@ -92,39 +94,62 @@ class LoginAdvancedFragment :
|
||||
loginFormSignIn.setOnClickListener { presenter.onSignInClick() }
|
||||
|
||||
loginTypeSwitch.setOnCheckedChangeListener { _, checkedId ->
|
||||
presenter.onLoginModeSelected(when (checkedId) {
|
||||
R.id.loginTypeApi -> Sdk.Mode.API
|
||||
R.id.loginTypeScrapper -> Sdk.Mode.SCRAPPER
|
||||
else -> Sdk.Mode.HYBRID
|
||||
})
|
||||
presenter.onLoginModeSelected(
|
||||
when (checkedId) {
|
||||
R.id.loginTypeApi -> Sdk.Mode.API
|
||||
R.id.loginTypeScrapper -> Sdk.Mode.SCRAPPER
|
||||
else -> Sdk.Mode.HYBRID
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
loginFormPin.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) {
|
||||
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() }
|
||||
}
|
||||
}
|
||||
|
||||
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() {
|
||||
binding.loginFormAdvancedWarningInfo.text = getString(R.string.login_advanced_warning_scraper)
|
||||
binding.loginFormAdvancedWarningInfo.text =
|
||||
getString(R.string.login_advanced_warning_scraper)
|
||||
}
|
||||
|
||||
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) {
|
||||
loginFormUsername.setText(username)
|
||||
loginFormPass.setText(pass)
|
||||
@ -177,10 +202,10 @@ class LoginAdvancedFragment :
|
||||
}
|
||||
}
|
||||
|
||||
override fun setErrorPassIncorrect() {
|
||||
override fun setErrorPassIncorrect(message: String?) {
|
||||
with(binding.loginFormPassLayout) {
|
||||
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>) {
|
||||
(activity as? LoginActivity)?.onFormFragmentAccountLogged(studentsWithSemesters, Triple(
|
||||
binding.loginFormUsername.text.toString(),
|
||||
binding.loginFormPass.text.toString(),
|
||||
resources.getStringArray(R.array.hosts_values)[1]
|
||||
))
|
||||
(activity as? LoginActivity)?.onFormFragmentAccountLogged(
|
||||
studentsWithSemesters, Triple(
|
||||
binding.loginFormUsername.text.toString(),
|
||||
binding.loginFormPass.text.toString(),
|
||||
resources.getStringArray(R.array.hosts_values)[1]
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
|
@ -34,9 +34,9 @@ class LoginAdvancedPresenter @Inject constructor(
|
||||
}
|
||||
}
|
||||
|
||||
private fun onBadCredentials() {
|
||||
private fun onBadCredentials(message: String?) {
|
||||
view?.run {
|
||||
setErrorPassIncorrect()
|
||||
setErrorPassIncorrect(message)
|
||||
showSoftKeyboard()
|
||||
Timber.i("Entered wrong username or password")
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ interface LoginAdvancedView : BaseView {
|
||||
|
||||
fun setErrorPassInvalid(focus: Boolean)
|
||||
|
||||
fun setErrorPassIncorrect()
|
||||
fun setErrorPassIncorrect(message: String?)
|
||||
|
||||
fun clearUsernameError()
|
||||
|
||||
|
@ -5,6 +5,7 @@ import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.view.View.GONE
|
||||
import android.view.View.VISIBLE
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.core.widget.doOnTextChanged
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import io.github.wulkanowy.R
|
||||
@ -41,10 +42,12 @@ class LoginFormFragment : BaseFragment<FragmentLoginFormBinding>(R.layout.fragme
|
||||
get() = binding.loginFormPass.text.toString()
|
||||
|
||||
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
|
||||
get() = hostSymbols.getOrNull(hostKeys.indexOf(binding.loginFormHost.text.toString())).orEmpty()
|
||||
get() = hostSymbols.getOrNull(hostKeys.indexOf(binding.loginFormHost.text.toString()))
|
||||
.orEmpty()
|
||||
|
||||
override val nicknameLabel: String
|
||||
get() = getString(R.string.login_nickname_hint)
|
||||
@ -88,7 +91,13 @@ class LoginFormFragment : BaseFragment<FragmentLoginFormBinding>(R.layout.fragme
|
||||
|
||||
with(binding.loginFormHost) {
|
||||
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() }
|
||||
}
|
||||
}
|
||||
@ -142,24 +151,31 @@ class LoginFormFragment : BaseFragment<FragmentLoginFormBinding>(R.layout.fragme
|
||||
}
|
||||
}
|
||||
|
||||
override fun setErrorPassIncorrect() {
|
||||
with(binding.loginFormPassLayout) {
|
||||
error = getString(R.string.login_incorrect_password)
|
||||
override fun setErrorPassIncorrect(message: String?) {
|
||||
val error = message ?: getString(R.string.login_incorrect_password_default)
|
||||
|
||||
with(binding) {
|
||||
loginFormUsernameLayout.error = " "
|
||||
loginFormPassLayout.error = " "
|
||||
loginFormErrorBox.text = getString(R.string.login_incorrect_password, error)
|
||||
loginFormErrorBox.isVisible = true
|
||||
}
|
||||
}
|
||||
|
||||
override fun setErrorEmailInvalid(domain: String) {
|
||||
with(binding.loginFormUsernameLayout) {
|
||||
error = getString(R.string.login_invalid_custom_email,domain)
|
||||
error = getString(R.string.login_invalid_custom_email, domain)
|
||||
}
|
||||
}
|
||||
|
||||
override fun clearUsernameError() {
|
||||
binding.loginFormUsernameLayout.error = null
|
||||
binding.loginFormErrorBox.isVisible = false
|
||||
}
|
||||
|
||||
override fun clearPassError() {
|
||||
binding.loginFormPassLayout.error = null
|
||||
binding.loginFormErrorBox.isVisible = false
|
||||
}
|
||||
|
||||
override fun showSoftKeyboard() {
|
||||
@ -183,12 +199,18 @@ class LoginFormFragment : BaseFragment<FragmentLoginFormBinding>(R.layout.fragme
|
||||
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)
|
||||
}
|
||||
|
||||
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) {
|
||||
@ -210,7 +232,10 @@ class LoginFormFragment : BaseFragment<FragmentLoginFormBinding>(R.layout.fragme
|
||||
}
|
||||
|
||||
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() {
|
||||
@ -223,7 +248,8 @@ class LoginFormFragment : BaseFragment<FragmentLoginFormBinding>(R.layout.fragme
|
||||
chooserTitle = requireContext().getString(R.string.login_email_intent_title),
|
||||
email = "wulkanowyinc@gmail.com",
|
||||
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.systemVersion.toString(),
|
||||
appInfo.versionName,
|
||||
|
@ -30,7 +30,7 @@ class LoginFormPresenter @Inject constructor(
|
||||
showVersion()
|
||||
|
||||
loginErrorHandler.onBadCredentials = {
|
||||
setErrorPassIncorrect()
|
||||
setErrorPassIncorrect(it)
|
||||
showSoftKeyboard()
|
||||
Timber.i("Entered wrong username or password")
|
||||
}
|
||||
|
@ -37,7 +37,7 @@ interface LoginFormView : BaseView {
|
||||
|
||||
fun setErrorPassInvalid(focus: Boolean)
|
||||
|
||||
fun setErrorPassIncorrect()
|
||||
fun setErrorPassIncorrect(message: String?)
|
||||
|
||||
fun setErrorEmailInvalid(domain: String)
|
||||
|
||||
|
@ -110,10 +110,8 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="32dp"
|
||||
android:layout_marginLeft="32dp"
|
||||
android:layout_marginTop="32dp"
|
||||
android:layout_marginEnd="32dp"
|
||||
android:layout_marginRight="32dp"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/login_header_default"
|
||||
android:textSize="16sp"
|
||||
@ -126,6 +124,20 @@
|
||||
app:layout_constraintVertical_chainStyle="packed"
|
||||
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
|
||||
android:id="@+id/loginFormUsernameLayout"
|
||||
@ -134,15 +146,15 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="24dp"
|
||||
android:layout_marginLeft="24dp"
|
||||
android:layout_marginTop="48dp"
|
||||
android:layout_marginTop="28dp"
|
||||
android:layout_marginEnd="24dp"
|
||||
android:layout_marginRight="24dp"
|
||||
android:hint="@string/login_nickname_hint"
|
||||
app:errorEnabled="true"
|
||||
app:layout_constraintBottom_toTopOf="@+id/loginFormPassLayout"
|
||||
app:layout_constraintEnd_toEndOf="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
|
||||
android:id="@+id/loginFormUsername"
|
||||
@ -170,7 +182,6 @@
|
||||
android:hint="@string/login_password_hint"
|
||||
app:errorEnabled="true"
|
||||
app:errorIconDrawable="@null"
|
||||
app:layout_constraintBottom_toTopOf="@+id/loginFormRecoverLink"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/loginFormUsernameLayout"
|
||||
@ -200,7 +211,6 @@
|
||||
android:textAppearance="?android:textAppearance"
|
||||
app:backgroundTint="?android:windowBackground"
|
||||
app:fontFamily="sans-serif-medium"
|
||||
app:layout_constraintBottom_toTopOf="@id/loginFormHostLayout"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/loginFormPassLayout"
|
||||
tools:visibility="visible" />
|
||||
@ -217,7 +227,6 @@
|
||||
android:layout_marginRight="24dp"
|
||||
android:hint="@string/login_host_hint"
|
||||
android:orientation="vertical"
|
||||
app:layout_constraintBottom_toTopOf="@+id/loginFormAdvancedButton"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/loginFormRecoverLink">
|
||||
@ -262,14 +271,13 @@
|
||||
android:id="@+id/loginFormPrivacyLink"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="24dp"
|
||||
android:gravity="start|center_vertical"
|
||||
android:text="@string/login_privacy_policy"
|
||||
android:textColor="?android:textColorSecondary"
|
||||
android:textSize="12sp"
|
||||
app:fontFamily="sans-serif-medium"
|
||||
app:layout_constraintStart_toStartOf="@id/loginFormAdvancedButton"
|
||||
app:layout_constraintTop_toBottomOf="@+id/loginFormAdvancedButton"
|
||||
app:layout_constraintTop_toTopOf="@+id/loginFormVersion"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<TextView
|
||||
|
@ -42,7 +42,8 @@
|
||||
<string name="login_symbol_hint">Symbol</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_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_token">Neplatný token</string>
|
||||
<string name="login_expired_token">Token vypršel</string>
|
||||
|
@ -42,7 +42,8 @@
|
||||
<string name="login_symbol_hint">Symbol</string>
|
||||
<string name="login_sign_in">Anmelden</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_token">Ungültige token</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_sign_in">Zaloguj</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_token">Nieprawidłowy token</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_sign_in">Войти</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_token">Неверный token</string>
|
||||
<string name="login_expired_token">Token просрочен</string>
|
||||
|
@ -42,7 +42,8 @@
|
||||
<string name="login_symbol_hint">Symbol</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_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_token">Neplatný token</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_sign_in">Увійти</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_token">Неправильний token</string>
|
||||
<string name="login_expired_token">Минув термін дії токену</string>
|
||||
|
@ -46,7 +46,8 @@
|
||||
<string name="login_symbol_hint">Symbol</string>
|
||||
<string name="login_sign_in">Sign in</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_token">Invalid token</string>
|
||||
<string name="login_expired_token">Token expired</string>
|
||||
|
Loading…
x
Reference in New Issue
Block a user