From 4601bd50d64314ef2a3c36858126271478b6e5cc Mon Sep 17 00:00:00 2001 From: Louis Lagrange Date: Thu, 1 Aug 2024 13:53:03 +0200 Subject: [PATCH 1/3] fix(types): zone offset is never returned in records --- src/types/base.types.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/types/base.types.ts b/src/types/base.types.ts index c735ea1..055eb0c 100644 --- a/src/types/base.types.ts +++ b/src/types/base.types.ts @@ -4,14 +4,11 @@ export interface BaseRecord { export interface InstantaneousRecord extends BaseRecord { time: string; - zoneOffset?: string; } export interface IntervalRecord extends BaseRecord { startTime: string; - startZoneOffset?: string; endTime: string; - endZoneOffset?: string; } export interface Metadata { From 695d86372e1e880184db71e0198d7df2990baa20 Mon Sep 17 00:00:00 2001 From: Louis Lagrange Date: Thu, 1 Aug 2024 13:55:10 +0200 Subject: [PATCH 2/3] feat: add startZoneOffset and endZoneOffset to ExerciseSessionRecord --- .../records/ReactExerciseSessionRecord.kt | 15 +++++++++++++++ src/types/base.types.ts | 5 +++++ src/types/records.types.ts | 3 +++ 3 files changed, 23 insertions(+) diff --git a/android/src/main/java/dev/matinzd/healthconnect/records/ReactExerciseSessionRecord.kt b/android/src/main/java/dev/matinzd/healthconnect/records/ReactExerciseSessionRecord.kt index 39a1d42..10c21a2 100644 --- a/android/src/main/java/dev/matinzd/healthconnect/records/ReactExerciseSessionRecord.kt +++ b/android/src/main/java/dev/matinzd/healthconnect/records/ReactExerciseSessionRecord.kt @@ -74,6 +74,21 @@ class ReactExerciseSessionRecord : ReactHealthRecordImpl putString("notes", record.notes) putString("title", record.title) putInt("exerciseType", record.exerciseType) + + if (record.startZoneOffset != null) { + putMap("startZoneOffset", WritableNativeMap().apply { + putString("id", record.startZoneOffset!!.id) + putInt("totalSeconds", record.startZoneOffset!!.totalSeconds) + }) + } + + if (record.endZoneOffset != null) { + putMap("endZoneOffset", WritableNativeMap().apply { + putString("id", record.endZoneOffset!!.id) + putInt("totalSeconds", record.endZoneOffset!!.totalSeconds) + }) + } + putArray("laps", WritableNativeArray().apply { record.laps.map { val map = WritableNativeMap() diff --git a/src/types/base.types.ts b/src/types/base.types.ts index 055eb0c..a28a21a 100644 --- a/src/types/base.types.ts +++ b/src/types/base.types.ts @@ -2,6 +2,11 @@ export interface BaseRecord { metadata?: Metadata; } +export interface ZoneOffset { + id: string; + totalSeconds: number; +} + export interface InstantaneousRecord extends BaseRecord { time: string; } diff --git a/src/types/records.types.ts b/src/types/records.types.ts index f25da9c..8f35690 100644 --- a/src/types/records.types.ts +++ b/src/types/records.types.ts @@ -19,6 +19,7 @@ import type { ExerciseLap, SleepStage, ExerciseRoute, + ZoneOffset, } from './base.types'; export interface ActiveCaloriesBurnedRecord extends IntervalRecord { @@ -100,6 +101,8 @@ export interface ElevationGainedRecord extends IntervalRecord { } export interface ExerciseSessionRecord extends IntervalRecord { + startZoneOffset?: ZoneOffset; + endZoneOffset?: ZoneOffset; recordType: 'ExerciseSession'; // Use ExerciseType constant exerciseType: number; From d6f3fd04a40184b6b2ad0b648162d3ba33563498 Mon Sep 17 00:00:00 2001 From: Louis Lagrange Date: Thu, 1 Aug 2024 18:04:46 +0200 Subject: [PATCH 3/3] refactor: create and use zoneOffsetToJsMap util --- .../records/ReactExerciseSessionRecord.kt | 17 ++--------------- .../healthconnect/utils/HealthConnectUtils.kt | 12 ++++++++++++ 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/android/src/main/java/dev/matinzd/healthconnect/records/ReactExerciseSessionRecord.kt b/android/src/main/java/dev/matinzd/healthconnect/records/ReactExerciseSessionRecord.kt index 10c21a2..21d7407 100644 --- a/android/src/main/java/dev/matinzd/healthconnect/records/ReactExerciseSessionRecord.kt +++ b/android/src/main/java/dev/matinzd/healthconnect/records/ReactExerciseSessionRecord.kt @@ -70,25 +70,12 @@ class ReactExerciseSessionRecord : ReactHealthRecordImpl override fun parseRecord(record: ExerciseSessionRecord): WritableNativeMap { return WritableNativeMap().apply { putString("startTime", record.startTime.toString()) + putMap("startZoneOffset", zoneOffsetToJsMap(record.startZoneOffset)) putString("endTime", record.endTime.toString()) + putMap("endZoneOffset", zoneOffsetToJsMap(record.endZoneOffset)) putString("notes", record.notes) putString("title", record.title) putInt("exerciseType", record.exerciseType) - - if (record.startZoneOffset != null) { - putMap("startZoneOffset", WritableNativeMap().apply { - putString("id", record.startZoneOffset!!.id) - putInt("totalSeconds", record.startZoneOffset!!.totalSeconds) - }) - } - - if (record.endZoneOffset != null) { - putMap("endZoneOffset", WritableNativeMap().apply { - putString("id", record.endZoneOffset!!.id) - putInt("totalSeconds", record.endZoneOffset!!.totalSeconds) - }) - } - putArray("laps", WritableNativeArray().apply { record.laps.map { val map = WritableNativeMap() diff --git a/android/src/main/java/dev/matinzd/healthconnect/utils/HealthConnectUtils.kt b/android/src/main/java/dev/matinzd/healthconnect/utils/HealthConnectUtils.kt index f87b3b7..29a976f 100644 --- a/android/src/main/java/dev/matinzd/healthconnect/utils/HealthConnectUtils.kt +++ b/android/src/main/java/dev/matinzd/healthconnect/utils/HealthConnectUtils.kt @@ -12,6 +12,7 @@ import com.facebook.react.bridge.WritableNativeArray import com.facebook.react.bridge.WritableNativeMap import dev.matinzd.healthconnect.records.* import java.time.Instant +import java.time.ZoneOffset import kotlin.reflect.KClass fun convertReactRequestOptionsFromJS( @@ -258,6 +259,17 @@ fun lengthToJsMap(length: Length?): WritableNativeMap { } } +fun zoneOffsetToJsMap(zoneOffset: ZoneOffset?): WritableNativeMap? { + if (zoneOffset == null) { + return null + } + + return WritableNativeMap().apply { + putString("id", zoneOffset.id) + putInt("totalSeconds", zoneOffset.totalSeconds) + } +} + fun getVolumeFromJsMap(volume: ReadableMap?): Volume { if (volume == null) { throw InvalidLength()