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:
Thomas Nardone
2025-01-14 08:28:03 -08:00
committed by Facebook GitHub Bot
parent 8b8b0ba5dc
commit a511c1bdee
2 changed files with 26 additions and 34 deletions
@@ -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);
}
@@ -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;