fix(wear): improve client initialization, consolidate health callbacks, and reset workout state
This commit is contained in:
+23
-9
@@ -21,6 +21,15 @@ class WearConnectivityModule : Module() {
|
||||
private set
|
||||
}
|
||||
|
||||
private fun ensureClients(): Pair<MessageClient, NodeClient>? {
|
||||
if (messageClient == null || nodeClient == null) {
|
||||
val ctx = appContext.reactContext ?: return null
|
||||
messageClient = messageClient ?: Wearable.getMessageClient(ctx)
|
||||
nodeClient = nodeClient ?: Wearable.getNodeClient(ctx)
|
||||
}
|
||||
return messageClient!! to nodeClient!!
|
||||
}
|
||||
|
||||
override fun definition() = ModuleDefinition {
|
||||
Name("WearConnectivity")
|
||||
|
||||
@@ -43,7 +52,8 @@ class WearConnectivityModule : Module() {
|
||||
|
||||
AsyncFunction("isPaired") {
|
||||
try {
|
||||
val nodes = nodeClient?.connectedNodes?.await() ?: emptyList()
|
||||
val (_, nc) = ensureClients() ?: return@AsyncFunction false
|
||||
val nodes = nc.connectedNodes.await()
|
||||
nodes.isNotEmpty()
|
||||
} catch (e: Exception) {
|
||||
false
|
||||
@@ -52,7 +62,8 @@ class WearConnectivityModule : Module() {
|
||||
|
||||
AsyncFunction("isReachable") {
|
||||
try {
|
||||
val nodes = nodeClient?.connectedNodes?.await() ?: emptyList()
|
||||
val (_, nc) = ensureClients() ?: return@AsyncFunction false
|
||||
val nodes = nc.connectedNodes.await()
|
||||
nodes.any { it.isNearby }
|
||||
} catch (e: Exception) {
|
||||
false
|
||||
@@ -61,8 +72,9 @@ class WearConnectivityModule : Module() {
|
||||
|
||||
AsyncFunction("sendWorkoutPlan") { plan: Map<String, Any?> ->
|
||||
try {
|
||||
val ctx = appContext.reactContext ?: return@AsyncFunction mapOf("error" to "No context")
|
||||
val nodes = nodeClient?.connectedNodes?.await() ?: emptyList()
|
||||
val (mc, nc) = ensureClients()
|
||||
?: return@AsyncFunction mapOf("error" to "No context")
|
||||
val nodes = nc.connectedNodes.await()
|
||||
val nearbyNode = nodes.firstOrNull { it.isNearby }
|
||||
?: return@AsyncFunction mapOf("error" to "No nearby watch found")
|
||||
|
||||
@@ -74,11 +86,11 @@ class WearConnectivityModule : Module() {
|
||||
}
|
||||
}
|
||||
|
||||
messageClient?.sendMessage(
|
||||
mc.sendMessage(
|
||||
nearbyNode.id,
|
||||
MESSAGE_PATH,
|
||||
json.toString().toByteArray(Charsets.UTF_8)
|
||||
)?.await()
|
||||
).await()
|
||||
|
||||
mapOf("status" to "sent")
|
||||
} catch (e: Exception) {
|
||||
@@ -88,7 +100,9 @@ class WearConnectivityModule : Module() {
|
||||
|
||||
AsyncFunction("sendWorkoutCompletion") { data: Map<String, Any?> ->
|
||||
try {
|
||||
val nodes = nodeClient?.connectedNodes?.await() ?: emptyList()
|
||||
val (mc, nc) = ensureClients()
|
||||
?: return@AsyncFunction mapOf("error" to "No context")
|
||||
val nodes = nc.connectedNodes.await()
|
||||
val nearbyNode = nodes.firstOrNull { it.isNearby }
|
||||
?: return@AsyncFunction mapOf("error" to "No nearby watch found")
|
||||
|
||||
@@ -100,11 +114,11 @@ class WearConnectivityModule : Module() {
|
||||
}
|
||||
}
|
||||
|
||||
messageClient?.sendMessage(
|
||||
mc.sendMessage(
|
||||
nearbyNode.id,
|
||||
MESSAGE_PATH,
|
||||
json.toString().toByteArray(Charsets.UTF_8)
|
||||
)?.await()
|
||||
).await()
|
||||
|
||||
mapOf("status" to "sent")
|
||||
} catch (e: Exception) {
|
||||
|
||||
Reference in New Issue
Block a user