/** * 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.ReadableMap; import com.facebook.react.bridge.WritableArray; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.RCTEventEmitter; import java.util.List; import javax.annotation.Nullable; /** * Handles updating a {@link ValueAnimatedNode} when an event gets dispatched. */ /* package */ class EventAnimationDriver implements RCTEventEmitter { private List<String> mEventPath; /* package */ ValueAnimatedNode mValueNode; public EventAnimationDriver(List<String> eventPath, ValueAnimatedNode valueNode) { mEventPath = eventPath; mValueNode = valueNode; } @Override public void receiveEvent(int targetTag, String eventName, @Nullable WritableMap event) { if (event == null) { throw new IllegalArgumentException("Native animated events must have event data."); } // Get the new value for the node by looking into the event map using the provided event path. ReadableMap curMap = event; for (int i = 0; i < mEventPath.size() - 1; i++) { curMap = curMap.getMap(mEventPath.get(i)); } mValueNode.mValue = curMap.getDouble(mEventPath.get(mEventPath.size() - 1)); } @Override public void receiveTouches(String eventName, WritableArray touches, WritableArray changedIndices) { throw new RuntimeException("receiveTouches is not support by native animated events"); } }