From 68714163280695c3148544b95b05a2c1464dbbba Mon Sep 17 00:00:00 2001 From: David Vacca Date: Wed, 22 Jan 2020 11:52:09 -0800 Subject: [PATCH] Add "resizeMode" prop support on TextInlineView Summary: changelog: [Android] [Added] Add "resizeMode" prop support on TextInlineView Reviewed By: JoshuaGross Differential Revision: D19509347 fbshipit-source-id: 0281ae6e958401aaaaa10599df892a2b60a3c615 --- .../facebook/react/views/text/frescosupport/BUCK | 1 + .../FrescoBasedReactTextInlineImageShadowNode.java | 10 +++++++++- .../FrescoBasedReactTextInlineImageSpan.java | 13 +++++++++++-- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/frescosupport/BUCK b/ReactAndroid/src/main/java/com/facebook/react/views/text/frescosupport/BUCK index b7d46593804..8b755be5593 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/frescosupport/BUCK +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/frescosupport/BUCK @@ -22,6 +22,7 @@ rn_android_library( react_native_target("java/com/facebook/react/modules/fresco:fresco"), react_native_target("java/com/facebook/react/uimanager:uimanager"), react_native_target("java/com/facebook/react/uimanager/annotations:annotations"), + react_native_target("java/com/facebook/react/views/image:image"), react_native_target("java/com/facebook/react/views/text:text"), ], ) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/frescosupport/FrescoBasedReactTextInlineImageShadowNode.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/frescosupport/FrescoBasedReactTextInlineImageShadowNode.java index 8a67c108f60..e43ed0361e6 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/frescosupport/FrescoBasedReactTextInlineImageShadowNode.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/frescosupport/FrescoBasedReactTextInlineImageShadowNode.java @@ -18,6 +18,7 @@ import com.facebook.react.bridge.JSApplicationIllegalArgumentException; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.ReadableType; +import com.facebook.react.uimanager.ViewProps; import com.facebook.react.uimanager.annotations.ReactProp; import com.facebook.react.views.text.ReactTextInlineImageShadowNode; import com.facebook.react.views.text.TextInlineImageSpan; @@ -32,6 +33,7 @@ public class FrescoBasedReactTextInlineImageShadowNode extends ReactTextInlineIm private final AbstractDraweeControllerBuilder mDraweeControllerBuilder; private final @Nullable Object mCallerContext; private float mWidth = YogaConstants.UNDEFINED; + private @Nullable String mResizeMode; private float mHeight = YogaConstants.UNDEFINED; private int mTintColor = 0; @@ -97,6 +99,11 @@ public class FrescoBasedReactTextInlineImageShadowNode extends ReactTextInlineIm } } + @ReactProp(name = ViewProps.RESIZE_MODE) + public void setResizeMode(@Nullable String resizeMode) { + mResizeMode = resizeMode; + } + public @Nullable Uri getUri() { return mUri; } @@ -136,7 +143,8 @@ public class FrescoBasedReactTextInlineImageShadowNode extends ReactTextInlineIm getUri(), getHeaders(), getDraweeControllerBuilder(), - getCallerContext()); + getCallerContext(), + mResizeMode); } public AbstractDraweeControllerBuilder getDraweeControllerBuilder() { diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/frescosupport/FrescoBasedReactTextInlineImageSpan.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/frescosupport/FrescoBasedReactTextInlineImageSpan.java index 18059d13395..653ff3490f1 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/frescosupport/FrescoBasedReactTextInlineImageSpan.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/frescosupport/FrescoBasedReactTextInlineImageSpan.java @@ -16,6 +16,7 @@ import android.net.Uri; import android.widget.TextView; import androidx.annotation.Nullable; import com.facebook.drawee.controller.AbstractDraweeControllerBuilder; +import com.facebook.drawee.drawable.ScalingUtils; import com.facebook.drawee.generic.GenericDraweeHierarchy; import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder; import com.facebook.drawee.interfaces.DraweeController; @@ -25,6 +26,7 @@ import com.facebook.imagepipeline.request.ImageRequestBuilder; import com.facebook.react.bridge.ReadableMap; import com.facebook.react.modules.fresco.ReactNetworkImageRequest; import com.facebook.react.uimanager.PixelUtil; +import com.facebook.react.views.image.ImageResizeMode; import com.facebook.react.views.text.TextInlineImageSpan; /** @@ -50,6 +52,7 @@ public class FrescoBasedReactTextInlineImageSpan extends TextInlineImageSpan { private Uri mUri; private int mWidth; private ReadableMap mHeaders; + private String mResizeMode; private @Nullable TextView mTextView; @@ -61,7 +64,8 @@ public class FrescoBasedReactTextInlineImageSpan extends TextInlineImageSpan { @Nullable Uri uri, ReadableMap headers, AbstractDraweeControllerBuilder draweeControllerBuilder, - @Nullable Object callerContext) { + @Nullable Object callerContext, + String resizeMode) { mDraweeHolder = new DraweeHolder(GenericDraweeHierarchyBuilder.newInstance(resources).build()); mDraweeControllerBuilder = draweeControllerBuilder; mCallerContext = callerContext; @@ -70,6 +74,7 @@ public class FrescoBasedReactTextInlineImageSpan extends TextInlineImageSpan { mHeaders = headers; mWidth = (int) (PixelUtil.toPixelFromDIP(width)); mHeight = (int) (PixelUtil.toPixelFromDIP(height)); + mResizeMode = resizeMode; } /** @@ -130,7 +135,7 @@ public class FrescoBasedReactTextInlineImageSpan extends TextInlineImageSpan { ImageRequestBuilder imageRequestBuilder = ImageRequestBuilder.newBuilderWithSource(mUri); ImageRequest imageRequest = ReactNetworkImageRequest.fromBuilderWithHeaders(imageRequestBuilder, mHeaders); - + mDraweeHolder.getHierarchy().setActualImageScaleType(getResizeMode(mResizeMode)); DraweeController draweeController = mDraweeControllerBuilder .reset() @@ -163,6 +168,10 @@ public class FrescoBasedReactTextInlineImageSpan extends TextInlineImageSpan { canvas.restore(); } + private ScalingUtils.ScaleType getResizeMode(String resizeMode) { + return ImageResizeMode.toScaleType(resizeMode); + } + @Override public int getWidth() { return mWidth;