diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/login/advanced/LoginAdvancedFragment.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/login/advanced/LoginAdvancedFragment.kt index 353effa9b..e04e50bb7 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/login/advanced/LoginAdvancedFragment.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/login/advanced/LoginAdvancedFragment.kt @@ -35,8 +35,8 @@ class LoginAdvancedFragment : BaseFragment(), LoginAdvancedView { else -> "HYBRID" } - override val formNameValue: String - get() = loginFormName.text.toString().trim() + override val formUsernameValue: String + get() = loginFormUsername.text.toString().trim() override val formPassValue: String get() = loginFormPass.text.toString().trim() @@ -45,8 +45,8 @@ class LoginAdvancedFragment : BaseFragment(), LoginAdvancedView { private lateinit var hostValues: Array - override val formHostValue: String? - get() = hostValues.getOrNull(hostKeys.indexOf(loginFormHost.text.toString())) + override val formHostValue: String + get() = hostValues.getOrNull(hostKeys.indexOf(loginFormHost.text.toString())).orEmpty() override val formPinValue: String get() = loginFormPin.text.toString().trim() @@ -57,6 +57,12 @@ class LoginAdvancedFragment : BaseFragment(), LoginAdvancedView { override val formTokenValue: String get() = loginFormToken.text.toString().trim() + override val nicknameLabel: String + get() = getString(R.string.login_nickname_hint) + + override val emailLabel: String + get() = getString(R.string.login_email_hint) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_login_advanced, container, false) } @@ -70,7 +76,7 @@ class LoginAdvancedFragment : BaseFragment(), LoginAdvancedView { hostKeys = resources.getStringArray(R.array.hosts_keys) hostValues = resources.getStringArray(R.array.hosts_values) - loginFormName.doOnTextChanged { _, _, _, _ -> presenter.onNameTextChanged() } + loginFormUsername.doOnTextChanged { _, _, _, _ -> presenter.onUsernameTextChanged() } loginFormPass.doOnTextChanged { _, _, _, _ -> presenter.onPassTextChanged() } loginFormPin.doOnTextChanged { _, _, _, _ -> presenter.onPinTextChanged() } loginFormSymbol.doOnTextChanged { _, _, _, _ -> presenter.onSymbolTextChanged() } @@ -103,16 +109,20 @@ class LoginAdvancedFragment : BaseFragment(), LoginAdvancedView { } } - override fun setDefaultCredentials(name: String, pass: String, symbol: String, token: String, pin: String) { - loginFormName.setText(name) + override fun setDefaultCredentials(username: String, pass: String, symbol: String, token: String, pin: String) { + loginFormUsername.setText(username) loginFormPass.setText(pass) loginFormToken.setText(token) loginFormSymbol.setText(symbol) loginFormPin.setText(pin) } - override fun setErrorNameRequired() { - with(loginFormNameLayout) { + override fun setUsernameLabel(label: String) { + loginFormUsernameLayout.hint = label + } + + override fun setErrorUsernameRequired() { + with(loginFormUsernameLayout) { requestFocus() error = getString(R.string.login_field_required) } @@ -181,8 +191,8 @@ class LoginAdvancedFragment : BaseFragment(), LoginAdvancedView { } } - override fun clearNameError() { - loginFormNameLayout.error = null + override fun clearUsernameError() { + loginFormUsernameLayout.error = null } override fun clearPassError() { @@ -202,7 +212,7 @@ class LoginAdvancedFragment : BaseFragment(), LoginAdvancedView { } override fun showOnlyHybridModeInputs() { - loginFormNameLayout.visibility = View.VISIBLE + loginFormUsernameLayout.visibility = View.VISIBLE loginFormPassLayout.visibility = View.VISIBLE loginFormHostLayout.visibility = View.VISIBLE loginFormPinLayout.visibility = View.GONE @@ -211,7 +221,7 @@ class LoginAdvancedFragment : BaseFragment(), LoginAdvancedView { } override fun showOnlyScrapperModeInputs() { - loginFormNameLayout.visibility = View.VISIBLE + loginFormUsernameLayout.visibility = View.VISIBLE loginFormPassLayout.visibility = View.VISIBLE loginFormHostLayout.visibility = View.VISIBLE loginFormPinLayout.visibility = View.GONE @@ -220,7 +230,7 @@ class LoginAdvancedFragment : BaseFragment(), LoginAdvancedView { } override fun showOnlyMobileApiModeInputs() { - loginFormNameLayout.visibility = View.GONE + loginFormUsernameLayout.visibility = View.GONE loginFormPassLayout.visibility = View.GONE loginFormHostLayout.visibility = View.GONE loginFormPinLayout.visibility = View.VISIBLE @@ -246,12 +256,17 @@ class LoginAdvancedFragment : BaseFragment(), LoginAdvancedView { override fun notifyParentAccountLogged(students: List) { (activity as? LoginActivity)?.onFormFragmentAccountLogged(students, Triple( - loginFormName.text.toString(), + loginFormUsername.text.toString(), loginFormPass.text.toString(), resources.getStringArray(R.array.hosts_values)[1] )) } + override fun onResume() { + super.onResume() + presenter.updateUsernameLabel() + } + override fun onDestroyView() { super.onDestroyView() presenter.onDetachView() diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/login/advanced/LoginAdvancedPresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/login/advanced/LoginAdvancedPresenter.kt index 1e49e5d8b..5c49ca607 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/login/advanced/LoginAdvancedPresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/login/advanced/LoginAdvancedPresenter.kt @@ -65,13 +65,20 @@ class LoginAdvancedPresenter @Inject constructor( } } + fun updateUsernameLabel() { + view?.apply { + setUsernameLabel(if ("vulcan" in formHostValue || "fakelog" in formHostValue) emailLabel else nicknameLabel) + } + } + fun onHostSelected() { view?.apply { clearPassError() - clearNameError() - if (formHostValue?.contains("fakelog") == true) { + clearUsernameError() + if (formHostValue.contains("fakelog")) { setDefaultCredentials("jan@fakelog.cf", "jan123", "powiatwulkanowy", "FK100000", "999999") } + updateUsernameLabel() } } @@ -89,8 +96,8 @@ class LoginAdvancedPresenter @Inject constructor( view?.clearPassError() } - fun onNameTextChanged() { - view?.clearNameError() + fun onUsernameTextChanged() { + view?.clearUsernameError() } fun onPinTextChanged() { @@ -137,7 +144,7 @@ class LoginAdvancedPresenter @Inject constructor( } private fun getStudentsAppropriatesToLoginType(): Single> { - val email = view?.formNameValue.orEmpty() + val email = view?.formUsernameValue.orEmpty() val password = view?.formPassValue.orEmpty() val endpoint = view?.formHostValue.orEmpty() @@ -153,7 +160,7 @@ class LoginAdvancedPresenter @Inject constructor( } private fun validateCredentials(): Boolean { - val login = view?.formNameValue.orEmpty() + val login = view?.formUsernameValue.orEmpty() val password = view?.formPassValue.orEmpty() val pin = view?.formPinValue.orEmpty() @@ -181,7 +188,7 @@ class LoginAdvancedPresenter @Inject constructor( } Sdk.Mode.SCRAPPER -> { if (login.isEmpty()) { - view?.setErrorNameRequired() + view?.setErrorUsernameRequired() isCorrect = false } @@ -197,7 +204,7 @@ class LoginAdvancedPresenter @Inject constructor( } Sdk.Mode.HYBRID -> { if (login.isEmpty()) { - view?.setErrorNameRequired() + view?.setErrorUsernameRequired() isCorrect = false } diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/login/advanced/LoginAdvancedView.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/login/advanced/LoginAdvancedView.kt index 85a85a331..602b1d369 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/login/advanced/LoginAdvancedView.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/login/advanced/LoginAdvancedView.kt @@ -5,11 +5,11 @@ import io.github.wulkanowy.ui.base.BaseView interface LoginAdvancedView : BaseView { - val formNameValue: String + val formUsernameValue: String val formPassValue: String - val formHostValue: String? + val formHostValue: String val formLoginType: String @@ -19,11 +19,17 @@ interface LoginAdvancedView : BaseView { val formTokenValue: String + val nicknameLabel: String + + val emailLabel: String + fun initView() - fun setDefaultCredentials(name: String, pass: String, symbol: String, token: String, pin: String) + fun setDefaultCredentials(username: String, pass: String, symbol: String, token: String, pin: String) - fun setErrorNameRequired() + fun setUsernameLabel(label: String) + + fun setErrorUsernameRequired() fun setErrorPassRequired(focus: Boolean) @@ -31,7 +37,7 @@ interface LoginAdvancedView : BaseView { fun setErrorPassIncorrect() - fun clearNameError() + fun clearUsernameError() fun clearPassError() diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/login/form/LoginFormFragment.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/login/form/LoginFormFragment.kt index cbd405c28..e4ee66fc2 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/login/form/LoginFormFragment.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/login/form/LoginFormFragment.kt @@ -34,11 +34,20 @@ class LoginFormFragment : BaseFragment(), LoginFormView { fun newInstance() = LoginFormFragment() } - override val formNameValue get() = loginFormName.text.toString() + override val formUsernameValue: String + get() = loginFormUsername.text.toString() - override val formPassValue get() = loginFormPass.text.toString() + override val formPassValue: String + get() = loginFormPass.text.toString() - override val formHostValue get() = hostValues.getOrNull(hostKeys.indexOf(loginFormHost.text.toString())) + override val formHostValue: String + get() = hostValues.getOrNull(hostKeys.indexOf(loginFormHost.text.toString())).orEmpty() + + override val nicknameLabel: String + get() = getString(R.string.login_nickname_hint) + + override val emailLabel: String + get() = getString(R.string.login_email_hint) private lateinit var hostKeys: Array @@ -57,7 +66,7 @@ class LoginFormFragment : BaseFragment(), LoginFormView { hostKeys = resources.getStringArray(R.array.hosts_keys) hostValues = resources.getStringArray(R.array.hosts_values) - loginFormName.doOnTextChanged { _, _, _, _ -> presenter.onNameTextChanged() } + loginFormUsername.doOnTextChanged { _, _, _, _ -> presenter.onUsernameTextChanged() } loginFormPass.doOnTextChanged { _, _, _, _ -> presenter.onPassTextChanged() } loginFormHost.setOnItemClickListener { _, _, _, _ -> presenter.onHostSelected() } loginFormSignIn.setOnClickListener { presenter.onSignInClick() } @@ -76,13 +85,17 @@ class LoginFormFragment : BaseFragment(), LoginFormView { } } - override fun setCredentials(name: String, pass: String) { - loginFormName.setText(name) + override fun setCredentials(username: String, pass: String) { + loginFormUsername.setText(username) loginFormPass.setText(pass) } - override fun setErrorNameRequired() { - with(loginFormNameLayout) { + override fun setUsernameLabel(label: String) { + loginFormUsernameLayout.hint = label + } + + override fun setErrorUsernameRequired() { + with(loginFormUsernameLayout) { requestFocus() error = getString(R.string.login_field_required) } @@ -109,8 +122,8 @@ class LoginFormFragment : BaseFragment(), LoginFormView { } } - override fun clearNameError() { - loginFormNameLayout.error = null + override fun clearUsernameError() { + loginFormUsernameLayout.error = null } override fun clearPassError() { @@ -163,6 +176,11 @@ class LoginFormFragment : BaseFragment(), LoginFormView { context?.openInternetBrowser("https://wulkanowy.github.io/czesto-zadawane-pytania/dlaczego-nie-moge-sie-zalogowac", ::showMessage) } + override fun onResume() { + super.onResume() + presenter.updateUsernameLabel() + } + override fun openEmail() { context?.openEmailClient( requireContext().getString(R.string.login_email_intent_title), diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/login/form/LoginFormPresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/login/form/LoginFormPresenter.kt index 0b45c9a53..bc8655346 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/login/form/LoginFormPresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/login/form/LoginFormPresenter.kt @@ -42,10 +42,17 @@ class LoginFormPresenter @Inject constructor( fun onHostSelected() { view?.apply { clearPassError() - clearNameError() - if (formHostValue?.contains("fakelog") == true) { + clearUsernameError() + if (formHostValue.contains("fakelog")) { setCredentials("jan@fakelog.cf", "jan123") } + updateUsernameLabel() + } + } + + fun updateUsernameLabel() { + view?.apply { + setUsernameLabel(if ("vulcan" in formHostValue || "fakelog" in formHostValue) emailLabel else nicknameLabel) } } @@ -53,12 +60,12 @@ class LoginFormPresenter @Inject constructor( view?.clearPassError() } - fun onNameTextChanged() { - view?.clearNameError() + fun onUsernameTextChanged() { + view?.clearUsernameError() } fun onSignInClick() { - val email = view?.formNameValue.orEmpty().trim() + val email = view?.formUsernameValue.orEmpty().trim() val password = view?.formPassValue.orEmpty().trim() val endpoint = view?.formHostValue.orEmpty().trim() @@ -105,7 +112,7 @@ class LoginFormPresenter @Inject constructor( var isCorrect = true if (login.isEmpty()) { - view?.setErrorNameRequired() + view?.setErrorUsernameRequired() isCorrect = false } diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/login/form/LoginFormView.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/login/form/LoginFormView.kt index 6da57c8c5..e03f00422 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/login/form/LoginFormView.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/login/form/LoginFormView.kt @@ -7,15 +7,21 @@ interface LoginFormView : BaseView { fun initView() - val formNameValue: String + val formUsernameValue: String val formPassValue: String - val formHostValue: String? + val formHostValue: String - fun setCredentials(name: String, pass: String) + val nicknameLabel: String - fun setErrorNameRequired() + val emailLabel: String + + fun setCredentials(username: String, pass: String) + + fun setUsernameLabel(label: String) + + fun setErrorUsernameRequired() fun setErrorPassRequired(focus: Boolean) @@ -23,7 +29,7 @@ interface LoginFormView : BaseView { fun setErrorPassIncorrect() - fun clearNameError() + fun clearUsernameError() fun clearPassError() diff --git a/app/src/main/res/layout/fragment_login_advanced.xml b/app/src/main/res/layout/fragment_login_advanced.xml index 2174716ab..dec61baea 100644 --- a/app/src/main/res/layout/fragment_login_advanced.xml +++ b/app/src/main/res/layout/fragment_login_advanced.xml @@ -52,7 +52,7 @@ android:gravity="center" android:orientation="horizontal" android:paddingTop="24dp" - app:layout_constraintBottom_toTopOf="@+id/loginFormNameLayout" + app:layout_constraintBottom_toTopOf="@+id/loginFormUsernameLayout" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/loginFormHeader"> @@ -81,7 +81,7 @@ Zaloguj się za pomocą konta ucznia lub rodzica Podaj symbol - Email lub nick + Nazwa użytkownika + Email Hasło Dziennik Symbol diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 7777bdc6a..e0b07aebc 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -25,7 +25,8 @@ Авторизируйтесь при помощи аккаунта ученика или родителя Впишите \"symbol\" - Электронная почта или имя пользователя + Имя пользователя + Электронная почта Пароль Дневник Мобильный API diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 237384896..4bc0aaa66 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -24,7 +24,8 @@ Sign in with the student or parent account Enter the symbol - Email or nick + Username + Email Password Register Mobile API diff --git a/app/src/test/java/io/github/wulkanowy/ui/modules/login/form/LoginFormPresenterTest.kt b/app/src/test/java/io/github/wulkanowy/ui/modules/login/form/LoginFormPresenterTest.kt index be99d4d46..c21960621 100644 --- a/app/src/test/java/io/github/wulkanowy/ui/modules/login/form/LoginFormPresenterTest.kt +++ b/app/src/test/java/io/github/wulkanowy/ui/modules/login/form/LoginFormPresenterTest.kt @@ -4,7 +4,6 @@ import io.github.wulkanowy.TestSchedulersProvider import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.data.repositories.student.StudentRepository import io.github.wulkanowy.ui.modules.login.LoginErrorHandler -import io.github.wulkanowy.utils.AppInfo import io.github.wulkanowy.utils.FirebaseAnalyticsHelper import io.reactivex.Single import org.junit.Before @@ -34,9 +33,6 @@ class LoginFormPresenterTest { @Mock lateinit var analytics: FirebaseAnalyticsHelper - @Mock - lateinit var appInfo: AppInfo - private lateinit var presenter: LoginFormPresenter @Before @@ -54,36 +50,36 @@ class LoginFormPresenterTest { @Test fun emptyNicknameLoginTest() { - `when`(loginFormView.formNameValue).thenReturn("") + `when`(loginFormView.formUsernameValue).thenReturn("") `when`(loginFormView.formPassValue).thenReturn("test123") `when`(loginFormView.formHostValue).thenReturn("https://fakelog.cf") presenter.onSignInClick() - verify(loginFormView).setErrorNameRequired() + verify(loginFormView).setErrorUsernameRequired() verify(loginFormView, never()).setErrorPassRequired(false) verify(loginFormView, never()).setErrorPassInvalid(false) } @Test fun emptyPassLoginTest() { - `when`(loginFormView.formNameValue).thenReturn("@") + `when`(loginFormView.formUsernameValue).thenReturn("@") `when`(loginFormView.formPassValue).thenReturn("") `when`(loginFormView.formHostValue).thenReturn("https://fakelog.cf") presenter.onSignInClick() - verify(loginFormView, never()).setErrorNameRequired() + verify(loginFormView, never()).setErrorUsernameRequired() verify(loginFormView).setErrorPassRequired(true) verify(loginFormView, never()).setErrorPassInvalid(false) } @Test fun invalidPassLoginTest() { - `when`(loginFormView.formNameValue).thenReturn("@") + `when`(loginFormView.formUsernameValue).thenReturn("@") `when`(loginFormView.formPassValue).thenReturn("123") `when`(loginFormView.formHostValue).thenReturn("https://fakelog.cf") presenter.onSignInClick() - verify(loginFormView, never()).setErrorNameRequired() + verify(loginFormView, never()).setErrorUsernameRequired() verify(loginFormView, never()).setErrorPassRequired(true) verify(loginFormView).setErrorPassInvalid(true) } @@ -93,7 +89,7 @@ class LoginFormPresenterTest { val studentTest = Student(email = "test@", password = "123", scrapperBaseUrl = "https://fakelog.cf", loginType = "AUTO", studentName = "", schoolSymbol = "", schoolName = "", studentId = 0, classId = 1, isCurrent = false, symbol = "", registrationDate = now(), className = "", mobileBaseUrl = "", privateKey = "", certificateKey = "", loginMode = "", userLoginId = 0, isParent = false) doReturn(Single.just(listOf(studentTest))).`when`(repository).getStudentsScrapper(anyString(), anyString(), anyString(), anyString()) - `when`(loginFormView.formNameValue).thenReturn("@") + `when`(loginFormView.formUsernameValue).thenReturn("@") `when`(loginFormView.formPassValue).thenReturn("123456") `when`(loginFormView.formHostValue).thenReturn("https://fakelog.cf") presenter.onSignInClick() @@ -109,7 +105,7 @@ class LoginFormPresenterTest { fun loginEmptyTest() { doReturn(Single.just(emptyList())) .`when`(repository).getStudentsScrapper(anyString(), anyString(), anyString(), anyString()) - `when`(loginFormView.formNameValue).thenReturn("@") + `when`(loginFormView.formUsernameValue).thenReturn("@") `when`(loginFormView.formPassValue).thenReturn("123456") `when`(loginFormView.formHostValue).thenReturn("https://fakelog.cf") presenter.onSignInClick() @@ -125,7 +121,7 @@ class LoginFormPresenterTest { fun loginEmptyTwiceTest() { doReturn(Single.just(emptyList())) .`when`(repository).getStudentsScrapper(anyString(), anyString(), anyString(), anyString()) - `when`(loginFormView.formNameValue).thenReturn("@") + `when`(loginFormView.formUsernameValue).thenReturn("@") `when`(loginFormView.formPassValue).thenReturn("123456") `when`(loginFormView.formHostValue).thenReturn("https://fakelog.cf") presenter.onSignInClick() @@ -142,7 +138,7 @@ class LoginFormPresenterTest { fun loginErrorTest() { val testException = RuntimeException("test") doReturn(Single.error>(testException)).`when`(repository).getStudentsScrapper(anyString(), anyString(), anyString(), anyString()) - `when`(loginFormView.formNameValue).thenReturn("@") + `when`(loginFormView.formUsernameValue).thenReturn("@") `when`(loginFormView.formPassValue).thenReturn("123456") `when`(loginFormView.formHostValue).thenReturn("https://fakelog.cf") presenter.onSignInClick()