diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextShadowNode.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextShadowNode.java index 28180b31f9d..1a6599e6433 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextShadowNode.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextShadowNode.java @@ -57,6 +57,8 @@ public class ReactTextShadowNode extends ReactBaseTextShadowNode { private boolean mShouldNotifyOnTextLayout; + private @Nullable ReactTextViewManagerCallback mReactTextViewManagerCallback = null; + private final YogaMeasureFunction mTextMeasureFunction = new YogaMeasureFunction() { @Override @@ -196,6 +198,10 @@ public class ReactTextShadowNode extends ReactBaseTextShadowNode { } } + public void setReactTextViewManagerCallback(ReactTextViewManagerCallback callback) { + mReactTextViewManagerCallback = callback; + } + // Return text alignment according to LTR or RTL style private int getTextAlign() { int textAlign = mTextAlign; @@ -217,6 +223,9 @@ public class ReactTextShadowNode extends ReactBaseTextShadowNode { /* text (e.g. from `value` prop): */ null, /* supportsInlineViews: */ true, nativeViewHierarchyOptimizer); + if (mReactTextViewManagerCallback != null) { + mReactTextViewManagerCallback.onPostProcessSpannable(mPreparedSpannableText); + } markUpdated(); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewManagerCallback.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewManagerCallback.java new file mode 100644 index 00000000000..16eeab59d70 --- /dev/null +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewManagerCallback.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +package com.facebook.react.views.text; + +import android.text.Spannable; + +/** + * This interface allows clients of {@link ReactTextViewManager} to customize or prepare {@link + * Spannable} object that represent text that will be rendered on the screen. + */ +public interface ReactTextViewManagerCallback { + + /** + * Callback executed right after the {@link Spannable} object is created by React. + * + *

This callback can be used by different implementations of ReactTextViewManager to customize + * Spannable or extend managed created by React. + */ + void onPostProcessSpannable(Spannable text); +}