diff --git a/.travis.yml b/.travis.yml index a5cb2ed9..ddd13916 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,7 +14,7 @@ cache: branches: only: - develop - - 0.17.0 + - 0.17.1 android: licenses: diff --git a/app/build.gradle b/app/build.gradle index 9eeb3e7d..9e36346d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ android { testApplicationId "io.github.tests.wulkanowy" minSdkVersion 17 targetSdkVersion 29 - versionCode 54 - versionName "0.17.0" + versionCode 55 + versionName "0.17.1" multiDexEnabled true testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true @@ -128,7 +128,7 @@ configurations.all { } dependencies { - implementation "io.github.wulkanowy:sdk:0.17.0" + implementation "io.github.wulkanowy:sdk:0.17.1" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" implementation "androidx.core:core-ktx:1.2.0" @@ -187,8 +187,8 @@ dependencies { implementation "io.coil-kt:coil:0.9.5" playImplementation 'com.google.firebase:firebase-analytics:17.3.0' - playImplementation 'com.google.firebase:firebase-inappmessaging-display-ktx:19.0.4' - playImplementation "com.google.firebase:firebase-inappmessaging-ktx:19.0.4" + playImplementation 'com.google.firebase:firebase-inappmessaging-display-ktx:19.0.5' + playImplementation "com.google.firebase:firebase-inappmessaging-ktx:19.0.5" playImplementation "com.google.firebase:firebase-messaging:20.1.0" playImplementation "com.crashlytics.sdk.android:crashlytics:2.10.1" playImplementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava' diff --git a/app/src/androidTest/java/io/github/wulkanowy/data/repositories/TestEntityCreator.kt b/app/src/androidTest/java/io/github/wulkanowy/data/repositories/TestEntityCreator.kt new file mode 100644 index 00000000..bbbfd83d --- /dev/null +++ b/app/src/androidTest/java/io/github/wulkanowy/data/repositories/TestEntityCreator.kt @@ -0,0 +1,29 @@ +package io.github.wulkanowy.data.repositories + +import io.github.wulkanowy.data.db.entities.Student +import org.threeten.bp.LocalDateTime + +fun getStudent(): Student { + return Student( + email = "test", + password = "test123", + schoolSymbol = "23", + scrapperBaseUrl = "fakelog.cf", + loginType = "AUTO", + isCurrent = true, + studentName = "", + schoolShortName = "", + schoolName = "", + studentId = 0, + classId = 1, + symbol = "", + registrationDate = LocalDateTime.now(), + className = "", + loginMode = "API", + certificateKey = "", + privateKey = "", + mobileBaseUrl = "", + userLoginId = 0, + isParent = false + ) +} diff --git a/app/src/androidTest/java/io/github/wulkanowy/data/repositories/student/StudentLocalTest.kt b/app/src/androidTest/java/io/github/wulkanowy/data/repositories/student/StudentLocalTest.kt index 5f8be6b1..530bfb3f 100644 --- a/app/src/androidTest/java/io/github/wulkanowy/data/repositories/student/StudentLocalTest.kt +++ b/app/src/androidTest/java/io/github/wulkanowy/data/repositories/student/StudentLocalTest.kt @@ -5,13 +5,11 @@ import androidx.room.Room import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 import io.github.wulkanowy.data.db.AppDatabase -import io.github.wulkanowy.data.db.SharedPrefProvider -import io.github.wulkanowy.data.db.entities.Student +import io.github.wulkanowy.data.repositories.getStudent import org.junit.After import org.junit.Before import org.junit.Test import org.junit.runner.RunWith -import org.threeten.bp.LocalDateTime.now import kotlin.test.assertEquals @RunWith(AndroidJUnit4::class) @@ -21,14 +19,13 @@ class StudentLocalTest { private lateinit var testDb: AppDatabase - private lateinit var sharedProvider: SharedPrefProvider + private val student = getStudent() @Before fun createDb() { val context = ApplicationProvider.getApplicationContext() testDb = Room.inMemoryDatabaseBuilder(context, AppDatabase::class.java) .build() - sharedProvider = SharedPrefProvider(context.getSharedPreferences("TEST", Context.MODE_PRIVATE)) studentLocal = StudentLocal(testDb.studentDao, context) } @@ -39,8 +36,7 @@ class StudentLocalTest { @Test fun saveAndReadTest() { - studentLocal.saveStudents(listOf(Student(email = "test", password = "test123", schoolSymbol = "23", scrapperBaseUrl = "fakelog.cf", loginType = "AUTO", isCurrent = true, studentName = "", schoolShortName = "", schoolName = "", studentId = 0, classId = 1, symbol = "", registrationDate = now(), className = "", loginMode = "API", certificateKey = "", privateKey = "", mobileBaseUrl = "", userLoginId = 0, isParent = false))) - .blockingGet() + studentLocal.saveStudents(listOf(student)).blockingGet() val student = studentLocal.getCurrentStudent(true).blockingGet() assertEquals("23", student.schoolSymbol) diff --git a/app/src/androidTest/java/io/github/wulkanowy/data/repositories/timetable/TimetableRepositoryTest.kt b/app/src/androidTest/java/io/github/wulkanowy/data/repositories/timetable/TimetableRepositoryTest.kt index 565425d4..fdf193a2 100644 --- a/app/src/androidTest/java/io/github/wulkanowy/data/repositories/timetable/TimetableRepositoryTest.kt +++ b/app/src/androidTest/java/io/github/wulkanowy/data/repositories/timetable/TimetableRepositoryTest.kt @@ -9,6 +9,7 @@ import com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.Inter import io.github.wulkanowy.data.db.AppDatabase import io.github.wulkanowy.data.db.entities.Semester import io.github.wulkanowy.data.repositories.TestInternetObservingStrategy +import io.github.wulkanowy.data.repositories.getStudent import io.github.wulkanowy.sdk.Sdk import io.mockk.MockKAnnotations import io.mockk.every @@ -33,6 +34,8 @@ class TimetableRepositoryTest { .strategy(TestInternetObservingStrategy()) .build() + private val student = getStudent() + @MockK private lateinit var semesterMock: Semester @@ -78,7 +81,7 @@ class TimetableRepositoryTest { )) val lessons = TimetableRepository(settings, timetableLocal, timetableRemote) - .getTimetable(semesterMock, LocalDate.of(2019, 3, 5), LocalDate.of(2019, 3, 5), true) + .getTimetable(student, semesterMock, LocalDate.of(2019, 3, 5), LocalDate.of(2019, 3, 5), true) .blockingGet() assertEquals(4, lessons.size) @@ -124,7 +127,7 @@ class TimetableRepositoryTest { )) val lessons = TimetableRepository(settings, timetableLocal, timetableRemote) - .getTimetable(semesterMock, LocalDate.of(2019, 12, 23), LocalDate.of(2019, 12, 25), true) + .getTimetable(student, semesterMock, LocalDate.of(2019, 12, 23), LocalDate.of(2019, 12, 25), true) .blockingGet() assertEquals(12, lessons.size) diff --git a/app/src/main/java/io/github/wulkanowy/data/SdkHelper.kt b/app/src/main/java/io/github/wulkanowy/data/SdkHelper.kt deleted file mode 100644 index 90171259..00000000 --- a/app/src/main/java/io/github/wulkanowy/data/SdkHelper.kt +++ /dev/null @@ -1,30 +0,0 @@ -package io.github.wulkanowy.data - -import io.github.wulkanowy.data.db.entities.Student -import io.github.wulkanowy.sdk.Sdk -import javax.inject.Inject - -class SdkHelper @Inject constructor(private val sdk: Sdk) { - - fun init(student: Student) { - sdk.apply { - email = student.email - password = student.password - symbol = student.symbol - schoolSymbol = student.schoolSymbol - studentId = student.studentId - classId = student.classId - - if (Sdk.Mode.valueOf(student.loginMode) != Sdk.Mode.API) { - scrapperBaseUrl = student.scrapperBaseUrl - loginType = Sdk.ScrapperLoginType.valueOf(student.loginType) - } - loginId = student.userLoginId - - mode = Sdk.Mode.valueOf(student.loginMode) - mobileBaseUrl = student.mobileBaseUrl - certKey = student.certificateKey - privateKey = student.privateKey - } - } -} diff --git a/app/src/main/java/io/github/wulkanowy/data/db/dao/StudentDao.kt b/app/src/main/java/io/github/wulkanowy/data/db/dao/StudentDao.kt index 57bf25fb..901ddc73 100644 --- a/app/src/main/java/io/github/wulkanowy/data/db/dao/StudentDao.kt +++ b/app/src/main/java/io/github/wulkanowy/data/db/dao/StudentDao.kt @@ -22,6 +22,9 @@ interface StudentDao { @Query("SELECT * FROM Students WHERE is_current = 1") fun loadCurrent(): Maybe + @Query("SELECT * FROM Students WHERE id = :id") + fun loadById(id: Int): Maybe + @Query("SELECT * FROM Students") fun loadAll(): Maybe> diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/attendance/AttendanceRemote.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/attendance/AttendanceRemote.kt index 1828c2bd..f64d920d 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/attendance/AttendanceRemote.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/attendance/AttendanceRemote.kt @@ -2,8 +2,10 @@ package io.github.wulkanowy.data.repositories.attendance import io.github.wulkanowy.data.db.entities.Attendance import io.github.wulkanowy.data.db.entities.Semester +import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.sdk.Sdk import io.github.wulkanowy.sdk.pojo.Absent +import io.github.wulkanowy.utils.init import io.reactivex.Single import org.threeten.bp.LocalDate import org.threeten.bp.LocalDateTime @@ -14,8 +16,9 @@ import javax.inject.Singleton @Singleton class AttendanceRemote @Inject constructor(private val sdk: Sdk) { - fun getAttendance(semester: Semester, startDate: LocalDate, endDate: LocalDate): Single> { - return sdk.switchDiary(semester.diaryId, semester.schoolYear).getAttendance(startDate, endDate, semester.semesterId) + fun getAttendance(student: Student, semester: Semester, startDate: LocalDate, endDate: LocalDate): Single> { + return sdk.init(student).switchDiary(semester.diaryId, semester.schoolYear) + .getAttendance(startDate, endDate, semester.semesterId) .map { attendance -> attendance.map { Attendance( @@ -39,8 +42,8 @@ class AttendanceRemote @Inject constructor(private val sdk: Sdk) { } } - fun excuseAbsence(semester: Semester, absenceList: List, reason: String?): Single { - return sdk.switchDiary(semester.diaryId, semester.schoolYear).excuseForAbsence(absenceList.map { attendance -> + fun excuseAbsence(student: Student, semester: Semester, absenceList: List, reason: String?): Single { + return sdk.init(student).switchDiary(semester.diaryId, semester.schoolYear).excuseForAbsence(absenceList.map { attendance -> Absent( date = LocalDateTime.of(attendance.date, LocalTime.of(0, 0)), timeId = attendance.timeId diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/attendance/AttendanceRepository.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/attendance/AttendanceRepository.kt index fc3830c2..22fe7fa5 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/attendance/AttendanceRepository.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/attendance/AttendanceRepository.kt @@ -4,6 +4,7 @@ import com.github.pwittchen.reactivenetwork.library.rx2.ReactiveNetwork import com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.InternetObservingSettings import io.github.wulkanowy.data.db.entities.Attendance import io.github.wulkanowy.data.db.entities.Semester +import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.utils.friday import io.github.wulkanowy.utils.monday import io.github.wulkanowy.utils.uniqueSubtract @@ -20,29 +21,25 @@ class AttendanceRepository @Inject constructor( private val remote: AttendanceRemote ) { - fun getAttendance(semester: Semester, startDate: LocalDate, endDate: LocalDate, forceRefresh: Boolean) - : Single> { - return Single.fromCallable { startDate.monday to endDate.friday } - .flatMap { dates -> - local.getAttendance(semester, dates.first, dates.second).filter { !forceRefresh } - .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings).flatMap { - if (it) remote.getAttendance(semester, dates.first, dates.second) - else Single.error(UnknownHostException()) - }.flatMap { newAttendance -> - local.getAttendance(semester, dates.first, dates.second) - .toSingle(emptyList()) - .doOnSuccess { oldAttendance -> - local.deleteAttendance(oldAttendance.uniqueSubtract(newAttendance)) - local.saveAttendance(newAttendance.uniqueSubtract(oldAttendance)) - } - }.flatMap { - local.getAttendance(semester, dates.first, dates.second) - .toSingle(emptyList()) - }).map { list -> list.filter { it.date in startDate..endDate } } - } + fun getAttendance(student: Student, semester: Semester, start: LocalDate, end: LocalDate, forceRefresh: Boolean): Single> { + return local.getAttendance(semester, start.monday, end.friday).filter { !forceRefresh } + .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings).flatMap { + if (it) remote.getAttendance(student, semester, start.monday, end.friday) + else Single.error(UnknownHostException()) + }.flatMap { newAttendance -> + local.getAttendance(semester, start.monday, end.friday) + .toSingle(emptyList()) + .doOnSuccess { oldAttendance -> + local.deleteAttendance(oldAttendance.uniqueSubtract(newAttendance)) + local.saveAttendance(newAttendance.uniqueSubtract(oldAttendance)) + } + }.flatMap { + local.getAttendance(semester, start.monday, end.friday) + .toSingle(emptyList()) + }).map { list -> list.filter { it.date in start..end } } } - fun excuseForAbsence(semester: Semester, attendanceList: List, reason: String? = null): Single { - return remote.excuseAbsence(semester, attendanceList, reason) + fun excuseForAbsence(student: Student, semester: Semester, attendanceList: List, reason: String? = null): Single { + return remote.excuseAbsence(student, semester, attendanceList, reason) } } diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/attendancesummary/AttendanceSummaryRemote.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/attendancesummary/AttendanceSummaryRemote.kt index c167427f..8fef5c39 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/attendancesummary/AttendanceSummaryRemote.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/attendancesummary/AttendanceSummaryRemote.kt @@ -2,7 +2,9 @@ package io.github.wulkanowy.data.repositories.attendancesummary import io.github.wulkanowy.data.db.entities.AttendanceSummary import io.github.wulkanowy.data.db.entities.Semester +import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.sdk.Sdk +import io.github.wulkanowy.utils.init import io.reactivex.Single import javax.inject.Inject import javax.inject.Singleton @@ -10,8 +12,9 @@ import javax.inject.Singleton @Singleton class AttendanceSummaryRemote @Inject constructor(private val sdk: Sdk) { - fun getAttendanceSummary(semester: Semester, subjectId: Int): Single> { - return sdk.switchDiary(semester.diaryId, semester.schoolYear).getAttendanceSummary(subjectId) + fun getAttendanceSummary(student: Student, semester: Semester, subjectId: Int): Single> { + return sdk.init(student).switchDiary(semester.diaryId, semester.schoolYear) + .getAttendanceSummary(subjectId) .map { attendance -> attendance.map { AttendanceSummary( diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/attendancesummary/AttendanceSummaryRepository.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/attendancesummary/AttendanceSummaryRepository.kt index c6587050..5f0b2b34 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/attendancesummary/AttendanceSummaryRepository.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/attendancesummary/AttendanceSummaryRepository.kt @@ -4,6 +4,7 @@ import com.github.pwittchen.reactivenetwork.library.rx2.ReactiveNetwork import com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.InternetObservingSettings import io.github.wulkanowy.data.db.entities.AttendanceSummary import io.github.wulkanowy.data.db.entities.Semester +import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.utils.uniqueSubtract import io.reactivex.Single import java.net.UnknownHostException @@ -17,11 +18,11 @@ class AttendanceSummaryRepository @Inject constructor( private val remote: AttendanceSummaryRemote ) { - fun getAttendanceSummary(semester: Semester, subjectId: Int, forceRefresh: Boolean = false): Single> { + fun getAttendanceSummary(student: Student, semester: Semester, subjectId: Int, forceRefresh: Boolean = false): Single> { return local.getAttendanceSummary(semester, subjectId).filter { !forceRefresh } .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings) .flatMap { - if (it) remote.getAttendanceSummary(semester, subjectId) + if (it) remote.getAttendanceSummary(student, semester, subjectId) else Single.error(UnknownHostException()) }.flatMap { new -> local.getAttendanceSummary(semester, subjectId).toSingle(emptyList()) diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/completedlessons/CompletedLessonsRemote.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/completedlessons/CompletedLessonsRemote.kt index ca680f20..bb115111 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/completedlessons/CompletedLessonsRemote.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/completedlessons/CompletedLessonsRemote.kt @@ -2,7 +2,9 @@ package io.github.wulkanowy.data.repositories.completedlessons import io.github.wulkanowy.data.db.entities.CompletedLesson import io.github.wulkanowy.data.db.entities.Semester +import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.sdk.Sdk +import io.github.wulkanowy.utils.init import io.reactivex.Single import org.threeten.bp.LocalDate import javax.inject.Inject @@ -11,8 +13,9 @@ import javax.inject.Singleton @Singleton class CompletedLessonsRemote @Inject constructor(private val sdk: Sdk) { - fun getCompletedLessons(semester: Semester, startDate: LocalDate, endDate: LocalDate): Single> { - return sdk.switchDiary(semester.diaryId, semester.schoolYear).getCompletedLessons(startDate, endDate) + fun getCompletedLessons(student: Student, semester: Semester, startDate: LocalDate, endDate: LocalDate): Single> { + return sdk.init(student).switchDiary(semester.diaryId, semester.schoolYear) + .getCompletedLessons(startDate, endDate) .map { lessons -> lessons.map { it.absence diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/completedlessons/CompletedLessonsRepository.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/completedlessons/CompletedLessonsRepository.kt index c22fabc3..f31e3055 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/completedlessons/CompletedLessonsRepository.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/completedlessons/CompletedLessonsRepository.kt @@ -4,6 +4,7 @@ import com.github.pwittchen.reactivenetwork.library.rx2.ReactiveNetwork import com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.InternetObservingSettings import io.github.wulkanowy.data.db.entities.CompletedLesson import io.github.wulkanowy.data.db.entities.Semester +import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.utils.friday import io.github.wulkanowy.utils.monday import io.github.wulkanowy.utils.uniqueSubtract @@ -20,25 +21,22 @@ class CompletedLessonsRepository @Inject constructor( private val remote: CompletedLessonsRemote ) { - fun getCompletedLessons(semester: Semester, startDate: LocalDate, endDate: LocalDate, forceRefresh: Boolean = false): Single> { - return Single.fromCallable { startDate.monday to endDate.friday } - .flatMap { dates -> - local.getCompletedLessons(semester, dates.first, dates.second).filter { !forceRefresh } - .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings) - .flatMap { - if (it) remote.getCompletedLessons(semester, dates.first, dates.second) - else Single.error(UnknownHostException()) - }.flatMap { new -> - local.getCompletedLessons(semester, dates.first, dates.second) - .toSingle(emptyList()) - .doOnSuccess { old -> - local.deleteCompleteLessons(old.uniqueSubtract(new)) - local.saveCompletedLessons(new.uniqueSubtract(old)) - } - }.flatMap { - local.getCompletedLessons(semester, dates.first, dates.second) - .toSingle(emptyList()) - }).map { list -> list.filter { it.date in startDate..endDate } } - } + fun getCompletedLessons(student: Student, semester: Semester, start: LocalDate, end: LocalDate, forceRefresh: Boolean = false): Single> { + return local.getCompletedLessons(semester, start.monday, end.friday).filter { !forceRefresh } + .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings) + .flatMap { + if (it) remote.getCompletedLessons(student, semester, start.monday, end.friday) + else Single.error(UnknownHostException()) + }.flatMap { new -> + local.getCompletedLessons(semester, start.monday, end.friday) + .toSingle(emptyList()) + .doOnSuccess { old -> + local.deleteCompleteLessons(old.uniqueSubtract(new)) + local.saveCompletedLessons(new.uniqueSubtract(old)) + } + }.flatMap { + local.getCompletedLessons(semester, start.monday, end.friday) + .toSingle(emptyList()) + }).map { list -> list.filter { it.date in start..end } } } } diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/exam/ExamRemote.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/exam/ExamRemote.kt index ea7ec944..fb105cee 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/exam/ExamRemote.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/exam/ExamRemote.kt @@ -2,7 +2,9 @@ package io.github.wulkanowy.data.repositories.exam import io.github.wulkanowy.data.db.entities.Exam import io.github.wulkanowy.data.db.entities.Semester +import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.sdk.Sdk +import io.github.wulkanowy.utils.init import io.reactivex.Single import org.threeten.bp.LocalDate import javax.inject.Inject @@ -11,8 +13,9 @@ import javax.inject.Singleton @Singleton class ExamRemote @Inject constructor(private val sdk: Sdk) { - fun getExams(semester: Semester, startDate: LocalDate, endDate: LocalDate): Single> { - return sdk.switchDiary(semester.diaryId, semester.schoolYear).getExams(startDate, endDate, semester.semesterId) + fun getExams(student: Student, semester: Semester, startDate: LocalDate, endDate: LocalDate): Single> { + return sdk.init(student).switchDiary(semester.diaryId, semester.schoolYear) + .getExams(startDate, endDate, semester.semesterId) .map { exams -> exams.map { Exam( diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/exam/ExamRepository.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/exam/ExamRepository.kt index be60eaec..452a1551 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/exam/ExamRepository.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/exam/ExamRepository.kt @@ -4,6 +4,7 @@ import com.github.pwittchen.reactivenetwork.library.rx2.ReactiveNetwork import com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.InternetObservingSettings import io.github.wulkanowy.data.db.entities.Exam import io.github.wulkanowy.data.db.entities.Semester +import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.utils.friday import io.github.wulkanowy.utils.monday import io.github.wulkanowy.utils.uniqueSubtract @@ -20,25 +21,22 @@ class ExamRepository @Inject constructor( private val remote: ExamRemote ) { - fun getExams(semester: Semester, startDate: LocalDate, endDate: LocalDate, forceRefresh: Boolean = false): Single> { - return Single.fromCallable { startDate.monday to endDate.friday } - .flatMap { dates -> - local.getExams(semester, dates.first, dates.second).filter { !forceRefresh } - .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings) - .flatMap { - if (it) remote.getExams(semester, dates.first, dates.second) - else Single.error(UnknownHostException()) - }.flatMap { new -> - local.getExams(semester, dates.first, dates.second) - .toSingle(emptyList()) - .doOnSuccess { old -> - local.deleteExams(old.uniqueSubtract(new)) - local.saveExams(new.uniqueSubtract(old)) - } - }.flatMap { - local.getExams(semester, dates.first, dates.second) - .toSingle(emptyList()) - }).map { list -> list.filter { it.date in startDate..endDate } } - } + fun getExams(student: Student, semester: Semester, start: LocalDate, end: LocalDate, forceRefresh: Boolean = false): Single> { + return local.getExams(semester, start.monday, end.friday).filter { !forceRefresh } + .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings) + .flatMap { + if (it) remote.getExams(student, semester, start.monday, end.friday) + else Single.error(UnknownHostException()) + }.flatMap { new -> + local.getExams(semester, start.monday, end.friday) + .toSingle(emptyList()) + .doOnSuccess { old -> + local.deleteExams(old.uniqueSubtract(new)) + local.saveExams(new.uniqueSubtract(old)) + } + }.flatMap { + local.getExams(semester, start.monday, end.friday) + .toSingle(emptyList()) + }).map { list -> list.filter { it.date in start..end } } } } diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/grade/GradeRemote.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/grade/GradeRemote.kt index d07ac6d1..6f19095b 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/grade/GradeRemote.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/grade/GradeRemote.kt @@ -2,7 +2,9 @@ package io.github.wulkanowy.data.repositories.grade import io.github.wulkanowy.data.db.entities.Grade import io.github.wulkanowy.data.db.entities.Semester +import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.sdk.Sdk +import io.github.wulkanowy.utils.init import io.reactivex.Single import javax.inject.Inject import javax.inject.Singleton @@ -10,8 +12,9 @@ import javax.inject.Singleton @Singleton class GradeRemote @Inject constructor(private val sdk: Sdk) { - fun getGrades(semester: Semester): Single> { - return sdk.switchDiary(semester.diaryId, semester.schoolYear).getGrades(semester.semesterId) + fun getGrades(student: Student, semester: Semester): Single> { + return sdk.init(student).switchDiary(semester.diaryId, semester.schoolYear) + .getGrades(semester.semesterId) .map { grades -> grades.map { Grade( diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/grade/GradeRepository.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/grade/GradeRepository.kt index 7f8e92a2..351ebc39 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/grade/GradeRepository.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/grade/GradeRepository.kt @@ -23,7 +23,7 @@ class GradeRepository @Inject constructor( return local.getGrades(semester).filter { !forceRefresh } .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings) .flatMap { - if (it) remote.getGrades(semester) + if (it) remote.getGrades(student, semester) else Single.error(UnknownHostException()) }.flatMap { new -> local.getGrades(semester).toSingle(emptyList()) diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/gradessummary/GradeSummaryRemote.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/gradessummary/GradeSummaryRemote.kt index 2681fe05..1b09974d 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/gradessummary/GradeSummaryRemote.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/gradessummary/GradeSummaryRemote.kt @@ -2,7 +2,9 @@ package io.github.wulkanowy.data.repositories.gradessummary import io.github.wulkanowy.data.db.entities.GradeSummary import io.github.wulkanowy.data.db.entities.Semester +import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.sdk.Sdk +import io.github.wulkanowy.utils.init import io.reactivex.Single import javax.inject.Inject import javax.inject.Singleton @@ -10,8 +12,9 @@ import javax.inject.Singleton @Singleton class GradeSummaryRemote @Inject constructor(private val sdk: Sdk) { - fun getGradeSummary(semester: Semester): Single> { - return sdk.switchDiary(semester.diaryId, semester.schoolYear).getGradesSummary(semester.semesterId) + fun getGradeSummary(student: Student, semester: Semester): Single> { + return sdk.init(student).switchDiary(semester.diaryId, semester.schoolYear) + .getGradesSummary(semester.semesterId) .map { gradesSummary -> gradesSummary.map { GradeSummary( diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/gradessummary/GradeSummaryRepository.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/gradessummary/GradeSummaryRepository.kt index 660a032c..f1d7a6c1 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/gradessummary/GradeSummaryRepository.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/gradessummary/GradeSummaryRepository.kt @@ -4,6 +4,7 @@ import com.github.pwittchen.reactivenetwork.library.rx2.ReactiveNetwork import com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.InternetObservingSettings import io.github.wulkanowy.data.db.entities.GradeSummary import io.github.wulkanowy.data.db.entities.Semester +import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.utils.uniqueSubtract import io.reactivex.Single import java.net.UnknownHostException @@ -17,11 +18,11 @@ class GradeSummaryRepository @Inject constructor( private val remote: GradeSummaryRemote ) { - fun getGradesSummary(semester: Semester, forceRefresh: Boolean = false): Single> { + fun getGradesSummary(student: Student, semester: Semester, forceRefresh: Boolean = false): Single> { return local.getGradesSummary(semester).filter { !forceRefresh } .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings) .flatMap { - if (it) remote.getGradeSummary(semester) + if (it) remote.getGradeSummary(student, semester) else Single.error(UnknownHostException()) }.flatMap { new -> local.getGradesSummary(semester).toSingle(emptyList()) diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/gradestatistics/GradeStatisticsRemote.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/gradestatistics/GradeStatisticsRemote.kt index f10f3036..99e0cb98 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/gradestatistics/GradeStatisticsRemote.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/gradestatistics/GradeStatisticsRemote.kt @@ -3,7 +3,9 @@ package io.github.wulkanowy.data.repositories.gradestatistics import io.github.wulkanowy.data.db.entities.GradePointsStatistics import io.github.wulkanowy.data.db.entities.GradeStatistics import io.github.wulkanowy.data.db.entities.Semester +import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.sdk.Sdk +import io.github.wulkanowy.utils.init import io.reactivex.Single import javax.inject.Inject import javax.inject.Singleton @@ -11,8 +13,8 @@ import javax.inject.Singleton @Singleton class GradeStatisticsRemote @Inject constructor(private val sdk: Sdk) { - fun getGradeStatistics(semester: Semester, isSemester: Boolean): Single> { - return sdk.switchDiary(semester.diaryId, semester.schoolYear).let { + fun getGradeStatistics(student: Student, semester: Semester, isSemester: Boolean): Single> { + return sdk.init(student).switchDiary(semester.diaryId, semester.schoolYear).let { if (isSemester) it.getGradesAnnualStatistics(semester.semesterId) else it.getGradesPartialStatistics(semester.semesterId) }.map { gradeStatistics -> @@ -29,8 +31,9 @@ class GradeStatisticsRemote @Inject constructor(private val sdk: Sdk) { } } - fun getGradePointsStatistics(semester: Semester): Single> { - return sdk.switchDiary(semester.diaryId, semester.schoolYear).getGradesPointsStatistics(semester.semesterId) + fun getGradePointsStatistics(student: Student, semester: Semester): Single> { + return sdk.init(student).switchDiary(semester.diaryId, semester.schoolYear) + .getGradesPointsStatistics(semester.semesterId) .map { gradePointsStatistics -> gradePointsStatistics.map { GradePointsStatistics( diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/gradestatistics/GradeStatisticsRepository.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/gradestatistics/GradeStatisticsRepository.kt index e82e9db4..8d96d2f5 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/gradestatistics/GradeStatisticsRepository.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/gradestatistics/GradeStatisticsRepository.kt @@ -5,6 +5,7 @@ import com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.Inter import io.github.wulkanowy.data.db.entities.GradePointsStatistics import io.github.wulkanowy.data.db.entities.GradeStatistics import io.github.wulkanowy.data.db.entities.Semester +import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.data.pojos.GradeStatisticsItem import io.github.wulkanowy.ui.modules.grade.statistics.ViewType import io.github.wulkanowy.utils.uniqueSubtract @@ -20,11 +21,11 @@ class GradeStatisticsRepository @Inject constructor( private val remote: GradeStatisticsRemote ) { - fun getGradesStatistics(semester: Semester, subjectName: String, isSemester: Boolean, forceRefresh: Boolean = false): Single> { + fun getGradesStatistics(student: Student, semester: Semester, subjectName: String, isSemester: Boolean, forceRefresh: Boolean = false): Single> { return local.getGradesStatistics(semester, isSemester, subjectName).map { it.mapToStatisticItems() }.filter { !forceRefresh } .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings) .flatMap { - if (it) remote.getGradeStatistics(semester, isSemester) + if (it) remote.getGradeStatistics(student, semester, isSemester) else Single.error(UnknownHostException()) }.flatMap { new -> local.getGradesStatistics(semester, isSemester).toSingle(emptyList()) @@ -35,11 +36,11 @@ class GradeStatisticsRepository @Inject constructor( }.flatMap { local.getGradesStatistics(semester, isSemester, subjectName).map { it.mapToStatisticItems() }.toSingle(emptyList()) }) } - fun getGradesPointsStatistics(semester: Semester, subjectName: String, forceRefresh: Boolean): Single> { + fun getGradesPointsStatistics(student: Student, semester: Semester, subjectName: String, forceRefresh: Boolean): Single> { return local.getGradesPointsStatistics(semester, subjectName).map { it.mapToStatisticsItem() }.filter { !forceRefresh } .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings) .flatMap { - if (it) remote.getGradePointsStatistics(semester) + if (it) remote.getGradePointsStatistics(student, semester) else Single.error(UnknownHostException()) }.flatMap { new -> local.getGradesPointsStatistics(semester).toSingle(emptyList()) diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/homework/HomeworkRemote.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/homework/HomeworkRemote.kt index bbaea1e3..20ffee99 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/homework/HomeworkRemote.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/homework/HomeworkRemote.kt @@ -2,7 +2,9 @@ package io.github.wulkanowy.data.repositories.homework import io.github.wulkanowy.data.db.entities.Homework import io.github.wulkanowy.data.db.entities.Semester +import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.sdk.Sdk +import io.github.wulkanowy.utils.init import io.reactivex.Single import org.threeten.bp.LocalDate import javax.inject.Inject @@ -11,8 +13,9 @@ import javax.inject.Singleton @Singleton class HomeworkRemote @Inject constructor(private val sdk: Sdk) { - fun getHomework(semester: Semester, startDate: LocalDate, endDate: LocalDate): Single> { - return sdk.switchDiary(semester.diaryId, semester.schoolYear).getHomework(startDate, endDate) + fun getHomework(student: Student, semester: Semester, startDate: LocalDate, endDate: LocalDate): Single> { + return sdk.init(student).switchDiary(semester.diaryId, semester.schoolYear) + .getHomework(startDate, endDate) .map { homework -> homework.map { Homework( diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/homework/HomeworkRepository.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/homework/HomeworkRepository.kt index e506bdb9..4454fd88 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/homework/HomeworkRepository.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/homework/HomeworkRepository.kt @@ -4,6 +4,7 @@ import com.github.pwittchen.reactivenetwork.library.rx2.ReactiveNetwork import com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.InternetObservingSettings import io.github.wulkanowy.data.db.entities.Homework import io.github.wulkanowy.data.db.entities.Semester +import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.utils.friday import io.github.wulkanowy.utils.monday import io.github.wulkanowy.utils.uniqueSubtract @@ -21,12 +22,12 @@ class HomeworkRepository @Inject constructor( private val remote: HomeworkRemote ) { - fun getHomework(semester: Semester, start: LocalDate, end: LocalDate, forceRefresh: Boolean = false): Single> { + fun getHomework(student: Student, semester: Semester, start: LocalDate, end: LocalDate, forceRefresh: Boolean = false): Single> { return Single.fromCallable { start.monday to end.friday }.flatMap { (monday, friday) -> local.getHomework(semester, monday, friday).filter { !forceRefresh } .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings) .flatMap { - if (it) remote.getHomework(semester, monday, friday) + if (it) remote.getHomework(student, semester, monday, friday) else Single.error(UnknownHostException()) }.flatMap { new -> local.getHomework(semester, monday, friday).toSingle(emptyList()) diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/luckynumber/LuckyNumberRemote.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/luckynumber/LuckyNumberRemote.kt index 2fcf9338..0c71897a 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/luckynumber/LuckyNumberRemote.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/luckynumber/LuckyNumberRemote.kt @@ -3,6 +3,7 @@ package io.github.wulkanowy.data.repositories.luckynumber import io.github.wulkanowy.data.db.entities.LuckyNumber import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.sdk.Sdk +import io.github.wulkanowy.utils.init import io.reactivex.Maybe import org.threeten.bp.LocalDate import javax.inject.Inject @@ -12,7 +13,7 @@ import javax.inject.Singleton class LuckyNumberRemote @Inject constructor(private val sdk: Sdk) { fun getLuckyNumber(student: Student): Maybe { - return sdk.getLuckyNumber(student.schoolShortName).map { + return sdk.init(student).getLuckyNumber(student.schoolShortName).map { LuckyNumber( studentId = student.studentId, date = LocalDate.now(), diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/luckynumber/LuckyNumberRepository.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/luckynumber/LuckyNumberRepository.kt index 0ea06350..374b9a29 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/luckynumber/LuckyNumberRepository.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/luckynumber/LuckyNumberRepository.kt @@ -2,7 +2,6 @@ package io.github.wulkanowy.data.repositories.luckynumber import com.github.pwittchen.reactivenetwork.library.rx2.ReactiveNetwork import com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.InternetObservingSettings -import io.github.wulkanowy.data.SdkHelper import io.github.wulkanowy.data.db.entities.LuckyNumber import io.github.wulkanowy.data.db.entities.Student import io.reactivex.Completable @@ -16,36 +15,33 @@ import javax.inject.Singleton class LuckyNumberRepository @Inject constructor( private val settings: InternetObservingSettings, private val local: LuckyNumberLocal, - private val remote: LuckyNumberRemote, - private val sdkHelper: SdkHelper + private val remote: LuckyNumberRemote ) { fun getLuckyNumber(student: Student, forceRefresh: Boolean = false, notify: Boolean = false): Maybe { - return Maybe.just(sdkHelper.init(student)).flatMap { - local.getLuckyNumber(student, LocalDate.now()).filter { !forceRefresh } - .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings) - .flatMapMaybe { - if (it) remote.getLuckyNumber(student) - else Maybe.error(UnknownHostException()) - }.flatMap { new -> - local.getLuckyNumber(student, LocalDate.now()) - .doOnSuccess { old -> - if (new != old) { - local.deleteLuckyNumber(old) - local.saveLuckyNumber(new.apply { - if (notify) isNotified = false - }) - } - } - .doOnComplete { + return local.getLuckyNumber(student, LocalDate.now()).filter { !forceRefresh } + .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings) + .flatMapMaybe { + if (it) remote.getLuckyNumber(student) + else Maybe.error(UnknownHostException()) + }.flatMap { new -> + local.getLuckyNumber(student, LocalDate.now()) + .doOnSuccess { old -> + if (new != old) { + local.deleteLuckyNumber(old) local.saveLuckyNumber(new.apply { if (notify) isNotified = false }) } - }.flatMap({ local.getLuckyNumber(student, LocalDate.now()) }, { Maybe.error(it) }, - { local.getLuckyNumber(student, LocalDate.now()) }) - ) - } + } + .doOnComplete { + local.saveLuckyNumber(new.apply { + if (notify) isNotified = false + }) + } + }.flatMap({ local.getLuckyNumber(student, LocalDate.now()) }, { Maybe.error(it) }, + { local.getLuckyNumber(student, LocalDate.now()) }) + ) } fun getNotNotifiedLuckyNumber(student: Student): Maybe { diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/message/MessageRemote.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/message/MessageRemote.kt index 48852210..1808c048 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/message/MessageRemote.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/message/MessageRemote.kt @@ -8,6 +8,7 @@ import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.sdk.Sdk import io.github.wulkanowy.sdk.pojo.Folder import io.github.wulkanowy.sdk.pojo.SentMessage +import io.github.wulkanowy.utils.init import io.reactivex.Single import org.threeten.bp.LocalDateTime.now import javax.inject.Inject @@ -18,7 +19,7 @@ import io.github.wulkanowy.sdk.pojo.Recipient as SdkRecipient class MessageRemote @Inject constructor(private val sdk: Sdk) { fun getMessages(student: Student, semester: Semester, folder: MessageFolder): Single> { - return sdk.getMessages(Folder.valueOf(folder.name), semester.start.atStartOfDay(), semester.end.atStartOfDay()).map { messages -> + return sdk.init(student).getMessages(Folder.valueOf(folder.name), semester.start.atStartOfDay(), semester.end.atStartOfDay()).map { messages -> messages.map { Message( studentId = student.id.toInt(), @@ -41,8 +42,8 @@ class MessageRemote @Inject constructor(private val sdk: Sdk) { } } - fun getMessagesContentDetails(message: Message, markAsRead: Boolean = false): Single>> { - return sdk.getMessageDetails(message.messageId, message.folderId, markAsRead, message.realId).map { details -> + fun getMessagesContentDetails(student: Student, message: Message, markAsRead: Boolean = false): Single>> { + return sdk.init(student).getMessageDetails(message.messageId, message.folderId, markAsRead, message.realId).map { details -> details.content to details.attachments.map { MessageAttachment( realId = it.id, @@ -55,8 +56,8 @@ class MessageRemote @Inject constructor(private val sdk: Sdk) { } } - fun sendMessage(subject: String, content: String, recipients: List): Single { - return sdk.sendMessage( + fun sendMessage(student: Student, subject: String, content: String, recipients: List): Single { + return sdk.init(student).sendMessage( subject = subject, content = content, recipients = recipients.map { @@ -73,7 +74,7 @@ class MessageRemote @Inject constructor(private val sdk: Sdk) { ) } - fun deleteMessage(message: Message): Single { - return sdk.deleteMessages(listOf(Pair(message.realId, message.folderId))) + fun deleteMessage(student: Student, message: Message): Single { + return sdk.init(student).deleteMessages(listOf(Pair(message.realId, message.folderId))) } } diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/message/MessageRepository.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/message/MessageRepository.kt index 396d5f68..2d2c0430 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/message/MessageRepository.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/message/MessageRepository.kt @@ -2,7 +2,6 @@ package io.github.wulkanowy.data.repositories.message import com.github.pwittchen.reactivenetwork.library.rx2.ReactiveNetwork import com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.InternetObservingSettings -import io.github.wulkanowy.data.SdkHelper import io.github.wulkanowy.data.db.entities.Message import io.github.wulkanowy.data.db.entities.MessageWithAttachment import io.github.wulkanowy.data.db.entities.Recipient @@ -22,60 +21,53 @@ import javax.inject.Singleton class MessageRepository @Inject constructor( private val settings: InternetObservingSettings, private val local: MessageLocal, - private val remote: MessageRemote, - private val sdkHelper: SdkHelper + private val remote: MessageRemote ) { fun getMessages(student: Student, semester: Semester, folder: MessageFolder, forceRefresh: Boolean = false, notify: Boolean = false): Single> { - return Single.just(sdkHelper.init(student)) - .flatMap { _ -> - local.getMessages(student, folder).filter { !forceRefresh } - .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings) - .flatMap { - if (it) remote.getMessages(student, semester, folder) - else Single.error(UnknownHostException()) - }.flatMap { new -> - local.getMessages(student, folder).toSingle(emptyList()) - .doOnSuccess { old -> - local.deleteMessages(old.uniqueSubtract(new)) - local.saveMessages(new.uniqueSubtract(old) - .onEach { - it.isNotified = !notify - }) - } - }.flatMap { local.getMessages(student, folder).toSingle(emptyList()) } - ) - } + return local.getMessages(student, folder).filter { !forceRefresh } + .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings) + .flatMap { + if (it) remote.getMessages(student, semester, folder) + else Single.error(UnknownHostException()) + }.flatMap { new -> + local.getMessages(student, folder).toSingle(emptyList()) + .doOnSuccess { old -> + local.deleteMessages(old.uniqueSubtract(new)) + local.saveMessages(new.uniqueSubtract(old) + .onEach { + it.isNotified = !notify + }) + } + }.flatMap { local.getMessages(student, folder).toSingle(emptyList()) } + ) } fun getMessage(student: Student, message: Message, markAsRead: Boolean = false): Single { - return Single.just(sdkHelper.init(student)) - .flatMap { _ -> - local.getMessageWithAttachment(student, message) - .filter { - it.message.content.isNotEmpty().also { status -> - Timber.d("Message content in db empty: ${!status}") - } && !it.message.unread - } - .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings) - .flatMap { - if (it) local.getMessageWithAttachment(student, message) - else Single.error(UnknownHostException()) - } - .flatMap { dbMessage -> - remote.getMessagesContentDetails(dbMessage.message, markAsRead).doOnSuccess { (downloadedMessage, attachments) -> - local.updateMessages(listOf(dbMessage.message.copy(unread = !markAsRead).apply { - id = dbMessage.message.id - content = content.ifBlank { downloadedMessage } - })) - local.saveMessageAttachments(attachments) - Timber.d("Message ${message.messageId} with blank content: ${dbMessage.message.content.isBlank()}, marked as read") - } - }.flatMap { - local.getMessageWithAttachment(student, message) - } - ) + return local.getMessageWithAttachment(student, message) + .filter { + it.message.content.isNotEmpty().also { status -> + Timber.d("Message content in db empty: ${!status}") + } && !it.message.unread } + .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings) + .flatMap { + if (it) local.getMessageWithAttachment(student, message) + else Single.error(UnknownHostException()) + } + .flatMap { dbMessage -> + remote.getMessagesContentDetails(student, dbMessage.message, markAsRead).doOnSuccess { (downloadedMessage, attachments) -> + local.updateMessages(listOf(dbMessage.message.copy(unread = !markAsRead).apply { + id = dbMessage.message.id + content = content.ifBlank { downloadedMessage } + })) + local.saveMessageAttachments(attachments) + Timber.d("Message ${message.messageId} with blank content: ${dbMessage.message.content.isBlank()}, marked as read") + } + }.flatMap { + local.getMessageWithAttachment(student, message) + } + ) } fun getNotNotifiedMessages(student: Student): Single> { @@ -88,18 +80,18 @@ class MessageRepository @Inject constructor( return Completable.fromCallable { local.updateMessages(messages) } } - fun sendMessage(subject: String, content: String, recipients: List): Single { + fun sendMessage(student: Student, subject: String, content: String, recipients: List): Single { return ReactiveNetwork.checkInternetConnectivity(settings) .flatMap { - if (it) remote.sendMessage(subject, content, recipients) + if (it) remote.sendMessage(student, subject, content, recipients) else Single.error(UnknownHostException()) } } - fun deleteMessage(message: Message): Single { + fun deleteMessage(student: Student, message: Message): Single { return ReactiveNetwork.checkInternetConnectivity(settings) .flatMap { - if (it) remote.deleteMessage(message) + if (it) remote.deleteMessage(student, message) else Single.error(UnknownHostException()) } .doOnSuccess { diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/mobiledevice/MobileDeviceRemote.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/mobiledevice/MobileDeviceRemote.kt index c43c3f21..800f9597 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/mobiledevice/MobileDeviceRemote.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/mobiledevice/MobileDeviceRemote.kt @@ -2,8 +2,10 @@ package io.github.wulkanowy.data.repositories.mobiledevice import io.github.wulkanowy.data.db.entities.MobileDevice import io.github.wulkanowy.data.db.entities.Semester +import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.data.pojos.MobileDeviceToken import io.github.wulkanowy.sdk.Sdk +import io.github.wulkanowy.utils.init import io.reactivex.Single import javax.inject.Inject import javax.inject.Singleton @@ -11,13 +13,14 @@ import javax.inject.Singleton @Singleton class MobileDeviceRemote @Inject constructor(private val sdk: Sdk) { - fun getDevices(semester: Semester): Single> { - return sdk.switchDiary(semester.diaryId, semester.schoolYear).getRegisteredDevices() + fun getDevices(student: Student, semester: Semester): Single> { + return sdk.init(student).switchDiary(semester.diaryId, semester.schoolYear) + .getRegisteredDevices() .map { devices -> devices.map { MobileDevice( studentId = semester.studentId, - date = it.date, + date = it.createDate, deviceId = it.id, name = it.name ) @@ -25,12 +28,14 @@ class MobileDeviceRemote @Inject constructor(private val sdk: Sdk) { } } - fun unregisterDevice(semester: Semester, device: MobileDevice): Single { - return sdk.switchDiary(semester.diaryId, semester.schoolYear).unregisterDevice(device.deviceId) + fun unregisterDevice(student: Student, semester: Semester, device: MobileDevice): Single { + return sdk.init(student).switchDiary(semester.diaryId, semester.schoolYear) + .unregisterDevice(device.deviceId) } - fun getToken(semester: Semester): Single { - return sdk.switchDiary(semester.diaryId, semester.schoolYear).getToken() + fun getToken(student: Student, semester: Semester): Single { + return sdk.init(student).switchDiary(semester.diaryId, semester.schoolYear) + .getToken() .map { MobileDeviceToken( token = it.token, diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/mobiledevice/MobileDeviceRepository.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/mobiledevice/MobileDeviceRepository.kt index ac450ff4..545846e8 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/mobiledevice/MobileDeviceRepository.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/mobiledevice/MobileDeviceRepository.kt @@ -4,6 +4,7 @@ import com.github.pwittchen.reactivenetwork.library.rx2.ReactiveNetwork import com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.InternetObservingSettings import io.github.wulkanowy.data.db.entities.MobileDevice import io.github.wulkanowy.data.db.entities.Semester +import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.data.pojos.MobileDeviceToken import io.github.wulkanowy.utils.uniqueSubtract import io.reactivex.Single @@ -18,11 +19,11 @@ class MobileDeviceRepository @Inject constructor( private val remote: MobileDeviceRemote ) { - fun getDevices(semester: Semester, forceRefresh: Boolean = false): Single> { + fun getDevices(student: Student, semester: Semester, forceRefresh: Boolean = false): Single> { return local.getDevices(semester).filter { !forceRefresh } .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings) .flatMap { - if (it) remote.getDevices(semester) + if (it) remote.getDevices(student, semester) else Single.error(UnknownHostException()) }.flatMap { new -> local.getDevices(semester).toSingle(emptyList()) @@ -34,18 +35,18 @@ class MobileDeviceRepository @Inject constructor( ).flatMap { local.getDevices(semester).toSingle(emptyList()) } } - fun unregisterDevice(semester: Semester, device: MobileDevice): Single { + fun unregisterDevice(student: Student, semester: Semester, device: MobileDevice): Single { return ReactiveNetwork.checkInternetConnectivity(settings) .flatMap { - if (it) remote.unregisterDevice(semester, device) + if (it) remote.unregisterDevice(student, semester, device) else Single.error(UnknownHostException()) } } - fun getToken(semester: Semester): Single { + fun getToken(student: Student, semester: Semester): Single { return ReactiveNetwork.checkInternetConnectivity(settings) .flatMap { - if (it) remote.getToken(semester) + if (it) remote.getToken(student, semester) else Single.error(UnknownHostException()) } } diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/note/NoteRemote.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/note/NoteRemote.kt index cd78abd3..2c62b608 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/note/NoteRemote.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/note/NoteRemote.kt @@ -2,7 +2,9 @@ package io.github.wulkanowy.data.repositories.note import io.github.wulkanowy.data.db.entities.Note import io.github.wulkanowy.data.db.entities.Semester +import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.sdk.Sdk +import io.github.wulkanowy.utils.init import io.reactivex.Single import javax.inject.Inject import javax.inject.Singleton @@ -10,8 +12,9 @@ import javax.inject.Singleton @Singleton class NoteRemote @Inject constructor(private val sdk: Sdk) { - fun getNotes(semester: Semester): Single> { - return sdk.switchDiary(semester.diaryId, semester.schoolYear).getNotes(semester.semesterId) + fun getNotes(student: Student, semester: Semester): Single> { + return sdk.init(student).switchDiary(semester.diaryId, semester.schoolYear) + .getNotes(semester.semesterId) .map { notes -> notes.map { Note( diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/note/NoteRepository.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/note/NoteRepository.kt index 52cb2d0f..e155e2ba 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/note/NoteRepository.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/note/NoteRepository.kt @@ -23,7 +23,7 @@ class NoteRepository @Inject constructor( return local.getNotes(student).filter { !forceRefresh } .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings) .flatMap { - if (it) remote.getNotes(semester) + if (it) remote.getNotes(student, semester) else Single.error(UnknownHostException()) }.flatMap { new -> local.getNotes(student).toSingle(emptyList()) diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/recipient/RecipientRemote.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/recipient/RecipientRemote.kt index f070ea76..e5b16a15 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/recipient/RecipientRemote.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/recipient/RecipientRemote.kt @@ -3,7 +3,9 @@ package io.github.wulkanowy.data.repositories.recipient import io.github.wulkanowy.data.db.entities.Message import io.github.wulkanowy.data.db.entities.Recipient import io.github.wulkanowy.data.db.entities.ReportingUnit +import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.sdk.Sdk +import io.github.wulkanowy.utils.init import io.reactivex.Single import javax.inject.Inject import javax.inject.Singleton @@ -12,15 +14,15 @@ import io.github.wulkanowy.sdk.pojo.Recipient as SdkRecipient @Singleton class RecipientRemote @Inject constructor(private val sdk: Sdk) { - fun getRecipients(role: Int, unit: ReportingUnit): Single> { - return sdk.getRecipients(unit.realId, role) + fun getRecipients(student: Student, role: Int, unit: ReportingUnit): Single> { + return sdk.init(student).getRecipients(unit.realId, role) .map { recipients -> recipients.map { it.toRecipient() } } } - fun getMessageRecipients(message: Message): Single> { - return sdk.getMessageRecipients(message.messageId, message.senderId) + fun getMessageRecipients(student: Student, message: Message): Single> { + return sdk.init(student).getMessageRecipients(message.messageId, message.senderId) .map { recipients -> recipients.map { it.toRecipient() } } diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/recipient/RecipientRepository.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/recipient/RecipientRepository.kt index d29369b9..6f8a72af 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/recipient/RecipientRepository.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/recipient/RecipientRepository.kt @@ -2,7 +2,6 @@ package io.github.wulkanowy.data.repositories.recipient import com.github.pwittchen.reactivenetwork.library.rx2.ReactiveNetwork import com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.InternetObservingSettings -import io.github.wulkanowy.data.SdkHelper import io.github.wulkanowy.data.db.entities.Message import io.github.wulkanowy.data.db.entities.Recipient import io.github.wulkanowy.data.db.entities.ReportingUnit @@ -17,36 +16,31 @@ import javax.inject.Singleton class RecipientRepository @Inject constructor( private val settings: InternetObservingSettings, private val local: RecipientLocal, - private val remote: RecipientRemote, - private val sdkHelper: SdkHelper + private val remote: RecipientRemote ) { fun getRecipients(student: Student, role: Int, unit: ReportingUnit, forceRefresh: Boolean = false): Single> { - return Single.just(sdkHelper.init(student)) - .flatMap { _ -> - local.getRecipients(student, role, unit).filter { !forceRefresh } - .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings) - .flatMap { - if (it) remote.getRecipients(role, unit) - else Single.error(UnknownHostException()) - }.flatMap { new -> - local.getRecipients(student, role, unit).toSingle(emptyList()) - .doOnSuccess { old -> - local.deleteRecipients(old.uniqueSubtract(new)) - local.saveRecipients(new.uniqueSubtract(old)) - } - }.flatMap { - local.getRecipients(student, role, unit).toSingle(emptyList()) + return local.getRecipients(student, role, unit).filter { !forceRefresh } + .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings) + .flatMap { + if (it) remote.getRecipients(student, role, unit) + else Single.error(UnknownHostException()) + }.flatMap { new -> + local.getRecipients(student, role, unit).toSingle(emptyList()) + .doOnSuccess { old -> + local.deleteRecipients(old.uniqueSubtract(new)) + local.saveRecipients(new.uniqueSubtract(old)) } - ) - } + }.flatMap { + local.getRecipients(student, role, unit).toSingle(emptyList()) + } + ) } fun getMessageRecipients(student: Student, message: Message): Single> { - return Single.just(sdkHelper.init(student)) - .flatMap { ReactiveNetwork.checkInternetConnectivity(settings) } + return ReactiveNetwork.checkInternetConnectivity(settings) .flatMap { - if (it) remote.getMessageRecipients(message) + if (it) remote.getMessageRecipients(student, message) else Single.error(UnknownHostException()) } } diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/reportingunit/ReportingUnitRemote.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/reportingunit/ReportingUnitRemote.kt index 5dbabc54..1fd8b08e 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/reportingunit/ReportingUnitRemote.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/reportingunit/ReportingUnitRemote.kt @@ -1,7 +1,9 @@ package io.github.wulkanowy.data.repositories.reportingunit import io.github.wulkanowy.data.db.entities.ReportingUnit +import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.sdk.Sdk +import io.github.wulkanowy.utils.init import io.reactivex.Single import javax.inject.Inject import javax.inject.Singleton @@ -9,8 +11,8 @@ import javax.inject.Singleton @Singleton class ReportingUnitRemote @Inject constructor(private val sdk: Sdk) { - fun getReportingUnits(): Single> { - return sdk.getReportingUnits().map { + fun getReportingUnits(student: Student): Single> { + return sdk.init(student).getReportingUnits().map { it.map { unit -> ReportingUnit( studentId = sdk.studentId, diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/reportingunit/ReportingUnitRepository.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/reportingunit/ReportingUnitRepository.kt index 4c8370e6..ee544098 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/reportingunit/ReportingUnitRepository.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/reportingunit/ReportingUnitRepository.kt @@ -2,7 +2,6 @@ package io.github.wulkanowy.data.repositories.reportingunit import com.github.pwittchen.reactivenetwork.library.rx2.ReactiveNetwork import com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.InternetObservingSettings -import io.github.wulkanowy.data.SdkHelper import io.github.wulkanowy.data.db.entities.ReportingUnit import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.utils.uniqueSubtract @@ -16,41 +15,34 @@ import javax.inject.Singleton class ReportingUnitRepository @Inject constructor( private val settings: InternetObservingSettings, private val local: ReportingUnitLocal, - private val remote: ReportingUnitRemote, - private val sdkHelper: SdkHelper + private val remote: ReportingUnitRemote ) { fun getReportingUnits(student: Student, forceRefresh: Boolean = false): Single> { - return Single.just(sdkHelper.init(student)) - .flatMap { _ -> - local.getReportingUnits(student).filter { !forceRefresh } - .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings) - .flatMap { - if (it) remote.getReportingUnits() - else Single.error(UnknownHostException()) - }.flatMap { new -> - local.getReportingUnits(student).toSingle(emptyList()) - .doOnSuccess { old -> - local.deleteReportingUnits(old.uniqueSubtract(new)) - local.saveReportingUnits(new.uniqueSubtract(old)) - } - }.flatMap { local.getReportingUnits(student).toSingle(emptyList()) } - ) - } + return local.getReportingUnits(student).filter { !forceRefresh } + .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings) + .flatMap { + if (it) remote.getReportingUnits(student) + else Single.error(UnknownHostException()) + }.flatMap { new -> + local.getReportingUnits(student).toSingle(emptyList()) + .doOnSuccess { old -> + local.deleteReportingUnits(old.uniqueSubtract(new)) + local.saveReportingUnits(new.uniqueSubtract(old)) + } + }.flatMap { local.getReportingUnits(student).toSingle(emptyList()) } + ) } fun getReportingUnit(student: Student, unitId: Int): Maybe { - return Maybe.just(sdkHelper.init(student)) - .flatMap { _ -> - local.getReportingUnit(student, unitId) - .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings) - .flatMap { - if (it) getReportingUnits(student, true) - else Single.error(UnknownHostException()) - }.flatMapMaybe { - local.getReportingUnit(student, unitId) - } - ) - } + return local.getReportingUnit(student, unitId) + .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings) + .flatMap { + if (it) getReportingUnits(student, true) + else Single.error(UnknownHostException()) + }.flatMapMaybe { + local.getReportingUnit(student, unitId) + } + ) } } diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/school/SchoolRemote.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/school/SchoolRemote.kt index 4d5c92a9..6a95a446 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/school/SchoolRemote.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/school/SchoolRemote.kt @@ -2,14 +2,17 @@ package io.github.wulkanowy.data.repositories.school import io.github.wulkanowy.data.db.entities.School import io.github.wulkanowy.data.db.entities.Semester +import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.sdk.Sdk +import io.github.wulkanowy.utils.init import io.reactivex.Single import javax.inject.Inject class SchoolRemote @Inject constructor(private val sdk: Sdk) { - fun getSchoolInfo(semester: Semester): Single { - return sdk.switchDiary(semester.diaryId, semester.schoolYear).getSchool() + fun getSchoolInfo(student: Student, semester: Semester): Single { + return sdk.init(student).switchDiary(semester.diaryId, semester.schoolYear) + .getSchool() .map { School( studentId = semester.studentId, diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/school/SchoolRepository.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/school/SchoolRepository.kt index a352324d..1715a28d 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/school/SchoolRepository.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/school/SchoolRepository.kt @@ -4,6 +4,7 @@ import com.github.pwittchen.reactivenetwork.library.rx2.ReactiveNetwork import com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.InternetObservingSettings import io.github.wulkanowy.data.db.entities.School import io.github.wulkanowy.data.db.entities.Semester +import io.github.wulkanowy.data.db.entities.Student import io.reactivex.Maybe import io.reactivex.Single import java.net.UnknownHostException @@ -17,11 +18,11 @@ class SchoolRepository @Inject constructor( private val remote: SchoolRemote ) { - fun getSchoolInfo(semester: Semester, forceRefresh: Boolean = false): Maybe { + fun getSchoolInfo(student: Student, semester: Semester, forceRefresh: Boolean = false): Maybe { return local.getSchool(semester).filter { !forceRefresh } .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings) .flatMap { - if (it) remote.getSchoolInfo(semester) + if (it) remote.getSchoolInfo(student, semester) else Single.error(UnknownHostException()) }.flatMapMaybe { new -> local.getSchool(semester) diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/semester/SemesterRemote.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/semester/SemesterRemote.kt index f7b98a4b..90f0e1d7 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/semester/SemesterRemote.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/semester/SemesterRemote.kt @@ -3,6 +3,7 @@ package io.github.wulkanowy.data.repositories.semester import io.github.wulkanowy.data.db.entities.Semester import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.sdk.Sdk +import io.github.wulkanowy.utils.init import io.reactivex.Single import javax.inject.Inject import javax.inject.Singleton @@ -11,7 +12,7 @@ import javax.inject.Singleton class SemesterRemote @Inject constructor(private val sdk: Sdk) { fun getSemesters(student: Student): Single> { - return sdk.getSemesters().map { semesters -> + return sdk.init(student).getSemesters().map { semesters -> semesters.map { Semester( studentId = student.studentId, diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/semester/SemesterRepository.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/semester/SemesterRepository.kt index a1365820..dd702b3e 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/semester/SemesterRepository.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/semester/SemesterRepository.kt @@ -2,13 +2,11 @@ package io.github.wulkanowy.data.repositories.semester import com.github.pwittchen.reactivenetwork.library.rx2.ReactiveNetwork import com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.InternetObservingSettings -import io.github.wulkanowy.data.SdkHelper import io.github.wulkanowy.data.db.entities.Semester import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.utils.getCurrentOrLast import io.github.wulkanowy.utils.isCurrent import io.github.wulkanowy.utils.uniqueSubtract -import io.reactivex.Maybe import io.reactivex.Single import java.net.UnknownHostException import javax.inject.Inject @@ -18,31 +16,26 @@ import javax.inject.Singleton class SemesterRepository @Inject constructor( private val remote: SemesterRemote, private val local: SemesterLocal, - private val settings: InternetObservingSettings, - private val sdkHelper: SdkHelper + private val settings: InternetObservingSettings ) { fun getSemesters(student: Student, forceRefresh: Boolean = false, refreshOnNoCurrent: Boolean = false): Single> { - return Maybe.just(sdkHelper.init(student)) + return local.getSemesters(student).filter { !forceRefresh }.filter { + if (refreshOnNoCurrent) { + it.any { semester -> semester.isCurrent } + } else true + }.switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings) .flatMap { - local.getSemesters(student).filter { !forceRefresh }.filter { - if (refreshOnNoCurrent) { - it.any { semester -> semester.isCurrent } - } else true - } - } - .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings) - .flatMap { - if (it) remote.getSemesters(student) - else Single.error(UnknownHostException()) - }.flatMap { new -> - if (new.isEmpty()) throw IllegalArgumentException("Empty semester list!") + if (it) remote.getSemesters(student) + else Single.error(UnknownHostException()) + }.flatMap { new -> + if (new.isEmpty()) throw IllegalArgumentException("Empty semester list!") - local.getSemesters(student).toSingle(emptyList()).doOnSuccess { old -> - local.deleteSemesters(old.uniqueSubtract(new)) - local.saveSemesters(new.uniqueSubtract(old)) - } - }.flatMap { local.getSemesters(student).toSingle(emptyList()) }) + local.getSemesters(student).toSingle(emptyList()).doOnSuccess { old -> + local.deleteSemesters(old.uniqueSubtract(new)) + local.saveSemesters(new.uniqueSubtract(old)) + } + }.flatMap { local.getSemesters(student).toSingle(emptyList()) }) } fun getCurrentSemester(student: Student, forceRefresh: Boolean = false): Single { diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/student/StudentLocal.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/student/StudentLocal.kt index a3576ca2..c7a46e9d 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/student/StudentLocal.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/student/StudentLocal.kt @@ -33,6 +33,14 @@ class StudentLocal @Inject constructor( .filter { it.isNotEmpty() } } + fun getStudentById(id: Int): Maybe { + return studentDb.loadById(id).map { + it.apply { + if (Sdk.Mode.valueOf(loginMode) != Sdk.Mode.API) password = decrypt(password) + } + } + } + fun getCurrentStudent(decryptPass: Boolean): Maybe { return studentDb.loadCurrent().map { it.apply { diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/student/StudentRepository.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/student/StudentRepository.kt index 270d080e..bebd1eb9 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/student/StudentRepository.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/student/StudentRepository.kt @@ -47,6 +47,12 @@ class StudentRepository @Inject constructor( return local.getStudents(decryptPass).toSingle(emptyList()) } + fun getStudentById(id: Int): Single { + return local.getStudentById(id) + .switchIfEmpty(Maybe.error(NoCurrentStudentException())) + .toSingle() + } + fun getCurrentStudent(decryptPass: Boolean = true): Single { return local.getCurrentStudent(decryptPass) .switchIfEmpty(Maybe.error(NoCurrentStudentException())) diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/subject/SubjectLocal.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/subject/SubjectLocal.kt index 63e33401..f8c13e6c 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/subject/SubjectLocal.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/subject/SubjectLocal.kt @@ -12,7 +12,7 @@ class SubjectLocal @Inject constructor(private val subjectDao: SubjectDao) { fun getSubjects(semester: Semester): Maybe> { return subjectDao.loadAll(semester.diaryId, semester.studentId) - .filter { !it.isEmpty() } + .filter { it.isNotEmpty() } } fun saveSubjects(subjects: List) { diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/subject/SubjectRemote.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/subject/SubjectRemote.kt index 32dbb2f2..d30232f8 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/subject/SubjectRemote.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/subject/SubjectRemote.kt @@ -1,8 +1,10 @@ package io.github.wulkanowy.data.repositories.subject import io.github.wulkanowy.data.db.entities.Semester +import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.data.db.entities.Subject import io.github.wulkanowy.sdk.Sdk +import io.github.wulkanowy.utils.init import io.reactivex.Single import javax.inject.Inject import javax.inject.Singleton @@ -10,8 +12,9 @@ import javax.inject.Singleton @Singleton class SubjectRemote @Inject constructor(private val sdk: Sdk) { - fun getSubjects(semester: Semester): Single> { - return sdk.switchDiary(semester.diaryId, semester.schoolYear).getSubjects() + fun getSubjects(student: Student, semester: Semester): Single> { + return sdk.init(student).switchDiary(semester.diaryId, semester.schoolYear) + .getSubjects() .map { subjects -> subjects.map { Subject( diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/subject/SubjectRepository.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/subject/SubjectRepository.kt index 0c5f386b..649904da 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/subject/SubjectRepository.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/subject/SubjectRepository.kt @@ -3,6 +3,7 @@ package io.github.wulkanowy.data.repositories.subject import com.github.pwittchen.reactivenetwork.library.rx2.ReactiveNetwork import com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.InternetObservingSettings import io.github.wulkanowy.data.db.entities.Semester +import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.data.db.entities.Subject import io.github.wulkanowy.utils.uniqueSubtract import io.reactivex.Single @@ -17,11 +18,11 @@ class SubjectRepository @Inject constructor( private val remote: SubjectRemote ) { - fun getSubjects(semester: Semester, forceRefresh: Boolean = false): Single> { + fun getSubjects(student: Student, semester: Semester, forceRefresh: Boolean = false): Single> { return local.getSubjects(semester).filter { !forceRefresh } .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings) .flatMap { - if (it) remote.getSubjects(semester) + if (it) remote.getSubjects(student, semester) else Single.error(UnknownHostException()) }.flatMap { new -> local.getSubjects(semester) diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/teacher/TeacherRemote.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/teacher/TeacherRemote.kt index d4401bfb..01552f74 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/teacher/TeacherRemote.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/teacher/TeacherRemote.kt @@ -1,8 +1,10 @@ package io.github.wulkanowy.data.repositories.teacher import io.github.wulkanowy.data.db.entities.Semester +import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.data.db.entities.Teacher import io.github.wulkanowy.sdk.Sdk +import io.github.wulkanowy.utils.init import io.reactivex.Single import javax.inject.Inject import javax.inject.Singleton @@ -10,8 +12,9 @@ import javax.inject.Singleton @Singleton class TeacherRemote @Inject constructor(private val sdk: Sdk) { - fun getTeachers(semester: Semester): Single> { - return sdk.switchDiary(semester.diaryId, semester.schoolYear).getTeachers(semester.semesterId) + fun getTeachers(student: Student, semester: Semester): Single> { + return sdk.init(student).switchDiary(semester.diaryId, semester.schoolYear) + .getTeachers(semester.semesterId) .map { teachers -> teachers.map { Teacher( diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/teacher/TeacherRepository.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/teacher/TeacherRepository.kt index 19e7a32b..3c10be73 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/teacher/TeacherRepository.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/teacher/TeacherRepository.kt @@ -3,6 +3,7 @@ package io.github.wulkanowy.data.repositories.teacher import com.github.pwittchen.reactivenetwork.library.rx2.ReactiveNetwork import com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.InternetObservingSettings import io.github.wulkanowy.data.db.entities.Semester +import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.data.db.entities.Teacher import io.github.wulkanowy.utils.uniqueSubtract import io.reactivex.Single @@ -17,11 +18,11 @@ class TeacherRepository @Inject constructor( private val remote: TeacherRemote ) { - fun getTeachers(semester: Semester, forceRefresh: Boolean = false): Single> { + fun getTeachers(student: Student, semester: Semester, forceRefresh: Boolean = false): Single> { return local.getTeachers(semester).filter { !forceRefresh } .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings) .flatMap { - if (it) remote.getTeachers(semester) + if (it) remote.getTeachers(student, semester) else Single.error(UnknownHostException()) }.flatMap { new -> local.getTeachers(semester).toSingle(emptyList()) diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/timetable/TimetableRemote.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/timetable/TimetableRemote.kt index c0aa16eb..22cb947d 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/timetable/TimetableRemote.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/timetable/TimetableRemote.kt @@ -1,8 +1,10 @@ package io.github.wulkanowy.data.repositories.timetable import io.github.wulkanowy.data.db.entities.Semester +import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.data.db.entities.Timetable import io.github.wulkanowy.sdk.Sdk +import io.github.wulkanowy.utils.init import io.reactivex.Single import org.threeten.bp.LocalDate import javax.inject.Inject @@ -11,8 +13,9 @@ import javax.inject.Singleton @Singleton class TimetableRemote @Inject constructor(private val sdk: Sdk) { - fun getTimetable(semester: Semester, startDate: LocalDate, endDate: LocalDate): Single> { - return sdk.switchDiary(semester.diaryId, semester.schoolYear).getTimetable(startDate, endDate) + fun getTimetable(student: Student, semester: Semester, startDate: LocalDate, endDate: LocalDate): Single> { + return sdk.init(student).switchDiary(semester.diaryId, semester.schoolYear) + .getTimetable(startDate, endDate) .map { lessons -> lessons.map { Timetable( diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/timetable/TimetableRepository.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/timetable/TimetableRepository.kt index 20e183c2..42812b30 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/timetable/TimetableRepository.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/timetable/TimetableRepository.kt @@ -3,6 +3,7 @@ package io.github.wulkanowy.data.repositories.timetable import com.github.pwittchen.reactivenetwork.library.rx2.ReactiveNetwork import com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.InternetObservingSettings import io.github.wulkanowy.data.db.entities.Semester +import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.data.db.entities.Timetable import io.github.wulkanowy.utils.friday import io.github.wulkanowy.utils.monday @@ -20,11 +21,11 @@ class TimetableRepository @Inject constructor( private val remote: TimetableRemote ) { - fun getTimetable(semester: Semester, start: LocalDate, end: LocalDate, forceRefresh: Boolean = false): Single> { + fun getTimetable(student: Student, semester: Semester, start: LocalDate, end: LocalDate, forceRefresh: Boolean = false): Single> { return Single.fromCallable { start.monday to end.friday }.flatMap { (monday, friday) -> local.getTimetable(semester, monday, friday).filter { !forceRefresh } .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings).flatMap { - if (it) remote.getTimetable(semester, monday, friday) + if (it) remote.getTimetable(student, semester, monday, friday) else Single.error(UnknownHostException()) }.flatMap { new -> local.getTimetable(semester, monday, friday) diff --git a/app/src/main/java/io/github/wulkanowy/services/sync/works/AttendanceSummaryWork.kt b/app/src/main/java/io/github/wulkanowy/services/sync/works/AttendanceSummaryWork.kt index 01978c5b..5f7d7efa 100644 --- a/app/src/main/java/io/github/wulkanowy/services/sync/works/AttendanceSummaryWork.kt +++ b/app/src/main/java/io/github/wulkanowy/services/sync/works/AttendanceSummaryWork.kt @@ -11,7 +11,7 @@ class AttendanceSummaryWork @Inject constructor( ) : Work { override fun create(student: Student, semester: Semester): Completable { - return attendanceSummaryRepository.getAttendanceSummary(semester, -1, true).ignoreElement() + return attendanceSummaryRepository.getAttendanceSummary(student, semester, -1, true).ignoreElement() } } diff --git a/app/src/main/java/io/github/wulkanowy/services/sync/works/AttendanceWork.kt b/app/src/main/java/io/github/wulkanowy/services/sync/works/AttendanceWork.kt index e4b55b0e..e8579ddb 100644 --- a/app/src/main/java/io/github/wulkanowy/services/sync/works/AttendanceWork.kt +++ b/app/src/main/java/io/github/wulkanowy/services/sync/works/AttendanceWork.kt @@ -12,7 +12,7 @@ import javax.inject.Inject class AttendanceWork @Inject constructor(private val attendanceRepository: AttendanceRepository) : Work { override fun create(student: Student, semester: Semester): Completable { - return attendanceRepository.getAttendance(semester, now().monday, now().friday, true) + return attendanceRepository.getAttendance(student, semester, now().monday, now().friday, true) .ignoreElement() } } diff --git a/app/src/main/java/io/github/wulkanowy/services/sync/works/CompletedLessonWork.kt b/app/src/main/java/io/github/wulkanowy/services/sync/works/CompletedLessonWork.kt index 29642ad6..0da597e0 100644 --- a/app/src/main/java/io/github/wulkanowy/services/sync/works/CompletedLessonWork.kt +++ b/app/src/main/java/io/github/wulkanowy/services/sync/works/CompletedLessonWork.kt @@ -14,7 +14,7 @@ class CompletedLessonWork @Inject constructor( ) : Work { override fun create(student: Student, semester: Semester): Completable { - return completedLessonsRepository.getCompletedLessons(semester, now().monday, now().friday, true) + return completedLessonsRepository.getCompletedLessons(student, semester, now().monday, now().friday, true) .ignoreElement() } } diff --git a/app/src/main/java/io/github/wulkanowy/services/sync/works/ExamWork.kt b/app/src/main/java/io/github/wulkanowy/services/sync/works/ExamWork.kt index 8744fcc7..c6110bbb 100644 --- a/app/src/main/java/io/github/wulkanowy/services/sync/works/ExamWork.kt +++ b/app/src/main/java/io/github/wulkanowy/services/sync/works/ExamWork.kt @@ -12,6 +12,6 @@ import javax.inject.Inject class ExamWork @Inject constructor(private val examRepository: ExamRepository) : Work { override fun create(student: Student, semester: Semester): Completable { - return examRepository.getExams(semester, now().monday, now().friday, true).ignoreElement() + return examRepository.getExams(student, semester, now().monday, now().friday, true).ignoreElement() } } diff --git a/app/src/main/java/io/github/wulkanowy/services/sync/works/GradeStatisticsWork.kt b/app/src/main/java/io/github/wulkanowy/services/sync/works/GradeStatisticsWork.kt index 1de39a95..327c7174 100644 --- a/app/src/main/java/io/github/wulkanowy/services/sync/works/GradeStatisticsWork.kt +++ b/app/src/main/java/io/github/wulkanowy/services/sync/works/GradeStatisticsWork.kt @@ -9,7 +9,7 @@ import javax.inject.Inject class GradeStatisticsWork @Inject constructor(private val gradeStatisticsRepository: GradeStatisticsRepository) : Work { override fun create(student: Student, semester: Semester): Completable { - return gradeStatisticsRepository.getGradesStatistics(semester, "Wszystkie", false, true) + return gradeStatisticsRepository.getGradesStatistics(student, semester, "Wszystkie", false, true) .ignoreElement() } } diff --git a/app/src/main/java/io/github/wulkanowy/services/sync/works/GradeSummaryWork.kt b/app/src/main/java/io/github/wulkanowy/services/sync/works/GradeSummaryWork.kt index 6de0bc5b..4c8e955d 100644 --- a/app/src/main/java/io/github/wulkanowy/services/sync/works/GradeSummaryWork.kt +++ b/app/src/main/java/io/github/wulkanowy/services/sync/works/GradeSummaryWork.kt @@ -9,6 +9,6 @@ import javax.inject.Inject class GradeSummaryWork @Inject constructor(private val gradeSummaryRepository: GradeSummaryRepository) : Work { override fun create(student: Student, semester: Semester): Completable { - return gradeSummaryRepository.getGradesSummary(semester, true).ignoreElement() + return gradeSummaryRepository.getGradesSummary(student, semester, true).ignoreElement() } } diff --git a/app/src/main/java/io/github/wulkanowy/services/sync/works/HomeworkWork.kt b/app/src/main/java/io/github/wulkanowy/services/sync/works/HomeworkWork.kt index 32b356c6..cf348439 100644 --- a/app/src/main/java/io/github/wulkanowy/services/sync/works/HomeworkWork.kt +++ b/app/src/main/java/io/github/wulkanowy/services/sync/works/HomeworkWork.kt @@ -12,6 +12,6 @@ import javax.inject.Inject class HomeworkWork @Inject constructor(private val homeworkRepository: HomeworkRepository) : Work { override fun create(student: Student, semester: Semester): Completable { - return homeworkRepository.getHomework(semester, now().monday, now().friday, true).ignoreElement() + return homeworkRepository.getHomework(student, semester, now().monday, now().friday, true).ignoreElement() } } diff --git a/app/src/main/java/io/github/wulkanowy/services/sync/works/TeacherWork.kt b/app/src/main/java/io/github/wulkanowy/services/sync/works/TeacherWork.kt index 18178d2d..5a7a41d8 100644 --- a/app/src/main/java/io/github/wulkanowy/services/sync/works/TeacherWork.kt +++ b/app/src/main/java/io/github/wulkanowy/services/sync/works/TeacherWork.kt @@ -9,6 +9,6 @@ import javax.inject.Inject class TeacherWork @Inject constructor(private val teacherRepository: TeacherRepository) : Work { override fun create(student: Student, semester: Semester): Completable { - return teacherRepository.getTeachers(semester, true).ignoreElement() + return teacherRepository.getTeachers(student, semester, true).ignoreElement() } } diff --git a/app/src/main/java/io/github/wulkanowy/services/sync/works/TimetableWork.kt b/app/src/main/java/io/github/wulkanowy/services/sync/works/TimetableWork.kt index 743ae0e8..0990ed67 100644 --- a/app/src/main/java/io/github/wulkanowy/services/sync/works/TimetableWork.kt +++ b/app/src/main/java/io/github/wulkanowy/services/sync/works/TimetableWork.kt @@ -12,7 +12,7 @@ import javax.inject.Inject class TimetableWork @Inject constructor(private val timetableRepository: TimetableRepository) : Work { override fun create(student: Student, semester: Semester): Completable { - return timetableRepository.getTimetable(semester, now().monday, now().friday, true) + return timetableRepository.getTimetable(student, semester, now().monday, now().friday, true) .ignoreElement() } } diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/attendance/AttendancePresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/attendance/AttendancePresenter.kt index 679d5367..7fc04474 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/attendance/AttendancePresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/attendance/AttendancePresenter.kt @@ -188,13 +188,16 @@ class AttendancePresenter @Inject constructor( disposable.apply { clear() add(studentRepository.getCurrentStudent() - .delay(200, MILLISECONDS) - .flatMap { semesterRepository.getCurrentSemester(it) } - .flatMap { attendanceRepository.getAttendance(it, date, date, forceRefresh) } + .flatMap { student -> + semesterRepository.getCurrentSemester(student).flatMap { semester -> + attendanceRepository.getAttendance(student, semester, date, date, forceRefresh) + } + } .map { list -> if (prefRepository.isShowPresent) list else list.filter { !it.presence } } + .delay(200, MILLISECONDS) .map { items -> items.map { AttendanceItem(it) } } .map { items -> items.sortedBy { it.attendance.number } } .subscribeOn(schedulers.backgroundThread) @@ -228,9 +231,12 @@ class AttendancePresenter @Inject constructor( Timber.i("Excusing absence started") disposable.apply { add(studentRepository.getCurrentStudent() + .flatMap { student -> + semesterRepository.getCurrentSemester(student).flatMap { semester -> + attendanceRepository.excuseForAbsence(student, semester, toExcuseList, reason) + } + } .delay(200, MILLISECONDS) - .flatMap { semesterRepository.getCurrentSemester(it) } - .flatMap { attendanceRepository.excuseForAbsence(it, toExcuseList, reason) } .subscribeOn(schedulers.backgroundThread) .observeOn(schedulers.mainThread) .doOnSubscribe { diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/attendance/summary/AttendanceSummaryPresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/attendance/summary/AttendanceSummaryPresenter.kt index 18f67726..8fc5b6e4 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/attendance/summary/AttendanceSummaryPresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/attendance/summary/AttendanceSummaryPresenter.kt @@ -83,10 +83,13 @@ class AttendanceSummaryPresenter @Inject constructor( disposable.apply { clear() add(studentRepository.getCurrentStudent() - .delay(200, MILLISECONDS) - .flatMap { semesterRepository.getCurrentSemester(it) } - .flatMap { attendanceSummaryRepository.getAttendanceSummary(it, subjectId, forceRefresh) } + .flatMap { student -> + semesterRepository.getCurrentSemester(student).flatMap { + attendanceSummaryRepository.getAttendanceSummary(student, it, subjectId, forceRefresh) + } + } .map { createAttendanceSummaryItems(it) to AttendanceSummaryScrollableHeader(formatPercentage(it.calculatePercentage())) } + .delay(200, MILLISECONDS) .subscribeOn(schedulers.backgroundThread) .observeOn(schedulers.mainThread) .doFinally { @@ -126,8 +129,11 @@ class AttendanceSummaryPresenter @Inject constructor( private fun loadSubjects() { Timber.i("Loading attendance summary subjects started") disposable.add(studentRepository.getCurrentStudent() - .flatMap { semesterRepository.getCurrentSemester(it) } - .flatMap { subjectRepository.getSubjects(it) } + .flatMap { student -> + semesterRepository.getCurrentSemester(student).flatMap { semester -> + subjectRepository.getSubjects(student, semester) + } + } .doOnSuccess { subjects = it } .map { ArrayList(it.map { subject -> subject.name }) } .subscribeOn(schedulers.backgroundThread) diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/exam/ExamPresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/exam/ExamPresenter.kt index 35cf5b94..aac9bc4b 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/exam/ExamPresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/exam/ExamPresenter.kt @@ -112,9 +112,12 @@ class ExamPresenter @Inject constructor( disposable.apply { clear() add(studentRepository.getCurrentStudent() + .flatMap { student -> + semesterRepository.getCurrentSemester(student).flatMap { semester -> + examRepository.getExams(student, semester, currentDate.monday, currentDate.friday, forceRefresh) + } + } .delay(200, MILLISECONDS) - .flatMap { semesterRepository.getCurrentSemester(it) } - .flatMap { examRepository.getExams(it, currentDate.monday, currentDate.friday, forceRefresh) } .map { it.groupBy { exam -> exam.date }.toSortedMap() } .map { createExamItems(it) } .subscribeOn(schedulers.backgroundThread) diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/GradeAverageProvider.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/GradeAverageProvider.kt index 37bba4d4..3bb084d3 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/GradeAverageProvider.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/GradeAverageProvider.kt @@ -34,7 +34,7 @@ class GradeAverageProvider @Inject constructor( val selectedSemester = semesters.single { it.semesterId == semesterId } val firstSemester = semesters.single { it.diaryId == selectedSemester.diaryId && it.semesterName == 1 } - return getAverageFromGradeSummary(selectedSemester, forceRefresh) + return getAverageFromGradeSummary(student, selectedSemester, forceRefresh) .switchIfEmpty(gradeRepository.getGrades(student, selectedSemester, forceRefresh) .flatMap { firstGrades -> if (selectedSemester == firstSemester) Single.just(firstGrades) @@ -52,7 +52,7 @@ class GradeAverageProvider @Inject constructor( private fun getOnlyOneSemesterAverage(student: Student, semesters: List, semesterId: Int, forceRefresh: Boolean): Single>> { val selectedSemester = semesters.single { it.semesterId == semesterId } - return getAverageFromGradeSummary(selectedSemester, forceRefresh) + return getAverageFromGradeSummary(student, selectedSemester, forceRefresh) .switchIfEmpty(gradeRepository.getGrades(student, selectedSemester, forceRefresh) .map { grades -> grades.map { if (student.loginMode == Sdk.Mode.SCRAPPER.name) it.changeModifier(plusModifier, minusModifier) else it } @@ -61,8 +61,8 @@ class GradeAverageProvider @Inject constructor( }) } - private fun getAverageFromGradeSummary(selectedSemester: Semester, forceRefresh: Boolean): Maybe>> { - return gradeSummaryRepository.getGradesSummary(selectedSemester, forceRefresh) + private fun getAverageFromGradeSummary(student: Student, selectedSemester: Semester, forceRefresh: Boolean): Maybe>> { + return gradeSummaryRepository.getGradesSummary(student, selectedSemester, forceRefresh) .toMaybe() .flatMap { if (it.any { summary -> summary.average != .0 }) { diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsPresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsPresenter.kt index 4ec0fafe..6323dbe1 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsPresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsPresenter.kt @@ -48,7 +48,6 @@ class GradeStatisticsPresenter @Inject constructor( loadDataByType(semesterId, currentSubjectName, currentType, forceRefresh) } - fun onParentViewReselected() { view?.run { if (!isViewEmpty) resetView() @@ -118,8 +117,11 @@ class GradeStatisticsPresenter @Inject constructor( private fun loadSubjects() { Timber.i("Loading grade stats subjects started") disposable.add(studentRepository.getCurrentStudent() - .flatMap { semesterRepository.getCurrentSemester(it) } - .flatMap { subjectRepository.getSubjects(it) } + .flatMap { student -> + semesterRepository.getCurrentSemester(student).flatMap { semester -> + subjectRepository.getSubjects(student, semester) + } + } .doOnSuccess { subjects = it } .map { ArrayList(it.map { subject -> subject.name }) } .subscribeOn(schedulers.backgroundThread) @@ -146,14 +148,15 @@ class GradeStatisticsPresenter @Inject constructor( private fun loadData(semesterId: Int, subjectName: String, type: ViewType, forceRefresh: Boolean) { Timber.i("Loading grade stats data started") disposable.add(studentRepository.getCurrentStudent() - .flatMap { semesterRepository.getSemesters(it) } - .flatMap { - val semester = it.first { item -> item.semesterId == semesterId } + .flatMap { student -> + semesterRepository.getSemesters(student).flatMap { semesters -> + val semester = semesters.first { item -> item.semesterId == semesterId } - when (type) { - ViewType.SEMESTER -> gradeStatisticsRepository.getGradesStatistics(semester, subjectName, true, forceRefresh) - ViewType.PARTIAL -> gradeStatisticsRepository.getGradesStatistics(semester, subjectName, false, forceRefresh) - ViewType.POINTS -> gradeStatisticsRepository.getGradesPointsStatistics(semester, subjectName, forceRefresh) + when (type) { + ViewType.SEMESTER -> gradeStatisticsRepository.getGradesStatistics(student, semester, subjectName, true, forceRefresh) + ViewType.PARTIAL -> gradeStatisticsRepository.getGradesStatistics(student, semester, subjectName, false, forceRefresh) + ViewType.POINTS -> gradeStatisticsRepository.getGradesPointsStatistics(student, semester, subjectName, forceRefresh) + } } } .subscribeOn(schedulers.backgroundThread) diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/summary/GradeSummaryPresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/summary/GradeSummaryPresenter.kt index 5f441277..c12f2a51 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/summary/GradeSummaryPresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/summary/GradeSummaryPresenter.kt @@ -38,7 +38,7 @@ class GradeSummaryPresenter @Inject constructor( disposable.add(studentRepository.getCurrentStudent() .flatMap { semesterRepository.getSemesters(it).map { semesters -> it to semesters } } .flatMap { (student, semesters) -> - gradeSummaryRepository.getGradesSummary(semesters.first { it.semesterId == semesterId }, forceRefresh) + gradeSummaryRepository.getGradesSummary(student, semesters.first { it.semesterId == semesterId }, forceRefresh) .map { it.sortedBy { subject -> subject.subject } } .flatMap { gradesSummary -> averageProvider.getGradeAverage(student, semesters, semesterId, forceRefresh) diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/homework/HomeworkPresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/homework/HomeworkPresenter.kt index 26d16b1d..aae18df3 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/homework/HomeworkPresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/homework/HomeworkPresenter.kt @@ -105,9 +105,12 @@ class HomeworkPresenter @Inject constructor( disposable.apply { clear() add(studentRepository.getCurrentStudent() + .flatMap { student -> + semesterRepository.getCurrentSemester(student).flatMap { semester -> + homeworkRepository.getHomework(student, semester, currentDate, currentDate, forceRefresh) + } + } .delay(200, TimeUnit.MILLISECONDS) - .flatMap { semesterRepository.getCurrentSemester(it) } - .flatMap { homeworkRepository.getHomework(it, currentDate, currentDate, forceRefresh) } .map { it.groupBy { homework -> homework.date }.toSortedMap() } .map { createHomeworkItem(it) } .subscribeOn(schedulers.backgroundThread) diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/homework/details/HomeworkDetailsAdapter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/homework/details/HomeworkDetailsAdapter.kt new file mode 100644 index 00000000..3706b56e --- /dev/null +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/homework/details/HomeworkDetailsAdapter.kt @@ -0,0 +1,84 @@ +package io.github.wulkanowy.ui.modules.homework.details + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import io.github.wulkanowy.R +import io.github.wulkanowy.data.db.entities.Homework +import io.github.wulkanowy.utils.toFormattedString +import kotlinx.android.synthetic.main.item_homework_dialog_attachment.view.* +import kotlinx.android.synthetic.main.item_homework_dialog_details.view.* +import javax.inject.Inject + +class HomeworkDetailsAdapter @Inject constructor() : + RecyclerView.Adapter() { + + private enum class ViewType(val id: Int) { + DETAILS(1), + ATTACHMENTS_HEADER(2), + ATTACHMENT(3) + } + + private var attachments = emptyList>() + + var homework: Homework? = null + set(value) { + field = value + attachments = value?.attachments.orEmpty() + } + + var onAttachmentClickListener: (url: String) -> Unit = {} + + override fun getItemCount() = 1 + if (attachments.isNotEmpty()) attachments.size + 1 else 0 + + override fun getItemViewType(position: Int) = when (position) { + 0 -> ViewType.DETAILS.id + 1 -> ViewType.ATTACHMENTS_HEADER.id + else -> ViewType.ATTACHMENT.id + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { + val inflater = LayoutInflater.from(parent.context) + + return when (viewType) { + ViewType.ATTACHMENTS_HEADER.id -> AttachmentsHeaderViewHolder(inflater.inflate(R.layout.item_homework_dialog_attachments_header, parent, false)) + ViewType.ATTACHMENT.id -> AttachmentViewHolder(inflater.inflate(R.layout.item_homework_dialog_attachment, parent, false)) + else -> DetailsViewHolder(inflater.inflate(R.layout.item_homework_dialog_details, parent, false)) + } + } + + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + when (holder) { + is DetailsViewHolder -> bindDetailsViewHolder(holder) + is AttachmentViewHolder -> bindAttachmentViewHolder(holder, position - 2) + } + } + + private fun bindDetailsViewHolder(holder: DetailsViewHolder) { + with(holder.view) { + homeworkDialogDate.text = homework?.date?.toFormattedString() + homeworkDialogEntryDate.text = homework?.entryDate?.toFormattedString() + homeworkDialogSubject.text = homework?.subject + homeworkDialogTeacher.text = homework?.teacher + homeworkDialogContent.text = homework?.content + } + } + + private fun bindAttachmentViewHolder(holder: AttachmentViewHolder, position: Int) { + val item = attachments[position] + + with(holder.view) { + homeworkDialogAttachment.text = item.second + setOnClickListener { + onAttachmentClickListener(item.first) + } + } + } + + class DetailsViewHolder(val view: View) : RecyclerView.ViewHolder(view) + + class AttachmentsHeaderViewHolder(val view: View) : RecyclerView.ViewHolder(view) + + class AttachmentViewHolder(val view: View) : RecyclerView.ViewHolder(view) +} diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/homework/details/HomeworkDetailsDialog.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/homework/details/HomeworkDetailsDialog.kt index 58622848..54cb5c68 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/homework/details/HomeworkDetailsDialog.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/homework/details/HomeworkDetailsDialog.kt @@ -2,16 +2,15 @@ package io.github.wulkanowy.ui.modules.homework.details import android.annotation.SuppressLint import android.os.Bundle -import android.text.method.LinkMovementMethod import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.core.text.HtmlCompat +import androidx.recyclerview.widget.LinearLayoutManager import io.github.wulkanowy.R import io.github.wulkanowy.data.db.entities.Homework import io.github.wulkanowy.ui.base.BaseDialogFragment import io.github.wulkanowy.ui.modules.homework.HomeworkFragment -import io.github.wulkanowy.utils.toFormattedString +import io.github.wulkanowy.utils.openInternetBrowser import kotlinx.android.synthetic.main.dialog_homework.* import javax.inject.Inject @@ -20,6 +19,9 @@ class HomeworkDetailsDialog : BaseDialogFragment(), HomeworkDetailsView { @Inject lateinit var presenter: HomeworkDetailsPresenter + @Inject + lateinit var detailsAdapter: HomeworkDetailsAdapter + private lateinit var homework: Homework companion object { @@ -51,20 +53,17 @@ class HomeworkDetailsDialog : BaseDialogFragment(), HomeworkDetailsView { @SuppressLint("SetTextI18n") override fun initView() { - homeworkDialogDate.text = homework.date.toFormattedString() - homeworkDialogEntryDate.text = homework.entryDate.toFormattedString() - homeworkDialogSubject.text = homework.subject - homeworkDialogTeacher.text = homework.teacher - homeworkDialogContent.movementMethod = LinkMovementMethod.getInstance() - homeworkDialogContent.text = homework.content - homeworkDialogAttachments.movementMethod = LinkMovementMethod.getInstance() - homeworkDialogAttachments.text = HtmlCompat.fromHtml(homework.attachments.joinToString("
") { - "${it.second}" - }, HtmlCompat.FROM_HTML_MODE_COMPACT).ifBlank { getString(R.string.all_no_data) } - homeworkDialogRead.text = view?.context?.getString(if (homework.isDone) R.string.homework_mark_as_undone else R.string.homework_mark_as_done) homeworkDialogRead.setOnClickListener { presenter.toggleDone(homework) } homeworkDialogClose.setOnClickListener { dismiss() } + + with(homeworkDialogRecycler) { + layoutManager = LinearLayoutManager(context) + adapter = detailsAdapter.apply { + onAttachmentClickListener = { context.openInternetBrowser(it, ::showMessage) } + homework = this@HomeworkDetailsDialog.homework + } + } } override fun updateMarkAsDoneLabel(isDone: Boolean) { 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 999ec22a..058e702e 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 @@ -7,7 +7,6 @@ import android.view.View import android.view.View.GONE import android.view.View.VISIBLE import android.view.ViewGroup -import android.widget.ArrayAdapter import androidx.core.widget.doOnTextChanged import io.github.wulkanowy.R import io.github.wulkanowy.data.db.entities.Student @@ -46,9 +45,6 @@ class LoginFormFragment : BaseFragment(), LoginFormView { override val formHostSymbol: String get() = hostSymbols.getOrNull(hostKeys.indexOf(loginFormHost.text.toString())).orEmpty() - override val formSymbolValue: String - get() = loginFormSymbol.text.toString() - override val nicknameLabel: String get() = getString(R.string.login_nickname_hint) @@ -77,7 +73,6 @@ class LoginFormFragment : BaseFragment(), LoginFormView { loginFormUsername.doOnTextChanged { _, _, _, _ -> presenter.onUsernameTextChanged() } loginFormPass.doOnTextChanged { _, _, _, _ -> presenter.onPassTextChanged() } - loginFormSymbol.doOnTextChanged { _, _, _, _ -> presenter.onSymbolTextChanged() } loginFormHost.setOnItemClickListener { _, _, _, _ -> presenter.onHostSelected() } loginFormSignIn.setOnClickListener { presenter.onSignInClick() } loginFormAdvancedButton.setOnClickListener { presenter.onAdvancedLoginClick() } @@ -86,9 +81,6 @@ class LoginFormFragment : BaseFragment(), LoginFormView { loginFormContactEmail.setOnClickListener { presenter.onEmailClick() } loginFormRecoverLink.setOnClickListener { presenter.onRecoverClick() } loginFormPass.setOnEditorDoneSignIn { loginFormSignIn.callOnClick() } - loginFormSymbol.setOnEditorDoneSignIn { loginFormSignIn.callOnClick() } - - loginFormSymbol.setAdapter(ArrayAdapter(requireContext(), android.R.layout.simple_list_item_1, resources.getStringArray(R.array.symbols_values))) with(loginFormHost) { setText(hostKeys.getOrNull(0).orEmpty()) @@ -102,18 +94,10 @@ class LoginFormFragment : BaseFragment(), LoginFormView { loginFormPass.setText(pass) } - override fun setSymbol(symbol: String) { - loginFormSymbol.setText(symbol) - } - override fun setUsernameLabel(label: String) { loginFormUsernameLayout.hint = label } - override fun showSymbol(show: Boolean) { - loginFormSymbolLayout.visibility = if (show) VISIBLE else GONE - } - override fun setErrorUsernameRequired() { with(loginFormUsernameLayout) { requestFocus() @@ -135,13 +119,6 @@ class LoginFormFragment : BaseFragment(), LoginFormView { } } - override fun setErrorSymbolRequired(focus: Boolean) { - with(loginFormSymbolLayout) { - if (focus) requestFocus() - error = getString(R.string.login_symbol_helper) - } - } - override fun setErrorPassRequired(focus: Boolean) { with(loginFormPassLayout) { if (focus) requestFocus() @@ -171,10 +148,6 @@ class LoginFormFragment : BaseFragment(), LoginFormView { loginFormPassLayout.error = null } - override fun clearSymbolError() { - loginFormSymbolLayout.error = null - } - override fun showSoftKeyboard() { activity?.showSoftInput() } @@ -227,10 +200,7 @@ class LoginFormFragment : BaseFragment(), LoginFormView { override fun onResume() { super.onResume() - with(presenter) { - updateUsernameLabel() - updateSymbolInputVisibility() - } + presenter.updateUsernameLabel() } override fun openEmail(lastError: String) { @@ -242,7 +212,7 @@ class LoginFormFragment : BaseFragment(), LoginFormView { "${appInfo.systemManufacturer} ${appInfo.systemModel}", appInfo.systemVersion.toString(), appInfo.versionName, - "$formHostValue/$formSymbolValue", + "$formHostValue/$formHostSymbol", lastError ) ) 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 e566d3d6..997e1e85 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 @@ -48,9 +48,7 @@ class LoginFormPresenter @Inject constructor( if (formHostValue.contains("fakelog")) { setCredentials("jan@fakelog.cf", "jan123") } - setSymbol(formHostSymbol) updateUsernameLabel() - updateSymbolInputVisibility() } } @@ -60,12 +58,6 @@ class LoginFormPresenter @Inject constructor( } } - fun updateSymbolInputVisibility() { - view?.run { - showSymbol("adfs" in formHostValue) - } - } - fun onPassTextChanged() { view?.clearPassError() } @@ -74,17 +66,13 @@ class LoginFormPresenter @Inject constructor( view?.clearUsernameError() } - fun onSymbolTextChanged() { - view?.clearSymbolError() - } - fun onSignInClick() { val email = view?.formUsernameValue.orEmpty().trim() val password = view?.formPassValue.orEmpty().trim() val host = view?.formHostValue.orEmpty().trim() - val symbol = view?.formSymbolValue.orEmpty().trim() + val symbol = view?.formHostSymbol.orEmpty().trim() - if (!validateCredentials(email, password, host, symbol)) return + if (!validateCredentials(email, password, host)) return disposable.add(studentRepository.getStudentsScrapper(email, password, host, symbol) .subscribeOn(schedulers.backgroundThread) @@ -128,7 +116,7 @@ class LoginFormPresenter @Inject constructor( view?.onRecoverClick() } - private fun validateCredentials(login: String, password: String, host: String, symbol: String): Boolean { + private fun validateCredentials(login: String, password: String, host: String): Boolean { var isCorrect = true if (login.isEmpty()) { @@ -156,11 +144,6 @@ class LoginFormPresenter @Inject constructor( isCorrect = false } - if ("standard" !in host && symbol.isBlank()) { - view?.setErrorSymbolRequired(focus = isCorrect) - isCorrect = false - } - return isCorrect } } 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 8e46f93f..6506fa88 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 @@ -15,28 +15,20 @@ interface LoginFormView : BaseView { val formHostSymbol: String - val formSymbolValue: String - val nicknameLabel: String val emailLabel: String fun setCredentials(username: String, pass: String) - fun setSymbol(symbol: String) - fun setUsernameLabel(label: String) - fun showSymbol(show: Boolean) - fun setErrorUsernameRequired() fun setErrorLoginRequired() fun setErrorEmailRequired() - fun setErrorSymbolRequired(focus: Boolean) - fun setErrorPassRequired(focus: Boolean) fun setErrorPassInvalid(focus: Boolean) @@ -47,8 +39,6 @@ interface LoginFormView : BaseView { fun clearPassError() - fun clearSymbolError() - fun showSoftKeyboard() fun hideSoftKeyboard() diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/login/recover/LoginRecoverFragment.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/login/recover/LoginRecoverFragment.kt index 6e8a83c7..1bff4926 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/login/recover/LoginRecoverFragment.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/login/recover/LoginRecoverFragment.kt @@ -11,7 +11,6 @@ import android.view.ViewGroup import android.webkit.JavascriptInterface import android.webkit.WebView import android.webkit.WebViewClient -import android.widget.ArrayAdapter import androidx.core.widget.doOnTextChanged import io.github.wulkanowy.R import io.github.wulkanowy.ui.base.BaseFragment @@ -35,15 +34,17 @@ class LoginRecoverFragment : BaseFragment(), LoginRecoverView { private lateinit var hostValues: Array + private lateinit var hostSymbols: Array + override val recoverHostValue: String get() = hostValues.getOrNull(hostKeys.indexOf(loginRecoverHost.text.toString())).orEmpty() + override val formHostSymbol: String + get() = hostSymbols.getOrNull(hostKeys.indexOf(loginRecoverHost.text.toString())).orEmpty() + override val recoverNameValue: String get() = loginRecoverName.text.toString().trim() - override val recoverSymbolValue: String - get() = loginRecoverSymbol.text.toString().trim() - override val emailHintString: String get() = getString(R.string.login_email_hint) @@ -66,17 +67,15 @@ class LoginRecoverFragment : BaseFragment(), LoginRecoverView { loginRecoverWebView.setBackgroundColor(Color.TRANSPARENT) hostKeys = resources.getStringArray(R.array.hosts_keys) hostValues = resources.getStringArray(R.array.hosts_values) + hostSymbols = resources.getStringArray(R.array.hosts_symbols) loginRecoverName.doOnTextChanged { _, _, _, _ -> presenter.onNameTextChanged() } - loginRecoverSymbol.doOnTextChanged { _, _, _, _ -> presenter.onSymbolTextChanged() } loginRecoverHost.setOnItemClickListener { _, _, _, _ -> presenter.onHostSelected() } loginRecoverButton.setOnClickListener { presenter.onRecoverClick() } loginRecoverErrorRetry.setOnClickListener { presenter.onRecoverClick() } loginRecoverErrorDetails.setOnClickListener { presenter.onDetailsClick() } loginRecoverLogin.setOnClickListener { (activity as LoginActivity).switchView(0) } - loginRecoverSymbol.setAdapter(ArrayAdapter(requireContext(), android.R.layout.simple_list_item_1, resources.getStringArray(R.array.symbols_values))) - with(loginRecoverHost) { setText(hostKeys.getOrNull(0).orEmpty()) setAdapter(LoginSymbolAdapter(context, R.layout.support_simple_spinner_dropdown_item, hostKeys)) @@ -106,25 +105,10 @@ class LoginRecoverFragment : BaseFragment(), LoginRecoverView { } } - override fun setSymbolError(focus: Boolean) { - with(loginRecoverSymbolLayout) { - if (focus) requestFocus() - error = getString(R.string.login_field_required) - } - } - override fun clearUsernameError() { loginRecoverNameLayout.error = null } - override fun clearSymbolError() { - loginRecoverSymbolLayout.error = null - } - - override fun showSymbol(show: Boolean) { - loginRecoverSymbolLayout.visibility = if (show) VISIBLE else GONE - } - override fun showProgress(show: Boolean) { loginRecoverProgress.visibility = if (show) VISIBLE else GONE } diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/login/recover/LoginRecoverPresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/login/recover/LoginRecoverPresenter.kt index 7016d173..b292ded5 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/login/recover/LoginRecoverPresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/login/recover/LoginRecoverPresenter.kt @@ -34,10 +34,6 @@ class LoginRecoverPresenter @Inject constructor( view?.clearUsernameError() } - fun onSymbolTextChanged() { - view?.clearSymbolError() - } - fun onHostSelected() { view?.run { if ("fakelog" in recoverHostValue) setDefaultCredentials("jan@fakelog.cf") @@ -48,7 +44,6 @@ class LoginRecoverPresenter @Inject constructor( fun updateFields() { view?.run { - showSymbol("adfs" in recoverHostValue) setUsernameHint(if ("standard" in recoverHostValue) emailHintString else loginPeselEmailHintString) } } @@ -56,9 +51,9 @@ class LoginRecoverPresenter @Inject constructor( fun onRecoverClick() { val username = view?.recoverNameValue.orEmpty() val host = view?.recoverHostValue.orEmpty() - val symbol = view?.recoverSymbolValue.orEmpty() + val symbol = view?.formHostSymbol.orEmpty() - if (!validateInput(username, host, symbol)) return + if (!validateInput(username, host)) return disposable.add(recoverRepository.getReCaptchaSiteKey(host, symbol.ifBlank { "Default" }) .subscribeOn(schedulers.backgroundThread) @@ -80,7 +75,7 @@ class LoginRecoverPresenter @Inject constructor( }) } - private fun validateInput(username: String, host: String, symbol: String): Boolean { + private fun validateInput(username: String, host: String): Boolean { var isCorrect = true if (username.isEmpty()) { @@ -93,18 +88,13 @@ class LoginRecoverPresenter @Inject constructor( isCorrect = false } - if ("adfs" in host && symbol.isBlank()) { - view?.setSymbolError(focus = isCorrect) - isCorrect = false - } - return isCorrect } fun onReCaptchaVerified(reCaptchaResponse: String) { val username = view?.recoverNameValue.orEmpty() val host = view?.recoverHostValue.orEmpty() - val symbol = view?.recoverSymbolValue.ifNullOrBlank { "Default" } + val symbol = view?.formHostSymbol.ifNullOrBlank { "Default" } with(disposable) { clear() diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/login/recover/LoginRecoverView.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/login/recover/LoginRecoverView.kt index 693c52a3..2e21d335 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/login/recover/LoginRecoverView.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/login/recover/LoginRecoverView.kt @@ -6,9 +6,9 @@ interface LoginRecoverView : BaseView { val recoverHostValue: String - val recoverNameValue: String + val formHostSymbol: String - val recoverSymbolValue: String + val recoverNameValue: String val emailHintString: String @@ -22,18 +22,12 @@ interface LoginRecoverView : BaseView { fun clearUsernameError() - fun clearSymbolError() - - fun showSymbol(show: Boolean) - fun setErrorNameRequired() fun setUsernameHint(hint: String) fun setUsernameError(message: String) - fun setSymbolError(focus: Boolean) - fun showSoftKeyboard() fun hideSoftKeyboard() diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/message/preview/MessagePreviewFragment.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/message/preview/MessagePreviewFragment.kt index 3f52be89..953238c0 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/message/preview/MessagePreviewFragment.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/message/preview/MessagePreviewFragment.kt @@ -63,7 +63,7 @@ class MessagePreviewFragment : BaseFragment(), MessagePreviewView, MainView.Titl override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) messageContainer = messagePreviewContainer - presenter.onAttachView(this, (savedInstanceState ?: arguments)?.getSerializable(MESSAGE_ID_KEY) as Message) + presenter.onAttachView(this, (savedInstanceState ?: arguments)?.getSerializable(MESSAGE_ID_KEY) as? Message) } override fun initView() { @@ -150,8 +150,8 @@ class MessagePreviewFragment : BaseFragment(), MessagePreviewView, MainView.Titl } override fun onSaveInstanceState(outState: Bundle) { - super.onSaveInstanceState(outState) outState.putSerializable(MESSAGE_ID_KEY, presenter.message) + super.onSaveInstanceState(outState) } override fun onDestroyView() { diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/message/preview/MessagePreviewPresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/message/preview/MessagePreviewPresenter.kt index 7bf9c05e..62ac5a53 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/message/preview/MessagePreviewPresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/message/preview/MessagePreviewPresenter.kt @@ -24,11 +24,12 @@ class MessagePreviewPresenter @Inject constructor( private var retryCallback: () -> Unit = {} - fun onAttachView(view: MessagePreviewView, message: Message) { + fun onAttachView(view: MessagePreviewView, message: Message?) { super.onAttachView(view) view.initView() errorHandler.showErrorMessage = ::showErrorViewOnError - loadData(message) + this.message = message + loadData(requireNotNull(message)) } private fun onMessageLoadRetry(message: Message) { @@ -47,7 +48,7 @@ class MessagePreviewPresenter @Inject constructor( Timber.i("Loading message ${message.messageId} preview started") disposable.apply { clear() - add(studentRepository.getCurrentStudent() + add(studentRepository.getStudentById(message.studentId) .flatMap { messageRepository.getMessage(it, message, true) } .subscribeOn(schedulers.backgroundThread) .observeOn(schedulers.mainThread) @@ -84,7 +85,8 @@ class MessagePreviewPresenter @Inject constructor( private fun deleteMessage() { message?.let { message -> - disposable.add(messageRepository.deleteMessage(message) + disposable.add(studentRepository.getCurrentStudent() + .flatMap { messageRepository.deleteMessage(it, message) } .subscribeOn(schedulers.backgroundThread) .observeOn(schedulers.mainThread) .doOnSubscribe { diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/message/send/SendMessagePresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/message/send/SendMessagePresenter.kt index 3b89b5ca..385c12ff 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/message/send/SendMessagePresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/message/send/SendMessagePresenter.kt @@ -148,7 +148,8 @@ class SendMessagePresenter @Inject constructor( private fun sendMessage(subject: String, content: String, recipients: List) { Timber.i("Sending message started") - disposable.add(messageRepository.sendMessage(subject, content, recipients) + disposable.add(studentRepository.getCurrentStudent() + .flatMap { messageRepository.sendMessage(it, subject, content, recipients) } .subscribeOn(schedulers.backgroundThread) .observeOn(schedulers.mainThread) .doOnSubscribe { diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/mobiledevice/MobileDevicePresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/mobiledevice/MobileDevicePresenter.kt index e95d2ce0..a6a83f8a 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/mobiledevice/MobileDevicePresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/mobiledevice/MobileDevicePresenter.kt @@ -49,8 +49,11 @@ class MobileDevicePresenter @Inject constructor( private fun loadData(forceRefresh: Boolean = false) { Timber.i("Loading mobile devices data started") disposable.add(studentRepository.getCurrentStudent() - .flatMap { semesterRepository.getCurrentSemester(it) } - .flatMap { mobileDeviceRepository.getDevices(it, forceRefresh) } + .flatMap { student -> + semesterRepository.getCurrentSemester(student).flatMap { semester -> + mobileDeviceRepository.getDevices(student, semester, forceRefresh) + } + } .map { items -> items.map { MobileDeviceItem(it) } } .subscribeOn(schedulers.backgroundThread) .observeOn(schedulers.mainThread) @@ -107,10 +110,11 @@ class MobileDevicePresenter @Inject constructor( fun onUnregisterConfirmed(device: MobileDevice) { Timber.i("Unregister device started") disposable.add(studentRepository.getCurrentStudent() - .flatMap { semesterRepository.getCurrentSemester(it) } - .flatMap { semester -> - mobileDeviceRepository.unregisterDevice(semester, device) - .flatMap { mobileDeviceRepository.getDevices(semester, it) } + .flatMap { student -> + semesterRepository.getCurrentSemester(student).flatMap { semester -> + mobileDeviceRepository.unregisterDevice(student, semester, device) + .flatMap { mobileDeviceRepository.getDevices(student, semester, it) } + } } .map { items -> items.map { MobileDeviceItem(it) } } .subscribeOn(schedulers.backgroundThread) diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/mobiledevice/token/MobileDeviceTokenPresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/mobiledevice/token/MobileDeviceTokenPresenter.kt index a778cbed..6a2a6b98 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/mobiledevice/token/MobileDeviceTokenPresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/mobiledevice/token/MobileDeviceTokenPresenter.kt @@ -29,8 +29,11 @@ class MobileDeviceTokenPresenter @Inject constructor( private fun loadData() { Timber.i("Mobile device registration data started") disposable.add(studentRepository.getCurrentStudent() - .flatMap { semesterRepository.getCurrentSemester(it) } - .flatMap { mobileDeviceRepository.getToken(it) } + .flatMap { student -> + semesterRepository.getCurrentSemester(student).flatMap { semester -> + mobileDeviceRepository.getToken(student, semester) + } + } .subscribeOn(schedulers.backgroundThread) .observeOn(schedulers.mainThread) .doFinally { view?.hideLoading() } diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/schoolandteachers/school/SchoolPresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/schoolandteachers/school/SchoolPresenter.kt index d3299d90..e2eb614d 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/schoolandteachers/school/SchoolPresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/schoolandteachers/school/SchoolPresenter.kt @@ -64,8 +64,11 @@ class SchoolPresenter @Inject constructor( private fun loadData(forceRefresh: Boolean = false) { Timber.i("Loading school info started") disposable.add(studentRepository.getCurrentStudent() - .flatMap { semesterRepository.getCurrentSemester(it) } - .flatMapMaybe { schoolRepository.getSchoolInfo(it, forceRefresh) } + .flatMapMaybe { student -> + semesterRepository.getCurrentSemester(student).flatMapMaybe { + schoolRepository.getSchoolInfo(student, it, forceRefresh) + } + } .subscribeOn(schedulers.backgroundThread) .observeOn(schedulers.mainThread) .doFinally { diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/schoolandteachers/teacher/TeacherPresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/schoolandteachers/teacher/TeacherPresenter.kt index 6aa4871d..c5b6cfd6 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/schoolandteachers/teacher/TeacherPresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/schoolandteachers/teacher/TeacherPresenter.kt @@ -52,8 +52,11 @@ class TeacherPresenter @Inject constructor( private fun loadData(forceRefresh: Boolean = false) { Timber.i("Loading teachers data started") disposable.add(studentRepository.getCurrentStudent() - .flatMap { semesterRepository.getCurrentSemester(it) } - .flatMap { teacherRepository.getTeachers(it, forceRefresh) } + .flatMap { student -> + semesterRepository.getCurrentSemester(student).flatMap { semester -> + teacherRepository.getTeachers(student, semester, forceRefresh) + } + } .map { it.filter { teacher -> teacher.name.isNotBlank() } } .map { items -> items.map { TeacherItem(it, view?.noSubjectString.orEmpty()) } } .subscribeOn(schedulers.backgroundThread) diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/settings/SettingsFragment.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/settings/SettingsFragment.kt index 5a8593a0..fe0a9763 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/settings/SettingsFragment.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/settings/SettingsFragment.kt @@ -82,6 +82,8 @@ class SettingsFragment : PreferenceFragmentCompat(), } override fun setSyncInProgress(inProgress: Boolean) { + if (activity == null || !isAdded) return + findPreference(getString(R.string.pref_key_services_force_sync))?.run { isEnabled = !inProgress summary = if (inProgress) getString(R.string.pref_services_sync_in_progress) else "" diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/settings/SettingsPresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/settings/SettingsPresenter.kt index ce5100ea..c8545ac0 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/settings/SettingsPresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/settings/SettingsPresenter.kt @@ -58,16 +58,29 @@ class SettingsPresenter @Inject constructor( fun onForceSyncDialogSubmit() { view?.run { - Timber.i("Setting sync now started") - analytics.logEvent("sync_now_started") + val successString = syncSuccessString + val failedString = syncFailedString disposable.add(syncManager.startOneTimeSyncWorker() - .doOnSubscribe { setSyncInProgress(true) } + .doOnSubscribe { + setSyncInProgress(true) + Timber.i("Setting sync now started") + analytics.logEvent("sync_now", "status" to "started") + } .doFinally { setSyncInProgress(false) } .subscribe({ workInfo -> - if (workInfo.state == WorkInfo.State.SUCCEEDED) showMessage(syncSuccessString) - else if (workInfo.state == WorkInfo.State.FAILED) showError(syncFailedString, Throwable(workInfo.outputData.getString("error"))) + when (workInfo.state) { + WorkInfo.State.SUCCEEDED -> { + showMessage(successString) + analytics.logEvent("sync_now", "status" to "success") + } + WorkInfo.State.FAILED -> { + showError(failedString, Throwable(workInfo.outputData.getString("error"))) + analytics.logEvent("sync_now", "status" to "failed") + } + else -> Timber.d("Sync now state: ${workInfo.state}") + } }, { - Timber.e("Sync now failed") + Timber.e(it, "Sync now failed") }) ) } diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/timetable/TimetablePresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/timetable/TimetablePresenter.kt index 913f6c12..2e9d0a0b 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/timetable/TimetablePresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/timetable/TimetablePresenter.kt @@ -134,9 +134,12 @@ class TimetablePresenter @Inject constructor( disposable.apply { clear() add(studentRepository.getCurrentStudent() - .flatMap { semesterRepository.getCurrentSemester(it) } + .flatMap { student -> + semesterRepository.getCurrentSemester(student).flatMap { semester -> + timetableRepository.getTimetable(student, semester, currentDate, currentDate, forceRefresh) + } + } .delay(200, MILLISECONDS) - .flatMap { timetableRepository.getTimetable(it, currentDate, currentDate, forceRefresh) } .map { createTimetableItems(it) } .map { items -> items.sortedWith(compareBy({ it.lesson.number }, { !it.lesson.isStudentPlan })) } .subscribeOn(schedulers.backgroundThread) diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/timetable/completed/CompletedLessonsPresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/timetable/completed/CompletedLessonsPresenter.kt index e2b56950..001fed97 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/timetable/completed/CompletedLessonsPresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/timetable/completed/CompletedLessonsPresenter.kt @@ -114,9 +114,12 @@ class CompletedLessonsPresenter @Inject constructor( disposable.apply { clear() add(studentRepository.getCurrentStudent() - .flatMap { semesterRepository.getCurrentSemester(it) } + .flatMap { student -> + semesterRepository.getCurrentSemester(student).flatMap { semester -> + completedLessonsRepository.getCompletedLessons(student, semester, currentDate, currentDate, forceRefresh) + } + } .delay(200, TimeUnit.MILLISECONDS) - .flatMap { completedLessonsRepository.getCompletedLessons(it, currentDate, currentDate, forceRefresh) } .map { items -> items.map { CompletedLessonItem(it) } } .map { items -> items.sortedBy { it.completedLesson.number } } .subscribeOn(schedulers.backgroundThread) diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/timetablewidget/TimetableWidgetFactory.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/timetablewidget/TimetableWidgetFactory.kt index 62620b8e..fb8c5958 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/timetablewidget/TimetableWidgetFactory.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/timetablewidget/TimetableWidgetFactory.kt @@ -107,8 +107,11 @@ class TimetableWidgetFactory( if (student != null) Maybe.just(student) else Maybe.empty() } - .flatMap { semesterRepository.getCurrentSemester(it).toMaybe() } - .flatMap { timetableRepository.getTimetable(it, date, date).toMaybe() } + .flatMap { student -> + semesterRepository.getCurrentSemester(student).toMaybe().flatMap { semester -> + timetableRepository.getTimetable(student, semester, date, date).toMaybe() + } + } .map { items -> items.sortedWith(compareBy({ it.number }, { !it.isStudentPlan })) } .map { lessons -> lessons.filter { if (prefRepository.showWholeClassPlan == "no") it.isStudentPlan else true } } .subscribeOn(schedulers.backgroundThread) diff --git a/app/src/main/java/io/github/wulkanowy/utils/LoggerUtils.kt b/app/src/main/java/io/github/wulkanowy/utils/LoggerUtils.kt index 15de40d3..fc352849 100644 --- a/app/src/main/java/io/github/wulkanowy/utils/LoggerUtils.kt +++ b/app/src/main/java/io/github/wulkanowy/utils/LoggerUtils.kt @@ -18,7 +18,7 @@ class DebugLogTree : Timber.DebugTree() { } } -private fun Bundle?.checkSavedState() = if (this == null) "(STATE IS NULL)" else "" +private fun Bundle?.checkSavedState() = if (this == null) "(STATE IS NULL)" else "(STATE IS NOT NULL)" class ActivityLifecycleLogger : Application.ActivityLifecycleCallbacks { diff --git a/app/src/main/java/io/github/wulkanowy/utils/SdkExtension.kt b/app/src/main/java/io/github/wulkanowy/utils/SdkExtension.kt new file mode 100644 index 00000000..e4d4163b --- /dev/null +++ b/app/src/main/java/io/github/wulkanowy/utils/SdkExtension.kt @@ -0,0 +1,29 @@ +package io.github.wulkanowy.utils + +import io.github.wulkanowy.data.db.entities.Student +import io.github.wulkanowy.sdk.Sdk +import timber.log.Timber + +fun Sdk.init(student: Student): Sdk { + email = student.email + password = student.password + symbol = student.symbol + schoolSymbol = student.schoolSymbol + studentId = student.studentId + classId = student.classId + + if (Sdk.Mode.valueOf(student.loginMode) != Sdk.Mode.API) { + scrapperBaseUrl = student.scrapperBaseUrl + loginType = Sdk.ScrapperLoginType.valueOf(student.loginType) + } + loginId = student.userLoginId + + mode = Sdk.Mode.valueOf(student.loginMode) + mobileBaseUrl = student.mobileBaseUrl + certKey = student.certificateKey + privateKey = student.privateKey + + Timber.d("Sdk in ${student.loginMode} mode reinitialized") + + return this +} diff --git a/app/src/main/play/release-notes/pl-PL/default.txt b/app/src/main/play/release-notes/pl-PL/default.txt index 64aa622c..c2eca2bb 100644 --- a/app/src/main/play/release-notes/pl-PL/default.txt +++ b/app/src/main/play/release-notes/pl-PL/default.txt @@ -1,11 +1,9 @@ -Wersja 0.17.0 +Wersja 0.17.1 -- dodaliśmy wsparcie dla załączników w wiadomosciach i zadaniach domowych -- dodaliśmy oznaczanie zadań domowych jako wykonanych -- dodaliśmy wyświetlanie punktów przy uwagach -- dodaliśmy funkcję powiadomień o awariach dziennika -- dodaliśmy funkcję wymuszenia pełnej synchronizacji -- zmieniliśmy sposób zwracania się do użytkownika na bezosobowy -- naprawiliśmy logowanie na androidach niższych niż 5.0 +- naprawiliśmy problemy ze stabilnością w szczegółach zadania domowego i podglądzie wiadomości +- naprawiliśmy odświeżanie danych w określonych przypadkach +- naprawiliśmy odświeżanie listy urządzeń +- w trybie hybrydowym lista przedmiotów w zakładckach Klasa i Podsumowanie frekwencji powinna teraz zawierać tylko przedmioty ucznia +- na liście dzienników pokazują się teraz również te niestandardowe Pełna lista zmian: https://github.com/wulkanowy/wulkanowy/releases diff --git a/app/src/main/res/layout/dialog_homework.xml b/app/src/main/res/layout/dialog_homework.xml index f6d00049..daa07636 100644 --- a/app/src/main/res/layout/dialog_homework.xml +++ b/app/src/main/res/layout/dialog_homework.xml @@ -1,143 +1,47 @@ - - + android:layout_height="match_parent" + android:orientation="vertical"> - + android:minWidth="300dp" + tools:itemCount="1" + tools:listitem="@layout/item_homework_dialog_details" /> - + + + android:layout_alignParentStart="true" + android:layout_alignParentBottom="true" + android:layout_marginStart="10dp" + android:layout_marginBottom="10dp" + android:text="@string/homework_mark_as_done" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toStartOf="parent" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:layout_alignParentEnd="true" + android:layout_alignParentBottom="true" + android:layout_marginEnd="10dp" + android:layout_marginBottom="10dp" + android:text="@string/all_close" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" /> + + diff --git a/app/src/main/res/layout/fragment_login_form.xml b/app/src/main/res/layout/fragment_login_form.xml index 99a24802..ba261e09 100644 --- a/app/src/main/res/layout/fragment_login_form.xml +++ b/app/src/main/res/layout/fragment_login_form.xml @@ -202,7 +202,7 @@ android:layout_marginRight="24dp" android:hint="@string/login_host_hint" android:orientation="vertical" - app:layout_constraintBottom_toTopOf="@+id/loginFormSymbolLayout" + app:layout_constraintBottom_toTopOf="@+id/loginFormAdvancedButton" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/loginFormRecoverLink"> @@ -215,36 +215,6 @@ tools:ignore="Deprecated,LabelFor" /> - - - - - + app:layout_constraintTop_toBottomOf="@+id/loginFormHostLayout" /> @@ -105,7 +106,7 @@ android:layout_marginRight="24dp" android:hint="@string/login_host_hint" android:orientation="vertical" - app:layout_constraintBottom_toTopOf="@+id/loginRecoverSymbolLayout" + app:layout_constraintBottom_toTopOf="@+id/loginRecoverButton" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/loginRecoverNameLayout"> @@ -118,46 +119,17 @@ tools:ignore="Deprecated,LabelFor" /> - - - - -