diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/login/studentselect/LoginStudentSelectItem.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/login/studentselect/LoginStudentSelectItem.kt index fa21cff94..967e762e8 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/login/studentselect/LoginStudentSelectItem.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/login/studentselect/LoginStudentSelectItem.kt @@ -2,6 +2,8 @@ package io.github.wulkanowy.ui.modules.login.studentselect import android.annotation.SuppressLint import android.view.View +import android.view.View.GONE +import android.view.View.VISIBLE import eu.davidea.flexibleadapter.FlexibleAdapter import eu.davidea.flexibleadapter.items.AbstractFlexibleItem import eu.davidea.flexibleadapter.items.IFlexible @@ -10,12 +12,16 @@ import io.github.wulkanowy.R import io.github.wulkanowy.data.db.entities.Student import kotlinx.android.extensions.LayoutContainer import kotlinx.android.synthetic.main.item_login_student_select.* +import timber.log.Timber -class LoginStudentSelectItem(val student: Student) : AbstractFlexibleItem() { +class LoginStudentSelectItem(val student: Student, val alreadySaved: Boolean) : + AbstractFlexibleItem() { override fun getLayoutRes() = R.layout.item_login_student_select override fun createViewHolder(view: View, adapter: FlexibleAdapter>): ItemViewHolder { + Timber.i("createViewHolder()") + Timber.i(alreadySaved.toString()) return ItemViewHolder(view, adapter) } @@ -24,6 +30,10 @@ class LoginStudentSelectItem(val student: Student) : AbstractFlexibleItem) : FlexibleViewHolder(view, adapter), LayoutContainer { + class ItemViewHolder(view: View, val adapter: FlexibleAdapter<*>) : + FlexibleViewHolder(view, adapter), LayoutContainer { override val containerView: View get() = itemView @@ -53,7 +65,10 @@ class LoginStudentSelectItem(val student: Student) : AbstractFlexibleItem?) { - if (item is LoginStudentSelectItem) { + if (item is LoginStudentSelectItem && !item.alreadySaved) { selectedStudents.removeAll { it == item.student } .let { if (!it) selectedStudents.add(item.student) } @@ -58,11 +59,33 @@ class LoginStudentSelectPresenter @Inject constructor( } } + private fun compareStudents(a: Student, b: Student): Boolean { + return a.email == b.email + && a.symbol == b.symbol + && a.studentId == b.studentId + && a.schoolSymbol == b.schoolSymbol + && a.classId == b.classId + } + private fun loadData(students: List) { this.students = students - view?.apply { - updateData(students.map { LoginStudentSelectItem(it) }) - } + disposable.add(studentRepository.getSavedStudents() + .map { savedStudents -> + students.map { student -> + Pair(student, savedStudents.any { compareStudents(student, it) }) + } + } + .subscribeOn(schedulers.backgroundThread) + .observeOn(schedulers.mainThread) + .subscribe({ + view?.updateData(it.map { studentPair -> + LoginStudentSelectItem(studentPair.first, studentPair.second) + }) + }, { + errorHandler.dispatch(it) + view?.updateData(students.map { student -> LoginStudentSelectItem(student, false) }) + }) + ) } private fun registerStudents(students: List) { diff --git a/app/src/main/res/layout/item_login_student_select.xml b/app/src/main/res/layout/item_login_student_select.xml index 254bff60f..941159eb1 100644 --- a/app/src/main/res/layout/item_login_student_select.xml +++ b/app/src/main/res/layout/item_login_student_select.xml @@ -2,8 +2,11 @@ xmlns:tools="http://schemas.android.com/tools" android:id="@+id/loginItemContainer" android:layout_width="match_parent" - android:layout_height="72dp" - android:background="?selectableItemBackground"> + android:layout_height="wrap_content" + android:minHeight="72dp" + android:background="?selectableItemBackground" + android:paddingBottom="8dp" + android:paddingTop="8dp"> + + + android:text="@string/login_signed_in" + android:enabled="false" + android:visibility="gone" + tools:visibility="visible" /> diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 9ebaf8313..2ba2975e4 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -52,6 +52,7 @@ Email Discord Wyślij email + Uczeń jest już zalogowany diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 736d5fd63..7777bdc6a 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -53,6 +53,7 @@ Электронная почта Discord Отправить письмо + Студент уже вошел в систему diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2c896624a..237384896 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -54,6 +54,7 @@ Send email Zgłoszenie: Problemy z logowaniem Informacje o aplikacji:\n\nUrządzenie: %1$s\nWersja SDK: %2$s\nWersja aplikacji: %3$s\n\nOpis problemu: + Student is already signed in diff --git a/app/src/test/java/io/github/wulkanowy/ui/modules/login/studentselect/LoginStudentSelectPresenterTest.kt b/app/src/test/java/io/github/wulkanowy/ui/modules/login/studentselect/LoginStudentSelectPresenterTest.kt index 2c174fb58..90df9317c 100644 --- a/app/src/test/java/io/github/wulkanowy/ui/modules/login/studentselect/LoginStudentSelectPresenterTest.kt +++ b/app/src/test/java/io/github/wulkanowy/ui/modules/login/studentselect/LoginStudentSelectPresenterTest.kt @@ -53,7 +53,7 @@ class LoginStudentSelectPresenterTest { fun onSelectedStudentTest() { doReturn(Single.just(listOf(1L))).`when`(studentRepository).saveStudents(listOf(testStudent)) doReturn(Completable.complete()).`when`(studentRepository).switchStudent(testStudent) - presenter.onItemSelected(LoginStudentSelectItem(testStudent)) + presenter.onItemSelected(LoginStudentSelectItem(testStudent, false)) presenter.onSignIn() verify(loginStudentSelectView).showContent(false) verify(loginStudentSelectView).showProgress(true) @@ -64,7 +64,7 @@ class LoginStudentSelectPresenterTest { fun onSelectedStudentErrorTest() { doReturn(Single.error(testException)).`when`(studentRepository).saveStudents(listOf(testStudent)) doReturn(Completable.complete()).`when`(studentRepository).logoutStudent(testStudent) - presenter.onItemSelected(LoginStudentSelectItem(testStudent)) + presenter.onItemSelected(LoginStudentSelectItem(testStudent, false)) presenter.onSignIn() verify(loginStudentSelectView).showContent(false) verify(loginStudentSelectView).showProgress(true)