Support AnimatedColor.setValue for platform colors

Summary:
In order to support AnimatedColor.setValue for platform colors, we need to pass the platform color object to the native animated node which will then resolve and apply the color.

Thus, the approach is:
- Add a new API updateAnimatedNodeConfig to NativeAnimatedModule
- [JS] On AnimatedColor.setValue, if the value is a platform color, then we call updateAnimatedNodeConfig
- [Android] We introduce AnimatedNodeWithUpdateableConfig interface with a method updateConfig. On ColorAnimatedNode.java, we use updateConfig to resolve and apply the color

Changelog:
[Internal][Fixed] - Use context from view when resolving platform color

Reviewed By: javache, mdvacca

Differential Revision: D34025193

fbshipit-source-id: 8b368f6b7cb2cf7cebe8b66461cd4185cbadd44c
This commit is contained in:
Genki Kondo
2022-02-08 16:31:14 -08:00
committed by Facebook GitHub Bot
parent 5b66bb90c6
commit bb435a2b11
12 changed files with 127 additions and 15 deletions
@@ -159,6 +159,21 @@ import java.util.Queue;
mUpdatedNodes.put(tag, node);
}
@UiThread
public void updateAnimatedNodeConfig(int tag, ReadableMap config) {
AnimatedNode node = mAnimatedNodes.get(tag);
if (node == null) {
throw new JSApplicationIllegalArgumentException(
"updateAnimatedNode: Animated node [" + tag + "] does not exist");
}
if (node instanceof AnimatedNodeWithUpdateableConfig) {
stopAnimationsForNode(node);
((AnimatedNodeWithUpdateableConfig) node).onUpdateConfig(config);
mUpdatedNodes.put(tag, node);
}
}
@UiThread
public void dropAnimatedNode(int tag) {
mAnimatedNodes.remove(tag);