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:
Dave Miller
2015-11-24 07:17:14 -08:00
committed by facebook-github-bot-7
parent 918ef31e10
commit 7bfbc5dd00
4 changed files with 65 additions and 6 deletions

View File

@@ -17,6 +17,7 @@ import android.content.Context;
import android.net.Uri; import android.net.Uri;
import com.facebook.common.util.UriUtil; import com.facebook.common.util.UriUtil;
import com.facebook.drawee.controller.AbstractDraweeControllerBuilder;
import com.facebook.react.uimanager.LayoutShadowNode; import com.facebook.react.uimanager.LayoutShadowNode;
import com.facebook.react.uimanager.ReactProp; import com.facebook.react.uimanager.ReactProp;
import com.facebook.react.uimanager.ReactShadowNode; import com.facebook.react.uimanager.ReactShadowNode;
@@ -28,6 +29,15 @@ import com.facebook.react.uimanager.ReactShadowNode;
public class ReactTextInlineImageShadowNode extends LayoutShadowNode { public class ReactTextInlineImageShadowNode extends LayoutShadowNode {
private @Nullable Uri mUri; 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") @ReactProp(name = "src")
public void setSource(@Nullable String source) { public void setSource(@Nullable String source) {
@@ -77,4 +87,12 @@ public class ReactTextInlineImageShadowNode extends LayoutShadowNode {
return true; return true;
} }
public AbstractDraweeControllerBuilder getDraweeControllerBuilder() {
return mDraweeControllerBuilder;
}
public @Nullable Object getCallerContext() {
return mCallerContext;
}
} }

View File

@@ -9,8 +9,12 @@
package com.facebook.react.views.text; package com.facebook.react.views.text;
import javax.annotation.Nullable;
import android.view.View; 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.ThemedReactContext;
import com.facebook.react.uimanager.ViewManager; import com.facebook.react.uimanager.ViewManager;
@@ -23,6 +27,20 @@ public class ReactTextInlineImageViewManager
static final String REACT_CLASS = "RCTTextInlineImage"; 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 @Override
public String getName() { public String getName() {
return REACT_CLASS; return REACT_CLASS;
@@ -35,7 +53,12 @@ public class ReactTextInlineImageViewManager
@Override @Override
public ReactTextInlineImageShadowNode createShadowNodeInstance() { public ReactTextInlineImageShadowNode createShadowNodeInstance() {
return new ReactTextInlineImageShadowNode(); return new ReactTextInlineImageShadowNode(
(mDraweeControllerBuilder != null) ?
mDraweeControllerBuilder :
Fresco.newDraweeControllerBuilder(),
mCallerContext
);
} }
@Override @Override

View File

@@ -148,8 +148,13 @@ public class ReactTextShadowNode extends LayoutShadowNode {
Resources resources = node.getThemedContext().getResources(); Resources resources = node.getThemedContext().getResources();
int height = (int) PixelUtil.toDIPFromPixel(node.getStyleHeight()); int height = (int) PixelUtil.toDIPFromPixel(node.getStyleHeight());
int width = (int) PixelUtil.toDIPFromPixel(node.getStyleWidth()); int width = (int) PixelUtil.toDIPFromPixel(node.getStyleWidth());
TextInlineImageSpan imageSpan = TextInlineImageSpan imageSpan = new TextInlineImageSpan(
new TextInlineImageSpan(resources, height, width, node.getUri()); 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 // 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. // text so that the image doesn't run over any following text.
sb.append(INLINE_IMAGE_PLACEHOLDER); sb.append(INLINE_IMAGE_PLACEHOLDER);

View File

@@ -21,6 +21,7 @@ import android.text.style.ReplacementSpan;
import android.widget.TextView; import android.widget.TextView;
import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.controller.AbstractDraweeControllerBuilder;
import com.facebook.drawee.generic.GenericDraweeHierarchy; import com.facebook.drawee.generic.GenericDraweeHierarchy;
import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder; import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder;
import com.facebook.drawee.interfaces.DraweeController; import com.facebook.drawee.interfaces.DraweeController;
@@ -42,7 +43,9 @@ import com.facebook.imagepipeline.request.ImageRequestBuilder;
public class TextInlineImageSpan extends ReplacementSpan { public class TextInlineImageSpan extends ReplacementSpan {
private @Nullable Drawable mDrawable; 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 int mHeight;
private Uri mUri; private Uri mUri;
@@ -50,11 +53,19 @@ public class TextInlineImageSpan extends ReplacementSpan {
private @Nullable TextView mTextView; 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( mDraweeHolder = new DraweeHolder(
GenericDraweeHierarchyBuilder.newInstance(resources) GenericDraweeHierarchyBuilder.newInstance(resources)
.build() .build()
); );
mDraweeControllerBuilder = draweeControllerBuilder;
mCallerContext = callerContext;
mHeight = height; mHeight = height;
mWidth = width; mWidth = width;
@@ -116,8 +127,10 @@ public class TextInlineImageSpan extends ReplacementSpan {
ImageRequest imageRequest = ImageRequestBuilder.newBuilderWithSource(mUri) ImageRequest imageRequest = ImageRequestBuilder.newBuilderWithSource(mUri)
.build(); .build();
DraweeController draweeController = Fresco.newDraweeControllerBuilder() DraweeController draweeController = mDraweeControllerBuilder
.reset()
.setOldController(mDraweeHolder.getController()) .setOldController(mDraweeHolder.getController())
.setCallerContext(mCallerContext)
.setImageRequest(imageRequest) .setImageRequest(imageRequest)
.build(); .build();
mDraweeHolder.setController(draweeController); mDraweeHolder.setController(draweeController);