Skip to content

Commit 7516c75

Browse files
Thomas Nardonefacebook-github-bot
authored andcommitted
Fix null safety in views/text/frescosupport (facebook#48612)
Summary: Manual fixes to resolve nullsafe issues. Changelog: [Internal] Reviewed By: rshest Differential Revision: D67992722
1 parent 95a5d84 commit 7516c75

File tree

2 files changed

+26
-34
lines changed

2 files changed

+26
-34
lines changed

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/frescosupport/FrescoBasedReactTextInlineImageShadowNode.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import android.content.res.Resources;
1212
import android.net.Uri;
1313
import androidx.annotation.Nullable;
14+
import androidx.core.util.Preconditions;
1415
import com.facebook.common.logging.FLog;
1516
import com.facebook.common.util.UriUtil;
1617
import com.facebook.drawee.controller.AbstractDraweeControllerBuilder;
@@ -32,8 +33,7 @@
3233
class FrescoBasedReactTextInlineImageShadowNode extends ReactTextInlineImageShadowNode {
3334

3435
private @Nullable Uri mUri;
35-
// NULLSAFE_FIXME[Field Not Initialized]
36-
private ReadableMap mHeaders;
36+
private @Nullable ReadableMap mHeaders;
3737
private final AbstractDraweeControllerBuilder mDraweeControllerBuilder;
3838
private final @Nullable Object mCallerContext;
3939
private float mWidth = YogaConstants.UNDEFINED;
@@ -49,9 +49,10 @@ public FrescoBasedReactTextInlineImageShadowNode(
4949

5050
@ReactProp(name = "src")
5151
public void setSource(@Nullable ReadableArray sources) {
52-
final String source =
53-
// NULLSAFE_FIXME[Nullable Dereference]
54-
(sources == null || sources.size() == 0) ? null : sources.getMap(0).getString("uri");
52+
final @Nullable String source =
53+
(sources == null || sources.size() == 0 || sources.getType(0) != ReadableType.Map)
54+
? null
55+
: Preconditions.checkNotNull(sources.getMap(0)).getString("uri");
5556
Uri uri = null;
5657
if (source != null) {
5758
try {
@@ -74,7 +75,7 @@ public void setSource(@Nullable ReadableArray sources) {
7475
}
7576

7677
@ReactProp(name = "headers")
77-
public void setHeaders(ReadableMap headers) {
78+
public void setHeaders(@Nullable ReadableMap headers) {
7879
mHeaders = headers;
7980
}
8081

@@ -113,7 +114,7 @@ public void setResizeMode(@Nullable String resizeMode) {
113114
return mUri;
114115
}
115116

116-
public ReadableMap getHeaders() {
117+
public @Nullable ReadableMap getHeaders() {
117118
return mHeaders;
118119
}
119120

@@ -149,7 +150,6 @@ public TextInlineImageSpan buildInlineImageSpan() {
149150
getHeaders(),
150151
getDraweeControllerBuilder(),
151152
getCallerContext(),
152-
// NULLSAFE_FIXME[Parameter Not Nullable]
153153
mResizeMode);
154154
}
155155

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/frescosupport/FrescoBasedReactTextInlineImageSpan.java

Lines changed: 18 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
import android.net.Uri;
1616
import android.widget.TextView;
1717
import androidx.annotation.Nullable;
18+
import androidx.core.util.Preconditions;
1819
import com.facebook.drawee.controller.AbstractDraweeControllerBuilder;
19-
import com.facebook.drawee.drawable.ScalingUtils;
2020
import com.facebook.drawee.generic.GenericDraweeHierarchy;
2121
import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder;
2222
import com.facebook.drawee.interfaces.DraweeController;
@@ -53,8 +53,8 @@ class FrescoBasedReactTextInlineImageSpan extends TextInlineImageSpan {
5353
private int mTintColor;
5454
private Uri mUri;
5555
private int mWidth;
56-
private ReadableMap mHeaders;
57-
private String mResizeMode;
56+
private @Nullable ReadableMap mHeaders;
57+
private @Nullable String mResizeMode;
5858

5959
private @Nullable TextView mTextView;
6060

@@ -64,10 +64,10 @@ public FrescoBasedReactTextInlineImageSpan(
6464
int width,
6565
int tintColor,
6666
@Nullable Uri uri,
67-
ReadableMap headers,
67+
@Nullable ReadableMap headers,
6868
AbstractDraweeControllerBuilder draweeControllerBuilder,
6969
@Nullable Object callerContext,
70-
String resizeMode) {
70+
@Nullable String resizeMode) {
7171
mDraweeHolder = new DraweeHolder(GenericDraweeHierarchyBuilder.newInstance(resources).build());
7272
mDraweeControllerBuilder = draweeControllerBuilder;
7373
mCallerContext = callerContext;
@@ -118,8 +118,8 @@ public int getSize(Paint paint, CharSequence text, int start, int end, Paint.Fon
118118
return mWidth;
119119
}
120120

121-
// NULLSAFE_FIXME[Inconsistent Subclass Parameter Annotation]
122-
public void setTextView(TextView textView) {
121+
@Override
122+
public void setTextView(@Nullable TextView textView) {
123123
mTextView = textView;
124124
}
125125

@@ -138,26 +138,24 @@ public void draw(
138138
ImageRequestBuilder imageRequestBuilder = ImageRequestBuilder.newBuilderWithSource(mUri);
139139
ImageRequest imageRequest =
140140
ReactNetworkImageRequest.fromBuilderWithHeaders(imageRequestBuilder, mHeaders);
141-
mDraweeHolder.getHierarchy().setActualImageScaleType(getResizeMode(mResizeMode));
142-
DraweeController draweeController =
143-
mDraweeControllerBuilder
144-
.reset()
145-
.setOldController(mDraweeHolder.getController())
146-
// NULLSAFE_FIXME[Parameter Not Nullable]
147-
.setCallerContext(mCallerContext)
148-
.setImageRequest(imageRequest)
149-
.build();
141+
mDraweeHolder
142+
.getHierarchy()
143+
.setActualImageScaleType(ImageResizeMode.toScaleType(mResizeMode));
144+
mDraweeControllerBuilder.reset();
145+
mDraweeControllerBuilder.setOldController(mDraweeHolder.getController());
146+
if (mCallerContext != null) {
147+
mDraweeControllerBuilder.setCallerContext(mCallerContext);
148+
}
149+
mDraweeControllerBuilder.setImageRequest(imageRequest);
150+
DraweeController draweeController = mDraweeControllerBuilder.build();
150151
mDraweeHolder.setController(draweeController);
151152
mDraweeControllerBuilder.reset();
152153

153-
mDrawable = mDraweeHolder.getTopLevelDrawable();
154-
// NULLSAFE_FIXME[Nullable Dereference]
154+
mDrawable = Preconditions.checkNotNull(mDraweeHolder.getTopLevelDrawable());
155155
mDrawable.setBounds(0, 0, mWidth, mHeight);
156156
if (mTintColor != 0) {
157-
// NULLSAFE_FIXME[Nullable Dereference]
158157
mDrawable.setColorFilter(mTintColor, PorterDuff.Mode.SRC_IN);
159158
}
160-
// NULLSAFE_FIXME[Nullable Dereference]
161159
mDrawable.setCallback(mTextView);
162160
}
163161

@@ -168,19 +166,13 @@ public void draw(
168166
// Align to center
169167
int fontHeight = (int) (paint.descent() - paint.ascent());
170168
int centerY = y + (int) paint.descent() - fontHeight / 2;
171-
// NULLSAFE_FIXME[Nullable Dereference]
172169
int transY = centerY - (mDrawable.getBounds().bottom - mDrawable.getBounds().top) / 2;
173170

174171
canvas.translate(x, transY);
175-
// NULLSAFE_FIXME[Nullable Dereference]
176172
mDrawable.draw(canvas);
177173
canvas.restore();
178174
}
179175

180-
private ScalingUtils.ScaleType getResizeMode(String resizeMode) {
181-
return ImageResizeMode.toScaleType(resizeMode);
182-
}
183-
184176
@Override
185177
public int getWidth() {
186178
return mWidth;

0 commit comments

Comments
 (0)