Add support for providing AbstractDraweeControllerBuilder to TextInlineImageSpan similar to ImageView
Reviewed By: andreicoman11 Differential Revision: D2690762 fb-gh-sync-id: 80596575d3fa577f8eb05d9f44f72337a640a3db
This commit is contained in:
Родитель
918ef31e10
Коммит
7bfbc5dd00
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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<GenericDraweeHierarchy> mDraweeHolder;
|
||||
private final AbstractDraweeControllerBuilder mDraweeControllerBuilder;
|
||||
private final DraweeHolder<GenericDraweeHierarchy> 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);
|
||||
|
|
Загрузка…
Ссылка в новой задаче