Skip to content

Commit ed2d531

Browse files
Abbondanzofacebook-github-bot
authored andcommitted
Use Android 15 TextView API directly (#58725)
Summary: Use Android 15's `TextView.setUseBoundsForWidth` API directly instead of resolving and invoking it through reflection. The call remains guarded by the runtime SDK version. Preserve the shared numeric Android 15 version compatibility shim for builds that compile against older Android SDKs. Changelog: [Internal] Differential Revision: D122183946
1 parent eaa9d7f commit ed2d531

1 file changed

Lines changed: 2 additions & 25 deletions

File tree

  • packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text

‎packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java‎

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import android.view.MotionEvent;
2525
import android.view.View;
2626
import android.view.ViewGroup;
27-
import android.widget.TextView;
2827
import androidx.annotation.Nullable;
2928
import androidx.appcompat.widget.AppCompatTextView;
3029
import androidx.core.view.AccessibilityDelegateCompat;
@@ -47,12 +46,10 @@
4746
import com.facebook.react.uimanager.style.BorderStyle;
4847
import com.facebook.react.uimanager.style.LogicalEdge;
4948
import com.facebook.react.uimanager.style.Overflow;
50-
import com.facebook.react.util.AndroidVersion;
5149
import com.facebook.react.views.text.internal.span.CanvasEffectSpan;
5250
import com.facebook.react.views.text.internal.span.ReactFragmentIndexSpan;
5351
import com.facebook.react.views.text.internal.span.ReactTagSpan;
5452
import com.facebook.yoga.YogaMeasureMode;
55-
import java.lang.reflect.Method;
5653

5754
@Nullsafe(Nullsafe.Mode.LOCAL)
5855
public class ReactTextView extends AppCompatTextView implements ReactCompoundView {
@@ -63,10 +60,6 @@ public class ReactTextView extends AppCompatTextView implements ReactCompoundVie
6360
// https://github.com/aosp-mirror/platform_frameworks_base/blob/master/core/java/android/widget/TextView.java#L854
6461
private static final int DEFAULT_GRAVITY = Gravity.TOP | Gravity.START;
6562

66-
// TextView.setUseBoundsForWidth (API 35+). Looked up reflectively because some internal targets
67-
// compile against an SDK older than 35 (see AndroidVersion).
68-
private static final @Nullable Method SET_USE_BOUNDS_FOR_WIDTH = resolveSetUseBoundsForWidth();
69-
7063
private int mNumberOfLines;
7164
private @Nullable TextUtils.TruncateAt mEllipsizeLocation;
7265
private boolean mAdjustsFontSizeToFit;
@@ -87,17 +80,6 @@ public ReactTextView(Context context) {
8780
initView();
8881
}
8982

90-
private static @Nullable Method resolveSetUseBoundsForWidth() {
91-
if (Build.VERSION.SDK_INT < AndroidVersion.VERSION_CODE_VANILLA_ICE_CREAM) {
92-
return null;
93-
}
94-
try {
95-
return TextView.class.getMethod("setUseBoundsForWidth", boolean.class);
96-
} catch (NoSuchMethodException e) {
97-
return null;
98-
}
99-
}
100-
10183
/**
10284
* Keeps this view's line breaking on the same basis as TextLayoutManager's measurement.
10385
*
@@ -109,13 +91,8 @@ public ReactTextView(Context context) {
10991
* one.
11092
*/
11193
private void matchLineBreakingToMeasurement() {
112-
if (SET_USE_BOUNDS_FOR_WIDTH == null) {
113-
return;
114-
}
115-
try {
116-
SET_USE_BOUNDS_FOR_WIDTH.invoke(this, false);
117-
} catch (ReflectiveOperationException e) {
118-
FLog.w(ReactConstants.TAG, "Could not disable useBoundsForWidth on ReactTextView", e);
94+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) {
95+
setUseBoundsForWidth(false);
11996
}
12097
}
12198

0 commit comments

Comments
 (0)