merge: integre fix/distance-calories-health-services dans develop
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -554,8 +554,12 @@ final class WatchSensorSummary {
|
||||
minHeartRateBpm: _nullableIntFromJson(json['minHeartRateBpm']),
|
||||
averageHeartRateBpm: _nullableDoubleFromJson(json['averageHeartRateBpm']),
|
||||
maxHeartRateBpm: _nullableIntFromJson(json['maxHeartRateBpm']),
|
||||
totalDistanceMeters: _nullableDoubleFromJson(json['totalDistanceMeters']),
|
||||
totalCaloriesKcal: _nullableDoubleFromJson(json['totalCaloriesKcal']),
|
||||
totalDistanceMeters:
|
||||
_nullableDoubleFromJson(json['totalDistanceMeters']) ??
|
||||
_nullableDoubleFromJson(json['distanceMeters']),
|
||||
totalCaloriesKcal:
|
||||
_nullableDoubleFromJson(json['totalCaloriesKcal']) ??
|
||||
_nullableDoubleFromJson(json['caloriesKcal']),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@ -132,6 +132,21 @@ void main() {
|
||||
expect(summary.totalDistanceMeters, isNull);
|
||||
expect(summary.totalCaloriesKcal, isNull);
|
||||
});
|
||||
|
||||
test('accepts legacy live metric keys for summary totals', () {
|
||||
final summary = WatchSensorSummary.fromJson({
|
||||
'sessionId': 'session-1',
|
||||
'sampleCount': 4,
|
||||
'minHeartRateBpm': 91,
|
||||
'averageHeartRateBpm': 128.5,
|
||||
'maxHeartRateBpm': 174,
|
||||
'distanceMeters': 842.4,
|
||||
'caloriesKcal': 186.2,
|
||||
});
|
||||
|
||||
expect(summary.totalDistanceMeters, 842.4);
|
||||
expect(summary.totalCaloriesKcal, 186.2);
|
||||
});
|
||||
});
|
||||
|
||||
group('WatchSensorSample', () {
|
||||
|
||||
@ -312,7 +312,10 @@ void main() {
|
||||
);
|
||||
await Future<void>.delayed(Duration.zero);
|
||||
|
||||
expect(telemetryRepository.samples.single.id, 'sample-1');
|
||||
expect(
|
||||
telemetryRepository.samples.single.id,
|
||||
'telemetry:session-1:1784980800000',
|
||||
);
|
||||
final aggregate = telemetryRepository.aggregates.singleWhere(
|
||||
(aggregate) => aggregate.scope == WorkoutTelemetryAggregateScope.session,
|
||||
);
|
||||
|
||||
@ -252,8 +252,8 @@ internal class WatchHeartRateCollector(
|
||||
"minHeartRateBpm" to min,
|
||||
"averageHeartRateBpm" to sampleSum / sampleCount,
|
||||
"maxHeartRateBpm" to max,
|
||||
"distanceMeters" to distanceMeters,
|
||||
"caloriesKcal" to caloriesKcal,
|
||||
"totalDistanceMeters" to distanceMeters,
|
||||
"totalCaloriesKcal" to caloriesKcal,
|
||||
),
|
||||
).toString().toByteArray(StandardCharsets.UTF_8)
|
||||
Wearable.getCapabilityClient(context)
|
||||
@ -321,7 +321,7 @@ internal class WatchHeartRateCollector(
|
||||
)
|
||||
if (config == null) {
|
||||
exerciseMetricsStartInFlight = false
|
||||
Log.w(TAG, "no exercise type supports heart rate or distance sessionId=$sessionId")
|
||||
Log.w(TAG, "no exercise type supports usable live metrics sessionId=$sessionId")
|
||||
if (shouldAggregate) {
|
||||
startMeasureHeartRateFallback(context)
|
||||
}
|
||||
@ -430,7 +430,7 @@ internal class WatchHeartRateCollector(
|
||||
distanceOnlyConfig = config
|
||||
}
|
||||
}
|
||||
return distanceOnlyConfig ?: caloriesOnlyConfig ?: heartRateOnlyConfig
|
||||
return caloriesOnlyConfig ?: distanceOnlyConfig ?: heartRateOnlyConfig
|
||||
}
|
||||
|
||||
private fun exerciseTypesFromNames(names: List<String>): List<ExerciseType> {
|
||||
|
||||
Reference in New Issue
Block a user