diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextInlineImageShadowNode.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextInlineImageShadowNode.java index 9dc4132ab..dbe716020 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextInlineImageShadowNode.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextInlineImageShadowNode.java @@ -17,6 +17,7 @@ import android.content.Context; import android.net.Uri; import com.facebook.common.util.UriUtil; +import com.facebook.drawee.controller.AbstractDraweeControllerBuilder; import com.facebook.react.uimanager.LayoutShadowNode; import com.facebook.react.uimanager.ReactProp; import com.facebook.react.uimanager.ReactShadowNode; @@ -28,6 +29,15 @@ import com.facebook.react.uimanager.ReactShadowNode; public class ReactTextInlineImageShadowNode extends LayoutShadowNode { private @Nullable Uri mUri; + private final AbstractDraweeControllerBuilder mDraweeControllerBuilder; + private final @Nullable Object mCallerContext; + + public ReactTextInlineImageShadowNode( + AbstractDraweeControllerBuilder draweeControllerBuilder, + @Nullable Object callerContext) { + mDraweeControllerBuilder = draweeControllerBuilder; + mCallerContext = callerContext; + } @ReactProp(name = "src") public void setSource(@Nullable String source) { @@ -77,4 +87,12 @@ public class ReactTextInlineImageShadowNode extends LayoutShadowNode { return true; } + public AbstractDraweeControllerBuilder getDraweeControllerBuilder() { + return mDraweeControllerBuilder; + } + + public @Nullable Object getCallerContext() { + return mCallerContext; + } + } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextInlineImageViewManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextInlineImageViewManager.java index 8df8645da..b16b42dea 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextInlineImageViewManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextInlineImageViewManager.java @@ -9,8 +9,12 @@ package com.facebook.react.views.text; +import javax.annotation.Nullable; + import android.view.View; +import com.facebook.drawee.backends.pipeline.Fresco; +import com.facebook.drawee.controller.AbstractDraweeControllerBuilder; import com.facebook.react.uimanager.ThemedReactContext; import com.facebook.react.uimanager.ViewManager; @@ -23,6 +27,20 @@ public class ReactTextInlineImageViewManager static final String REACT_CLASS = "RCTTextInlineImage"; + private final @Nullable AbstractDraweeControllerBuilder mDraweeControllerBuilder; + private final @Nullable Object mCallerContext; + + public ReactTextInlineImageViewManager() { + this(null, null); + } + + public ReactTextInlineImageViewManager( + @Nullable AbstractDraweeControllerBuilder draweeControllerBuilder, + @Nullable Object callerContext) { + mDraweeControllerBuilder = draweeControllerBuilder; + mCallerContext = callerContext; + } + @Override public String getName() { return REACT_CLASS; @@ -35,7 +53,12 @@ public class ReactTextInlineImageViewManager @Override public ReactTextInlineImageShadowNode createShadowNodeInstance() { - return new ReactTextInlineImageShadowNode(); + return new ReactTextInlineImageShadowNode( + (mDraweeControllerBuilder != null) ? + mDraweeControllerBuilder : + Fresco.newDraweeControllerBuilder(), + mCallerContext + ); } @Override 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 11c09a24a..1e4286f78 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 @@ -148,8 +148,13 @@ public class ReactTextShadowNode extends LayoutShadowNode { Resources resources = node.getThemedContext().getResources(); int height = (int) PixelUtil.toDIPFromPixel(node.getStyleHeight()); int width = (int) PixelUtil.toDIPFromPixel(node.getStyleWidth()); - TextInlineImageSpan imageSpan = - new TextInlineImageSpan(resources, height, width, node.getUri()); + TextInlineImageSpan imageSpan = new TextInlineImageSpan( + resources, + height, + width, + node.getUri(), + node.getDraweeControllerBuilder(), + node.getCallerContext()); // We make the image take up 1 character in the span and put a corresponding character into the // text so that the image doesn't run over any following text. sb.append(INLINE_IMAGE_PLACEHOLDER); diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/TextInlineImageSpan.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/TextInlineImageSpan.java index e0a124109..6079ce00b 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/TextInlineImageSpan.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/TextInlineImageSpan.java @@ -21,6 +21,7 @@ import android.text.style.ReplacementSpan; import android.widget.TextView; import com.facebook.drawee.backends.pipeline.Fresco; +import com.facebook.drawee.controller.AbstractDraweeControllerBuilder; import com.facebook.drawee.generic.GenericDraweeHierarchy; import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder; import com.facebook.drawee.interfaces.DraweeController; @@ -42,7 +43,9 @@ import com.facebook.imagepipeline.request.ImageRequestBuilder; public class TextInlineImageSpan extends ReplacementSpan { private @Nullable Drawable mDrawable; - private DraweeHolder mDraweeHolder; + private final AbstractDraweeControllerBuilder mDraweeControllerBuilder; + private final DraweeHolder mDraweeHolder; + private final @Nullable Object mCallerContext; private int mHeight; private Uri mUri; @@ -50,11 +53,19 @@ public class TextInlineImageSpan extends ReplacementSpan { private @Nullable TextView mTextView; - public TextInlineImageSpan(Resources resources, int height, int width, @Nullable Uri uri) { + public TextInlineImageSpan( + Resources resources, + int height, + int width, + @Nullable Uri uri, + AbstractDraweeControllerBuilder draweeControllerBuilder, + @Nullable Object callerContext) { mDraweeHolder = new DraweeHolder( GenericDraweeHierarchyBuilder.newInstance(resources) .build() ); + mDraweeControllerBuilder = draweeControllerBuilder; + mCallerContext = callerContext; mHeight = height; mWidth = width; @@ -116,8 +127,10 @@ public class TextInlineImageSpan extends ReplacementSpan { ImageRequest imageRequest = ImageRequestBuilder.newBuilderWithSource(mUri) .build(); - DraweeController draweeController = Fresco.newDraweeControllerBuilder() + DraweeController draweeController = mDraweeControllerBuilder + .reset() .setOldController(mDraweeHolder.getController()) + .setCallerContext(mCallerContext) .setImageRequest(imageRequest) .build(); mDraweeHolder.setController(draweeController);