Implement score and frequency widgets for habit groups

This commit is contained in:
Dharanish
2024-07-11 10:19:53 +02:00
parent 8fac8afadf
commit 6abea29736
13 changed files with 186 additions and 51 deletions

View File

@@ -54,14 +54,7 @@ class FrequencyCardPresenter {
firstWeekday: Int,
theme: Theme
): FrequencyCardState {
val normalizedEntries = habitGroup.habitList.map {
it.computedEntries.normalizeEntries(it.isNumerical, it.frequency, it.targetValue)
}
val frequencies = normalizedEntries.map {
it.computeWeekdayFrequency(isNumerical = true)
}.reduce { acc, hashMap ->
mergeMaps(acc, hashMap) { value1, value2 -> addArray(value1, value2) }
}
val frequencies = getFrequenciesFromHabitGroup(habitGroup)
return FrequencyCardState(
color = habitGroup.color,
@@ -72,6 +65,18 @@ class FrequencyCardPresenter {
)
}
fun getFrequenciesFromHabitGroup(habitGroup: HabitGroup): HashMap<Timestamp, Array<Int>> {
val normalizedEntries = habitGroup.habitList.map {
it.computedEntries.normalizeEntries(it.isNumerical, it.frequency, it.targetValue)
}
val frequencies = normalizedEntries.map {
it.computeWeekdayFrequency(isNumerical = true)
}.reduce { acc, hashMap ->
mergeMaps(acc, hashMap) { value1, value2 -> addArray(value1, value2) }
}
return frequencies
}
private fun <K, V> mergeMaps(map1: HashMap<K, V>, map2: HashMap<K, V>, mergeFunction: (V, V) -> V): HashMap<K, V> {
val result = map1 // Step 1
for ((key, value) in map2) { // Step 2