From b032c459d13ee53cd58c1475642f7be11a562490 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Pich?= Date: Tue, 30 Apr 2019 11:16:23 +0200 Subject: [PATCH 01/15] Fix theme on release build (#332) --- app/src/main/java/io/github/wulkanowy/ui/base/ThemeManager.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/github/wulkanowy/ui/base/ThemeManager.kt b/app/src/main/java/io/github/wulkanowy/ui/base/ThemeManager.kt index bf16ac496..449f451be 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/base/ThemeManager.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/base/ThemeManager.kt @@ -27,7 +27,7 @@ class ThemeManager @Inject constructor(private val preferencesRepository: Prefer private fun isThemeApplicable(activity: AppCompatActivity): Boolean { return activity.packageManager.getPackageInfo(activity.packageName, GET_ACTIVITIES) - .activities.singleOrNull { it.name == activity.localClassName }?.theme + .activities.singleOrNull { it.name == activity::class.java.canonicalName }?.theme .let { it == R.style.WulkanowyTheme_Black || it == R.style.WulkanowyTheme_NoActionBar } } } From 24f58835e79e31dbd48d7a2674fedac0a0ba6f77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Borcz?= Date: Tue, 30 Apr 2019 17:28:09 +0200 Subject: [PATCH 02/15] Fix menu view initialization and restoration (#333) --- .travis.yml | 8 ++++---- app/build.gradle | 2 +- app/src/main/AndroidManifest.xml | 4 ++-- .../github/wulkanowy/services/sync/works/GradeWork.kt | 7 +++---- .../wulkanowy/services/sync/works/LuckyNumberWork.kt | 8 +++----- .../wulkanowy/services/sync/works/MessageWork.kt | 7 +++---- .../github/wulkanowy/services/sync/works/NoteWork.kt | 8 +++----- .../wulkanowy/ui/modules/account/AccountDialog.kt | 8 ++------ .../wulkanowy/ui/modules/account/AccountPresenter.kt | 5 +++-- .../wulkanowy/ui/modules/account/AccountView.kt | 2 +- .../login/studentselect/LoginStudentSelectFragment.kt | 7 +------ .../luckynumberwidget/LuckyNumberWidgetProvider.kt | 9 ++++----- .../github/wulkanowy/ui/modules/main/MainActivity.kt | 11 +++++++++-- .../wulkanowy/ui/modules/splash/SplashActivity.kt | 1 - .../timetablewidget/TimetableWidgetProvider.kt | 8 +++----- 15 files changed, 42 insertions(+), 53 deletions(-) diff --git a/.travis.yml b/.travis.yml index 56c648589..fc8cc4a3c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,10 +11,10 @@ cache: - $HOME/.gradle/caches/ - $HOME/.gradle/wrapper/ -#branches: -# only: -# - master -# - 0.7.x +branches: + only: + - master + - 0.7.x android: licenses: diff --git a/app/build.gradle b/app/build.gradle index d5887357e..0bbb82102 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -85,7 +85,7 @@ play { } dependencies { - implementation 'io.github.wulkanowy:api:0.8.0' + implementation 'com.github.wulkanowy:api:47337a3' implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" implementation "androidx.legacy:legacy-support-v4:1.0.0" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d670ef444..2a214b8b2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,8 +48,8 @@ android:theme="@style/WulkanowyTheme.NoActionBar" /> @@ -57,8 +57,8 @@ diff --git a/app/src/main/java/io/github/wulkanowy/services/sync/works/GradeWork.kt b/app/src/main/java/io/github/wulkanowy/services/sync/works/GradeWork.kt index d0b8a6bb6..0c70b476f 100644 --- a/app/src/main/java/io/github/wulkanowy/services/sync/works/GradeWork.kt +++ b/app/src/main/java/io/github/wulkanowy/services/sync/works/GradeWork.kt @@ -15,8 +15,7 @@ import io.github.wulkanowy.data.repositories.grade.GradeRepository import io.github.wulkanowy.data.repositories.preferences.PreferencesRepository import io.github.wulkanowy.services.sync.channels.NewEntriesChannel import io.github.wulkanowy.ui.modules.main.MainActivity -import io.github.wulkanowy.ui.modules.main.MainActivity.Companion.EXTRA_START_MENU -import io.github.wulkanowy.ui.modules.main.MainView +import io.github.wulkanowy.ui.modules.main.MainView.MenuView import io.github.wulkanowy.utils.getCompatColor import io.reactivex.Completable import javax.inject.Inject @@ -48,8 +47,8 @@ class GradeWork @Inject constructor( .setDefaults(DEFAULT_ALL) .setColor(context.getCompatColor(R.color.colorPrimary)) .setContentIntent( - PendingIntent.getActivity(context, 0, - MainActivity.getStartIntent(context).putExtra(EXTRA_START_MENU, MainView.MenuView.GRADE), FLAG_UPDATE_CURRENT)) + PendingIntent.getActivity(context, MenuView.GRADE.id, + MainActivity.getStartIntent(context, MenuView.GRADE, true), FLAG_UPDATE_CURRENT)) .setStyle(NotificationCompat.InboxStyle().run { setSummaryText(context.resources.getQuantityString(R.plurals.grade_number_item, grades.size, grades.size)) grades.forEach { addLine("${it.subject}: ${it.entry}") } diff --git a/app/src/main/java/io/github/wulkanowy/services/sync/works/LuckyNumberWork.kt b/app/src/main/java/io/github/wulkanowy/services/sync/works/LuckyNumberWork.kt index c40f95cbf..ebd536b75 100644 --- a/app/src/main/java/io/github/wulkanowy/services/sync/works/LuckyNumberWork.kt +++ b/app/src/main/java/io/github/wulkanowy/services/sync/works/LuckyNumberWork.kt @@ -15,8 +15,7 @@ import io.github.wulkanowy.data.repositories.luckynumber.LuckyNumberRepository import io.github.wulkanowy.data.repositories.preferences.PreferencesRepository import io.github.wulkanowy.services.sync.channels.NewEntriesChannel import io.github.wulkanowy.ui.modules.main.MainActivity -import io.github.wulkanowy.ui.modules.main.MainActivity.Companion.EXTRA_START_MENU -import io.github.wulkanowy.ui.modules.main.MainView +import io.github.wulkanowy.ui.modules.main.MainView.MenuView import io.github.wulkanowy.utils.getCompatColor import io.reactivex.Completable import javax.inject.Inject @@ -48,9 +47,8 @@ class LuckyNumberWork @Inject constructor( .setPriority(PRIORITY_HIGH) .setColor(context.getCompatColor(R.color.colorPrimary)) .setContentIntent( - PendingIntent.getActivity(context, MainView.MenuView.MESSAGE.id, - MainActivity.getStartIntent(context).putExtra(EXTRA_START_MENU, MainView.MenuView.LUCKY_NUMBER) - , FLAG_UPDATE_CURRENT)) + PendingIntent.getActivity(context, MenuView.MESSAGE.id, + MainActivity.getStartIntent(context, MenuView.LUCKY_NUMBER, true), FLAG_UPDATE_CURRENT)) .build()) } } diff --git a/app/src/main/java/io/github/wulkanowy/services/sync/works/MessageWork.kt b/app/src/main/java/io/github/wulkanowy/services/sync/works/MessageWork.kt index 9d39d1065..d5016aeed 100644 --- a/app/src/main/java/io/github/wulkanowy/services/sync/works/MessageWork.kt +++ b/app/src/main/java/io/github/wulkanowy/services/sync/works/MessageWork.kt @@ -16,8 +16,7 @@ import io.github.wulkanowy.data.repositories.message.MessageRepository import io.github.wulkanowy.data.repositories.preferences.PreferencesRepository import io.github.wulkanowy.services.sync.channels.NewEntriesChannel import io.github.wulkanowy.ui.modules.main.MainActivity -import io.github.wulkanowy.ui.modules.main.MainActivity.Companion.EXTRA_START_MENU -import io.github.wulkanowy.ui.modules.main.MainView +import io.github.wulkanowy.ui.modules.main.MainView.MenuView import io.github.wulkanowy.utils.getCompatColor import io.reactivex.Completable import javax.inject.Inject @@ -49,8 +48,8 @@ class MessageWork @Inject constructor( .setPriority(PRIORITY_HIGH) .setColor(context.getCompatColor(R.color.colorPrimary)) .setContentIntent( - PendingIntent.getActivity(context, MainView.MenuView.MESSAGE.id, MainActivity.getStartIntent(context) - .putExtra(EXTRA_START_MENU, MainView.MenuView.MESSAGE), FLAG_UPDATE_CURRENT) + PendingIntent.getActivity(context, MenuView.MESSAGE.id, + MainActivity.getStartIntent(context, MenuView.MESSAGE, true), FLAG_UPDATE_CURRENT) ) .setStyle(NotificationCompat.InboxStyle().run { setSummaryText(context.resources.getQuantityString(R.plurals.message_number_item, messages.size, messages.size)) diff --git a/app/src/main/java/io/github/wulkanowy/services/sync/works/NoteWork.kt b/app/src/main/java/io/github/wulkanowy/services/sync/works/NoteWork.kt index 69e7b3794..86e540c43 100644 --- a/app/src/main/java/io/github/wulkanowy/services/sync/works/NoteWork.kt +++ b/app/src/main/java/io/github/wulkanowy/services/sync/works/NoteWork.kt @@ -15,8 +15,7 @@ import io.github.wulkanowy.data.repositories.note.NoteRepository import io.github.wulkanowy.data.repositories.preferences.PreferencesRepository import io.github.wulkanowy.services.sync.channels.NewEntriesChannel import io.github.wulkanowy.ui.modules.main.MainActivity -import io.github.wulkanowy.ui.modules.main.MainActivity.Companion.EXTRA_START_MENU -import io.github.wulkanowy.ui.modules.main.MainView +import io.github.wulkanowy.ui.modules.main.MainView.MenuView import io.github.wulkanowy.utils.getCompatColor import io.reactivex.Completable import javax.inject.Inject @@ -48,9 +47,8 @@ class NoteWork @Inject constructor( .setPriority(PRIORITY_HIGH) .setColor(context.getCompatColor(R.color.colorPrimary)) .setContentIntent( - PendingIntent.getActivity(context, MainView.MenuView.NOTE.id, - MainActivity.getStartIntent(context).putExtra(EXTRA_START_MENU, MainView.MenuView.NOTE) - , FLAG_UPDATE_CURRENT)) + PendingIntent.getActivity(context, MenuView.NOTE.id, + MainActivity.getStartIntent(context, MenuView.NOTE, true), FLAG_UPDATE_CURRENT)) .setStyle(NotificationCompat.InboxStyle().run { setSummaryText(context.resources.getQuantityString(R.plurals.note_number_item, notes.size, notes.size)) notes.forEach { addLine("${it.teacher}: ${it.category}") } diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/account/AccountDialog.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/account/AccountDialog.kt index 32458f276..1eaa07c16 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/account/AccountDialog.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/account/AccountDialog.kt @@ -15,7 +15,6 @@ import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager import eu.davidea.flexibleadapter.items.AbstractFlexibleItem import io.github.wulkanowy.R import io.github.wulkanowy.ui.modules.login.LoginActivity -import io.github.wulkanowy.ui.modules.main.MainActivity import io.github.wulkanowy.utils.setOnItemClickListener import kotlinx.android.synthetic.main.dialog_account.* import javax.inject.Inject @@ -97,11 +96,8 @@ class AccountDialog : DaggerAppCompatDialogFragment(), AccountView { } } - override fun recreateView() { - activity?.also { - startActivity(MainActivity.getStartIntent(it)) - it.finish() - } + override fun recreateMainView() { + activity?.recreate() } override fun onDestroy() { diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/account/AccountPresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/account/AccountPresenter.kt index 7f41699fe..a16c544a8 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/account/AccountPresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/account/AccountPresenter.kt @@ -54,7 +54,7 @@ class AccountPresenter @Inject constructor( openClearLoginView() } else { Timber.i("Logout result: Switch to another student") - recreateView() + recreateMainView() } } }, { @@ -73,9 +73,10 @@ class AccountPresenter @Inject constructor( disposable.add(studentRepository.switchStudent(item.student) .subscribeOn(schedulers.backgroundThread) .observeOn(schedulers.mainThread) + .doFinally { view?.dismissView() } .subscribe({ Timber.i("Change a student result: Success") - view?.recreateView() + view?.recreateMainView() }, { Timber.i("Change a student result: An exception occurred") errorHandler.dispatch(it) diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/account/AccountView.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/account/AccountView.kt index ca74998a1..74662cf4e 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/account/AccountView.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/account/AccountView.kt @@ -16,6 +16,6 @@ interface AccountView : BaseView { fun openClearLoginView() - fun recreateView() + fun recreateMainView() } diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/login/studentselect/LoginStudentSelectFragment.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/login/studentselect/LoginStudentSelectFragment.kt index 9f3217759..5c48cf2fb 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/login/studentselect/LoginStudentSelectFragment.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/login/studentselect/LoginStudentSelectFragment.kt @@ -1,7 +1,5 @@ package io.github.wulkanowy.ui.modules.login.studentselect -import android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK -import android.content.Intent.FLAG_ACTIVITY_NEW_TASK import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -58,10 +56,7 @@ class LoginStudentSelectFragment : BaseFragment(), LoginStudentSelectView { } override fun openMainView() { - activity?.let { - startActivity(MainActivity.getStartIntent(it) - .apply { addFlags(FLAG_ACTIVITY_CLEAR_TASK or FLAG_ACTIVITY_NEW_TASK) }) - } + activity?.let { startActivity(MainActivity.getStartIntent(context = it, clear = true)) } } override fun showProgress(show: Boolean) { diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/luckynumberwidget/LuckyNumberWidgetProvider.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/luckynumberwidget/LuckyNumberWidgetProvider.kt index 2d965af68..4cb7198cc 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/luckynumberwidget/LuckyNumberWidgetProvider.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/luckynumberwidget/LuckyNumberWidgetProvider.kt @@ -2,6 +2,7 @@ package io.github.wulkanowy.ui.modules.luckynumberwidget import android.annotation.TargetApi import android.app.PendingIntent +import android.app.PendingIntent.FLAG_UPDATE_CURRENT import android.appwidget.AppWidgetManager import android.appwidget.AppWidgetManager.ACTION_APPWIDGET_DELETED import android.appwidget.AppWidgetManager.ACTION_APPWIDGET_OPTIONS_CHANGED @@ -26,8 +27,7 @@ import io.github.wulkanowy.data.repositories.luckynumber.LuckyNumberRepository import io.github.wulkanowy.data.repositories.semester.SemesterRepository import io.github.wulkanowy.data.repositories.student.StudentRepository import io.github.wulkanowy.ui.modules.main.MainActivity -import io.github.wulkanowy.ui.modules.main.MainActivity.Companion.EXTRA_START_MENU -import io.github.wulkanowy.ui.modules.main.MainView +import io.github.wulkanowy.ui.modules.main.MainView.MenuView import io.github.wulkanowy.utils.SchedulersProvider import io.reactivex.Maybe import timber.log.Timber @@ -74,9 +74,8 @@ class LuckyNumberWidgetProvider : BroadcastReceiver() { getLuckyNumber(sharedPref.getLong(getStudentWidgetKey(appWidgetId), 0), appWidgetId)?.luckyNumber?.toString() ?: "#" ) setOnClickPendingIntent(R.id.luckyNumberWidgetContainer, - PendingIntent.getActivity(context, MainView.MenuView.LUCKY_NUMBER.id, MainActivity.getStartIntent(context).apply { - putExtra(EXTRA_START_MENU, MainView.MenuView.LUCKY_NUMBER) - }, PendingIntent.FLAG_UPDATE_CURRENT)) + PendingIntent.getActivity(context, MenuView.LUCKY_NUMBER.id, + MainActivity.getStartIntent(context, MenuView.LUCKY_NUMBER, true), FLAG_UPDATE_CURRENT)) }.also { setStyles(it, intent) appWidgetManager.updateAppWidget(appWidgetId, it) diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/main/MainActivity.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/main/MainActivity.kt index c44836c5b..83e753256 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/main/MainActivity.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/main/MainActivity.kt @@ -46,7 +46,13 @@ class MainActivity : BaseActivity(), MainView { companion object { const val EXTRA_START_MENU = "extraStartMenu" - fun getStartIntent(context: Context) = Intent(context, MainActivity::class.java) + fun getStartIntent(context: Context, startMenu: MainView.MenuView? = null, clear: Boolean = false): Intent { + return Intent(context, MainActivity::class.java) + .apply { + if (clear) flags = FLAG_ACTIVITY_NEW_TASK or FLAG_ACTIVITY_CLEAR_TASK + startMenu?.let { putExtra(EXTRA_START_MENU, it) } + } + } } override val isRootView: Boolean @@ -91,7 +97,7 @@ class MainActivity : BaseActivity(), MainView { override fun initView() { mainBottomNav.run { addItems( - mutableListOf( + listOf( AHBottomNavigationItem(R.string.grade_title, R.drawable.ic_menu_main_grade_26dp, 0), AHBottomNavigationItem(R.string.attendance_title, R.drawable.ic_menu_main_attendance_24dp, 0), AHBottomNavigationItem(R.string.exam_title, R.drawable.ic_menu_main_exam_24dp, 0), @@ -188,6 +194,7 @@ class MainActivity : BaseActivity(), MainView { override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) navController.onSaveInstanceState(outState) + intent.removeExtra(EXTRA_START_MENU) } override fun onDestroy() { diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/splash/SplashActivity.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/splash/SplashActivity.kt index 2bd625332..851b69172 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/splash/SplashActivity.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/splash/SplashActivity.kt @@ -25,7 +25,6 @@ class SplashActivity : BaseActivity(), SplashView { override fun openMainView() { startActivity(MainActivity.getStartIntent(this)) - finish() } override fun showError(text: String, error: Throwable) { diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/timetablewidget/TimetableWidgetProvider.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/timetablewidget/TimetableWidgetProvider.kt index be051a41c..2b748760a 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/timetablewidget/TimetableWidgetProvider.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/timetablewidget/TimetableWidgetProvider.kt @@ -20,8 +20,7 @@ import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.data.repositories.student.StudentRepository import io.github.wulkanowy.services.widgets.TimetableWidgetService import io.github.wulkanowy.ui.modules.main.MainActivity -import io.github.wulkanowy.ui.modules.main.MainActivity.Companion.EXTRA_START_MENU -import io.github.wulkanowy.ui.modules.main.MainView +import io.github.wulkanowy.ui.modules.main.MainView.MenuView import io.github.wulkanowy.utils.FirebaseAnalyticsHelper import io.github.wulkanowy.utils.SchedulersProvider import io.github.wulkanowy.utils.nextOrSameSchoolDay @@ -131,9 +130,8 @@ class TimetableWidgetProvider : BroadcastReceiver() { putExtra(EXTRA_FROM_PROVIDER, true) }, FLAG_UPDATE_CURRENT)) setPendingIntentTemplate(R.id.timetableWidgetList, - PendingIntent.getActivity(context, 1, MainActivity.getStartIntent(context).apply { - putExtra(EXTRA_START_MENU, MainView.MenuView.TIMETABLE) - }, FLAG_UPDATE_CURRENT)) + PendingIntent.getActivity(context, MenuView.TIMETABLE.id, + MainActivity.getStartIntent(context, MenuView.TIMETABLE, true), FLAG_UPDATE_CURRENT)) }.also { sharedPref.putLong(getDateWidgetKey(appWidgetId), date.toEpochDay(), true) appWidgetManager.apply { From 1b7760ff88ae5bfa3777fb971e7f256e4a868568 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Borcz?= Date: Tue, 30 Apr 2019 17:45:37 +0200 Subject: [PATCH 03/15] Fix dark theme background with custom theme engine (#334) --- app/src/main/res/values-night/styles.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values-night/styles.xml b/app/src/main/res/values-night/styles.xml index 76347d54c..342329dc6 100644 --- a/app/src/main/res/values-night/styles.xml +++ b/app/src/main/res/values-night/styles.xml @@ -5,6 +5,7 @@ @color/colorPrimaryDark @color/colorPrimary @style/PreferenceThemeOverlay.v14.Material + @color/bottom_nav_background @color/bottom_nav_background @color/bottom_nav_background @color/divider_inverse From 63404b8576689f6c580a313464814d071a7b2149 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Pich?= Date: Tue, 30 Apr 2019 19:04:05 +0200 Subject: [PATCH 04/15] Fix entity list comparing (#335) --- .../repositories/grade/GradeRepositoryTest.kt | 70 +++++++++++++++++++ .../attendance/AttendanceRepository.kt | 5 +- .../AttendanceSummaryRepository.kt | 5 +- .../CompletedLessonsRepository.kt | 5 +- .../data/repositories/exam/ExamRepository.kt | 9 +-- .../repositories/grade/GradeRepository.kt | 12 ++-- .../gradessummary/GradeSummaryRepository.kt | 9 +-- .../GradeStatisticsRepository.kt | 9 +-- .../homework/HomeworkRepository.kt | 9 +-- .../repositories/message/MessageRepository.kt | 5 +- .../data/repositories/note/NoteRepository.kt | 5 +- .../recipient/RecipientRepository.kt | 5 +- .../reportingunit/ReportingUnitRepository.kt | 5 +- .../semester/SemesterRepository.kt | 5 +- .../repositories/subject/SubjectRepository.kt | 5 +- .../timetable/TimetableRepository.kt | 11 +-- .../ui/modules/splash/SplashActivity.kt | 1 + .../github/wulkanowy/utils/ListExtension.kt | 9 +++ 18 files changed, 139 insertions(+), 45 deletions(-) create mode 100644 app/src/main/java/io/github/wulkanowy/utils/ListExtension.kt diff --git a/app/src/androidTest/java/io/github/wulkanowy/data/repositories/grade/GradeRepositoryTest.kt b/app/src/androidTest/java/io/github/wulkanowy/data/repositories/grade/GradeRepositoryTest.kt index 17e788fc0..a0acb5a76 100644 --- a/app/src/androidTest/java/io/github/wulkanowy/data/repositories/grade/GradeRepositoryTest.kt +++ b/app/src/androidTest/java/io/github/wulkanowy/data/repositories/grade/GradeRepositoryTest.kt @@ -22,6 +22,7 @@ import org.junit.Test import org.junit.runner.RunWith import org.threeten.bp.LocalDate.of import org.threeten.bp.LocalDateTime +import kotlin.test.assertEquals import kotlin.test.assertFalse import kotlin.test.assertTrue import io.github.wulkanowy.api.grades.Grade as GradeApi @@ -109,4 +110,73 @@ class GradeRepositoryTest { assertTrue { grades[2].isRead } assertTrue { grades[3].isRead } } + + @Test + fun subtractLocaleDuplicateGrades() { + gradeLocal.saveGrades(listOf( + createGradeLocal(5, 3.0, of(2019, 2, 25), "Taka sama ocena"), + createGradeLocal(5, 3.0, of(2019, 2, 25), "Taka sama ocena"), + createGradeLocal(3, 5.0, of(2019, 2, 26), "Jakaś inna ocena") + )) + + every { mockApi.getGrades(1) } returns Single.just(listOf( + createGradeApi(5, 3.0, of(2019, 2, 25), "Taka sama ocena"), + createGradeApi(3, 5.0, of(2019, 2, 26), "Jakaś inna ocena") + )) + + val grades = GradeRepository(settings, gradeLocal, gradeRemote) + .getGrades(studentMock, semesterMock, true).blockingGet() + + assertEquals(2, grades.size) + } + + @Test + fun subtractRemoteDuplicateGrades() { + gradeLocal.saveGrades(listOf( + createGradeLocal(5, 3.0, of(2019, 2, 25), "Taka sama ocena"), + createGradeLocal(3, 5.0, of(2019, 2, 26), "Jakaś inna ocena") + )) + + every { mockApi.getGrades(1) } returns Single.just(listOf( + createGradeApi(5, 3.0, of(2019, 2, 25), "Taka sama ocena"), + createGradeApi(5, 3.0, of(2019, 2, 25), "Taka sama ocena"), + createGradeApi(3, 5.0, of(2019, 2, 26), "Jakaś inna ocena") + )) + + val grades = GradeRepository(settings, gradeLocal, gradeRemote) + .getGrades(studentMock, semesterMock, true).blockingGet() + + assertEquals(3, grades.size) + } + + @Test + fun emptyLocal() { + gradeLocal.saveGrades(listOf()) + + every { mockApi.getGrades(1) } returns Single.just(listOf( + createGradeApi(5, 3.0, of(2019, 2, 25), "Taka sama ocena"), + createGradeApi(5, 3.0, of(2019, 2, 25), "Taka sama ocena"), + createGradeApi(3, 5.0, of(2019, 2, 26), "Jakaś inna ocena") + )) + + val grades = GradeRepository(settings, gradeLocal, gradeRemote) + .getGrades(studentMock, semesterMock, true).blockingGet() + + assertEquals(3, grades.size) + } + + @Test + fun emptyRemote() { + gradeLocal.saveGrades(listOf( + createGradeLocal(5, 3.0, of(2019, 2, 25), "Taka sama ocena"), + createGradeLocal(3, 5.0, of(2019, 2, 26), "Jakaś inna ocena") + )) + + every { mockApi.getGrades(1) } returns Single.just(listOf()) + + val grades = GradeRepository(settings, gradeLocal, gradeRemote) + .getGrades(studentMock, semesterMock, true).blockingGet() + + assertEquals(0, grades.size) + } } 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 f6eb07dae..85102b3c5 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 @@ -6,6 +6,7 @@ import io.github.wulkanowy.data.db.entities.Attendance import io.github.wulkanowy.data.db.entities.Semester import io.github.wulkanowy.utils.friday import io.github.wulkanowy.utils.monday +import io.github.wulkanowy.utils.uniqueSubtract import io.reactivex.Single import org.threeten.bp.LocalDate import java.net.UnknownHostException @@ -31,8 +32,8 @@ class AttendanceRepository @Inject constructor( local.getAttendance(semester, dates.first, dates.second) .toSingle(emptyList()) .doOnSuccess { oldAttendance -> - local.deleteAttendance(oldAttendance - newAttendance) - local.saveAttendance(newAttendance - oldAttendance) + local.deleteAttendance(oldAttendance.uniqueSubtract(newAttendance)) + local.saveAttendance(newAttendance.uniqueSubtract(oldAttendance)) } }.flatMap { local.getAttendance(semester, dates.first, dates.second) 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 90d39aab2..c65870508 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.utils.uniqueSubtract import io.reactivex.Single import java.net.UnknownHostException import javax.inject.Inject @@ -25,8 +26,8 @@ class AttendanceSummaryRepository @Inject constructor( }.flatMap { new -> local.getAttendanceSummary(semester, subjectId).toSingle(emptyList()) .doOnSuccess { old -> - local.deleteAttendanceSummary(old - new) - local.saveAttendanceSummary(new - old) + local.deleteAttendanceSummary(old.uniqueSubtract(new)) + local.saveAttendanceSummary(new.uniqueSubtract(old)) } }.flatMap { local.getAttendanceSummary(semester, subjectId).toSingle(emptyList()) }) } 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 5b5941076..c22fabc39 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 @@ -6,6 +6,7 @@ import io.github.wulkanowy.data.db.entities.CompletedLesson import io.github.wulkanowy.data.db.entities.Semester import io.github.wulkanowy.utils.friday import io.github.wulkanowy.utils.monday +import io.github.wulkanowy.utils.uniqueSubtract import io.reactivex.Single import org.threeten.bp.LocalDate import java.net.UnknownHostException @@ -31,8 +32,8 @@ class CompletedLessonsRepository @Inject constructor( local.getCompletedLessons(semester, dates.first, dates.second) .toSingle(emptyList()) .doOnSuccess { old -> - local.deleteCompleteLessons(old - new) - local.saveCompletedLessons(new - old) + local.deleteCompleteLessons(old.uniqueSubtract(new)) + local.saveCompletedLessons(new.uniqueSubtract(old)) } }.flatMap { local.getCompletedLessons(semester, dates.first, dates.second) 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 a0cb5ba11..be60eaecd 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 @@ -6,6 +6,7 @@ import io.github.wulkanowy.data.db.entities.Exam import io.github.wulkanowy.data.db.entities.Semester import io.github.wulkanowy.utils.friday import io.github.wulkanowy.utils.monday +import io.github.wulkanowy.utils.uniqueSubtract import io.reactivex.Single import org.threeten.bp.LocalDate import java.net.UnknownHostException @@ -27,12 +28,12 @@ class ExamRepository @Inject constructor( .flatMap { if (it) remote.getExams(semester, dates.first, dates.second) else Single.error(UnknownHostException()) - }.flatMap { newExams -> + }.flatMap { new -> local.getExams(semester, dates.first, dates.second) .toSingle(emptyList()) - .doOnSuccess { oldExams -> - local.deleteExams(oldExams - newExams) - local.saveExams(newExams - oldExams) + .doOnSuccess { old -> + local.deleteExams(old.uniqueSubtract(new)) + local.saveExams(new.uniqueSubtract(old)) } }.flatMap { local.getExams(semester, dates.first, dates.second) 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 3dd456bff..7f8e92a2e 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 @@ -5,6 +5,7 @@ import com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.Inter 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.utils.uniqueSubtract import io.reactivex.Completable import io.reactivex.Single import java.net.UnknownHostException @@ -24,13 +25,12 @@ class GradeRepository @Inject constructor( .flatMap { if (it) remote.getGrades(semester) else Single.error(UnknownHostException()) - }.flatMap { newGrades -> + }.flatMap { new -> local.getGrades(semester).toSingle(emptyList()) - .doOnSuccess { oldGrades -> - val notifyBreakDate = oldGrades.maxBy { it.date }?.date - ?: student.registrationDate.toLocalDate() - local.deleteGrades(oldGrades - newGrades) - local.saveGrades((newGrades - oldGrades) + .doOnSuccess { old -> + val notifyBreakDate = old.maxBy { it.date }?.date ?: student.registrationDate.toLocalDate() + local.deleteGrades(old.uniqueSubtract(new)) + local.saveGrades(new.uniqueSubtract(old) .onEach { if (it.date >= notifyBreakDate) it.apply { isRead = false 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 b19e07f00..660a032c2 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.utils.uniqueSubtract import io.reactivex.Single import java.net.UnknownHostException import javax.inject.Inject @@ -22,11 +23,11 @@ class GradeSummaryRepository @Inject constructor( .flatMap { if (it) remote.getGradeSummary(semester) else Single.error(UnknownHostException()) - }.flatMap { newGradesSummary -> + }.flatMap { new -> local.getGradesSummary(semester).toSingle(emptyList()) - .doOnSuccess { oldGradesSummary -> - local.deleteGradesSummary(oldGradesSummary - newGradesSummary) - local.saveGradesSummary(newGradesSummary - oldGradesSummary) + .doOnSuccess { old -> + local.deleteGradesSummary(old.uniqueSubtract(new)) + local.saveGradesSummary(new.uniqueSubtract(old)) } }.flatMap { local.getGradesSummary(semester).toSingle(emptyList()) }) } 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 870bd1e93..9617cdd64 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 @@ -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.GradeStatistics import io.github.wulkanowy.data.db.entities.Semester +import io.github.wulkanowy.utils.uniqueSubtract import io.reactivex.Single import java.net.UnknownHostException import javax.inject.Inject @@ -22,11 +23,11 @@ class GradeStatisticsRepository @Inject constructor( .flatMap { if (it) remote.getGradeStatistics(semester, isSemester) else Single.error(UnknownHostException()) - }.flatMap { newGradesStats -> + }.flatMap { new -> local.getGradesStatistics(semester, isSemester).toSingle(emptyList()) - .doOnSuccess { oldGradesStats -> - local.deleteGradesStatistics(oldGradesStats - newGradesStats) - local.saveGradesStatistics(newGradesStats - oldGradesStats) + .doOnSuccess { old -> + local.deleteGradesStatistics(old.uniqueSubtract(new)) + local.saveGradesStatistics(new.uniqueSubtract(old)) } }.flatMap { local.getGradesStatistics(semester, isSemester, subjectName).toSingle(emptyList()) }) } 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 0447c86fe..3f924944d 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 @@ -6,6 +6,7 @@ import io.github.wulkanowy.data.db.entities.Homework import io.github.wulkanowy.data.db.entities.Semester import io.github.wulkanowy.utils.friday import io.github.wulkanowy.utils.monday +import io.github.wulkanowy.utils.uniqueSubtract import io.reactivex.Single import org.threeten.bp.LocalDate import java.net.UnknownHostException @@ -26,11 +27,11 @@ class HomeworkRepository @Inject constructor( .flatMap { if (it) remote.getHomework(semester, monday, friday) else Single.error(UnknownHostException()) - }.flatMap { newGrades -> + }.flatMap { new -> local.getHomework(semester, monday, friday).toSingle(emptyList()) - .doOnSuccess { oldGrades -> - local.deleteHomework(oldGrades - newGrades) - local.saveHomework(newGrades - oldGrades) + .doOnSuccess { old -> + local.deleteHomework(old.uniqueSubtract(new)) + local.saveHomework(new.uniqueSubtract(old)) } }.flatMap { local.getHomework(semester, monday, friday).toSingle(emptyList()) }) } 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 fe4cfbf34..b68f7f719 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 @@ -8,6 +8,7 @@ import io.github.wulkanowy.data.db.entities.Message import io.github.wulkanowy.data.db.entities.Recipient import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.data.repositories.message.MessageFolder.RECEIVED +import io.github.wulkanowy.utils.uniqueSubtract import io.reactivex.Completable import io.reactivex.Maybe import io.reactivex.Single @@ -34,8 +35,8 @@ class MessageRepository @Inject constructor( }.flatMap { new -> local.getMessages(student, folder).toSingle(emptyList()) .doOnSuccess { old -> - local.deleteMessages(old - new) - local.saveMessages((new - old) + local.deleteMessages(old.uniqueSubtract(new)) + local.saveMessages(new.uniqueSubtract(old) .onEach { it.isNotified = !notify }) 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 d74bc7eaf..52cb2d0f5 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 @@ -5,6 +5,7 @@ import com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.Inter 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.utils.uniqueSubtract import io.reactivex.Completable import io.reactivex.Single import java.net.UnknownHostException @@ -27,8 +28,8 @@ class NoteRepository @Inject constructor( }.flatMap { new -> local.getNotes(student).toSingle(emptyList()) .doOnSuccess { old -> - local.deleteNotes(old - new) - local.saveNotes((new - old) + local.deleteNotes(old.uniqueSubtract(new)) + local.saveNotes(new.uniqueSubtract(old) .onEach { if (it.date >= student.registrationDate.toLocalDate()) it.apply { isRead = false 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 0b02721f1..cde75ea8b 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 @@ -7,6 +7,7 @@ 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.utils.uniqueSubtract import io.reactivex.Single import java.net.UnknownHostException import javax.inject.Inject @@ -31,8 +32,8 @@ class RecipientRepository @Inject constructor( }.flatMap { new -> local.getRecipients(student, role, unit).toSingle(emptyList()) .doOnSuccess { old -> - local.deleteRecipients(old - new) - local.saveRecipients(new - old) + local.deleteRecipients(old.uniqueSubtract(new)) + local.saveRecipients(new.uniqueSubtract(old)) } }.flatMap { local.getRecipients(student, role, unit).toSingle(emptyList()) 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 9184b4bb1..6758898e2 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 @@ -5,6 +5,7 @@ import com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.Inter import io.github.wulkanowy.data.ApiHelper import io.github.wulkanowy.data.db.entities.ReportingUnit import io.github.wulkanowy.data.db.entities.Student +import io.github.wulkanowy.utils.uniqueSubtract import io.reactivex.Maybe import io.reactivex.Single import java.net.UnknownHostException @@ -30,8 +31,8 @@ class ReportingUnitRepository @Inject constructor( }.flatMap { new -> local.getReportingUnits(student).toSingle(emptyList()) .doOnSuccess { old -> - local.deleteReportingUnits(old - new) - local.saveReportingUnits(new - old) + local.deleteReportingUnits(old.uniqueSubtract(new)) + local.saveReportingUnits(new.uniqueSubtract(old)) } }.flatMap { local.getReportingUnits(student).toSingle(emptyList()) } ) 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 9735f0290..593014032 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 @@ -5,6 +5,7 @@ import com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.Inter import io.github.wulkanowy.data.ApiHelper 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.Maybe import io.reactivex.Single import timber.log.Timber @@ -31,8 +32,8 @@ class SemesterRepository @Inject constructor( if (currentSemesters.size == 1) { local.getSemesters(student).toSingle(emptyList()) .doOnSuccess { old -> - local.deleteSemesters(old - new) - local.saveSemesters(new - old) + local.deleteSemesters(old.uniqueSubtract(new)) + local.saveSemesters(new.uniqueSubtract(old)) } } else { Timber.i("Current semesters list:\n${currentSemesters.joinToString(separator = "\n")}") 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 6167251b9..0c5f386b6 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 @@ -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.Semester import io.github.wulkanowy.data.db.entities.Subject +import io.github.wulkanowy.utils.uniqueSubtract import io.reactivex.Single import java.net.UnknownHostException import javax.inject.Inject @@ -26,8 +27,8 @@ class SubjectRepository @Inject constructor( local.getSubjects(semester) .toSingle(emptyList()) .doOnSuccess { old -> - local.deleteSubjects(old - new) - local.saveSubjects(new - old) + local.deleteSubjects(old.uniqueSubtract(new)) + local.saveSubjects(new.uniqueSubtract(old)) } }.flatMap { local.getSubjects(semester).toSingle(emptyList()) 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 460d55fd7..c3f23811a 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 @@ -6,6 +6,7 @@ import io.github.wulkanowy.data.db.entities.Semester import io.github.wulkanowy.data.db.entities.Timetable import io.github.wulkanowy.utils.friday import io.github.wulkanowy.utils.monday +import io.github.wulkanowy.utils.uniqueSubtract import io.reactivex.Single import org.threeten.bp.LocalDate import java.net.UnknownHostException @@ -25,14 +26,14 @@ class TimetableRepository @Inject constructor( .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings).flatMap { if (it) remote.getTimetable(semester, monday, friday) else Single.error(UnknownHostException()) - }.flatMap { newTimetable -> + }.flatMap { new -> local.getTimetable(semester, monday, friday) .toSingle(emptyList()) - .doOnSuccess { oldTimetable -> - local.deleteTimetable(oldTimetable - newTimetable) - local.saveTimetable((newTimetable - oldTimetable).map { item -> + .doOnSuccess { old -> + local.deleteTimetable(old.uniqueSubtract(new)) + local.saveTimetable(new.uniqueSubtract(old).map { item -> item.apply { - oldTimetable.singleOrNull { this.start == it.start }?.let { + old.singleOrNull { this.start == it.start }?.let { return@map copy( room = if (room.isEmpty()) it.room else room, teacher = if (teacher.isEmpty()) it.teacher else teacher diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/splash/SplashActivity.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/splash/SplashActivity.kt index 851b69172..2bd625332 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/splash/SplashActivity.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/splash/SplashActivity.kt @@ -25,6 +25,7 @@ class SplashActivity : BaseActivity(), SplashView { override fun openMainView() { startActivity(MainActivity.getStartIntent(this)) + finish() } override fun showError(text: String, error: Throwable) { diff --git a/app/src/main/java/io/github/wulkanowy/utils/ListExtension.kt b/app/src/main/java/io/github/wulkanowy/utils/ListExtension.kt new file mode 100644 index 000000000..4374aeb41 --- /dev/null +++ b/app/src/main/java/io/github/wulkanowy/utils/ListExtension.kt @@ -0,0 +1,9 @@ +package io.github.wulkanowy.utils + +infix fun List.uniqueSubtract(other: List): List { + val list = toMutableList() + other.forEach { + list.remove(it) + } + return list.toList() +} From a191f03cdf46e93b52abc3e7362873f44cbe34ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Pich?= Date: Tue, 30 Apr 2019 19:09:49 +0200 Subject: [PATCH 05/15] Version 0.8.1 --- app/build.gradle | 6 +++--- app/src/main/play/release-notes/pl-PL/default.txt | 14 ++++++++++---- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 0bbb82102..f235d261d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -16,8 +16,8 @@ android { testApplicationId "io.github.tests.wulkanowy" minSdkVersion 15 targetSdkVersion 28 - versionCode 33 - versionName "0.8.0" + versionCode 34 + versionName "0.8.1" multiDexEnabled true testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true @@ -85,7 +85,7 @@ play { } dependencies { - implementation 'com.github.wulkanowy:api:47337a3' + implementation 'io.github.wulkanowy:api:0.8.1' implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" implementation "androidx.legacy:legacy-support-v4:1.0.0" 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 0e2e453fa..c1d5b236a 100644 --- a/app/src/main/play/release-notes/pl-PL/default.txt +++ b/app/src/main/play/release-notes/pl-PL/default.txt @@ -1,13 +1,19 @@ -Wersja 0.8.0 +Wersja 0.8.1 Uwaga! Po tej aktualizacji wymagane jest ponowne przypięcie widżetu planu lekcji! Dodaliśmy: -- możliwość przesyłania dalej i usuwania wiadomości -- możliwość zmiany ucznia w widżecie +- przesyłanie dalej i usuwanie wiadomości +- opcję zmiany ucznia w widżecie - opcję liczenia średniej ocen z całego roku - tryb AMOLED - logowanie wielu uczniów jednocześnie - widżet szczęśliwego numerka -Pełna lista zmian: https://github.com/wulkanowy/wulkanowy/releases/tag/0.8.0 +Zoptymalizowaliśmy: +- przełączanie kont + +Naprawiliśmy: +- synchronizację zdublowanych ocen + +Pełna lista zmian: https://github.com/wulkanowy/wulkanowy/releases From 103ab95c80306b6429aa7adb9dab0092748ea906 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Borcz?= Date: Thu, 9 May 2019 22:06:11 +0200 Subject: [PATCH 06/15] Fix not attached fragment (#337) * Add condition for error dialog * Add safe call of forEach in LuckyNumberWidgetProvider --- .../github/wulkanowy/ui/base/BaseActivity.kt | 16 +++++++++----- .../github/wulkanowy/ui/base/BaseFragment.kt | 21 ++++++++++++------- .../LuckyNumberWidgetProvider.kt | 2 +- 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/io/github/wulkanowy/ui/base/BaseActivity.kt b/app/src/main/java/io/github/wulkanowy/ui/base/BaseActivity.kt index 7fedac6b8..d8b53607b 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/base/BaseActivity.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/base/BaseActivity.kt @@ -2,6 +2,7 @@ package io.github.wulkanowy.ui.base import android.os.Bundle import android.view.View +import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatDelegate import androidx.fragment.app.Fragment @@ -25,7 +26,7 @@ abstract class BaseActivity : AppCompatActivity(), BaseView, HasSupportFragmentI @Inject lateinit var themeManager: ThemeManager - protected lateinit var messageContainer: View + protected var messageContainer: View? = null public override fun onCreate(savedInstanceState: Bundle?) { AndroidInjection.inject(this) @@ -36,13 +37,18 @@ abstract class BaseActivity : AppCompatActivity(), BaseView, HasSupportFragmentI } override fun showError(text: String, error: Throwable) { - Snackbar.make(messageContainer, text, LENGTH_LONG).setAction(R.string.all_details) { - ErrorDialog.newInstance(error).show(supportFragmentManager, error.toString()) - }.show() + if (messageContainer != null) { + Snackbar.make(messageContainer!!, text, LENGTH_LONG) + .setAction(R.string.all_details) { + ErrorDialog.newInstance(error).show(supportFragmentManager, error.toString()) + } + .show() + } else showMessage(text) } override fun showMessage(text: String) { - Snackbar.make(messageContainer, text, LENGTH_LONG).show() + if (messageContainer != null) Snackbar.make(messageContainer!!, text, LENGTH_LONG).show() + else Toast.makeText(this, text, Toast.LENGTH_LONG).show() } override fun onDestroy() { diff --git a/app/src/main/java/io/github/wulkanowy/ui/base/BaseFragment.kt b/app/src/main/java/io/github/wulkanowy/ui/base/BaseFragment.kt index 6e863c511..4beb0ac4f 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/base/BaseFragment.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/base/BaseFragment.kt @@ -2,6 +2,7 @@ package io.github.wulkanowy.ui.base import android.view.View import com.google.android.material.snackbar.Snackbar +import com.google.android.material.snackbar.Snackbar.LENGTH_LONG import dagger.android.support.DaggerFragment import io.github.wulkanowy.R @@ -10,16 +11,22 @@ abstract class BaseFragment : DaggerFragment(), BaseView { protected var messageContainer: View? = null override fun showError(text: String, error: Throwable) { - if (messageContainer == null) (activity as? BaseActivity)?.showError(text, error) - else messageContainer?.also { - Snackbar.make(it, text, Snackbar.LENGTH_LONG).setAction(R.string.all_details) { - ErrorDialog.newInstance(error).show(childFragmentManager, error.toString()) - }.show() + if (messageContainer != null) { + Snackbar.make(messageContainer!!, text, LENGTH_LONG) + .setAction(R.string.all_details) { + if (isAdded) ErrorDialog.newInstance(error).show(childFragmentManager, error.toString()) + } + .show() + } else { + (activity as? BaseActivity)?.showError(text, error) } } override fun showMessage(text: String) { - if (messageContainer == null) (activity as? BaseActivity)?.showMessage(text) - else messageContainer?.also { Snackbar.make(it, text, Snackbar.LENGTH_LONG).show() } + if (messageContainer != null) { + Snackbar.make(messageContainer!!, text, LENGTH_LONG).show() + } else { + (activity as? BaseActivity)?.showMessage(text) + } } } diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/luckynumberwidget/LuckyNumberWidgetProvider.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/luckynumberwidget/LuckyNumberWidgetProvider.kt index 4cb7198cc..cbf3b63ce 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/luckynumberwidget/LuckyNumberWidgetProvider.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/luckynumberwidget/LuckyNumberWidgetProvider.kt @@ -68,7 +68,7 @@ class LuckyNumberWidgetProvider : BroadcastReceiver() { } private fun onUpdate(context: Context, intent: Intent) { - intent.getIntArrayExtra(EXTRA_APPWIDGET_IDS).forEach { appWidgetId -> + intent.getIntArrayExtra(EXTRA_APPWIDGET_IDS)?.forEach { appWidgetId -> RemoteViews(context.packageName, R.layout.widget_luckynumber).apply { setTextViewText(R.id.luckyNumberWidgetNumber, getLuckyNumber(sharedPref.getLong(getStudentWidgetKey(appWidgetId), 0), appWidgetId)?.luckyNumber?.toString() ?: "#" From d169f964f2333e6c5d2bcc76875aa906f43182d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Borcz?= Date: Tue, 14 May 2019 11:45:27 +0200 Subject: [PATCH 07/15] Fix crash when no webview activity (#338) --- .../io/github/wulkanowy/ui/modules/about/AboutFragment.kt | 7 ++++--- .../wulkanowy/ui/modules/login/form/LoginFormFragment.kt | 4 ++-- .../java/io/github/wulkanowy/utils/ActivityExtension.kt | 1 - .../java/io/github/wulkanowy/utils/ContextExtension.kt | 8 ++++++++ 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/about/AboutFragment.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/about/AboutFragment.kt index 6815b45f2..8d07566f7 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/about/AboutFragment.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/about/AboutFragment.kt @@ -12,6 +12,7 @@ import io.github.wulkanowy.BuildConfig import io.github.wulkanowy.R import io.github.wulkanowy.ui.base.BaseFragment import io.github.wulkanowy.ui.modules.main.MainView +import io.github.wulkanowy.utils.openInternetBrowser import io.github.wulkanowy.utils.withOnExtraListener import javax.inject.Inject @@ -57,11 +58,11 @@ class AboutFragment : BaseFragment(), AboutView, MainView.TitledView { } override fun openDiscordInviteView() { - startActivity(Intent.parseUri("https://discord.gg/vccAQBr", 0)) + context?.openInternetBrowser("https://discord.gg/vccAQBr", ::showMessage) } override fun openHomepageWebView() { - startActivity(Intent.parseUri("https://wulkanowy.github.io/", 0)) + context?.openInternetBrowser("https://wulkanowy.github.io/", ::showMessage) } override fun openEmailClientView() { @@ -80,7 +81,7 @@ class AboutFragment : BaseFragment(), AboutView, MainView.TitledView { if (intent.resolveActivity(it.packageManager) != null) { startActivity(Intent.createChooser(intent, getString(R.string.about_feedback))) } else { - startActivity(Intent.parseUri("https://github.com/wulkanowy/wulkanowy/issues", 0)) + it.openInternetBrowser("https://github.com/wulkanowy/wulkanowy/issues", ::showMessage) } } } 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 2a0467d9f..b17a1205c 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 @@ -1,7 +1,6 @@ package io.github.wulkanowy.ui.modules.login.form import android.annotation.SuppressLint -import android.content.Intent import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -17,6 +16,7 @@ import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.ui.base.BaseFragment import io.github.wulkanowy.ui.modules.login.LoginActivity import io.github.wulkanowy.utils.hideSoftInput +import io.github.wulkanowy.utils.openInternetBrowser import io.github.wulkanowy.utils.setOnItemSelectedListener import io.github.wulkanowy.utils.setOnTextChangedListener import io.github.wulkanowy.utils.showSoftInput @@ -145,7 +145,7 @@ class LoginFormFragment : BaseFragment(), LoginFormView { } override fun openPrivacyPolicyPage() { - startActivity(Intent.parseUri("https://wulkanowy.github.io/polityka-prywatnosci.html", 0)) + context?.openInternetBrowser("https://wulkanowy.github.io/polityka-prywatnosci.html", ::showMessage) } override fun onDestroyView() { diff --git a/app/src/main/java/io/github/wulkanowy/utils/ActivityExtension.kt b/app/src/main/java/io/github/wulkanowy/utils/ActivityExtension.kt index c0314d02e..93781a9fe 100644 --- a/app/src/main/java/io/github/wulkanowy/utils/ActivityExtension.kt +++ b/app/src/main/java/io/github/wulkanowy/utils/ActivityExtension.kt @@ -4,7 +4,6 @@ import android.app.Activity import android.content.Context.INPUT_METHOD_SERVICE import android.view.inputmethod.InputMethodManager - fun Activity.showSoftInput() { (getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager?)?.run { if (currentFocus != null) showSoftInput(currentFocus, 0) diff --git a/app/src/main/java/io/github/wulkanowy/utils/ContextExtension.kt b/app/src/main/java/io/github/wulkanowy/utils/ContextExtension.kt index 70368badd..c367ecd07 100644 --- a/app/src/main/java/io/github/wulkanowy/utils/ContextExtension.kt +++ b/app/src/main/java/io/github/wulkanowy/utils/ContextExtension.kt @@ -1,6 +1,7 @@ package io.github.wulkanowy.utils import android.content.Context +import android.content.Intent import androidx.annotation.AttrRes import androidx.annotation.ColorInt import androidx.annotation.ColorRes @@ -18,3 +19,10 @@ fun Context.getThemeAttrColor(@AttrRes colorAttr: Int): Int { @ColorInt fun Context.getCompatColor(@ColorRes colorRes: Int) = ContextCompat.getColor(this, colorRes) + +fun Context.openInternetBrowser(uri: String, onActivityNotFound: (uri: String) -> Unit) { + Intent.parseUri(uri, 0).let { + if (it.resolveActivity(packageManager) != null) startActivity(it) + else onActivityNotFound(uri) + } +} From 0cb4eda32bec9db9aa7345ee89734ef97482476d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Borcz?= Date: Wed, 15 May 2019 15:11:29 +0200 Subject: [PATCH 08/15] Fix crash on reselecting fragment (#339) --- .../wulkanowy/ui/modules/attendance/AttendanceFragment.kt | 2 +- .../java/io/github/wulkanowy/ui/modules/exam/ExamFragment.kt | 2 +- .../io/github/wulkanowy/ui/modules/grade/GradeFragment.kt | 2 +- .../java/io/github/wulkanowy/ui/modules/main/MainActivity.kt | 5 +---- .../java/io/github/wulkanowy/ui/modules/more/MoreFragment.kt | 2 +- .../wulkanowy/ui/modules/timetable/TimetableFragment.kt | 2 +- 6 files changed, 6 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/attendance/AttendanceFragment.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/attendance/AttendanceFragment.kt index 7170f6089..e5d8150d3 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/attendance/AttendanceFragment.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/attendance/AttendanceFragment.kt @@ -103,7 +103,7 @@ class AttendanceFragment : BaseSessionFragment(), AttendanceView, MainView.MainC } override fun onFragmentReselected() { - presenter.onViewReselected() + if (::presenter.isInitialized) presenter.onViewReselected() } override fun popView() { diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/exam/ExamFragment.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/exam/ExamFragment.kt index 97e97727f..8f9576f2a 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/exam/ExamFragment.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/exam/ExamFragment.kt @@ -88,7 +88,7 @@ class ExamFragment : BaseSessionFragment(), ExamView, MainView.MainChildView, Ma } override fun onFragmentReselected() { - presenter.onViewReselected() + if (::presenter.isInitialized) presenter.onViewReselected() } override fun showEmpty(show: Boolean) { diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/GradeFragment.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/GradeFragment.kt index 11b2de3f9..182258d14 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/GradeFragment.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/GradeFragment.kt @@ -88,7 +88,7 @@ class GradeFragment : BaseSessionFragment(), GradeView, MainView.MainChildView, } override fun onFragmentReselected() { - presenter.onViewReselected() + if (::presenter.isInitialized) presenter.onViewReselected() } override fun showContent(show: Boolean) { diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/main/MainActivity.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/main/MainActivity.kt index 83e753256..5ca41b711 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/main/MainActivity.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/main/MainActivity.kt @@ -5,7 +5,6 @@ import android.content.Intent import android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK import android.content.Intent.FLAG_ACTIVITY_NEW_TASK import android.os.Bundle -import android.os.Handler import android.view.Menu import android.view.MenuItem import androidx.appcompat.app.AlertDialog @@ -165,9 +164,7 @@ class MainActivity : BaseActivity(), MainView { } override fun notifyMenuViewReselected() { - Handler().postDelayed({ - (navController.currentStack?.get(0) as? MainView.MainChildView)?.onFragmentReselected() - }, 250) + (navController.currentStack?.getOrNull(0) as? MainView.MainChildView)?.onFragmentReselected() } fun showDialogFragment(dialog: DialogFragment) { diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/more/MoreFragment.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/more/MoreFragment.kt index 5bbf6247a..4823dedf3 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/more/MoreFragment.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/more/MoreFragment.kt @@ -104,7 +104,7 @@ class MoreFragment : BaseFragment(), MoreView, MainView.TitledView, MainView.Mai } override fun onFragmentReselected() { - presenter.onViewReselected() + if (::presenter.isInitialized) presenter.onViewReselected() } override fun updateData(data: List) { diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/timetable/TimetableFragment.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/timetable/TimetableFragment.kt index fa6452b73..26eaef271 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/timetable/TimetableFragment.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/timetable/TimetableFragment.kt @@ -110,7 +110,7 @@ class TimetableFragment : BaseSessionFragment(), TimetableView, MainView.MainChi } override fun onFragmentReselected() { - presenter.onViewReselected() + if (::presenter.isInitialized) presenter.onViewReselected() } override fun popView() { From 80cb94c434a9793d0c483828f97e84c740c96ef5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Pich?= Date: Wed, 15 May 2019 19:26:25 +0200 Subject: [PATCH 09/15] Version 0.8.2 --- .travis.yml | 8 ++++---- app/build.gradle | 8 ++++---- .../main/play/release-notes/pl-PL/default.txt | 18 +++--------------- 3 files changed, 11 insertions(+), 23 deletions(-) diff --git a/.travis.yml b/.travis.yml index fc8cc4a3c..10824e32f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,10 +11,10 @@ cache: - $HOME/.gradle/caches/ - $HOME/.gradle/wrapper/ -branches: - only: - - master - - 0.7.x +#branches: +# only: +# - master +# - 0.8.x android: licenses: diff --git a/app/build.gradle b/app/build.gradle index f235d261d..5a3a7f2ae 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -16,8 +16,8 @@ android { testApplicationId "io.github.tests.wulkanowy" minSdkVersion 15 targetSdkVersion 28 - versionCode 34 - versionName "0.8.1" + versionCode 35 + versionName "0.8.2" multiDexEnabled true testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true @@ -80,12 +80,12 @@ androidExtensions { play { serviceAccountEmail = System.getenv("PLAY_SERVICE_ACCOUNT_EMAIL") ?: "jan@fakelog.cf" serviceAccountCredentials = file('key.p12') - defaultToAppBundles = true + defaultToAppBundles = false track = 'alpha' } dependencies { - implementation 'io.github.wulkanowy:api:0.8.1' + implementation 'io.github.wulkanowy:api:0.8.2' implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" implementation "androidx.legacy:legacy-support-v4:1.0.0" 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 c1d5b236a..e36d71ce6 100644 --- a/app/src/main/play/release-notes/pl-PL/default.txt +++ b/app/src/main/play/release-notes/pl-PL/default.txt @@ -1,19 +1,7 @@ -Wersja 0.8.1 - -Uwaga! Po tej aktualizacji wymagane jest ponowne przypięcie widżetu planu lekcji! - -Dodaliśmy: -- przesyłanie dalej i usuwanie wiadomości -- opcję zmiany ucznia w widżecie -- opcję liczenia średniej ocen z całego roku -- tryb AMOLED -- logowanie wielu uczniów jednocześnie -- widżet szczęśliwego numerka - -Zoptymalizowaliśmy: -- przełączanie kont +Wersja 0.8.2 Naprawiliśmy: -- synchronizację zdublowanych ocen +- rzadkie problemy ze stabilnością w aplikacji +- częste problemy ze stabilnością w widżecie szczęśliwego numerka Pełna lista zmian: https://github.com/wulkanowy/wulkanowy/releases From bf6b857a3eeb47bbc4c9cad62cfad20e88461e9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Borcz?= Date: Sat, 18 May 2019 00:22:07 +0200 Subject: [PATCH 10/15] Fix null returns in widgets (#340) --- .../ui/modules/luckynumberwidget/LuckyNumberWidgetProvider.kt | 2 +- .../ui/modules/timetablewidget/TimetableWidgetProvider.kt | 2 +- build.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/luckynumberwidget/LuckyNumberWidgetProvider.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/luckynumberwidget/LuckyNumberWidgetProvider.kt index cbf3b63ce..51285969c 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/luckynumberwidget/LuckyNumberWidgetProvider.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/luckynumberwidget/LuckyNumberWidgetProvider.kt @@ -104,7 +104,7 @@ class LuckyNumberWidgetProvider : BroadcastReceiver() { .toMaybe() .doOnSuccess { sharedPref.putLong(getStudentWidgetKey(appWidgetId), it.id) } } - else -> null + else -> Maybe.empty() } } } diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/timetablewidget/TimetableWidgetProvider.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/timetablewidget/TimetableWidgetProvider.kt index 2b748760a..9b35e5cae 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/timetablewidget/TimetableWidgetProvider.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/timetablewidget/TimetableWidgetProvider.kt @@ -165,7 +165,7 @@ class TimetableWidgetProvider : BroadcastReceiver() { .toMaybe() .doOnSuccess { sharedPref.putLong(getStudentWidgetKey(appWidgetId), it.id) } } - else -> null + else -> Maybe.empty() } } } diff --git a/build.gradle b/build.gradle index ac6bde63f..1321c5f4c 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ buildscript { } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - classpath 'com.android.tools.build:gradle:3.4.0' + classpath 'com.android.tools.build:gradle:3.4.1' classpath 'com.google.gms:google-services:4.2.0' classpath "io.fabric.tools:gradle:1.28.1" classpath "com.github.triplet.gradle:play-publisher:2.2.0" From 1f5088cfc97d019086852e0d069671143d4f7027 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Pich?= Date: Sat, 18 May 2019 13:03:39 +0200 Subject: [PATCH 11/15] Don't copy teacher from previous lesson to completed (#341) --- .../timetable/TestTimetableEntityCreator.kt | 8 ++++---- .../timetable/TimetableRepositoryTest.kt | 14 +++++++++----- .../repositories/timetable/TimetableRepository.kt | 3 +-- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/app/src/androidTest/java/io/github/wulkanowy/data/repositories/timetable/TestTimetableEntityCreator.kt b/app/src/androidTest/java/io/github/wulkanowy/data/repositories/timetable/TestTimetableEntityCreator.kt index 438e95f48..eea5463d1 100644 --- a/app/src/androidTest/java/io/github/wulkanowy/data/repositories/timetable/TestTimetableEntityCreator.kt +++ b/app/src/androidTest/java/io/github/wulkanowy/data/repositories/timetable/TestTimetableEntityCreator.kt @@ -7,7 +7,7 @@ import org.threeten.bp.LocalDateTime.now import io.github.wulkanowy.api.timetable.Timetable as TimetableRemote import io.github.wulkanowy.data.db.entities.Timetable as TimetableLocal -fun createTimetableLocal(number: Int, start: LocalDateTime, room: String = "", subject: String = ""): TimetableLocal { +fun createTimetableLocal(number: Int, start: LocalDateTime, room: String = "", subject: String = "", teacher: String = ""): TimetableLocal { return TimetableLocal( studentId = 1, diaryId = 2, @@ -20,7 +20,7 @@ fun createTimetableLocal(number: Int, start: LocalDateTime, room: String = "", s group = "", room = room, roomOld = "", - teacher = "", + teacher = teacher, teacherOld = "", info = "", changes = false, @@ -28,7 +28,7 @@ fun createTimetableLocal(number: Int, start: LocalDateTime, room: String = "", s ) } -fun createTimetableRemote(number: Int, start: LocalDateTime, room: String, subject: String = ""): TimetableRemote { +fun createTimetableRemote(number: Int, start: LocalDateTime, room: String, subject: String = "", teacher: String = ""): TimetableRemote { return TimetableRemote( number = number, start = start.toDate(), @@ -37,7 +37,7 @@ fun createTimetableRemote(number: Int, start: LocalDateTime, room: String, subje subject = subject, group = "", room = room, - teacher = "", + teacher = teacher, info = "", changes = false, canceled = false 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 1c0802637..79216d552 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 @@ -63,23 +63,27 @@ class TimetableRepositoryTest { fun copyDetailsToCompletedFromPrevious() { timetableLocal.saveTimetable(listOf( createTimetableLocal(1, of(2019, 3, 5, 8, 0), "123", "Przyroda"), - createTimetableLocal(1, of(2019, 3, 5, 8, 50), "321", "Religia"), - createTimetableLocal(1, of(2019, 3, 5, 9, 40), "213", "W-F") + createTimetableLocal(2, of(2019, 3, 5, 8, 50), "321", "Religia"), + createTimetableLocal(3, of(2019, 3, 5, 9, 40), "213", "W-F"), + createTimetableLocal(4, of(2019, 3, 5, 10, 30), "213", "W-F", "Jan Kowalski") )) every { mockApi.getTimetable(any(), any()) } returns Single.just(listOf( createTimetableRemote(1, of(2019, 3, 5, 8, 0), "", "Przyroda"), - createTimetableRemote(1, of(2019, 3, 5, 8, 50), "", "Religia"), - createTimetableRemote(1, of(2019, 3, 5, 9, 40), "", "W-F") + createTimetableRemote(2, of(2019, 3, 5, 8, 50), "", "Religia"), + createTimetableRemote(3, of(2019, 3, 5, 9, 40), "", "W-F"), + createTimetableRemote(4, of(2019, 3, 5, 10, 30), "", "W-F") )) val lessons = TimetableRepository(settings, timetableLocal, timetableRemote) .getTimetable(semesterMock, LocalDate.of(2019, 3, 5), LocalDate.of(2019, 3, 5), true) .blockingGet() - assertEquals(3, lessons.size) + assertEquals(4, lessons.size) assertEquals("123", lessons[0].room) assertEquals("321", lessons[1].room) assertEquals("213", lessons[2].room) + + assertEquals("", lessons[3].teacher) } } 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 c3f23811a..0e6331f91 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 @@ -35,8 +35,7 @@ class TimetableRepository @Inject constructor( item.apply { old.singleOrNull { this.start == it.start }?.let { return@map copy( - room = if (room.isEmpty()) it.room else room, - teacher = if (teacher.isEmpty()) it.teacher else teacher + room = if (room.isEmpty()) it.room else room ) } } From 667c4b6af7d010667e48b57809c7cd4d99a53fd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Borcz?= Date: Sat, 18 May 2019 23:32:37 +0200 Subject: [PATCH 12/15] Fix empty maybe when loading message content (#343) --- .../io/github/wulkanowy/data/db/dao/MessagesDao.kt | 4 ++-- .../data/repositories/message/MessageLocal.kt | 4 ++-- .../data/repositories/message/MessageRepository.kt | 8 ++++---- .../modules/message/preview/MessagePreviewFragment.kt | 10 ++++++---- .../modules/message/preview/MessagePreviewPresenter.kt | 6 +++--- .../ui/modules/message/tab/MessageTabFragment.kt | 6 +++--- .../ui/modules/message/tab/MessageTabPresenter.kt | 10 +++++----- .../wulkanowy/ui/modules/message/tab/MessageTabView.kt | 2 +- 8 files changed, 26 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/io/github/wulkanowy/data/db/dao/MessagesDao.kt b/app/src/main/java/io/github/wulkanowy/data/db/dao/MessagesDao.kt index 3ef5d6905..4f72c6c91 100644 --- a/app/src/main/java/io/github/wulkanowy/data/db/dao/MessagesDao.kt +++ b/app/src/main/java/io/github/wulkanowy/data/db/dao/MessagesDao.kt @@ -23,8 +23,8 @@ interface MessagesDao { @Query("SELECT * FROM Messages WHERE student_id = :studentId AND folder_id = :folder AND removed = 0 ORDER BY date DESC") fun loadAll(studentId: Int, folder: Int): Maybe> - @Query("SELECT * FROM Messages WHERE student_id = :studentId AND real_id = :id") - fun load(studentId: Int, id: Int): Maybe + @Query("SELECT * FROM Messages WHERE id = :id") + fun load(id: Long): Maybe @Query("SELECT * FROM Messages WHERE student_id = :studentId AND removed = 1 ORDER BY date DESC") fun loadDeleted(studentId: Int): Maybe> diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/message/MessageLocal.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/message/MessageLocal.kt index 411cca395..ce08d13ec 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/message/MessageLocal.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/message/MessageLocal.kt @@ -23,8 +23,8 @@ class MessageLocal @Inject constructor(private val messagesDb: MessagesDao) { messagesDb.deleteAll(messages) } - fun getMessage(student: Student, id: Int): Maybe { - return messagesDb.load(student.id.toInt(), id) + fun getMessage(id: Long): Maybe { + return messagesDb.load(id) } fun getMessages(student: Student, folder: MessageFolder): Maybe> { 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 b68f7f719..c10cd5181 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 @@ -46,14 +46,14 @@ class MessageRepository @Inject constructor( } } - fun getMessage(student: Student, messageId: Int, markAsRead: Boolean = false): Single { + fun getMessage(student: Student, messageDbId: Long, markAsRead: Boolean = false): Single { return Single.just(apiHelper.initApi(student)) .flatMap { _ -> - local.getMessage(student, messageId) + local.getMessage(messageDbId) .filter { !it.content.isNullOrEmpty() } .switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings) .flatMap { - if (it) local.getMessage(student, messageId).toSingle() + if (it) local.getMessage(messageDbId).toSingle() else Single.error(UnknownHostException()) } .flatMap { dbMessage -> @@ -64,7 +64,7 @@ class MessageRepository @Inject constructor( })) } }.flatMap { - local.getMessage(student, messageId).toSingle() + local.getMessage(messageDbId).toSingle() } ) } 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 12765546b..057d81dc6 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 @@ -27,7 +27,9 @@ class MessagePreviewFragment : BaseSessionFragment(), MessagePreviewView, MainVi lateinit var presenter: MessagePreviewPresenter private var menuReplyButton: MenuItem? = null + private var menuForwardButton: MenuItem? = null + private var menuDeleteButton: MenuItem? = null override val titleStringId: Int @@ -42,9 +44,9 @@ class MessagePreviewFragment : BaseSessionFragment(), MessagePreviewView, MainVi companion object { const val MESSAGE_ID_KEY = "message_id" - fun newInstance(messageId: Int?): MessagePreviewFragment { + fun newInstance(messageId: Long): MessagePreviewFragment { return MessagePreviewFragment().apply { - arguments = Bundle().apply { putInt(MESSAGE_ID_KEY, messageId ?: 0) } + arguments = Bundle().apply { putLong(MESSAGE_ID_KEY, messageId) } } } } @@ -61,7 +63,7 @@ class MessagePreviewFragment : BaseSessionFragment(), MessagePreviewView, MainVi override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) messageContainer = messagePreviewContainer - presenter.onAttachView(this, (savedInstanceState ?: arguments)?.getInt(MESSAGE_ID_KEY) ?: 0) + presenter.onAttachView(this, (savedInstanceState ?: arguments)?.getLong(MESSAGE_ID_KEY) ?: 0L) } override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { @@ -145,7 +147,7 @@ class MessagePreviewFragment : BaseSessionFragment(), MessagePreviewView, MainVi override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) - outState.putInt(MESSAGE_ID_KEY, presenter.messageId) + outState.putLong(MESSAGE_ID_KEY, presenter.messageId) } 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 397e103b2..31641d754 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 @@ -20,16 +20,16 @@ class MessagePreviewPresenter @Inject constructor( private val analytics: FirebaseAnalyticsHelper ) : BaseSessionPresenter(errorHandler) { - var messageId: Int = 0 + var messageId = 0L private var message: Message? = null - fun onAttachView(view: MessagePreviewView, id: Int) { + fun onAttachView(view: MessagePreviewView, id: Long) { super.onAttachView(view) loadData(id) } - private fun loadData(id: Int) { + private fun loadData(id: Long) { Timber.i("Loading message $id preview started") messageId = id disposable.apply { diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/message/tab/MessageTabFragment.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/message/tab/MessageTabFragment.kt index e9d77e592..3859853fc 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/message/tab/MessageTabFragment.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/message/tab/MessageTabFragment.kt @@ -56,7 +56,7 @@ class MessageTabFragment : BaseSessionFragment(), MessageTabView { super.onActivityCreated(savedInstanceState) messageContainer = messageTabRecycler presenter.onAttachView(this, MessageFolder.valueOf( - (savedInstanceState ?: arguments)?.getString(MessageTabFragment.MESSAGE_TAB_FOLDER_ID).orEmpty() + (savedInstanceState ?: arguments)?.getString(MESSAGE_TAB_FOLDER_ID).orEmpty() )) } @@ -106,7 +106,7 @@ class MessageTabFragment : BaseSessionFragment(), MessageTabView { messageTabSwipe.isRefreshing = show } - override fun openMessage(messageId: Int?) { + override fun openMessage(messageId: Long) { (activity as? MainActivity)?.pushView(MessagePreviewFragment.newInstance(messageId)) } @@ -124,7 +124,7 @@ class MessageTabFragment : BaseSessionFragment(), MessageTabView { override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) - outState.putString(MessageTabFragment.MESSAGE_TAB_FOLDER_ID, presenter.folder.name) + outState.putString(MESSAGE_TAB_FOLDER_ID, presenter.folder.name) } override fun onDestroyView() { diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/message/tab/MessageTabPresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/message/tab/MessageTabPresenter.kt index 4a8415e87..2173c951d 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/message/tab/MessageTabPresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/message/tab/MessageTabPresenter.kt @@ -44,9 +44,9 @@ class MessageTabPresenter @Inject constructor( fun onMessageItemSelected(item: AbstractFlexibleItem<*>) { if (item is MessageItem) { - Timber.i("Select message ${item.message.realId} item") + Timber.i("Select message ${item.message.id} item") view?.run { - openMessage(item.message.realId) + openMessage(item.message.id) if (item.message.unread) { item.message.unread = false updateItem(item) @@ -90,13 +90,13 @@ class MessageTabPresenter @Inject constructor( } private fun updateMessage(message: Message) { - Timber.i("Attempt to update message ${message.realId}") + Timber.i("Attempt to update message ${message.id}") disposable.add(messageRepository.updateMessage(message) .subscribeOn(schedulers.backgroundThread) .observeOn(schedulers.mainThread) - .subscribe({ Timber.d("Update message ${message.realId} result: Success") }) + .subscribe({ Timber.d("Update message ${message.id} result: Success") }) { error -> - Timber.i("Update message ${message.realId} result: An exception occurred") + Timber.i("Update message ${message.id} result: An exception occurred") errorHandler.dispatch(error) }) } diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/message/tab/MessageTabView.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/message/tab/MessageTabView.kt index bcda52b56..01a188e75 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/message/tab/MessageTabView.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/message/tab/MessageTabView.kt @@ -28,7 +28,7 @@ interface MessageTabView : BaseSessionView { fun showRefresh(show: Boolean) - fun openMessage(messageId: Int?) + fun openMessage(messageId: Long) fun notifyParentDataLoaded() } From 0977282a4b8281a8d90492f8cb130bff6a3bd9e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Borcz?= Date: Sat, 18 May 2019 23:42:47 +0200 Subject: [PATCH 13/15] Fix no current student in services after logout all accounts (#342) --- .travis.yml | 8 ++++---- .../data/repositories/student/StudentRepository.kt | 2 ++ .../java/io/github/wulkanowy/services/sync/SyncWorker.kt | 2 +- .../luckynumberwidget/LuckyNumberWidgetProvider.kt | 5 +++-- .../github/wulkanowy/ui/modules/splash/SplashPresenter.kt | 2 +- .../ui/modules/timetablewidget/TimetableWidgetProvider.kt | 5 +++-- .../wulkanowy/ui/modules/splash/SplashPresenterTest.kt | 4 ++-- 7 files changed, 16 insertions(+), 12 deletions(-) diff --git a/.travis.yml b/.travis.yml index 10824e32f..b8f8a6461 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,10 +11,10 @@ cache: - $HOME/.gradle/caches/ - $HOME/.gradle/wrapper/ -#branches: -# only: -# - master -# - 0.8.x +branches: + only: + - master + - 0.8.x android: licenses: 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 e0ab6bf67..5c4a60558 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 @@ -22,6 +22,8 @@ class StudentRepository @Inject constructor( fun isStudentSaved(): Single = local.getStudents(false).isEmpty.map { !it } + fun isCurrentStudentSet(): Single = local.getCurrentStudent(false).isEmpty.map { !it } + fun getStudents(email: String, password: String, endpoint: String, symbol: String = ""): Single> { return ReactiveNetwork.checkInternetConnectivity(settings) .flatMap { diff --git a/app/src/main/java/io/github/wulkanowy/services/sync/SyncWorker.kt b/app/src/main/java/io/github/wulkanowy/services/sync/SyncWorker.kt index 134fb0344..6a4c4ca6d 100644 --- a/app/src/main/java/io/github/wulkanowy/services/sync/SyncWorker.kt +++ b/app/src/main/java/io/github/wulkanowy/services/sync/SyncWorker.kt @@ -35,7 +35,7 @@ class SyncWorker @AssistedInject constructor( override fun createWork(): Single { Timber.i("SyncWorker is starting") - return studentRepository.isStudentSaved() + return studentRepository.isCurrentStudentSet() .filter { true } .flatMap { studentRepository.getCurrentStudent().toMaybe() } .flatMapCompletable { student -> diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/luckynumberwidget/LuckyNumberWidgetProvider.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/luckynumberwidget/LuckyNumberWidgetProvider.kt index 51285969c..66141c913 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/luckynumberwidget/LuckyNumberWidgetProvider.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/luckynumberwidget/LuckyNumberWidgetProvider.kt @@ -100,8 +100,9 @@ class LuckyNumberWidgetProvider : BroadcastReceiver() { when { student != null -> Maybe.just(student) studentId != 0L -> { - studentRepository.getCurrentStudent(false) - .toMaybe() + studentRepository.isCurrentStudentSet() + .filter { true } + .flatMap { studentRepository.getCurrentStudent(false).toMaybe() } .doOnSuccess { sharedPref.putLong(getStudentWidgetKey(appWidgetId), it.id) } } else -> Maybe.empty() diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/splash/SplashPresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/splash/SplashPresenter.kt index b6bf0e2a3..e6a9d7b3e 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/splash/SplashPresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/splash/SplashPresenter.kt @@ -14,7 +14,7 @@ class SplashPresenter @Inject constructor( override fun onAttachView(view: SplashView) { super.onAttachView(view) - disposable.add(studentRepository.isStudentSaved() + disposable.add(studentRepository.isCurrentStudentSet() .subscribeOn(schedulers.backgroundThread) .observeOn(schedulers.mainThread) .subscribe({ diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/timetablewidget/TimetableWidgetProvider.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/timetablewidget/TimetableWidgetProvider.kt index 9b35e5cae..a462ca7b5 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/timetablewidget/TimetableWidgetProvider.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/timetablewidget/TimetableWidgetProvider.kt @@ -161,8 +161,9 @@ class TimetableWidgetProvider : BroadcastReceiver() { when { student != null -> Maybe.just(student) studentId != 0L -> { - studentRepository.getCurrentStudent(false) - .toMaybe() + studentRepository.isCurrentStudentSet() + .filter { true } + .flatMap { studentRepository.getCurrentStudent(false).toMaybe() } .doOnSuccess { sharedPref.putLong(getStudentWidgetKey(appWidgetId), it.id) } } else -> Maybe.empty() diff --git a/app/src/test/java/io/github/wulkanowy/ui/modules/splash/SplashPresenterTest.kt b/app/src/test/java/io/github/wulkanowy/ui/modules/splash/SplashPresenterTest.kt index fc25c0953..bc530a2bc 100644 --- a/app/src/test/java/io/github/wulkanowy/ui/modules/splash/SplashPresenterTest.kt +++ b/app/src/test/java/io/github/wulkanowy/ui/modules/splash/SplashPresenterTest.kt @@ -32,14 +32,14 @@ class SplashPresenterTest { @Test fun testOpenLoginView() { - doReturn(Single.just(false)).`when`(studentRepository).isStudentSaved() + doReturn(Single.just(false)).`when`(studentRepository).isCurrentStudentSet() presenter.onAttachView(splashView) verify(splashView).openLoginView() } @Test fun testMainMainView() { - doReturn(Single.just(true)).`when`(studentRepository).isStudentSaved() + doReturn(Single.just(true)).`when`(studentRepository).isCurrentStudentSet() presenter.onAttachView(splashView) verify(splashView).openMainView() } From 8731c2e1f20554449bc8e2478fa757e1ec894ddf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Pich?= Date: Sun, 19 May 2019 22:47:57 +0200 Subject: [PATCH 14/15] Change help text when entering the symbol to a more precise one (#345) --- app/build.gradle | 2 +- app/src/main/res/values-pl/strings.xml | 4 ++-- app/src/main/res/values/strings.xml | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 5a3a7f2ae..d5f946154 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -85,7 +85,7 @@ play { } dependencies { - implementation 'io.github.wulkanowy:api:0.8.2' + implementation 'com.github.wulkanowy:api:0ceddab' implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" implementation "androidx.legacy:legacy-support-v4:1.0.0" diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index c1a5f2bc7..b12ece137 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -21,7 +21,7 @@ Zaloguj się za pomocą konta ucznia lub rodzica - Podaj symbol dziennika VULCAN + Podaj symbol Email lub nick Hasło Dziennik @@ -32,7 +32,7 @@ Nie znaleziono ucznia. Sprawdź symbol To pole jest wymagane Wybrany uczeń jest już zalogowany - Symbol znajduje się na stronie dziennika w zakładce Dostęp Mobilny + Symbol znajdziesz na stronie dziennika w Uczeń -> Dostęp Mobilny -> Zarejestruj urządzenie mobilne Wybierz uczniów do zalogowania w aplikacji Polityka prywatności diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 704bb35be..0cdd71beb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -21,7 +21,7 @@ Sign in with the student or parent account - Enter the VULCAN diary symbol + Enter the symbol Email or nick Password Register @@ -32,7 +32,7 @@ Student not found. Check the symbol This field is required The selected student is already logged in - The symbol is located on the register page in the Mobile Access tab + The symbol can be found on the register page in Uczeń -> Dostęp Mobilny -> Zarejestruj urządzenie mobilne Select students to log in to the application Privacy policy From 153e026a8d0aad869d1c44bf2bcc617642a13be5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Pich?= Date: Mon, 20 May 2019 00:21:30 +0200 Subject: [PATCH 15/15] Version 0.8.3 --- .travis.yml | 8 ++++---- app/build.gradle | 6 +++--- app/src/main/play/release-notes/pl-PL/default.txt | 9 ++++++--- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index b8f8a6461..10824e32f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,10 +11,10 @@ cache: - $HOME/.gradle/caches/ - $HOME/.gradle/wrapper/ -branches: - only: - - master - - 0.8.x +#branches: +# only: +# - master +# - 0.8.x android: licenses: diff --git a/app/build.gradle b/app/build.gradle index d5f946154..3043bc651 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -16,8 +16,8 @@ android { testApplicationId "io.github.tests.wulkanowy" minSdkVersion 15 targetSdkVersion 28 - versionCode 35 - versionName "0.8.2" + versionCode 36 + versionName "0.8.3" multiDexEnabled true testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true @@ -85,7 +85,7 @@ play { } dependencies { - implementation 'com.github.wulkanowy:api:0ceddab' + implementation 'io.github.wulkanowy:api:0.8.3' implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" implementation "androidx.legacy:legacy-support-v4:1.0.0" 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 e36d71ce6..d1f8f1e7f 100644 --- a/app/src/main/play/release-notes/pl-PL/default.txt +++ b/app/src/main/play/release-notes/pl-PL/default.txt @@ -1,7 +1,10 @@ -Wersja 0.8.2 +Wersja 0.8.3 Naprawiliśmy: -- rzadkie problemy ze stabilnością w aplikacji -- częste problemy ze stabilnością w widżecie szczęśliwego numerka +- rzadkie problemy z wczytywaniem treści wiadomości +- rzadkie problemy z wyświetlaniem poprawnego nauczyciela przy zastępstwach + +Zmieniliśmy: +- tekst wskazówki przy wprowadzaniu symbolu w formularzu logowania Pełna lista zmian: https://github.com/wulkanowy/wulkanowy/releases