mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-04-13 22:43:59 +08:00
Implement native Animated value listeners on Android
Summary: Adds support for `Animated.Value#addListener` for native driven nodes on Android. This is based on work by skevy in the exponent RN fork. Also adds a UIExplorer example. ** Test plan ** Run unit tests Tested that by adding a listener to a native driven animated node and checked that the listener callback is called properly. Also tested that it doesn't crash on iOS that doesn't support this yet. Closes https://github.com/facebook/react-native/pull/8844 Differential Revision: D3670906 fbshipit-source-id: 15700ed7b93db140d907ce80af4dae6be3102135
This commit is contained in:
committed by
Facebook Github Bot 7
parent
30677e7193
commit
158d435f36
@@ -140,6 +140,64 @@ public class NativeAnimatedNodeTraversalTest {
|
||||
verifyNoMoreInteractions(mUIImplementationMock);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNodeValueListenerIfNotListening() {
|
||||
int nodeId = 1;
|
||||
|
||||
createSimpleAnimatedViewWithOpacity(1000, 0d);
|
||||
JavaOnlyArray frames = JavaOnlyArray.of(0d, 0.2d, 0.4d, 0.6d, 0.8d, 1d);
|
||||
|
||||
Callback animationCallback = mock(Callback.class);
|
||||
AnimatedNodeValueListener valueListener = mock(AnimatedNodeValueListener.class);
|
||||
|
||||
mNativeAnimatedNodesManager.startListeningToAnimatedNodeValue(nodeId, valueListener);
|
||||
mNativeAnimatedNodesManager.startAnimatingNode(
|
||||
1,
|
||||
nodeId,
|
||||
JavaOnlyMap.of("type", "frames", "frames", frames, "toValue", 1d),
|
||||
animationCallback);
|
||||
|
||||
mNativeAnimatedNodesManager.runUpdates(nextFrameTime());
|
||||
verify(valueListener).onValueUpdate(eq(0d));
|
||||
|
||||
mNativeAnimatedNodesManager.stopListeningToAnimatedNodeValue(nodeId);
|
||||
|
||||
reset(valueListener);
|
||||
mNativeAnimatedNodesManager.runUpdates(nextFrameTime());
|
||||
verifyNoMoreInteractions(valueListener);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNodeValueListenerIfListening() {
|
||||
int nodeId = 1;
|
||||
|
||||
createSimpleAnimatedViewWithOpacity(1000, 0d);
|
||||
JavaOnlyArray frames = JavaOnlyArray.of(0d, 0.2d, 0.4d, 0.6d, 0.8d, 1d);
|
||||
|
||||
Callback animationCallback = mock(Callback.class);
|
||||
AnimatedNodeValueListener valueListener = mock(AnimatedNodeValueListener.class);
|
||||
|
||||
mNativeAnimatedNodesManager.startListeningToAnimatedNodeValue(nodeId, valueListener);
|
||||
mNativeAnimatedNodesManager.startAnimatingNode(
|
||||
1,
|
||||
nodeId,
|
||||
JavaOnlyMap.of("type", "frames", "frames", frames, "toValue", 1d),
|
||||
animationCallback);
|
||||
|
||||
mNativeAnimatedNodesManager.runUpdates(nextFrameTime());
|
||||
verify(valueListener).onValueUpdate(eq(0d));
|
||||
|
||||
for (int i = 0; i < frames.size(); i++) {
|
||||
reset(valueListener);
|
||||
mNativeAnimatedNodesManager.runUpdates(nextFrameTime());
|
||||
verify(valueListener).onValueUpdate(eq(frames.getDouble(i)));
|
||||
}
|
||||
|
||||
reset(valueListener);
|
||||
mNativeAnimatedNodesManager.runUpdates(nextFrameTime());
|
||||
verifyNoMoreInteractions(valueListener);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAnimationCallbackFinish() {
|
||||
createSimpleAnimatedViewWithOpacity(1000, 0d);
|
||||
|
||||
Reference in New Issue
Block a user