forked from github/wulkanowy-mirror
Add grade sorting by average (#1863)
This commit is contained in:
parent
fcf0adfd80
commit
5c4a3d578b
@ -2,9 +2,10 @@ package io.github.wulkanowy.data.enums
|
|||||||
|
|
||||||
enum class GradeSortingMode(val value: String) {
|
enum class GradeSortingMode(val value: String) {
|
||||||
ALPHABETIC("alphabetic"),
|
ALPHABETIC("alphabetic"),
|
||||||
DATE("date");
|
DATE("date"),
|
||||||
|
AVERAGE("average");
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun getByValue(value: String) = values().find { it.value == value } ?: ALPHABETIC
|
fun getByValue(value: String) = values().find { it.value == value } ?: ALPHABETIC
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,8 +3,8 @@ package io.github.wulkanowy.ui.modules.grade.details
|
|||||||
import io.github.wulkanowy.data.*
|
import io.github.wulkanowy.data.*
|
||||||
import io.github.wulkanowy.data.db.entities.Grade
|
import io.github.wulkanowy.data.db.entities.Grade
|
||||||
import io.github.wulkanowy.data.enums.GradeExpandMode
|
import io.github.wulkanowy.data.enums.GradeExpandMode
|
||||||
import io.github.wulkanowy.data.enums.GradeSortingMode.ALPHABETIC
|
import io.github.wulkanowy.data.enums.GradeSortingMode
|
||||||
import io.github.wulkanowy.data.enums.GradeSortingMode.DATE
|
import io.github.wulkanowy.data.enums.GradeSortingMode.*
|
||||||
import io.github.wulkanowy.data.repositories.GradeRepository
|
import io.github.wulkanowy.data.repositories.GradeRepository
|
||||||
import io.github.wulkanowy.data.repositories.PreferencesRepository
|
import io.github.wulkanowy.data.repositories.PreferencesRepository
|
||||||
import io.github.wulkanowy.data.repositories.SemesterRepository
|
import io.github.wulkanowy.data.repositories.SemesterRepository
|
||||||
@ -204,6 +204,7 @@ class GradeDetailsPresenter @Inject constructor(
|
|||||||
ALPHABETIC -> gradeSubjects.sortedBy { gradeDetailsWithAverage ->
|
ALPHABETIC -> gradeSubjects.sortedBy { gradeDetailsWithAverage ->
|
||||||
gradeDetailsWithAverage.subject.lowercase()
|
gradeDetailsWithAverage.subject.lowercase()
|
||||||
}
|
}
|
||||||
|
AVERAGE -> gradeSubjects.sortedByDescending { it.average }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.map { (subject, average, points, _, grades) ->
|
.map { (subject, average, points, _, grades) ->
|
||||||
|
@ -2,6 +2,9 @@ package io.github.wulkanowy.ui.modules.grade.summary
|
|||||||
|
|
||||||
import io.github.wulkanowy.data.*
|
import io.github.wulkanowy.data.*
|
||||||
import io.github.wulkanowy.data.db.entities.GradeSummary
|
import io.github.wulkanowy.data.db.entities.GradeSummary
|
||||||
|
import io.github.wulkanowy.data.enums.GradeSortingMode
|
||||||
|
import io.github.wulkanowy.data.enums.GradeSortingMode.*
|
||||||
|
import io.github.wulkanowy.data.repositories.PreferencesRepository
|
||||||
import io.github.wulkanowy.data.repositories.StudentRepository
|
import io.github.wulkanowy.data.repositories.StudentRepository
|
||||||
import io.github.wulkanowy.ui.base.BasePresenter
|
import io.github.wulkanowy.ui.base.BasePresenter
|
||||||
import io.github.wulkanowy.ui.base.ErrorHandler
|
import io.github.wulkanowy.ui.base.ErrorHandler
|
||||||
@ -14,6 +17,7 @@ import javax.inject.Inject
|
|||||||
class GradeSummaryPresenter @Inject constructor(
|
class GradeSummaryPresenter @Inject constructor(
|
||||||
errorHandler: ErrorHandler,
|
errorHandler: ErrorHandler,
|
||||||
studentRepository: StudentRepository,
|
studentRepository: StudentRepository,
|
||||||
|
private val preferencesRepository: PreferencesRepository,
|
||||||
private val averageProvider: GradeAverageProvider,
|
private val averageProvider: GradeAverageProvider,
|
||||||
private val analytics: AnalyticsHelper
|
private val analytics: AnalyticsHelper
|
||||||
) : BasePresenter<GradeSummaryView>(errorHandler, studentRepository) {
|
) : BasePresenter<GradeSummaryView>(errorHandler, studentRepository) {
|
||||||
@ -127,7 +131,17 @@ class GradeSummaryPresenter @Inject constructor(
|
|||||||
private fun createGradeSummaryItems(items: List<GradeSubject>): List<GradeSummary> {
|
private fun createGradeSummaryItems(items: List<GradeSubject>): List<GradeSummary> {
|
||||||
return items
|
return items
|
||||||
.filter { !checkEmpty(it) }
|
.filter { !checkEmpty(it) }
|
||||||
.sortedBy { it.subject }
|
.let { gradeSubjects ->
|
||||||
|
when (preferencesRepository.gradeSortingMode) {
|
||||||
|
DATE -> gradeSubjects.sortedByDescending { gradeDetailsWithAverage ->
|
||||||
|
gradeDetailsWithAverage.grades.maxByOrNull { it.date }?.date
|
||||||
|
}
|
||||||
|
ALPHABETIC -> gradeSubjects.sortedBy { gradeDetailsWithAverage ->
|
||||||
|
gradeDetailsWithAverage.subject.lowercase()
|
||||||
|
}
|
||||||
|
AVERAGE -> gradeSubjects.sortedByDescending { it.average }
|
||||||
|
}
|
||||||
|
}
|
||||||
.map { it.summary.copy(average = it.average) }
|
.map { it.summary.copy(average = it.average) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -82,10 +82,12 @@
|
|||||||
<string-array name="grade_sorting_mode_entries">
|
<string-array name="grade_sorting_mode_entries">
|
||||||
<item>Alphabetically</item>
|
<item>Alphabetically</item>
|
||||||
<item>By date</item>
|
<item>By date</item>
|
||||||
|
<item>By average</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="grade_sorting_mode_values" translatable="false">
|
<string-array name="grade_sorting_mode_values" translatable="false">
|
||||||
<item>alphabetic</item>
|
<item>alphabetic</item>
|
||||||
<item>date</item>
|
<item>date</item>
|
||||||
|
<item>average</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
<string-array name="grade_color_scheme_entries">
|
<string-array name="grade_color_scheme_entries">
|
||||||
|
Loading…
x
Reference in New Issue
Block a user