Login improvements (#1645)

This commit is contained in:
Mikołaj Pich 2021-11-16 22:05:00 +01:00 committed by GitHub
parent 39327ff3ea
commit 981d6d559c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 62 additions and 26 deletions

View File

@ -205,7 +205,7 @@ class LoginAdvancedFragment :
override fun setErrorPassIncorrect(message: String?) { override fun setErrorPassIncorrect(message: String?) {
with(binding.loginFormPassLayout) { with(binding.loginFormPassLayout) {
requestFocus() requestFocus()
error = message ?: getString(R.string.login_incorrect_password) error = message ?: getString(R.string.login_incorrect_password_default)
} }
} }

View File

@ -152,12 +152,11 @@ class LoginFormFragment : BaseFragment<FragmentLoginFormBinding>(R.layout.fragme
} }
override fun setErrorPassIncorrect(message: String?) { override fun setErrorPassIncorrect(message: String?) {
val error = message ?: getString(R.string.login_incorrect_password_default)
with(binding) { with(binding) {
loginFormUsernameLayout.error = " " loginFormUsernameLayout.error = " "
loginFormPassLayout.error = " " loginFormPassLayout.error = " "
loginFormErrorBox.text = getString(R.string.login_incorrect_password, error) loginFormHostLayout.error = " "
loginFormErrorBox.text = message ?: getString(R.string.login_incorrect_password_default)
loginFormErrorBox.isVisible = true loginFormErrorBox.isVisible = true
} }
} }
@ -178,6 +177,11 @@ class LoginFormFragment : BaseFragment<FragmentLoginFormBinding>(R.layout.fragme
binding.loginFormErrorBox.isVisible = false binding.loginFormErrorBox.isVisible = false
} }
override fun clearHostError() {
binding.loginFormHostLayout.error = null
binding.loginFormErrorBox.isVisible = false
}
override fun showSoftKeyboard() { override fun showSoftKeyboard() {
activity?.showSoftInput() activity?.showSoftInput()
} }

View File

@ -30,7 +30,7 @@ class LoginFormPresenter @Inject constructor(
showVersion() showVersion()
loginErrorHandler.onBadCredentials = { loginErrorHandler.onBadCredentials = {
setErrorPassIncorrect(it) setErrorPassIncorrect(it.takeIf { !it.isNullOrBlank() })
showSoftKeyboard() showSoftKeyboard()
Timber.i("Entered wrong username or password") Timber.i("Entered wrong username or password")
} }
@ -49,6 +49,7 @@ class LoginFormPresenter @Inject constructor(
view?.apply { view?.apply {
clearPassError() clearPassError()
clearUsernameError() clearUsernameError()
clearHostError()
if (formHostValue.contains("fakelog")) { if (formHostValue.contains("fakelog")) {
setCredentials("jan@fakelog.cf", "jan123") setCredentials("jan@fakelog.cf", "jan123")
} }
@ -75,7 +76,10 @@ class LoginFormPresenter @Inject constructor(
val usernameHost = username.substringAfter("@") val usernameHost = username.substringAfter("@")
hosts[usernameHost]?.let { hosts[usernameHost]?.let {
view?.setHost(it) view?.run {
setHost(it)
clearHostError()
}
} }
} }
} }

View File

@ -45,6 +45,8 @@ interface LoginFormView : BaseView {
fun clearPassError() fun clearPassError()
fun clearHostError()
fun showSoftKeyboard() fun showSoftKeyboard()
fun hideSoftKeyboard() fun hideSoftKeyboard()

View File

@ -7,6 +7,7 @@ import android.view.View.VISIBLE
import android.view.inputmethod.EditorInfo.IME_ACTION_DONE import android.view.inputmethod.EditorInfo.IME_ACTION_DONE
import android.view.inputmethod.EditorInfo.IME_NULL import android.view.inputmethod.EditorInfo.IME_NULL
import android.widget.ArrayAdapter import android.widget.ArrayAdapter
import androidx.core.text.parseAsHtml
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
@ -58,7 +59,13 @@ class LoginSymbolFragment :
setOnEditorActionListener { _, id, _ -> setOnEditorActionListener { _, id, _ ->
if (id == IME_ACTION_DONE || id == IME_NULL) loginSymbolSignIn.callOnClick() else false if (id == IME_ACTION_DONE || id == IME_NULL) loginSymbolSignIn.callOnClick() else false
} }
setAdapter(ArrayAdapter(context, android.R.layout.simple_list_item_1, resources.getStringArray(R.array.symbols_values))) setAdapter(
ArrayAdapter(
context,
android.R.layout.simple_list_item_1,
resources.getStringArray(R.array.symbols_values)
)
)
} }
} }
} }
@ -67,6 +74,10 @@ class LoginSymbolFragment :
presenter.onParentInitSymbolView(loginData) presenter.onParentInitSymbolView(loginData)
} }
override fun setLoginToHeading(login: String) {
binding.loginSymbolHeader.text = getString(R.string.login_header_symbol, login).parseAsHtml()
}
override fun setErrorSymbolIncorrect() { override fun setErrorSymbolIncorrect() {
binding.loginSymbolNameLayout.apply { binding.loginSymbolNameLayout.apply {
requestFocus() requestFocus()
@ -127,7 +138,10 @@ class LoginSymbolFragment :
} }
override fun openFaqPage() { override fun openFaqPage() {
context?.openInternetBrowser("https://wulkanowy.github.io/czesto-zadawane-pytania/co-to-jest-symbol", ::showMessage) context?.openInternetBrowser(
"https://wulkanowy.github.io/czesto-zadawane-pytania/co-to-jest-symbol",
::showMessage
)
} }
override fun openEmail(host: String, lastError: String) { override fun openEmail(host: String, lastError: String) {
@ -135,7 +149,8 @@ class LoginSymbolFragment :
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,

View File

@ -32,6 +32,16 @@ class LoginSymbolPresenter @Inject constructor(
} }
if (savedLoginData is Triple<*, *, *>) { if (savedLoginData is Triple<*, *, *>) {
loginData = savedLoginData as Triple<String, String, String> loginData = savedLoginData as Triple<String, String, String>
view.setLoginToHeading(requireNotNull(loginData?.first))
}
}
fun onParentInitSymbolView(loginData: Triple<String, String, String>) {
this.loginData = loginData
view?.apply {
setLoginToHeading(loginData.first)
clearAndFocusSymbol()
showSoftKeyboard()
} }
} }
@ -47,7 +57,14 @@ class LoginSymbolPresenter @Inject constructor(
return return
} }
flowWithResource { studentRepository.getStudentsScrapper(loginData!!.first, loginData!!.second, loginData!!.third, symbol) }.onEach { flowWithResource {
studentRepository.getStudentsScrapper(
email = loginData!!.first,
password = loginData!!.second,
scrapperBaseUrl = loginData!!.third,
symbol = symbol,
)
}.onEach {
when (it.status) { when (it.status) {
Status.LOADING -> view?.run { Status.LOADING -> view?.run {
Timber.i("Login with symbol started") Timber.i("Login with symbol started")
@ -98,14 +115,6 @@ class LoginSymbolPresenter @Inject constructor(
}.launch("login") }.launch("login")
} }
fun onParentInitSymbolView(loginData: Triple<String, String, String>) {
this.loginData = loginData
view?.apply {
clearAndFocusSymbol()
showSoftKeyboard()
}
}
fun onFaqClick() { fun onFaqClick() {
view?.openFaqPage() view?.openFaqPage()
} }

View File

@ -9,6 +9,8 @@ interface LoginSymbolView : BaseView {
fun initView() fun initView()
fun setLoginToHeading(login: String)
fun setErrorSymbolIncorrect() fun setErrorSymbolIncorrect()
fun setErrorSymbolRequire() fun setErrorSymbolRequire()

View File

@ -30,7 +30,7 @@
<string name="grade_subtitle">Semestr %1$d, %2$d/%3$d</string> <string name="grade_subtitle">Semestr %1$d, %2$d/%3$d</string>
<!--Login--> <!--Login-->
<string name="login_header_default">Přihlaste se pomocí studentského nebo rodičovského účtu</string> <string name="login_header_default">Přihlaste se pomocí studentského nebo rodičovského účtu</string>
<string name="login_header_symbol">Zadejte symbol ze stránky deníku</string> <string name="login_header_symbol">Zadejte symbol ze stránky deníku: &lt;b>%1$s&lt;/b></string>
<string name="login_nickname_hint">Uživatelské jméno</string> <string name="login_nickname_hint">Uživatelské jméno</string>
<string name="login_email_hint">Email</string> <string name="login_email_hint">Email</string>
<string name="login_login_pesel_email_hint">Přihlášení, číslo PESEL nebo e-mail</string> <string name="login_login_pesel_email_hint">Přihlášení, číslo PESEL nebo e-mail</string>

View File

@ -30,7 +30,7 @@
<string name="grade_subtitle">Semester %1$d, %2$d/%3$d</string> <string name="grade_subtitle">Semester %1$d, %2$d/%3$d</string>
<!--Login--> <!--Login-->
<string name="login_header_default">Melden Sie sich mit dem Studenten- oder Elternkonto an</string> <string name="login_header_default">Melden Sie sich mit dem Studenten- oder Elternkonto an</string>
<string name="login_header_symbol">Geben Sie das Symbol von der Registerseite ein</string> <string name="login_header_symbol">Geben Sie das Symbol von der Registerseite ein: &lt;b>%1$s&lt;/b></string>
<string name="login_nickname_hint">Benutzername</string> <string name="login_nickname_hint">Benutzername</string>
<string name="login_email_hint">Email</string> <string name="login_email_hint">Email</string>
<string name="login_login_pesel_email_hint">Anmeldung, PESEL oder e-mail</string> <string name="login_login_pesel_email_hint">Anmeldung, PESEL oder e-mail</string>

View File

@ -30,7 +30,7 @@
<string name="grade_subtitle">Semestr %1$d, %2$d/%3$d</string> <string name="grade_subtitle">Semestr %1$d, %2$d/%3$d</string>
<!--Login--> <!--Login-->
<string name="login_header_default">Zaloguj się za pomocą konta ucznia lub rodzica</string> <string name="login_header_default">Zaloguj się za pomocą konta ucznia lub rodzica</string>
<string name="login_header_symbol">Podaj symbol ze strony dziennika</string> <string name="login_header_symbol">Podaj symbol ze strony dziennika dla konta: &lt;b>%1$s&lt;/b></string>
<string name="login_nickname_hint">Nazwa użytkownika</string> <string name="login_nickname_hint">Nazwa użytkownika</string>
<string name="login_email_hint">Adres e-mail</string> <string name="login_email_hint">Adres e-mail</string>
<string name="login_login_pesel_email_hint">Login, PESEL lub adres e-mail</string> <string name="login_login_pesel_email_hint">Login, PESEL lub adres e-mail</string>

View File

@ -30,7 +30,7 @@
<string name="grade_subtitle">%1$d семестр, %2$d/%3$d</string> <string name="grade_subtitle">%1$d семестр, %2$d/%3$d</string>
<!--Login--> <!--Login-->
<string name="login_header_default">Авторизируйтесь при помощи аккаунта ученика или родителя</string> <string name="login_header_default">Авторизируйтесь при помощи аккаунта ученика или родителя</string>
<string name="login_header_symbol">Введите символ со страницы регистрации</string> <string name="login_header_symbol">Введите символ со страницы регистрации: &lt;b>%1$s&lt;/b></string>
<string name="login_nickname_hint">Имя пользователя</string> <string name="login_nickname_hint">Имя пользователя</string>
<string name="login_email_hint">Электронная почта</string> <string name="login_email_hint">Электронная почта</string>
<string name="login_login_pesel_email_hint">Логин, PESEL или электронная почта</string> <string name="login_login_pesel_email_hint">Логин, PESEL или электронная почта</string>

View File

@ -30,7 +30,7 @@
<string name="grade_subtitle">Semester %1$d, %2$d/%3$d</string> <string name="grade_subtitle">Semester %1$d, %2$d/%3$d</string>
<!--Login--> <!--Login-->
<string name="login_header_default">Prihláste sa pomocou študentského alebo rodičovského konta</string> <string name="login_header_default">Prihláste sa pomocou študentského alebo rodičovského konta</string>
<string name="login_header_symbol">Zadajte symbol zo stránky denníka</string> <string name="login_header_symbol">Zadajte symbol zo stránky denníka: &lt;b>%1$s&lt;/b></string>
<string name="login_nickname_hint">Užívateľské meno</string> <string name="login_nickname_hint">Užívateľské meno</string>
<string name="login_email_hint">Email</string> <string name="login_email_hint">Email</string>
<string name="login_login_pesel_email_hint">Prihlásenie, číslo PESEL alebo e-mail</string> <string name="login_login_pesel_email_hint">Prihlásenie, číslo PESEL alebo e-mail</string>

View File

@ -30,7 +30,7 @@
<string name="grade_subtitle">%1$d семестр, %2$d/%3$d</string> <string name="grade_subtitle">%1$d семестр, %2$d/%3$d</string>
<!--Login--> <!--Login-->
<string name="login_header_default">Авторизуйтеся за допомогою аккаунта учня або батьків</string> <string name="login_header_default">Авторизуйтеся за допомогою аккаунта учня або батьків</string>
<string name="login_header_symbol">Введіть символ зі сторінки реєстру</string> <string name="login_header_symbol">Введіть символ зі сторінки реєстру: &lt;b>%1$s&lt;/b></string>
<string name="login_nickname_hint">Ім\'я користувача</string> <string name="login_nickname_hint">Ім\'я користувача</string>
<string name="login_email_hint">Електронна пошта</string> <string name="login_email_hint">Електронна пошта</string>
<string name="login_login_pesel_email_hint">Логін, PESEL або електронна пошта</string> <string name="login_login_pesel_email_hint">Логін, PESEL або електронна пошта</string>

View File

@ -34,7 +34,7 @@
<!--Login--> <!--Login-->
<string name="login_header_default">Sign in with the student or parent account</string> <string name="login_header_default">Sign in with the student or parent account</string>
<string name="login_header_symbol">Enter the symbol from the register page</string> <string name="login_header_symbol">Enter the symbol from the register page for account: &lt;b>%1$s&lt;/b></string>
<string name="login_nickname_hint">Username</string> <string name="login_nickname_hint">Username</string>
<string name="login_email_hint">Email</string> <string name="login_email_hint">Email</string>
<string name="login_login_pesel_email_hint">Login, PESEL or e-mail</string> <string name="login_login_pesel_email_hint">Login, PESEL or e-mail</string>
@ -71,7 +71,7 @@
<string name="login_contact_discord">Discord</string> <string name="login_contact_discord">Discord</string>
<string name="login_email_intent_title">Send email</string> <string name="login_email_intent_title">Send email</string>
<string name="login_email_subject" translatable="false">Zgłoszenie: Problemy z logowaniem</string> <string name="login_email_subject" translatable="false">Zgłoszenie: Problemy z logowaniem</string>
<string name="login_email_text" translatable="false">Informacje o aplikacji:\n\nUrządzenie: %1$s\nWersja SDK: %2$s\nWersja aplikacji: %3$s\nDodatkowe informacje: %4$s\nOstatni błąd: %5$s\n\nOpis problemu (pełna nazwa szkoły, klasa ucznia): </string> <string name="login_email_text" translatable="false">Informacje o aplikacji:\n\nUrządzenie: %1$s\nWersja SDK: %2$s\nWersja aplikacji: %3$s\nDodatkowe informacje: %4$s\nOstatni błąd: %5$s\n\nPełna nazwa szkoły i klasa ucznia: </string>
<string name="login_recover_warning">Make sure you select the correct UONET+ register variation!</string> <string name="login_recover_warning">Make sure you select the correct UONET+ register variation!</string>
<string name="login_recover_button">I forgot my password</string> <string name="login_recover_button">I forgot my password</string>
<string name="login_recover_title">Recover your account</string> <string name="login_recover_title">Recover your account</string>