forked from github/szkolny
[Grades] Add option to hide improved grades. Make counting average without weight configurable.
This commit is contained in:
@ -26,6 +26,16 @@ class ProfileConfigGrades(private val config: ProfileConfig) {
|
||||
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", true); return mHideImproved ?: true }
|
||||
set(value) { config.set("hideImproved", value); mHideImproved = value }
|
||||
|
||||
private var mAverageWithoutWeight: Boolean? = null
|
||||
var averageWithoutWeight: Boolean
|
||||
get() { mAverageWithoutWeight = mAverageWithoutWeight ?: config.values.get("averageWithoutWeight", true); return mAverageWithoutWeight ?: true }
|
||||
set(value) { config.set("averageWithoutWeight", value); mAverageWithoutWeight = value }
|
||||
|
||||
private var mPlusValue: Float? = null
|
||||
var plusValue: Float?
|
||||
get() { mPlusValue = mPlusValue ?: config.values.getFloat("plusValue"); return mPlusValue }
|
||||
|
@ -89,6 +89,8 @@ class GradesConfigDialog(
|
||||
}?.isChecked = true
|
||||
|
||||
b.dontCountZeroToAverage.isChecked = !profileConfig.countZeroToAvg
|
||||
b.hideImproved.isChecked = profileConfig.hideImproved
|
||||
b.averageWithoutWeight.isChecked = profileConfig.averageWithoutWeight
|
||||
}
|
||||
|
||||
private fun saveConfig() {
|
||||
@ -125,6 +127,16 @@ class GradesConfigDialog(
|
||||
b.gradeAverageMode2.setOnSelectedListener { profileConfig.yearAverageMode = YEAR_1_AVG_2_SEM }
|
||||
b.gradeAverageMode3.setOnSelectedListener { profileConfig.yearAverageMode = YEAR_1_SEM_2_SEM }
|
||||
|
||||
b.dontCountZeroToAverage.setOnCheckedChangeListener { _, isChecked -> profileConfig.countZeroToAvg = !isChecked }
|
||||
b.dontCountZeroToAverage.onChange { _, isChecked -> profileConfig.countZeroToAvg = !isChecked }
|
||||
b.hideImproved.onChange { _, isChecked -> profileConfig.hideImproved = isChecked }
|
||||
b.averageWithoutWeight.onChange { _, isChecked -> profileConfig.averageWithoutWeight = isChecked }
|
||||
|
||||
b.averageWithoutWeightHelp.onClick {
|
||||
MaterialAlertDialogBuilder(activity)
|
||||
.setTitle(R.string.grades_config_average_without_weight)
|
||||
.setMessage(R.string.grades_config_average_without_weight_message)
|
||||
.setPositiveButton(R.string.ok, null)
|
||||
.show()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -121,6 +121,8 @@ class GradesFragment : Fragment(), CoroutineScope {
|
||||
var subject = GradesSubject(subjectId, "")
|
||||
var semester = GradesSemester(0, 1)
|
||||
|
||||
val hideImproved = manager.hideImproved
|
||||
|
||||
// grades returned by the query are ordered
|
||||
// by the subject ID, so it's easier and probably
|
||||
// a bit faster to build all the models
|
||||
@ -152,7 +154,10 @@ class GradesFragment : Fragment(), CoroutineScope {
|
||||
Grade.TYPE_YEAR_PROPOSED -> subject.proposedGrade = grade
|
||||
Grade.TYPE_YEAR_FINAL -> subject.finalGrade = grade
|
||||
else -> {
|
||||
semester.grades += grade
|
||||
if (!hideImproved || grade.parentId ?: -1L == -1L) {
|
||||
// hide improved grades if parent(new grade) ID is not set
|
||||
semester.grades += grade
|
||||
}
|
||||
countGrade(grade, subject.averages)
|
||||
countGrade(grade, semester.averages)
|
||||
}
|
||||
@ -247,8 +252,13 @@ class GradesFragment : Fragment(), CoroutineScope {
|
||||
val weight = manager.getGradeWeight(dontCountGrades, grade)
|
||||
when (grade.type) {
|
||||
Grade.TYPE_NORMAL -> {
|
||||
averages.normalSum += value
|
||||
averages.normalCount ++
|
||||
if (grade.value > 0f) {
|
||||
// count to the arithmetic average
|
||||
// only if value more than 0
|
||||
// to exclude "+", "-", "np" etc.
|
||||
averages.normalSum += value
|
||||
averages.normalCount++
|
||||
}
|
||||
averages.normalWeightedSum += value * weight
|
||||
averages.normalWeightedCount += weight
|
||||
}
|
||||
|
@ -45,6 +45,10 @@ class GradesManager(val app: App) {
|
||||
get() = app.config.forProfile().grades.minusValue
|
||||
val dontCountGrades
|
||||
get() = app.config.forProfile().grades.dontCountGrades
|
||||
val hideImproved
|
||||
get() = app.config.forProfile().grades.hideImproved
|
||||
val averageWithoutWeight
|
||||
get() = app.config.forProfile().grades.averageWithoutWeight
|
||||
|
||||
|
||||
fun getOrderByString() = when (orderBy) {
|
||||
@ -142,7 +146,7 @@ class GradesManager(val app: App) {
|
||||
averages.normalWeightedCount > 0f -> {
|
||||
averages.normalWeightedSum / averages.normalWeightedCount
|
||||
}
|
||||
averages.normalSum > 0f && averages.normalCount > 0f -> {
|
||||
averageWithoutWeight && averages.normalSum > 0f && averages.normalCount > 0f -> {
|
||||
averages.normalSum / averages.normalCount
|
||||
}
|
||||
else -> null
|
||||
|
Reference in New Issue
Block a user