From 9b4927c9c444c61b8ddf3c1f17325d1b85bf6a2d Mon Sep 17 00:00:00 2001 From: Ryan Gomba Date: Wed, 2 Nov 2016 14:47:42 -0700 Subject: [PATCH] Implement NativeAnimated modulus node on Android Summary: This diff implements ModulusAnimatedNode on Android, bringing Android up to date with JS and iOS native animation APIs. Closes https://github.com/facebook/react-native/pull/10681 Differential Revision: D4120162 fbshipit-source-id: 4e58e1b6309c1c7a12ef835547a3f3d321c20714 --- .../react/animated/ModulusAnimatedNode.java | 40 +++++++++++++++++++ .../animated/NativeAnimatedNodesManager.java | 2 + 2 files changed, 42 insertions(+) create mode 100644 ReactAndroid/src/main/java/com/facebook/react/animated/ModulusAnimatedNode.java diff --git a/ReactAndroid/src/main/java/com/facebook/react/animated/ModulusAnimatedNode.java b/ReactAndroid/src/main/java/com/facebook/react/animated/ModulusAnimatedNode.java new file mode 100644 index 000000000..102ff1200 --- /dev/null +++ b/ReactAndroid/src/main/java/com/facebook/react/animated/ModulusAnimatedNode.java @@ -0,0 +1,40 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +package com.facebook.react.animated; + +import com.facebook.react.bridge.JSApplicationCausedNativeException; +import com.facebook.react.bridge.ReadableArray; +import com.facebook.react.bridge.ReadableMap; + +/*package*/ class ModulusAnimatedNode extends ValueAnimatedNode { + + private final NativeAnimatedNodesManager mNativeAnimatedNodesManager; + private final int mInputNode; + private final int mModulus; + + public ModulusAnimatedNode( + ReadableMap config, + NativeAnimatedNodesManager nativeAnimatedNodesManager) { + mNativeAnimatedNodesManager = nativeAnimatedNodesManager; + mInputNode = config.getInt("input"); + mModulus = config.getInt("modulus"); + } + + @Override + public void update() { + AnimatedNode animatedNode = mNativeAnimatedNodesManager.getNodeById(mInputNode); + if (animatedNode != null && animatedNode instanceof ValueAnimatedNode) { + mValue = ((ValueAnimatedNode) animatedNode).mValue % mModulus; + } else { + throw new JSApplicationCausedNativeException("Illegal node ID set as an input for " + + "Animated.modulus node"); + } + } +} diff --git a/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedNodesManager.java b/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedNodesManager.java index ecd54345f..622c497a6 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedNodesManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedNodesManager.java @@ -93,6 +93,8 @@ import javax.annotation.Nullable; node = new DivisionAnimatedNode(config, this); } else if ("multiplication".equals(type)) { node = new MultiplicationAnimatedNode(config, this); + } else if ("modulus".equals(type)) { + node = new ModulusAnimatedNode(config, this); } else if ("diffclamp".equals(type)) { node = new DiffClampAnimatedNode(config, this); } else if ("transform".equals(type)) {