mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-04-28 20:25:33 +08:00
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:
committed by
facebook-github-bot-7
parent
918ef31e10
commit
7bfbc5dd00
@@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user