@@ -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