mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Fix null safety in views/text/frescosupport (#48612)
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/48612 Manual fixes to resolve nullsafe issues. Changelog: [Internal] Reviewed By: rshest Differential Revision: D67992722 fbshipit-source-id: a26cde9788bc3456ec756326208b4907ad989d4e
This commit is contained in:
committed by
Facebook GitHub Bot
parent
8b8b0ba5dc
commit
a511c1bdee
+8
-8
@@ -11,6 +11,7 @@ import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.net.Uri;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.util.Preconditions;
|
||||
import com.facebook.common.logging.FLog;
|
||||
import com.facebook.common.util.UriUtil;
|
||||
import com.facebook.drawee.controller.AbstractDraweeControllerBuilder;
|
||||
@@ -32,8 +33,7 @@ import java.util.Locale;
|
||||
class FrescoBasedReactTextInlineImageShadowNode extends ReactTextInlineImageShadowNode {
|
||||
|
||||
private @Nullable Uri mUri;
|
||||
// NULLSAFE_FIXME[Field Not Initialized]
|
||||
private ReadableMap mHeaders;
|
||||
private @Nullable ReadableMap mHeaders;
|
||||
private final AbstractDraweeControllerBuilder mDraweeControllerBuilder;
|
||||
private final @Nullable Object mCallerContext;
|
||||
private float mWidth = YogaConstants.UNDEFINED;
|
||||
@@ -49,9 +49,10 @@ class FrescoBasedReactTextInlineImageShadowNode extends ReactTextInlineImageShad
|
||||
|
||||
@ReactProp(name = "src")
|
||||
public void setSource(@Nullable ReadableArray sources) {
|
||||
final String source =
|
||||
// NULLSAFE_FIXME[Nullable Dereference]
|
||||
(sources == null || sources.size() == 0) ? null : sources.getMap(0).getString("uri");
|
||||
final @Nullable String source =
|
||||
(sources == null || sources.size() == 0 || sources.getType(0) != ReadableType.Map)
|
||||
? null
|
||||
: Preconditions.checkNotNull(sources.getMap(0)).getString("uri");
|
||||
Uri uri = null;
|
||||
if (source != null) {
|
||||
try {
|
||||
@@ -74,7 +75,7 @@ class FrescoBasedReactTextInlineImageShadowNode extends ReactTextInlineImageShad
|
||||
}
|
||||
|
||||
@ReactProp(name = "headers")
|
||||
public void setHeaders(ReadableMap headers) {
|
||||
public void setHeaders(@Nullable ReadableMap headers) {
|
||||
mHeaders = headers;
|
||||
}
|
||||
|
||||
@@ -113,7 +114,7 @@ class FrescoBasedReactTextInlineImageShadowNode extends ReactTextInlineImageShad
|
||||
return mUri;
|
||||
}
|
||||
|
||||
public ReadableMap getHeaders() {
|
||||
public @Nullable ReadableMap getHeaders() {
|
||||
return mHeaders;
|
||||
}
|
||||
|
||||
@@ -149,7 +150,6 @@ class FrescoBasedReactTextInlineImageShadowNode extends ReactTextInlineImageShad
|
||||
getHeaders(),
|
||||
getDraweeControllerBuilder(),
|
||||
getCallerContext(),
|
||||
// NULLSAFE_FIXME[Parameter Not Nullable]
|
||||
mResizeMode);
|
||||
}
|
||||
|
||||
|
||||
+18
-26
@@ -15,8 +15,8 @@ import android.graphics.drawable.Drawable;
|
||||
import android.net.Uri;
|
||||
import android.widget.TextView;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.util.Preconditions;
|
||||
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;
|
||||
@@ -53,8 +53,8 @@ class FrescoBasedReactTextInlineImageSpan extends TextInlineImageSpan {
|
||||
private int mTintColor;
|
||||
private Uri mUri;
|
||||
private int mWidth;
|
||||
private ReadableMap mHeaders;
|
||||
private String mResizeMode;
|
||||
private @Nullable ReadableMap mHeaders;
|
||||
private @Nullable String mResizeMode;
|
||||
|
||||
private @Nullable TextView mTextView;
|
||||
|
||||
@@ -64,10 +64,10 @@ class FrescoBasedReactTextInlineImageSpan extends TextInlineImageSpan {
|
||||
int width,
|
||||
int tintColor,
|
||||
@Nullable Uri uri,
|
||||
ReadableMap headers,
|
||||
@Nullable ReadableMap headers,
|
||||
AbstractDraweeControllerBuilder draweeControllerBuilder,
|
||||
@Nullable Object callerContext,
|
||||
String resizeMode) {
|
||||
@Nullable String resizeMode) {
|
||||
mDraweeHolder = new DraweeHolder(GenericDraweeHierarchyBuilder.newInstance(resources).build());
|
||||
mDraweeControllerBuilder = draweeControllerBuilder;
|
||||
mCallerContext = callerContext;
|
||||
@@ -118,8 +118,8 @@ class FrescoBasedReactTextInlineImageSpan extends TextInlineImageSpan {
|
||||
return mWidth;
|
||||
}
|
||||
|
||||
// NULLSAFE_FIXME[Inconsistent Subclass Parameter Annotation]
|
||||
public void setTextView(TextView textView) {
|
||||
@Override
|
||||
public void setTextView(@Nullable TextView textView) {
|
||||
mTextView = textView;
|
||||
}
|
||||
|
||||
@@ -138,26 +138,24 @@ class FrescoBasedReactTextInlineImageSpan extends TextInlineImageSpan {
|
||||
ImageRequestBuilder imageRequestBuilder = ImageRequestBuilder.newBuilderWithSource(mUri);
|
||||
ImageRequest imageRequest =
|
||||
ReactNetworkImageRequest.fromBuilderWithHeaders(imageRequestBuilder, mHeaders);
|
||||
mDraweeHolder.getHierarchy().setActualImageScaleType(getResizeMode(mResizeMode));
|
||||
DraweeController draweeController =
|
||||
mDraweeControllerBuilder
|
||||
.reset()
|
||||
.setOldController(mDraweeHolder.getController())
|
||||
// NULLSAFE_FIXME[Parameter Not Nullable]
|
||||
.setCallerContext(mCallerContext)
|
||||
.setImageRequest(imageRequest)
|
||||
.build();
|
||||
mDraweeHolder
|
||||
.getHierarchy()
|
||||
.setActualImageScaleType(ImageResizeMode.toScaleType(mResizeMode));
|
||||
mDraweeControllerBuilder.reset();
|
||||
mDraweeControllerBuilder.setOldController(mDraweeHolder.getController());
|
||||
if (mCallerContext != null) {
|
||||
mDraweeControllerBuilder.setCallerContext(mCallerContext);
|
||||
}
|
||||
mDraweeControllerBuilder.setImageRequest(imageRequest);
|
||||
DraweeController draweeController = mDraweeControllerBuilder.build();
|
||||
mDraweeHolder.setController(draweeController);
|
||||
mDraweeControllerBuilder.reset();
|
||||
|
||||
mDrawable = mDraweeHolder.getTopLevelDrawable();
|
||||
// NULLSAFE_FIXME[Nullable Dereference]
|
||||
mDrawable = Preconditions.checkNotNull(mDraweeHolder.getTopLevelDrawable());
|
||||
mDrawable.setBounds(0, 0, mWidth, mHeight);
|
||||
if (mTintColor != 0) {
|
||||
// NULLSAFE_FIXME[Nullable Dereference]
|
||||
mDrawable.setColorFilter(mTintColor, PorterDuff.Mode.SRC_IN);
|
||||
}
|
||||
// NULLSAFE_FIXME[Nullable Dereference]
|
||||
mDrawable.setCallback(mTextView);
|
||||
}
|
||||
|
||||
@@ -168,19 +166,13 @@ class FrescoBasedReactTextInlineImageSpan extends TextInlineImageSpan {
|
||||
// Align to center
|
||||
int fontHeight = (int) (paint.descent() - paint.ascent());
|
||||
int centerY = y + (int) paint.descent() - fontHeight / 2;
|
||||
// NULLSAFE_FIXME[Nullable Dereference]
|
||||
int transY = centerY - (mDrawable.getBounds().bottom - mDrawable.getBounds().top) / 2;
|
||||
|
||||
canvas.translate(x, transY);
|
||||
// NULLSAFE_FIXME[Nullable Dereference]
|
||||
mDrawable.draw(canvas);
|
||||
canvas.restore();
|
||||
}
|
||||
|
||||
private ScalingUtils.ScaleType getResizeMode(String resizeMode) {
|
||||
return ImageResizeMode.toScaleType(resizeMode);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWidth() {
|
||||
return mWidth;
|
||||
|
||||
Reference in New Issue
Block a user