Skip to content

Commit c26088c

Browse files
authored
Refactor distance and steps calculation logic
1 parent 36596d2 commit c26088c

1 file changed

Lines changed: 25 additions & 17 deletions

File tree

android/src/main/kotlin/cachet/plugins/health/HealthDataReader.kt

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -613,14 +613,18 @@ class HealthDataReader(
613613
.groupBy { Pair(it.startTime.toEpochMilli(), it.endTime.toEpochMilli()) }
614614
.map { entry -> entry.value.maxByOrNull { it.distance.inMeters } ?: entry.value.first() }
615615

616-
val fitbitDistanceRecords = uniqueDistanceRecords.filter { it.metadata.dataOrigin.packageName == fitbitPackageName }
617-
.sumOf { it.distance.inMeters }
618-
val otherDistanceRecord = uniqueDistanceRecords.filter { it.metadata.dataOrigin.packageName != fitbitPackageName }
619-
.sumOf { it.distance.inMeters }
620-
621-
val totalDistance = when (fitbitDistanceRecords > 0) {
622-
true -> fitbitDistanceRecords
623-
false -> otherDistanceRecord
616+
// Group distance records by packageName and sum for each package
617+
val distanceByPackage = uniqueDistanceRecords
618+
.groupBy { it.metadata.dataOrigin.packageName }
619+
.mapValues { entry ->
620+
entry.value.sumOf { it.distance.inMeters }
621+
}
622+
623+
// Check if Fitbit data exists, otherwise use the package with highest sum
624+
val totalDistance = if (distanceByPackage.containsKey(fitbitPackageName)) {
625+
distanceByPackage[fitbitPackageName] ?: 0.0
626+
} else {
627+
distanceByPackage.values.maxOrNull() ?: 0.0
624628
}
625629

626630
// Get energy burned data
@@ -662,15 +666,19 @@ class HealthDataReader(
662666
.groupBy { Pair(it.startTime.toEpochMilli(), it.endTime.toEpochMilli()) }
663667
.map { entry -> entry.value.maxByOrNull { it.count } ?: entry.value.first() }
664668

665-
val fitbitStepsRecord = uniqueStepRecords.filter { it.metadata.dataOrigin.packageName == fitbitPackageName }
666-
.sumOf { it.count }.toDouble()
667-
val otherStepsRecord = uniqueStepRecords.filter { it.metadata.dataOrigin.packageName != fitbitPackageName }
668-
.sumOf { it.count }.toDouble()
669-
670-
val totalSteps = when (fitbitStepsRecord > 0) {
671-
true -> fitbitStepsRecord
672-
false -> otherStepsRecord
673-
}
669+
// Group distance records by packageName and sum for each package
670+
val stepsByPackage = uniqueStepRecords
671+
.groupBy { it.metadata.dataOrigin.packageName }
672+
.mapValues { entry ->
673+
entry.value.sumOf { it.count }
674+
}
675+
676+
// Check if Fitbit data exists, otherwise use the package with highest sum
677+
val totalSteps = if (stepsByPackage.containsKey(fitbitPackageName)) {
678+
stepsByPackage[fitbitPackageName] ?: 0
679+
} else {
680+
stepsByPackage.values.maxOrNull() ?: 0
681+
}.toDouble()
674682

675683
// Add final datapoint
676684
healthConnectData.add(

0 commit comments

Comments
 (0)