From 1b3552ced124f05315767523edfeed98e7b75894 Mon Sep 17 00:00:00 2001 From: Fabrizio Bertoglio Date: Fri, 9 Feb 2024 16:25:06 +0800 Subject: [PATCH] adding a method retrieveNodes --- .../WearConnectivityModule.java | 86 ++++++++++--------- watch-example/src/App.tsx | 10 ++- 2 files changed, 53 insertions(+), 43 deletions(-) diff --git a/android/src/main/java/com/wearconnectivity/WearConnectivityModule.java b/android/src/main/java/com/wearconnectivity/WearConnectivityModule.java index 3c5f58a..77c1fb7 100644 --- a/android/src/main/java/com/wearconnectivity/WearConnectivityModule.java +++ b/android/src/main/java/com/wearconnectivity/WearConnectivityModule.java @@ -1,13 +1,8 @@ package com.wearconnectivity; -import static com.google.android.gms.common.api.GoogleApiClient.ConnectionCallbacks.CAUSE_NETWORK_LOST; - import android.util.Log; -import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; - -import com.facebook.common.logging.FLog; import com.facebook.react.bridge.LifecycleEventListener; import com.facebook.react.bridge.Promise; import com.facebook.react.bridge.ReactApplicationContext; @@ -15,7 +10,6 @@ import com.facebook.react.bridge.ReactMethod; import com.facebook.react.bridge.WritableMap; import com.facebook.react.modules.core.DeviceEventManagerModule; -import com.facebook.react.util.RNLog; import com.google.android.gms.tasks.OnFailureListener; import com.google.android.gms.tasks.OnSuccessListener; import com.google.android.gms.tasks.Task; @@ -37,7 +31,10 @@ public class WearConnectivityModule extends WearConnectivitySpec super(context); context.addLifecycleEventListener(this); client = Wearable.getMessageClient(context); - Log.d(TAG, TAG + "onMessageReceived listener added when activity is created. Client receives messages."); + Log.d( + TAG, + TAG + + "onMessageReceived listener added when activity is created. Client receives messages."); client.addListener(this); } @@ -54,47 +51,49 @@ public void multiply(double a, double b, Promise promise) { promise.resolve(a * b); } - @ReactMethod - public void sendMessage(String path, Promise promise) { + private List retrieveNodes(Promise promise) { try { NodeClient nodeClient = Wearable.getNodeClient(getReactApplicationContext()); - List nodes = Tasks.await(nodeClient.getConnectedNodes()); - if (nodes.size() > 0) { - for (Node node : nodes) { - // TODO: Add check that node is listening (companion app activity is used) - // https://developers.google.com/android/reference/com/google/android/gms/wearable/Node - if (node.isNearby()) { - sendMessageToClient(path, node, promise); - } - } - } else { - promise.reject(TAG, TAG + "sendMessage failed. No connected nodes found."); - } + // TODO: implement Runnable to run task in the background thread + // https://stackoverflow.com/a/64969640/7295772 + return Tasks.await(nodeClient.getConnectedNodes()); } catch (Exception e) { promise.reject(TAG, TAG + "sendMessage failed with exception: " + e); + return null; + } + } + + @ReactMethod + public void sendMessage(String path, Promise promise) { + List connectedNodes = retrieveNodes(promise); + if (connectedNodes != null && connectedNodes.size() > 0 && client != null) { + for (Node connectedNode : connectedNodes) { + if (connectedNode.isNearby()) { + sendMessageToClient(path, connectedNode, promise); + } + } + } else { + promise.reject( + TAG, + TAG + + "sendMessage failed. No connected nodes found. client: " + + client + + " connectedNodes: " + + connectedNodes); } } private void sendMessageToClient(String path, Node node, Promise promise) { try { - Task sendTask = - Wearable.getMessageClient(getReactApplicationContext()) - .sendMessage(node.getId(), path, null); + // the last parameter is for file transfer (for ex. audio) + Task sendTask = client.sendMessage(node.getId(), path, null); OnSuccessListener onSuccessListener = - new OnSuccessListener() { - @Override - public void onSuccess(Object object) { + object -> promise.resolve(TAG + "message sent to client with nodeID: " + object.toString()); - } - }; - sendTask.addOnSuccessListener(onSuccessListener); OnFailureListener onFailureListener = - new OnFailureListener() { - @Override - public void onFailure(@NonNull Exception e) { - promise.reject(TAG, TAG + "sendMessage failed: " + e); - } - }; + object -> + promise.resolve(TAG + "message sent to client with nodeID: " + object.toString()); + sendTask.addOnSuccessListener(onSuccessListener); sendTask.addOnFailureListener(onFailureListener); } catch (Exception e) { promise.reject(TAG, TAG + "sendMessage failed: " + e); @@ -116,20 +115,29 @@ private void sendEvent( @Override public void onHostResume() { if (client != null) { - Log.d(TAG, TAG + "onMessageReceived listener added when activity is resumed. Client receives messages."); + Log.d( + TAG, + TAG + + "onMessageReceived listener added when activity is resumed. Client receives messages."); client.addListener(this); } } @Override public void onHostPause() { - Log.d(TAG, TAG + "onMessageReceived listener removed when the activity paused. Client does not receive messages."); + Log.d( + TAG, + TAG + + "onMessageReceived listener removed when the activity paused. Client does not receive messages."); client.removeListener(this); } @Override public void onHostDestroy() { - Log.d(TAG, TAG + "onMessageReceived listener removed when activity is destroyed. Client does not receive messages."); + Log.d( + TAG, + TAG + + "onMessageReceived listener removed when activity is destroyed. Client does not receive messages."); client.removeListener(this); } } diff --git a/watch-example/src/App.tsx b/watch-example/src/App.tsx index bb66f73..7b2c679 100644 --- a/watch-example/src/App.tsx +++ b/watch-example/src/App.tsx @@ -37,13 +37,15 @@ export default function App() { }; }, []); + const sendMessageToPhone = async () => { + const result = await sendMessage(INCREASE_PHONE_COUNTER_EVENT); + console.log(result); + }; + return ( count is: {count} - sendMessage(INCREASE_PHONE_COUNTER_EVENT)} - style={styles.button} - /> + ); }