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"
minSdkVersion 21
targetSdkVersion 31
versionCode 104
versionName "1.6.0"
versionCode 105
versionName "1.6.1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
resValue "string", "app_name", "Wulkanowy"
@ -241,7 +241,7 @@ dependencies {
playImplementation 'com.google.android.play:core-ktx:1.8.1'
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'
releaseImplementation "com.github.ChuckerTeam.Chucker:library-no-op:$chucker"

View File

@ -1,5 +1,6 @@
package io.github.wulkanowy.ui.modules
import android.os.Parcelable
import androidx.fragment.app.Fragment
import io.github.wulkanowy.data.serializers.LocalDateSerializer
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.schoolannouncement.SchoolAnnouncementFragment
import io.github.wulkanowy.ui.modules.timetable.TimetableFragment
import kotlinx.parcelize.Parcelize
import kotlinx.serialization.Serializable
import java.time.LocalDate
@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
@ -45,30 +47,35 @@ sealed class Destination private constructor() : java.io.Serializable {
MESSAGE(Message);
}
@Parcelize
@Serializable
object Dashboard : Destination() {
override val type get() = Type.DASHBOARD
override val fragment get() = DashboardFragment.newInstance()
}
@Parcelize
@Serializable
object Grade : Destination() {
override val type get() = Type.GRADE
override val fragment get() = GradeFragment.newInstance()
}
@Parcelize
@Serializable
object Attendance : Destination() {
override val type get() = Type.ATTENDANCE
override val fragment get() = AttendanceFragment.newInstance()
}
@Parcelize
@Serializable
object Exam : Destination() {
override val type get() = Type.EXAM
override val fragment get() = ExamFragment.newInstance()
}
@Parcelize
@Serializable
data class Timetable(
@Serializable(with = LocalDateSerializer::class)
@ -78,48 +85,56 @@ sealed class Destination private constructor() : java.io.Serializable {
override val fragment get() = TimetableFragment.newInstance(date)
}
@Parcelize
@Serializable
object Homework : Destination() {
override val type get() = Type.HOMEWORK
override val fragment get() = HomeworkFragment.newInstance()
}
@Parcelize
@Serializable
object Note : Destination() {
override val type get() = Type.NOTE
override val fragment get() = NoteFragment.newInstance()
}
@Parcelize
@Serializable
object Conference : Destination() {
override val type get() = Type.CONFERENCE
override val fragment get() = ConferenceFragment.newInstance()
}
@Parcelize
@Serializable
object SchoolAnnouncement : Destination() {
override val type get() = Type.SCHOOL_ANNOUNCEMENT
override val fragment get() = SchoolAnnouncementFragment.newInstance()
}
@Parcelize
@Serializable
object School : Destination() {
override val type get() = Type.SCHOOL
override val fragment get() = SchoolFragment.newInstance()
}
@Parcelize
@Serializable
object LuckyNumber : Destination() {
override val type get() = Type.LUCKY_NUMBER
override val fragment get() = LuckyNumberFragment.newInstance()
}
@Parcelize
@Serializable
object More : Destination() {
override val type get() = Type.MORE
override val fragment get() = MoreFragment.newInstance()
}
@Parcelize
@Serializable
object Message : Destination() {
override val type get() = Type.MESSAGE

View File

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

View File

@ -86,7 +86,7 @@ class MainActivity : BaseActivity<MainPresenter, ActivityMainBinding>(), MainVie
messageContainer = binding.mainMessageContainer
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 }
presenter.onAttachView(this, destination)

View File

@ -45,7 +45,7 @@ class SplashActivity : BaseActivity<SplashPresenter, ViewBinding>(), SplashView
installSplashScreen().setKeepOnScreenCondition { true }
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)
presenter.onAttachView(this, externalLink, startDestination)

View File

@ -146,7 +146,7 @@
android:id="@+id/examDialogDeadlineDateValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="24dp"
android:paddingStart="0dp"
android:paddingEnd="16dp"
@ -162,7 +162,7 @@
android:id="@+id/examDialogEntryDateTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="24dp"
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">Obnovit</string>
<string name="login_signed_in">Žák je už přihlášen</string>
<string name="login_host_standard">Standardní</string>
<!--Main-->
<string name="main_account_picker">Manažer účtů</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_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_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_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_from_subjects">z %1$d z %2$d předmětů</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>
<!--Attendance-->
<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_unexcused">Neomluvená nepřítomnost</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">Wiederherstellen</string>
<string name="login_signed_in">Student ist bereits angemeldet</string>
<string name="login_host_standard">Standard</string>
<!--Main-->
<string name="main_account_picker">Kundenbetreuer</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">Przywróć</string>
<string name="login_signed_in">Uczeń jest już zalogowany</string>
<string name="login_host_standard">Standardowa</string>
<!--Main-->
<string name="main_account_picker">Menadżer kont</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">Восстановить</string>
<string name="login_signed_in">Студент уже вошел в систему</string>
<string name="login_host_standard">Стандартный</string>
<!--Main-->
<string name="main_account_picker">Менеджер аккаунтов</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">Obnoviť</string>
<string name="login_signed_in">Žiak je už prihlásený</string>
<string name="login_host_standard">Štandardná</string>
<!--Main-->
<string name="main_account_picker">Manažér účtov</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">Відновити</string>
<string name="login_signed_in">Учень вже увійшов до системи</string>
<string name="login_host_standard">Стандартний</string>
<!--Main-->
<string name="main_account_picker">Менеджер аккаунтів</string>
<string name="main_log_in">Увійти</string>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string-array name="hosts_keys">
<item>Standardowa</item>
<item>@string/login_host_standard</item>
<item>Opolska eSzkoła</item>
<item>Gdańska Platforma Edukacyjna</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">Recover</string>
<string name="login_signed_in">Student is already signed in</string>
<string name="login_host_standard">Standard</string>
<!--Main-->

View File

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