1
0
mirror of https://github.com/wulkanowy/wulkanowy.git synced 2024-11-25 20:34:41 -06:00

Merge branch 'release/1.6.1'

This commit is contained in:
Mikołaj Pich 2022-04-06 17:28:50 +02:00
commit ae65228805
15 changed files with 37 additions and 15 deletions

View File

@ -22,8 +22,8 @@ android {
testApplicationId "io.github.tests.wulkanowy" testApplicationId "io.github.tests.wulkanowy"
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 31 targetSdkVersion 31
versionCode 104 versionCode 105
versionName "1.6.0" versionName "1.6.1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
resValue "string", "app_name", "Wulkanowy" resValue "string", "app_name", "Wulkanowy"
@ -241,7 +241,7 @@ dependencies {
playImplementation 'com.google.android.play:core-ktx:1.8.1' playImplementation 'com.google.android.play:core-ktx:1.8.1'
playImplementation 'com.google.android.gms:play-services-ads:20.6.0' playImplementation 'com.google.android.gms:play-services-ads:20.6.0'
hmsImplementation 'com.huawei.hms:hianalytics:6.4.1.300' hmsImplementation 'com.huawei.hms:hianalytics:6.4.1.301'
hmsImplementation 'com.huawei.agconnect:agconnect-crash:1.6.5.200' hmsImplementation 'com.huawei.agconnect:agconnect-crash:1.6.5.200'
releaseImplementation "com.github.ChuckerTeam.Chucker:library-no-op:$chucker" releaseImplementation "com.github.ChuckerTeam.Chucker:library-no-op:$chucker"

View File

@ -1,5 +1,6 @@
package io.github.wulkanowy.ui.modules package io.github.wulkanowy.ui.modules
import android.os.Parcelable
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import io.github.wulkanowy.data.serializers.LocalDateSerializer import io.github.wulkanowy.data.serializers.LocalDateSerializer
import io.github.wulkanowy.ui.modules.attendance.AttendanceFragment import io.github.wulkanowy.ui.modules.attendance.AttendanceFragment
@ -15,11 +16,12 @@ import io.github.wulkanowy.ui.modules.note.NoteFragment
import io.github.wulkanowy.ui.modules.schoolandteachers.school.SchoolFragment import io.github.wulkanowy.ui.modules.schoolandteachers.school.SchoolFragment
import io.github.wulkanowy.ui.modules.schoolannouncement.SchoolAnnouncementFragment import io.github.wulkanowy.ui.modules.schoolannouncement.SchoolAnnouncementFragment
import io.github.wulkanowy.ui.modules.timetable.TimetableFragment import io.github.wulkanowy.ui.modules.timetable.TimetableFragment
import kotlinx.parcelize.Parcelize
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import java.time.LocalDate import java.time.LocalDate
@Serializable @Serializable
sealed class Destination private constructor() : java.io.Serializable { sealed class Destination private constructor() : Parcelable {
/* /*
Type in children classes have to be as getter to avoid null in enums Type in children classes have to be as getter to avoid null in enums
@ -45,30 +47,35 @@ sealed class Destination private constructor() : java.io.Serializable {
MESSAGE(Message); MESSAGE(Message);
} }
@Parcelize
@Serializable @Serializable
object Dashboard : Destination() { object Dashboard : Destination() {
override val type get() = Type.DASHBOARD override val type get() = Type.DASHBOARD
override val fragment get() = DashboardFragment.newInstance() override val fragment get() = DashboardFragment.newInstance()
} }
@Parcelize
@Serializable @Serializable
object Grade : Destination() { object Grade : Destination() {
override val type get() = Type.GRADE override val type get() = Type.GRADE
override val fragment get() = GradeFragment.newInstance() override val fragment get() = GradeFragment.newInstance()
} }
@Parcelize
@Serializable @Serializable
object Attendance : Destination() { object Attendance : Destination() {
override val type get() = Type.ATTENDANCE override val type get() = Type.ATTENDANCE
override val fragment get() = AttendanceFragment.newInstance() override val fragment get() = AttendanceFragment.newInstance()
} }
@Parcelize
@Serializable @Serializable
object Exam : Destination() { object Exam : Destination() {
override val type get() = Type.EXAM override val type get() = Type.EXAM
override val fragment get() = ExamFragment.newInstance() override val fragment get() = ExamFragment.newInstance()
} }
@Parcelize
@Serializable @Serializable
data class Timetable( data class Timetable(
@Serializable(with = LocalDateSerializer::class) @Serializable(with = LocalDateSerializer::class)
@ -78,51 +85,59 @@ sealed class Destination private constructor() : java.io.Serializable {
override val fragment get() = TimetableFragment.newInstance(date) override val fragment get() = TimetableFragment.newInstance(date)
} }
@Parcelize
@Serializable @Serializable
object Homework : Destination() { object Homework : Destination() {
override val type get() = Type.HOMEWORK override val type get() = Type.HOMEWORK
override val fragment get() = HomeworkFragment.newInstance() override val fragment get() = HomeworkFragment.newInstance()
} }
@Parcelize
@Serializable @Serializable
object Note : Destination() { object Note : Destination() {
override val type get() = Type.NOTE override val type get() = Type.NOTE
override val fragment get() = NoteFragment.newInstance() override val fragment get() = NoteFragment.newInstance()
} }
@Parcelize
@Serializable @Serializable
object Conference : Destination() { object Conference : Destination() {
override val type get() = Type.CONFERENCE override val type get() = Type.CONFERENCE
override val fragment get() = ConferenceFragment.newInstance() override val fragment get() = ConferenceFragment.newInstance()
} }
@Parcelize
@Serializable @Serializable
object SchoolAnnouncement : Destination() { object SchoolAnnouncement : Destination() {
override val type get() = Type.SCHOOL_ANNOUNCEMENT override val type get() = Type.SCHOOL_ANNOUNCEMENT
override val fragment get() = SchoolAnnouncementFragment.newInstance() override val fragment get() = SchoolAnnouncementFragment.newInstance()
} }
@Parcelize
@Serializable @Serializable
object School : Destination() { object School : Destination() {
override val type get() = Type.SCHOOL override val type get() = Type.SCHOOL
override val fragment get() = SchoolFragment.newInstance() override val fragment get() = SchoolFragment.newInstance()
} }
@Parcelize
@Serializable @Serializable
object LuckyNumber : Destination() { object LuckyNumber : Destination() {
override val type get() = Type.LUCKY_NUMBER override val type get() = Type.LUCKY_NUMBER
override val fragment get() = LuckyNumberFragment.newInstance() override val fragment get() = LuckyNumberFragment.newInstance()
} }
@Parcelize
@Serializable @Serializable
object More : Destination() { object More : Destination() {
override val type get() = Type.MORE override val type get() = Type.MORE
override val fragment get() = MoreFragment.newInstance() override val fragment get() = MoreFragment.newInstance()
} }
@Parcelize
@Serializable @Serializable
object Message : Destination() { object Message : Destination() {
override val type get() = Type.MESSAGE override val type get() = Type.MESSAGE
override val fragment get() = MessageFragment.newInstance() override val fragment get() = MessageFragment.newInstance()
} }
} }

View File

@ -78,7 +78,7 @@ class LuckyNumberWidgetProvider : AppWidgetProvider() {
.apply { .apply {
setTextViewText( setTextViewText(
R.id.luckyNumberWidgetNumber, R.id.luckyNumberWidgetNumber,
luckyNumber.dataOrNull?.toString() ?: "#" luckyNumber.dataOrNull?.luckyNumber?.toString() ?: "#"
) )
setOnClickPendingIntent(R.id.luckyNumberWidgetContainer, appIntent) setOnClickPendingIntent(R.id.luckyNumberWidgetContainer, appIntent)
} }

View File

@ -86,7 +86,7 @@ class MainActivity : BaseActivity<MainPresenter, ActivityMainBinding>(), MainVie
messageContainer = binding.mainMessageContainer messageContainer = binding.mainMessageContainer
updateHelper.messageContainer = binding.mainFragmentContainer updateHelper.messageContainer = binding.mainFragmentContainer
val destination = (intent.getSerializableExtra(EXTRA_START_DESTINATION) as Destination?) val destination = (intent.getParcelableExtra(EXTRA_START_DESTINATION) as Destination?)
?.takeIf { savedInstanceState == null } ?.takeIf { savedInstanceState == null }
presenter.onAttachView(this, destination) presenter.onAttachView(this, destination)

View File

@ -45,7 +45,7 @@ class SplashActivity : BaseActivity<SplashPresenter, ViewBinding>(), SplashView
installSplashScreen().setKeepOnScreenCondition { true } installSplashScreen().setKeepOnScreenCondition { true }
val externalLink = intent?.getStringExtra(EXTRA_EXTERNAL_URL) val externalLink = intent?.getStringExtra(EXTRA_EXTERNAL_URL)
val startDestination = intent?.getSerializableExtra(EXTRA_START_DESTINATION) as Destination? val startDestination = intent?.getParcelableExtra(EXTRA_START_DESTINATION) as Destination?
?: shortcutsHelper.getDestination(intent) ?: shortcutsHelper.getDestination(intent)
presenter.onAttachView(this, externalLink, startDestination) presenter.onAttachView(this, externalLink, startDestination)

View File

@ -146,7 +146,7 @@
android:id="@+id/examDialogDeadlineDateValue" android:id="@+id/examDialogDeadlineDateValue"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="0dp" android:layout_marginStart="16dp"
android:layout_marginEnd="24dp" android:layout_marginEnd="24dp"
android:paddingStart="0dp" android:paddingStart="0dp"
android:paddingEnd="16dp" android:paddingEnd="16dp"
@ -162,7 +162,7 @@
android:id="@+id/examDialogEntryDateTitle" android:id="@+id/examDialogEntryDateTitle"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="0dp" android:layout_marginStart="16dp"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:layout_marginEnd="24dp" android:layout_marginEnd="24dp"
android:text="@string/exam_entry_date" android:text="@string/exam_entry_date"

View File

@ -71,6 +71,7 @@
<string name="login_recover_title">Obnovte svůj účet</string> <string name="login_recover_title">Obnovte svůj účet</string>
<string name="login_recover">Obnovit</string> <string name="login_recover">Obnovit</string>
<string name="login_signed_in">Žák je už přihlášen</string> <string name="login_signed_in">Žák je už přihlášen</string>
<string name="login_host_standard">Standardní</string>
<!--Main--> <!--Main-->
<string name="main_account_picker">Manažer účtů</string> <string name="main_account_picker">Manažer účtů</string>
<string name="main_log_in">Přihlásit se</string> <string name="main_log_in">Přihlásit se</string>
@ -93,9 +94,9 @@
<string name="grade_summary_predicted_grade">Předpokládaná známka</string> <string name="grade_summary_predicted_grade">Předpokládaná známka</string>
<string name="grade_summary_calculated_average">Vypočítaný průměr</string> <string name="grade_summary_calculated_average">Vypočítaný průměr</string>
<string name="grade_summary_calculated_average_help_dialog_title">Jak funguje vypočítaný průměr?</string> <string name="grade_summary_calculated_average_help_dialog_title">Jak funguje vypočítaný průměr?</string>
<string name="grade_summary_calculated_average_help_dialog_message">Vypočítaný průměr je aritmetický průměr vypočítaný z průměrů předmětů. Umožňuje vám to znát přibližný konečný průměr. Vypočítává se způsobem zvoleným uživatelem v nastavení aplikaci. Doporučuje se vybrat příslušnou možnost. Důvodem je rozdílný výpočet školních průměrů. Pokud vaše škola navíc uvádí průměr předmětů na stránce deníku Vulcan, aplikace si je stáhne a tyto průměry nepočítá. To lze změnit vynucením výpočtu průměru v nastavení aplikaci.\n\n<b>Průměr známek pouze z vybraného semestru</b>:\n1. Výpočet váženého průměru pro každý předmět v daném semestru\n2. Sčítání vypočítaných průměrů\n3. Výpočet aritmetického průměru součtených průměrů\n\n<b>Průměr průměrů z obou semestrů</b>:\n1. Výpočet váženého průměru pro každý předmět v semestru 1 a 2\n2. Výpočet aritmetického průměru vypočítaných průměrů za semestry 1 a 2 pro každý předmět.\n3. Sčítání vypočítaných průměrů\n4. Výpočet aritmetického průměru součtených průměrů\n\n<b>Průměr známek z celého roku:</b>\n1. Výpočet váženého průměru za rok pro každý předmět. Konečný průměr v 1. semestru je nepodstatný.\n3. Sčítání vypočítaných průměrů\n4. Výpočet aritmetického průměru součtených průměrů</string> <string name="grade_summary_calculated_average_help_dialog_message">Vypočítaný průměr je aritmetický průměr vypočítaný z průměrů předmětů. Umožňuje vám to znát přibližný konečný průměr. Vypočítává se způsobem zvoleným uživatelem v nastavení aplikaci. Doporučuje se vybrat příslušnou možnost. Důvodem je rozdílný výpočet školních průměrů. Pokud vaše škola navíc uvádí průměr předmětů na stránce deníku Vulcan, aplikace si je stáhne a tyto průměry nepočítá. To lze změnit vynucením výpočtu průměru v nastavení aplikaci.\n\n<b>Průměr známek pouze z vybraného semestru</b>:\n1. Výpočet váženého průměru pro každý předmět v daném semestru\n2. Sčítání vypočítaných průměrů\n3. Výpočet aritmetického průměru součtených průměrů\n\n<b>Průměr průměrů z obou semestrů</b>:\n1. Výpočet váženého průměru pro každý předmět v semestru 1 a 2\n2. Výpočet aritmetického průměru vypočítaných průměrů za semestry 1 a 2 pro každý předmět.\n3. Sčítání vypočítaných průměrů\n4. Výpočet aritmetického průměru sečtených průměrů\n\n<b>Průměr známek z celého roku:</b>\n1. Výpočet váženého průměru za rok pro každý předmět. Konečný průměr v 1. semestru je nepodstatný.\n3. Sčítání vypočítaných průměrů\n4. Výpočet aritmetického průměru součtených průměrů</string>
<string name="grade_summary_final_average_help_dialog_title">Jak funguje konečný průměr?</string> <string name="grade_summary_final_average_help_dialog_title">Jak funguje konečný průměr?</string>
<string name="grade_summary_final_average_help_dialog_message">Konečný průměr je aritmetický průměr vypočítaný ze všech aktuálně dostupných konečných známek v daném semestru.\n\nSchéma výpočtu se skládá z následujících kroků:\n1. Sčítání konečných známek zadaných učiteli\n2. Děleno počtem předmětů, pro které už byly vydány známky</string> <string name="grade_summary_final_average_help_dialog_message">Konečný průměr je aritmetický průměr vypočítaný ze všech aktuálně dostupných konečných známek v daném semestru.\n\nSchéma výpočtu se skládá z následujících kroků:\n1. Sčítání konečných známek zadaných učiteli\n2. Děleno počtem předmětů, pro které už byly uděleny známky</string>
<string name="grade_summary_final_average">Konečný průměr</string> <string name="grade_summary_final_average">Konečný průměr</string>
<string name="grade_summary_from_subjects">z %1$d z %2$d předmětů</string> <string name="grade_summary_from_subjects">z %1$d z %2$d předmětů</string>
<string name="grade_menu_summary">Shrnutí</string> <string name="grade_menu_summary">Shrnutí</string>
@ -219,7 +220,7 @@
<string name="additional_lessons_end_time_error">Čas ukončení musí být pozdější než čas zahájení</string> <string name="additional_lessons_end_time_error">Čas ukončení musí být pozdější než čas zahájení</string>
<!--Attendance--> <!--Attendance-->
<string name="attendance_summary_button">Shrnutí frekvencí</string> <string name="attendance_summary_button">Shrnutí frekvencí</string>
<string name="attendance_absence_school">Neprítomnosť zo školských dôvodov</string> <string name="attendance_absence_school">Nepřítomnost ze školních důvodů</string>
<string name="attendance_absence_excused">Omluvená nepřítomnost</string> <string name="attendance_absence_excused">Omluvená nepřítomnost</string>
<string name="attendance_absence_unexcused">Neomluvená nepřítomnost</string> <string name="attendance_absence_unexcused">Neomluvená nepřítomnost</string>
<string name="attendance_exemption">Osvobození</string> <string name="attendance_exemption">Osvobození</string>

View File

@ -71,6 +71,7 @@
<string name="login_recover_title">Ihr Konto wiederherstellen</string> <string name="login_recover_title">Ihr Konto wiederherstellen</string>
<string name="login_recover">Wiederherstellen</string> <string name="login_recover">Wiederherstellen</string>
<string name="login_signed_in">Student ist bereits angemeldet</string> <string name="login_signed_in">Student ist bereits angemeldet</string>
<string name="login_host_standard">Standard</string>
<!--Main--> <!--Main-->
<string name="main_account_picker">Kundenbetreuer</string> <string name="main_account_picker">Kundenbetreuer</string>
<string name="main_log_in">Anmelden</string> <string name="main_log_in">Anmelden</string>

View File

@ -71,6 +71,7 @@
<string name="login_recover_title">Przywróć swoje konto</string> <string name="login_recover_title">Przywróć swoje konto</string>
<string name="login_recover">Przywróć</string> <string name="login_recover">Przywróć</string>
<string name="login_signed_in">Uczeń jest już zalogowany</string> <string name="login_signed_in">Uczeń jest już zalogowany</string>
<string name="login_host_standard">Standardowa</string>
<!--Main--> <!--Main-->
<string name="main_account_picker">Menadżer kont</string> <string name="main_account_picker">Menadżer kont</string>
<string name="main_log_in">Zaloguj się</string> <string name="main_log_in">Zaloguj się</string>

View File

@ -71,6 +71,7 @@
<string name="login_recover_title">Восстановите свой аккаунт</string> <string name="login_recover_title">Восстановите свой аккаунт</string>
<string name="login_recover">Восстановить</string> <string name="login_recover">Восстановить</string>
<string name="login_signed_in">Студент уже вошел в систему</string> <string name="login_signed_in">Студент уже вошел в систему</string>
<string name="login_host_standard">Стандартный</string>
<!--Main--> <!--Main-->
<string name="main_account_picker">Менеджер аккаунтов</string> <string name="main_account_picker">Менеджер аккаунтов</string>
<string name="main_log_in">Войти</string> <string name="main_log_in">Войти</string>

View File

@ -71,6 +71,7 @@
<string name="login_recover_title">Obnovte svoj účet</string> <string name="login_recover_title">Obnovte svoj účet</string>
<string name="login_recover">Obnoviť</string> <string name="login_recover">Obnoviť</string>
<string name="login_signed_in">Žiak je už prihlásený</string> <string name="login_signed_in">Žiak je už prihlásený</string>
<string name="login_host_standard">Štandardná</string>
<!--Main--> <!--Main-->
<string name="main_account_picker">Manažér účtov</string> <string name="main_account_picker">Manažér účtov</string>
<string name="main_log_in">Prihlásiť sa</string> <string name="main_log_in">Prihlásiť sa</string>

View File

@ -71,6 +71,7 @@
<string name="login_recover_title">Відновіть свій обліковий запис</string> <string name="login_recover_title">Відновіть свій обліковий запис</string>
<string name="login_recover">Відновити</string> <string name="login_recover">Відновити</string>
<string name="login_signed_in">Учень вже увійшов до системи</string> <string name="login_signed_in">Учень вже увійшов до системи</string>
<string name="login_host_standard">Стандартний</string>
<!--Main--> <!--Main-->
<string name="main_account_picker">Менеджер аккаунтів</string> <string name="main_account_picker">Менеджер аккаунтів</string>
<string name="main_log_in">Увійти</string> <string name="main_log_in">Увійти</string>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string-array name="hosts_keys"> <string-array name="hosts_keys">
<item>Standardowa</item> <item>@string/login_host_standard</item>
<item>Opolska eSzkoła</item> <item>Opolska eSzkoła</item>
<item>Gdańska Platforma Edukacyjna</item> <item>Gdańska Platforma Edukacyjna</item>
<item>Lubelski Portal Oświatowy</item> <item>Lubelski Portal Oświatowy</item>

View File

@ -77,6 +77,7 @@
<string name="login_recover_title">Recover your account</string> <string name="login_recover_title">Recover your account</string>
<string name="login_recover">Recover</string> <string name="login_recover">Recover</string>
<string name="login_signed_in">Student is already signed in</string> <string name="login_signed_in">Student is already signed in</string>
<string name="login_host_standard">Standard</string>
<!--Main--> <!--Main-->

View File

@ -1,6 +1,6 @@
buildscript { buildscript {
ext { ext {
kotlin_version = '1.6.10' kotlin_version = '1.6.20'
about_libraries = '8.9.4' about_libraries = '8.9.4'
hilt_version = "2.41" hilt_version = "2.41"
} }