From bad0776cab3f0caf5b575d0e45f16ea7387d93c2 Mon Sep 17 00:00:00 2001 From: MRmlik12 <44818681+MRmlik12@users.noreply.github.com> Date: Fri, 5 Feb 2021 10:50:35 +0100 Subject: [PATCH] Add final average grades calculation with modifiers (#1125) --- .../modules/grade/summary/GradeSummaryAdapter.kt | 11 +++++++++-- .../io/github/wulkanowy/utils/GradeExtension.kt | 16 +++++++++++++--- .../github/wulkanowy/utils/GradeExtensionTest.kt | 9 +++++---- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/summary/GradeSummaryAdapter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/summary/GradeSummaryAdapter.kt index ccebe94f0..edc2a9e19 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/summary/GradeSummaryAdapter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/summary/GradeSummaryAdapter.kt @@ -5,14 +5,21 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView +import io.github.wulkanowy.data.db.entities.Grade import io.github.wulkanowy.data.db.entities.GradeSummary +import io.github.wulkanowy.data.db.entities.Student +import io.github.wulkanowy.data.repositories.PreferencesRepository import io.github.wulkanowy.databinding.ItemGradeSummaryBinding import io.github.wulkanowy.databinding.ScrollableHeaderGradeSummaryBinding +import io.github.wulkanowy.sdk.Sdk import io.github.wulkanowy.utils.calcAverage +import io.github.wulkanowy.utils.changeModifier import java.util.Locale import javax.inject.Inject -class GradeSummaryAdapter @Inject constructor() : RecyclerView.Adapter() { +class GradeSummaryAdapter @Inject constructor( + private val preferencesRepository: PreferencesRepository +) : RecyclerView.Adapter() { private enum class ViewType(val id: Int) { HEADER(1), @@ -49,7 +56,7 @@ class GradeSummaryAdapter @Inject constructor() : RecyclerView.Adapter value.average != 0.0 } .map { values -> values.average } diff --git a/app/src/main/java/io/github/wulkanowy/utils/GradeExtension.kt b/app/src/main/java/io/github/wulkanowy/utils/GradeExtension.kt index 9aa4fcac0..6facb5ef6 100644 --- a/app/src/main/java/io/github/wulkanowy/utils/GradeExtension.kt +++ b/app/src/main/java/io/github/wulkanowy/utils/GradeExtension.kt @@ -16,10 +16,20 @@ fun List.calcAverage(): Double { } @JvmName("calcSummaryAverage") -fun List.calcAverage() = asSequence() +fun List.calcAverage(plusModifier: Double, minusModifier: Double) = asSequence() .mapNotNull { - if (it.finalGrade.matches("[0-6]".toRegex())) { - it.finalGrade.toDouble() + if (it.finalGrade.matches("[0-6][+-]?".toRegex())) { + when { + it.finalGrade.endsWith('+') -> { + it.finalGrade.removeSuffix("+").toDouble() + plusModifier + } + it.finalGrade.endsWith('-') -> { + it.finalGrade.removeSuffix("-").toDouble() - minusModifier + } + else -> { + it.finalGrade.toDouble() + } + } } else null } .average() diff --git a/app/src/test/java/io/github/wulkanowy/utils/GradeExtensionTest.kt b/app/src/test/java/io/github/wulkanowy/utils/GradeExtensionTest.kt index e1693d523..958b9169b 100644 --- a/app/src/test/java/io/github/wulkanowy/utils/GradeExtensionTest.kt +++ b/app/src/test/java/io/github/wulkanowy/utils/GradeExtensionTest.kt @@ -33,12 +33,13 @@ class GradeExtensionTest { @Test fun calcSummaryAverage() { - assertEquals(2.5, listOf( - createGradeSummary("5"), - createGradeSummary("-5"), + assertEquals(3.5, listOf( + createGradeSummary("4"), + createGradeSummary("5+"), + createGradeSummary("5-"), createGradeSummary("test"), createGradeSummary("0") - ).calcAverage(), 0.005) + ).calcAverage(0.5, 0.5), 0.005) } @Test