diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/config/ProfileConfigGrades.kt b/app/src/main/java/pl/szczodrzynski/edziennik/config/ProfileConfigGrades.kt index 50e50fbf..490fe2dd 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/config/ProfileConfigGrades.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/config/ProfileConfigGrades.kt @@ -21,11 +21,6 @@ class ProfileConfigGrades(private val config: ProfileConfig) { get() { mYearAverageMode = mYearAverageMode ?: config.values.get("yearAverageMode", YEAR_ALL_GRADES); return mYearAverageMode ?: YEAR_ALL_GRADES } set(value) { config.set("yearAverageMode", value); mYearAverageMode = value } - private var mCountZeroToAvg: Boolean? = null - var countZeroToAvg: Boolean - get() { mCountZeroToAvg = mCountZeroToAvg ?: config.values.get("countZeroToAvg", true); return mCountZeroToAvg ?: true } - set(value) { config.set("countZeroToAvg", value); mCountZeroToAvg = value } - private var mHideImproved: Boolean? = null var hideImproved: Boolean get() { mHideImproved = mHideImproved ?: config.values.get("hideImproved", false); return mHideImproved ?: false } @@ -45,6 +40,11 @@ class ProfileConfigGrades(private val config: ProfileConfig) { get() { mMinusValue = mMinusValue ?: config.values.getFloat("minusValue"); return mMinusValue } set(value) { config.set("minusValue", value); mMinusValue = value } + private var mDontCountEnabled: Boolean? = null + var dontCountEnabled: Boolean + get() { mDontCountEnabled = mDontCountEnabled ?: config.values.get("dontCountEnabled", false); return mDontCountEnabled ?: false } + set(value) { config.set("dontCountEnabled", value); mDontCountEnabled = value } + private var mDontCountGrades: List? = null var dontCountGrades: List get() { mDontCountGrades = mDontCountGrades ?: config.values.get("dontCountGrades", listOf()); return mDontCountGrades ?: listOf() } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/config/utils/ProfileConfigMigration.kt b/app/src/main/java/pl/szczodrzynski/edziennik/config/utils/ProfileConfigMigration.kt index ba756105..67861d25 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/config/utils/ProfileConfigMigration.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/config/utils/ProfileConfigMigration.kt @@ -14,7 +14,7 @@ class ProfileConfigMigration(config: ProfileConfig) { if (dataVersion < 1) { grades.colorMode = COLOR_MODE_WEIGHTED - grades.countZeroToAvg = true + grades.dontCountEnabled = false grades.yearAverageMode = YEAR_ALL_GRADES ui.agendaViewType = AGENDA_DEFAULT diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/settings/GradesConfigDialog.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/settings/GradesConfigDialog.kt index 4f195b0a..ad29e8f7 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/settings/GradesConfigDialog.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/settings/GradesConfigDialog.kt @@ -20,6 +20,7 @@ import pl.szczodrzynski.edziennik.utils.managers.GradesManager.Companion.YEAR_1_ import pl.szczodrzynski.edziennik.utils.managers.GradesManager.Companion.YEAR_1_SEM_2_AVG import pl.szczodrzynski.edziennik.utils.managers.GradesManager.Companion.YEAR_1_SEM_2_SEM import pl.szczodrzynski.edziennik.utils.managers.GradesManager.Companion.YEAR_ALL_GRADES +import java.util.* class GradesConfigDialog( val activity: AppCompatActivity, @@ -88,14 +89,34 @@ class GradesConfigDialog( else -> null }?.isChecked = true - b.dontCountZeroToAverage.isChecked = !profileConfig.countZeroToAvg + b.dontCountGrades.isChecked = profileConfig.dontCountEnabled && profileConfig.dontCountGrades.isNotEmpty() b.hideImproved.isChecked = profileConfig.hideImproved b.averageWithoutWeight.isChecked = profileConfig.averageWithoutWeight + + if (profileConfig.dontCountGrades.isEmpty()) { + b.dontCountGradesText.setText("nb, 0, bz, bd") + } + else { + b.dontCountGradesText.setText(profileConfig.dontCountGrades.join(", ")) + } } private fun saveConfig() { profileConfig.plusValue = if (b.customPlusCheckBox.isChecked) b.customPlusValue.progress else null profileConfig.minusValue = if (b.customMinusCheckBox.isChecked) b.customMinusValue.progress else null + + b.dontCountGradesText.setText( + b.dontCountGradesText + .text + ?.toString() + ?.toLowerCase(Locale.getDefault()) + ?.replace(", ", ",") + ) + profileConfig.dontCountEnabled = b.dontCountGrades.isChecked + profileConfig.dontCountGrades = b.dontCountGradesText.text + ?.split(",") + ?.map { it.trim() } + ?: listOf() } private fun initView() { @@ -127,7 +148,6 @@ class GradesConfigDialog( b.gradeAverageMode2.setOnSelectedListener { profileConfig.yearAverageMode = YEAR_1_AVG_2_SEM } b.gradeAverageMode3.setOnSelectedListener { profileConfig.yearAverageMode = YEAR_1_SEM_2_SEM } - b.dontCountZeroToAverage.onChange { _, isChecked -> profileConfig.countZeroToAvg = !isChecked } b.hideImproved.onChange { _, isChecked -> profileConfig.hideImproved = isChecked } b.averageWithoutWeight.onChange { _, isChecked -> profileConfig.averageWithoutWeight = isChecked } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/GradesFragment.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/GradesFragment.kt index 195ef0a7..a20f1b24 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/GradesFragment.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/GradesFragment.kt @@ -53,6 +53,7 @@ class GradesFragment : Fragment(), CoroutineScope { GradesAdapter(activity) } private val manager by lazy { app.gradesManager } + private val dontCountEnabled by lazy { manager.dontCountEnabled } private val dontCountGrades by lazy { manager.dontCountGrades } private var expandSubjectId = 0L @@ -299,7 +300,9 @@ class GradesFragment : Fragment(), CoroutineScope { private fun countGrade(grade: Grade, averages: GradesAverages) { val value = manager.getGradeValue(grade) - val weight = manager.getGradeWeight(dontCountGrades, grade) + val weight = manager.getGradeWeight(dontCountEnabled, dontCountGrades, grade) + if (weight == 0f) + return when (grade.type) { Grade.TYPE_NORMAL -> { if (grade.value > 0f) { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/editor/GradesEditorFragment.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/editor/GradesEditorFragment.kt index 47e47a8c..3e5978ee 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/editor/GradesEditorFragment.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/editor/GradesEditorFragment.kt @@ -16,7 +16,6 @@ import pl.szczodrzynski.edziennik.* import pl.szczodrzynski.edziennik.data.db.entity.Grade import pl.szczodrzynski.edziennik.databinding.FragmentGradesEditorBinding import pl.szczodrzynski.edziennik.utils.Colors -import pl.szczodrzynski.edziennik.utils.Themes import pl.szczodrzynski.edziennik.utils.managers.GradesManager.Companion.YEAR_1_AVG_2_AVG import pl.szczodrzynski.edziennik.utils.managers.GradesManager.Companion.YEAR_1_AVG_2_SEM import pl.szczodrzynski.edziennik.utils.managers.GradesManager.Companion.YEAR_1_SEM_2_AVG @@ -107,7 +106,7 @@ class GradesEditorFragment : Fragment() { continue } var weight = editorGrade.weight - if (!config.countZeroToAvg && editorGrade.name == "0") { + if (config.dontCountEnabled && config.dontCountGrades.contains(editorGrade.name.toLowerCase().trim())) { weight = 0f } val value = editorGrade.value * weight @@ -172,7 +171,7 @@ class GradesEditorFragment : Fragment() { averageSemester = 0f for (editorGrade in editorGrades) { var weight = editorGrade.weight - if (!config.countZeroToAvg && editorGrade.name == "0") { + if (config.dontCountEnabled && config.dontCountGrades.contains(editorGrade.name.toLowerCase().trim())) { weight = 0f } val value = editorGrade.value * weight @@ -215,7 +214,7 @@ class GradesEditorFragment : Fragment() { continue } var weight = grade.weight - if (!config.countZeroToAvg && grade.name == "0") { + if (config.dontCountEnabled && config.dontCountGrades.contains(grade.name.toLowerCase().trim())) { weight = 0f } val value = grade.value * weight diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/viewholder/StatsViewHolder.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/viewholder/StatsViewHolder.kt index 61ff6c28..3e6a6be2 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/viewholder/StatsViewHolder.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/viewholder/StatsViewHolder.kt @@ -102,7 +102,7 @@ class StatsViewHolder( .show() } - b.customValueDivider.isVisible = manager.plusValue != null || manager.minusValue != null + b.customValueDivider.isVisible = manager.dontCountEnabled || manager.plusValue != null || manager.minusValue != null b.customValueLayout.isVisible = b.customValueDivider.isVisible b.customValueButton.onClick { GradesConfigDialog(activity, reloadOnDismiss = true) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/utils/managers/GradesManager.kt b/app/src/main/java/pl/szczodrzynski/edziennik/utils/managers/GradesManager.kt index f8a5b9a8..27fdd18b 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/utils/managers/GradesManager.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/utils/managers/GradesManager.kt @@ -53,6 +53,8 @@ class GradesManager(val app: App) : CoroutineScope { get() = app.config.forProfile().grades.plusValue val minusValue get() = app.config.forProfile().grades.minusValue + val dontCountEnabled + get() = app.config.forProfile().grades.dontCountEnabled val dontCountGrades get() = app.config.forProfile().grades.dontCountGrades val hideImproved @@ -100,8 +102,10 @@ class GradesManager(val app: App) : CoroutineScope { return grade.value } - fun getGradeWeight(dontCountGrades: List, grade: Grade): Float { - if (grade.name.toLowerCase() in dontCountGrades) + fun getGradeWeight(dontCountEnabled: Boolean, dontCountGrades: List, grade: Grade): Float { + if (!dontCountEnabled) + return grade.weight + if (grade.name.toLowerCase().trim() in dontCountGrades) return 0f return grade.weight } diff --git a/app/src/main/res/layout/dialog_config_grades.xml b/app/src/main/res/layout/dialog_config_grades.xml index e8d35953..8b7c0f07 100644 --- a/app/src/main/res/layout/dialog_config_grades.xml +++ b/app/src/main/res/layout/dialog_config_grades.xml @@ -84,16 +84,32 @@ android:background="@drawable/divider"/> + android:text="@string/grades_config_dont_count_grades"/> + + + + + diff --git a/app/src/main/res/layout/grades_item_stats.xml b/app/src/main/res/layout/grades_item_stats.xml index 4bffa927..1d990737 100644 --- a/app/src/main/res/layout/grades_item_stats.xml +++ b/app/src/main/res/layout/grades_item_stats.xml @@ -315,7 +315,7 @@ android:layout_height="wrap_content" android:layout_margin="8dp" android:layout_weight="1" - android:text="@string/grades_stats_custom_value_notice" + android:text="@string/grades_stats_custom_config_notice" android:textAppearance="@style/NavView.TextView.Helper" android:textSize="12sp" android:textStyle="italic" /> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index aecf3ab6..71ec08ef 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1231,7 +1231,8 @@ Śr. ocen proponowanych:\n%s Obliczanie średniej wszystkich przedmiotów Ocena przewidywana z danego przedmiotu jest obliczana na podstawie aktualnej średniej ważonej.\n\nOcena jest liczbą całkowitą, jaką wystawił by nauczyciel bazując na średniej. Liczba zaokrąglona jest w górę jeśli część po przecinku przekroczy ,75.\nPrzykładowo: średnie 3,75 jak również 4,74 dają w wyniku ocenę dobrą (4).\n\nŚrednia przewidywana ze wszystkich przedmiotów obejmuje obliczone w ten sposób oceny końcowe. - Została ustawiona własna wartość plusa/minusa. Jeśli uważasz, że średnia się nie zgadza, kliknij Konfiguruj. + Została ustawiona własna wartość plusa/minusa. Jeśli uważasz, że się ona nie zgadza, kliknij Konfiguruj. + Aktualne ustawienia ocen mogą wpływać na średnią. Jeśli uważasz, że się ona nie zgadza, kliknij Konfiguruj. Konfiguruj Edytor planu lekcji Własny przedmiot @@ -1257,4 +1258,7 @@ Własna wartość plusa Pobieranie planu lekcji na wybrany tydzień... Nie pobrano planu lekcji... + Wyklucz wybrane oceny ze średniej + Oceny oddziel przecinkiem + Podaj oceny...