Skip to content

Commit

Permalink
chore: upgrade to alpha 1.1.0-alpha03 (#26)
Browse files Browse the repository at this point in the history
* chore: upgrade to alpha 1.1.0-alpha02

* feat: add exercise laps, segments and remoev sleep stage record

* feat: add exercise route property
  • Loading branch information
matinzd authored Aug 10, 2023
1 parent 8950fc1 commit 095656a
Show file tree
Hide file tree
Showing 13 changed files with 369 additions and 65 deletions.
2 changes: 1 addition & 1 deletion android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ dependencies {
implementation "com.facebook.react:react-native"
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4'
implementation "androidx.health.connect:connect-client:1.0.0-alpha11"
implementation "androidx.health.connect:connect-client:1.1.0-alpha03"

// Issue: https://youtrack.jetbrains.com/issue/KT-54136/Duplicated-classes-cause-build-failure-if-a-dependency-to-kotlin-stdlib-specified-in-an-android-project
constraints {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ class HealthConnectManager(private val applicationContext: ReactApplicationConte
}

fun getSdkStatus(providerPackageName: String, promise: Promise) {
val status = HealthConnectClient.sdkStatus(applicationContext, providerPackageName)
val status = HealthConnectClient.getSdkStatus(applicationContext, providerPackageName)
return promise.resolve(status)
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
package dev.matinzd.healthconnect.records

import androidx.health.connect.client.aggregate.AggregationResult
import androidx.health.connect.client.records.ExerciseLap
import androidx.health.connect.client.records.ExerciseRoute
import androidx.health.connect.client.records.ExerciseRouteResult
import androidx.health.connect.client.records.ExerciseSegment
import androidx.health.connect.client.records.ExerciseSessionRecord
import androidx.health.connect.client.records.PowerRecord
import androidx.health.connect.client.request.AggregateRequest
import com.facebook.react.bridge.ReadableArray
import com.facebook.react.bridge.ReadableMap
import com.facebook.react.bridge.WritableNativeArray
import com.facebook.react.bridge.WritableNativeMap
import dev.matinzd.healthconnect.utils.*
import java.time.Instant
Expand All @@ -22,6 +28,35 @@ class ReactExerciseSessionRecord : ReactHealthRecordImpl<ExerciseSessionRecord>
),
notes = it.getString("notes"),
title = it.getString("title"),
laps = it.getArray("samples")?.toMapList()?.map { sample ->
ExerciseLap(
startTime = Instant.parse(sample.getString("startTime")),
endTime = Instant.parse(sample.getString("endTime")),
length = getLengthFromJsMap(sample.getMap("length")),
)
} ?: emptyList(),
segments = it.getArray("samples")?.toMapList()?.map { sample ->
ExerciseSegment(
startTime = Instant.parse(sample.getString("startTime")),
endTime = Instant.parse(sample.getString("endTime")),
segmentType = sample.getSafeInt(
"segmentType", ExerciseSegment.EXERCISE_SEGMENT_TYPE_UNKNOWN
),
repetitions = sample.getSafeInt("repetitions", 0),
)
} ?: emptyList(),
exerciseRoute = ExerciseRoute(
route = it.getMap("exerciseRoute")?.getArray("route")?.toMapList()?.map { sample ->
ExerciseRoute.Location(
time = Instant.parse(sample.getString("time")),
latitude = sample.getDouble("latitude"),
longitude = sample.getDouble("longitude"),
horizontalAccuracy = getLengthFromJsMap(sample.getMap("horizontalAccuracy")),
verticalAccuracy = getLengthFromJsMap(sample.getMap("verticalAccuracy")),
altitude = getLengthFromJsMap(sample.getMap("altitude")),
)
} ?: emptyList(),
)
)
}
}
Expand All @@ -33,6 +68,55 @@ class ReactExerciseSessionRecord : ReactHealthRecordImpl<ExerciseSessionRecord>
putString("notes", record.notes)
putString("title", record.title)
putInt("exerciseType", record.exerciseType)
putArray("laps", WritableNativeArray().apply {
record.laps.map {
val map = WritableNativeMap()
map.putString("startTime", it.startTime.toString())
map.putString("endTime", it.endTime.toString())
map.putMap("length", lengthToJsMap(it.length))
this.pushMap(map)
}
})
putArray("segments", WritableNativeArray().apply {
record.segments.map {
val map = WritableNativeMap()
map.putString("startTime", it.startTime.toString())
map.putString("endTime", it.endTime.toString())
map.putDouble("repetitions", it.repetitions.toDouble())
map.putDouble("segmentType", it.segmentType.toDouble())
this.pushMap(map)
}
})


when(record.exerciseRouteResult) {
is ExerciseRouteResult.Data -> {
val exerciseRouteMap = WritableNativeMap()
exerciseRouteMap.putArray("route", WritableNativeArray().apply {
(record.exerciseRouteResult as ExerciseRouteResult.Data).exerciseRoute.route.map {
val map = WritableNativeMap()
map.putString("time", it.time.toString())
map.putDouble("latitude", it.latitude)
map.putDouble("longitude", it.longitude)
map.putMap("horizontalAccuracy", lengthToJsMap(it.horizontalAccuracy))
map.putMap("verticalAccuracy", lengthToJsMap(it.verticalAccuracy))
map.putMap("altitude", lengthToJsMap(it.altitude))
this.pushMap(map)
}
})
putMap("exerciseRoute", exerciseRouteMap)
}
is ExerciseRouteResult.NoData -> {
putMap("exerciseRoute", WritableNativeMap())
}
is ExerciseRouteResult.ConsentRequired -> {
throw Exception("Consent required")
}
else -> {
putMap("exerciseRoute", WritableNativeMap())
}
}

putMap("metadata", convertMetadataToJSMap(record.metadata))
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import androidx.health.connect.client.records.SleepSessionRecord
import androidx.health.connect.client.request.AggregateRequest
import com.facebook.react.bridge.ReadableArray
import com.facebook.react.bridge.ReadableMap
import com.facebook.react.bridge.WritableNativeArray
import com.facebook.react.bridge.WritableNativeMap
import dev.matinzd.healthconnect.utils.*
import java.time.Instant
Expand All @@ -15,6 +16,13 @@ class ReactSleepSessionRecord : ReactHealthRecordImpl<SleepSessionRecord> {
SleepSessionRecord(
startTime = Instant.parse(map.getString("startTime")),
endTime = Instant.parse(map.getString("endTime")),
stages = map.getArray("stages")?.toMapList()?.map { stageMap ->
SleepSessionRecord.Stage(
startTime = Instant.parse(stageMap.getString("startTime")),
endTime = Instant.parse(stageMap.getString("endTime")),
stage = stageMap.getSafeInt("stage", SleepSessionRecord.STAGE_TYPE_UNKNOWN),
)
} ?: emptyList(),
startZoneOffset = null,
endZoneOffset = null,
title = map.getString("title"),
Expand All @@ -29,6 +37,15 @@ class ReactSleepSessionRecord : ReactHealthRecordImpl<SleepSessionRecord> {
putString("endTime", record.endTime.toString())
putString("title", record.title)
putString("notes", record.notes)
putArray("stages", WritableNativeArray().apply {
record.stages.map {
val map = WritableNativeMap()
map.putString("startTime", it.startTime.toString())
map.putString("endTime", it.endTime.toString())
map.putDouble("stage", it.stage.toDouble())
this.pushMap(map)
}
})
putMap("metadata", convertMetadataToJSMap(record.metadata))
}
}
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,6 @@ val reactRecordTypeToClassMap: Map<String, KClass<out Record>> = mapOf(
"RestingHeartRate" to RestingHeartRateRecord::class,
"SexualActivity" to SexualActivityRecord::class,
"SleepSession" to SleepSessionRecord::class,
"SleepStage" to SleepStageRecord::class,
"Speed" to SpeedRecord::class,
"StepsCadence" to StepsCadenceRecord::class,
"Steps" to StepsRecord::class,
Expand Down Expand Up @@ -190,7 +189,6 @@ val reactRecordTypeToReactClassMap: Map<String, Class<out ReactHealthRecordImpl<
"RestingHeartRate" to ReactRestingHeartRateRecord::class.java,
"SexualActivity" to ReactSexualActivityRecord::class.java,
"SleepSession" to ReactSleepSessionRecord::class.java,
"SleepStage" to ReactSleepStageRecord::class.java,
"Speed" to ReactSpeedRecord::class.java,
"StepsCadence" to ReactStepsCadenceRecord::class.java,
"Steps" to ReactStepsRecord::class.java,
Expand Down
2 changes: 1 addition & 1 deletion docs/docs/permissions.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,13 +99,13 @@ You will need to use [EAS Build](https://docs.expo.dev/eas/) and [Config plugins
| RestingHeartRate | android.permission.health.READ_RESTING_HEART_RATE | android.permission.health.WRITE_RESTING_HEART_RATE |
| SexualActivity | android.permission.health.READ_SEXUAL_ACTIVITY | android.permission.health.WRITE_SEXUAL_ACTIVITY |
| SleepSession | android.permission.health.READ_SLEEP | android.permission.health.WRITE_SLEEP |
| SleepStage | android.permission.health.READ_SLEEP | android.permission.health.WRITE_SLEEP |
| Speed | android.permission.health.READ_SPEED | android.permission.health.WRITE_SPEED |
| StepsCadence | android.permission.health.READ_STEPS | android.permission.health.WRITE_STEPS |
| Steps | android.permission.health.READ_STEPS | android.permission.health.WRITE_STEPS |
| TotalCaloriesBurned | android.permission.health.READ_TOTAL_CALORIES_BURNED | android.permission.health.WRITE_TOTAL_CALORIES_BURNED |
| Vo2Max | android.permission.health.READ_VO2_MAX | android.permission.health.WRITE_VO2_MAX |
| Weight | android.permission.health.READ_WEIGHT | android.permission.health.WRITE_WEIGHT |
| WheelchairPushes | android.permission.health.READ_WHEELCHAIR_PUSHES | android.permission.health.WRITE_WHEELCHAIR_PUSHES |
| WriteExerciseRoute | android.permission.health.WRITE_EXERCISE_ROUTE | N/A |

You can read more about data types and permissions [here](https://developer.android.com/guide/health-and-fitness/health-connect/data-and-data-types/data-types).
6 changes: 3 additions & 3 deletions example/android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ buildscript {
ext {
buildToolsVersion = "33.0.0"
minSdkVersion = 26
compileSdkVersion = 33
targetSdkVersion = 33
compileSdkVersion = 34
targetSdkVersion = 34

// We use NDK 23 which has both M1 support and is the side-by-side NDK version from AGP.
ndkVersion = "23.1.7779620"
Expand All @@ -18,4 +18,4 @@ buildscript {
classpath("com.android.tools.build:gradle:7.3.1")
classpath("com.facebook.react:react-native-gradle-plugin")
}
}
}
2 changes: 1 addition & 1 deletion example/android/gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64
# your application. You should enable this flag either if you want
# to write custom TurboModules/Fabric components OR use libraries that
# are providing them.
newArchEnabled=true
newArchEnabled=false

# Use this property to enable or disable the Hermes JS engine.
# If set to false, you will be using JSC instead.
Expand Down
Loading

0 comments on commit 095656a

Please sign in to comment.