Skip to content

Commit e99b88f

Browse files
committed
Android impl of 'call' node
1 parent cd3c53e commit e99b88f

File tree

4 files changed

+49
-119
lines changed

4 files changed

+49
-119
lines changed

Example/android/app/src/main/java/com/swmansion/reanimated/NodesManager.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import com.facebook.react.bridge.ReactContext;
88
import com.facebook.react.bridge.ReadableMap;
99
import com.facebook.react.bridge.UiThreadUtil;
10+
import com.facebook.react.bridge.WritableMap;
11+
import com.facebook.react.modules.core.DeviceEventManagerModule;
1012
import com.facebook.react.modules.core.ReactChoreographer;
1113
import com.facebook.react.uimanager.GuardedFrameCallback;
1214
import com.facebook.react.uimanager.UIImplementation;
@@ -20,6 +22,7 @@
2022
import com.swmansion.reanimated.nodes.CondNode;
2123
import com.swmansion.reanimated.nodes.DebugNode;
2224
import com.swmansion.reanimated.nodes.EventNode;
25+
import com.swmansion.reanimated.nodes.JSCallNode;
2326
import com.swmansion.reanimated.nodes.Node;
2427
import com.swmansion.reanimated.nodes.OperatorNode;
2528
import com.swmansion.reanimated.nodes.PropsNode;
@@ -46,6 +49,7 @@ public interface OnAnimationFrame {
4649
private final SparseArray<Node> mAnimatedNodes = new SparseArray<>();
4750
private final Map<String, EventNode> mEventMapping = new HashMap<>();
4851
private final UIImplementation mUIImplementation;
52+
private final DeviceEventManagerModule.RCTDeviceEventEmitter mEventEmitter;
4953
private final ReactChoreographer mReactChoreographer;
5054
private final GuardedFrameCallback mChoreographerCallback;
5155
private final UIManagerModule.CustomEventNamesResolver mCustomEventNamesResolver;
@@ -65,6 +69,8 @@ public NodesManager(ReactContext context) {
6569
mCustomEventNamesResolver = uiManager.getDirectEventNamesResolver();
6670
uiManager.getEventDispatcher().addListener(this);
6771

72+
mEventEmitter = context.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class);
73+
6874
mReactChoreographer = ReactChoreographer.getInstance();
6975
mChoreographerCallback = new GuardedFrameCallback(context) {
7076
@Override
@@ -169,7 +175,7 @@ public void createNode(int nodeID, ReadableMap config) {
169175
} else if ("clockTest".equals(type)) {
170176
node = new ClockOpNode.ClockTestNode(nodeID, config, this);
171177
} else if ("call".equals(type)) {
172-
throw new JSApplicationIllegalArgumentException("Unsupported node type: " + type);
178+
node = new JSCallNode(nodeID, config, this);
173179
} else if ("bezier".equals(type)) {
174180
node = new BezierNode(nodeID, config, this);
175181
} else if ("event".equals(type)) {
@@ -291,4 +297,8 @@ private void handleEvent(Event event) {
291297
}
292298
}
293299
}
300+
301+
public void sendEvent(String name, WritableMap body) {
302+
mEventEmitter.emit(name, body);
303+
}
294304
}

Example/android/app/src/main/java/com/swmansion/reanimated/ReanimatedModule.java

Lines changed: 0 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -170,120 +170,4 @@ public void execute(NodesManager nodesManager) {
170170
}
171171
});
172172
}
173-
174-
// private void clearFrameCallback() {
175-
// Assertions.assertNotNull(mReactChoreographer).removeFrameCallback(
176-
// ReactChoreographer.CallbackType.NATIVE_ANIMATED_MODULE,
177-
// mAnimatedFrameCallback);
178-
// }
179-
//
180-
// private void enqueueFrameCallback() {
181-
// Assertions.assertNotNull(mReactChoreographer).postFrameCallback(
182-
// ReactChoreographer.CallbackType.NATIVE_ANIMATED_MODULE,
183-
// mAnimatedFrameCallback);
184-
// }
185-
//
186-
// @VisibleForTesting
187-
// public void setNodesManager(NativeAnimatedNodesManager nodesManager) {
188-
// mNodesManager = nodesManager;
189-
// }
190-
// @ReactMethod
191-
// public void startListeningToAnimatedNodeValue(final int tag) {
192-
// final AnimatedNodeValueListener listener = new AnimatedNodeValueListener() {
193-
// public void onValueUpdate(double value) {
194-
// WritableMap onAnimatedValueData = Arguments.createMap();
195-
// onAnimatedValueData.putInt("tag", tag);
196-
// onAnimatedValueData.putDouble("value", value);
197-
// getReactApplicationContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
198-
// .emit("onAnimatedValueUpdate", onAnimatedValueData);
199-
// }
200-
// };
201-
//
202-
// mOperations.add(new UIThreadOperation() {
203-
// @Override
204-
// public void execute(NativeAnimatedNodesManager animatedNodesManager) {
205-
// animatedNodesManager.startListeningToAnimatedNodeValue(tag, listener);
206-
// }
207-
// });
208-
// }
209-
//
210-
// @ReactMethod
211-
// public void stopListeningToAnimatedNodeValue(final int tag) {
212-
// mOperations.add(new UIThreadOperation() {
213-
// @Override
214-
// public void execute(NativeAnimatedNodesManager animatedNodesManager) {
215-
// animatedNodesManager.stopListeningToAnimatedNodeValue(tag);
216-
// }
217-
// });
218-
// }
219-
//
220-
//
221-
// @ReactMethod
222-
// public void setAnimatedNodeValue(final int tag, final double value) {
223-
// mOperations.add(new UIThreadOperation() {
224-
// @Override
225-
// public void execute(NativeAnimatedNodesManager animatedNodesManager) {
226-
// animatedNodesManager.setAnimatedNodeValue(tag, value);
227-
// }
228-
// });
229-
// }
230-
//
231-
// @ReactMethod
232-
// public void setAnimatedNodeOffset(final int tag, final double value) {
233-
// mOperations.add(new UIThreadOperation() {
234-
// @Override
235-
// public void execute(NativeAnimatedNodesManager animatedNodesManager) {
236-
// animatedNodesManager.setAnimatedNodeOffset(tag, value);
237-
// }
238-
// });
239-
// }
240-
//
241-
// @ReactMethod
242-
// public void flattenAnimatedNodeOffset(final int tag) {
243-
// mOperations.add(new UIThreadOperation() {
244-
// @Override
245-
// public void execute(NativeAnimatedNodesManager animatedNodesManager) {
246-
// animatedNodesManager.flattenAnimatedNodeOffset(tag);
247-
// }
248-
// });
249-
// }
250-
//
251-
// @ReactMethod
252-
// public void extractAnimatedNodeOffset(final int tag) {
253-
// mOperations.add(new UIThreadOperation() {
254-
// @Override
255-
// public void execute(NativeAnimatedNodesManager animatedNodesManager) {
256-
// animatedNodesManager.extractAnimatedNodeOffset(tag);
257-
// }
258-
// });
259-
// }
260-
//
261-
// @ReactMethod
262-
// public void startAnimatingNode(
263-
// final int animationId,
264-
// final int animatedNodeTag,
265-
// final ReadableMap animationConfig,
266-
// final Callback endCallback) {
267-
// mOperations.add(new UIThreadOperation() {
268-
// @Override
269-
// public void execute(NativeAnimatedNodesManager animatedNodesManager) {
270-
// animatedNodesManager.startAnimatingNode(
271-
// animationId,
272-
// animatedNodeTag,
273-
// animationConfig,
274-
// endCallback);
275-
// }
276-
// });
277-
// }
278-
//
279-
// @ReactMethod
280-
// public void stopAnimation(final int animationId) {
281-
// mOperations.add(new UIThreadOperation() {
282-
// @Override
283-
// public void execute(NativeAnimatedNodesManager animatedNodesManager) {
284-
// animatedNodesManager.stopAnimation(animationId);
285-
// }
286-
// });
287-
// }
288-
//
289173
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.swmansion.reanimated.nodes;
2+
3+
import com.facebook.react.bridge.Arguments;
4+
import com.facebook.react.bridge.ReadableMap;
5+
import com.facebook.react.bridge.WritableArray;
6+
import com.facebook.react.bridge.WritableMap;
7+
import com.swmansion.reanimated.NodesManager;
8+
import com.swmansion.reanimated.Utils;
9+
10+
public class JSCallNode extends Node<Double> {
11+
12+
private static final Double ZERO = new Double(0);
13+
14+
private final int[] mInputIDs;
15+
16+
public JSCallNode(int nodeID, ReadableMap config, NodesManager nodesManager) {
17+
super(nodeID, config, nodesManager);
18+
mInputIDs = Utils.processIntArray(config.getArray("input"));
19+
}
20+
21+
@Override
22+
protected Double evaluate() {
23+
WritableArray args = Arguments.createArray();
24+
for (int i = 0; i < mInputIDs.length; i++) {
25+
Object val = mNodesManager.findNodeById(mInputIDs[i]).value();
26+
if (val == null) {
27+
args.pushNull();
28+
} else {
29+
args.pushDouble((Double) val);
30+
}
31+
}
32+
WritableMap eventData = Arguments.createMap();
33+
eventData.putInt("id", mNodeID);
34+
eventData.putArray("args", args);
35+
mNodesManager.sendEvent("onReanimatedCall", eventData);
36+
return ZERO;
37+
}
38+
}

Example/android/app/src/main/java/com/swmansion/reanimated/nodes/PropsNode.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
package com.swmansion.reanimated.nodes;
22

3-
import android.util.Log;
43
import android.view.View;
54

65
import com.facebook.react.bridge.JavaOnlyMap;
76
import com.facebook.react.bridge.ReadableMap;
8-
import com.facebook.react.bridge.ReadableMapKeySetIterator;
97
import com.facebook.react.bridge.WritableMap;
108
import com.facebook.react.uimanager.ReactStylesDiffMap;
119
import com.facebook.react.uimanager.UIImplementation;

0 commit comments

Comments
 (0)