From 87cdb607e4792156d433c44b89932e7dae3371da Mon Sep 17 00:00:00 2001 From: Genki Kondo Date: Mon, 7 Mar 2022 15:10:24 -0800 Subject: [PATCH] Support animating text color with native driver Summary: Typically, ReactTextView#setText is called via ReactTextViewManager#updateExtraData, but natively animated color changes bypass render and layout pass via direct call to SurfaceMountingManager#updateProps from UIManager#synchronouslyUpdateViewOnUIThread. Thus, for animated color changes to get applied, we need to handle the color prop in ReactTextAnchorViewManager. In addition, native driver updates are not synchronized with Fabric's mounting; if the native driver update happens before mount, the update is done in updateState. Changelog: [Android][Added] - Support animating text color with native driver Reviewed By: mdvacca Differential Revision: D34630294 fbshipit-source-id: c0f1e19c801c0e909e84387d623a6556ce6f2d67 --- .../react/uimanager/ReactStylesDiffMap.java | 9 ++++++++- .../text/ReactTextAnchorViewManager.java | 19 +++++++++++++++++++ .../views/text/ReactTextViewManager.java | 16 ++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactStylesDiffMap.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactStylesDiffMap.java index 504bedbfe22..9c8b15d8087 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactStylesDiffMap.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactStylesDiffMap.java @@ -8,10 +8,12 @@ package com.facebook.react.uimanager; import android.view.View; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.facebook.react.bridge.Dynamic; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.bridge.ReadableMap; +import com.facebook.react.bridge.ReadableType; import java.util.Map; /** @@ -85,11 +87,16 @@ public class ReactStylesDiffMap { return mBackingMap.getMap(key); } - @Nullable + @NonNull public Dynamic getDynamic(String key) { return mBackingMap.getDynamic(key); } + @NonNull + public ReadableType getType(String key) { + return mBackingMap.getType(key); + } + @Override public String toString() { return "{ " + getClass().getSimpleName() + ": " + mBackingMap.toString() + " }"; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextAnchorViewManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextAnchorViewManager.java index 06cd9c5853e..dbbe4a80b9a 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextAnchorViewManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextAnchorViewManager.java @@ -48,6 +48,25 @@ public abstract class ReactTextAnchorViewManager