Skip to content

Commit

Permalink
Revert D49509633: Multisect successfully blamed "D49509633: [react-na…
Browse files Browse the repository at this point in the history
…tive][PR] fix: Text cut off issues when adjusting text size and font weight in system settings" for test or build failures

Summary:
This diff is reverting D49509633
D49509633: [react-native][PR] fix: Text cut off issues when adjusting text size and font weight in system settings by ryancat has been identified to be causing the following test or build failures:

Tests affected:
- [xplat/endtoend/jest-e2e/apps/facebook_xplat/ReactNativeTTRCTester/__tests__/ReactNativeTTRCTester-errorReportedManually-android-e2e.js](https://www.internalfb.com/intern/test/281475019301157/)

Here's the Multisect link:
https://www.internalfb.com/multisect/3131615
Here are the tasks that are relevant to this breakage:

We're generating a revert to back out the changes in this diff, please note the backout may land if someone accepts it.

If you believe this diff has been generated in error you may Commandeer and Abandon it.

Reviewed By: NickGerleman

Differential Revision: D49645585

fbshipit-source-id: 414531e067cffa109d0663d6af185dcaf8fb9c4e
  • Loading branch information
generatedunixname89002005232357 authored and facebook-github-bot committed Sep 27, 2023
1 parent 41e5a5e commit 36057da
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 48 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -75,16 +75,6 @@ public void setAdjustFontSizeToFit(ReactTextView view, boolean adjustsFontSizeTo
view.setAdjustFontSizeToFit(adjustsFontSizeToFit);
}

@ReactProp(name = ViewProps.ALLOW_FONT_SCALING, defaultBoolean = true)
public void setAllowFontScaling(ReactTextView view, boolean allowFontScaling) {
view.setAllowFontScaling(allowFontScaling);
}

@ReactProp(name = ViewProps.MAX_FONT_SIZE_MULTIPLIER, defaultFloat = Float.NaN)
public void setMaxFontSizeMultiplier(ReactTextView view, float maxFontSizeMultiplier) {
view.setMaxFontSizeMultiplier(maxFontSizeMultiplier);
}

@ReactProp(name = ViewProps.FONT_SIZE)
public void setFontSize(ReactTextView view, float fontSize) {
view.setFontSize(fontSize);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,19 +58,15 @@ public class ReactTextView extends AppCompatTextView implements ReactCompoundVie
private int mNumberOfLines;
private TextUtils.TruncateAt mEllipsizeLocation;
private boolean mAdjustsFontSizeToFit;
private float mFontSize = Float.NaN;
private float mLetterSpacing = Float.NaN;
private int mLinkifyMaskType;
private boolean mNotifyOnInlineViewLayout;
private boolean mTextIsSelectable;

private ReactViewBackgroundManager mReactBackgroundManager;
private Spannable mSpanned;

/**
* Used to collect some text size affecting attributes to fix some text cut-off issues when users
* adjust text size and font weight to the max value in system font settings.
*/
private TextAttributes mTextAttributes;

public ReactTextView(Context context) {
super(context);

Expand Down Expand Up @@ -102,7 +98,6 @@ private void initView() {
mEllipsizeLocation = TextUtils.TruncateAt.END;

mSpanned = null;
mTextAttributes = new TextAttributes();
}

/* package */ void recycleView() {
Expand Down Expand Up @@ -592,6 +587,29 @@ public void setAdjustFontSizeToFit(boolean adjustsFontSizeToFit) {
mAdjustsFontSizeToFit = adjustsFontSizeToFit;
}

public void setFontSize(float fontSize) {
mFontSize =
mAdjustsFontSizeToFit
? (float) Math.ceil(PixelUtil.toPixelFromSP(fontSize))
: (float) Math.ceil(PixelUtil.toPixelFromDIP(fontSize));

applyTextAttributes();
}

public void setLetterSpacing(float letterSpacing) {
if (Float.isNaN(letterSpacing)) {
return;
}

float letterSpacingPixels = PixelUtil.toPixelFromDIP(letterSpacing);

// `letterSpacingPixels` and `getEffectiveFontSize` are both in pixels,
// yielding an accurate em value.
mLetterSpacing = letterSpacingPixels / mFontSize;

applyTextAttributes();
}

public void setEllipsizeLocation(TextUtils.TruncateAt ellipsizeLocation) {
mEllipsizeLocation = ellipsizeLocation;
}
Expand All @@ -607,8 +625,6 @@ public void updateView() {
? null
: mEllipsizeLocation;
setEllipsize(ellipsizeLocation);

applyTextAttributes();
}

@Override
Expand Down Expand Up @@ -664,37 +680,16 @@ protected boolean dispatchHoverEvent(MotionEvent event) {
return super.dispatchHoverEvent(event);
}

public void setLetterSpacing(float letterSpacing) {
mTextAttributes.setLetterSpacing(letterSpacing);
}

public void setAllowFontScaling(boolean allowFontScaling) {
if (mTextAttributes.getAllowFontScaling() != allowFontScaling) {
mTextAttributes.setAllowFontScaling(allowFontScaling);
}
}

public void setFontSize(float fontSize) {
mTextAttributes.setFontSize(fontSize);
}

public void setMaxFontSizeMultiplier(float maxFontSizeMultiplier) {
if (maxFontSizeMultiplier != mTextAttributes.getMaxFontSizeMultiplier()) {
mTextAttributes.setMaxFontSizeMultiplier(maxFontSizeMultiplier);
}
}

private void applyTextAttributes() {
// In general, the `getEffective*` functions return `Float.NaN` if the
// property hasn't been set.

// `getEffectiveFontSize` always returns a value so don't need to check for anything like
// `Float.NaN`.
setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextAttributes.getEffectiveFontSize());
// Workaround for an issue where text can be cut off with an ellipsis when
// using certain font sizes and padding. Sets the provided text size and
// letter spacing to ensure consistent rendering and prevent cut-off.
if (!Float.isNaN(mFontSize)) {
setTextSize(TypedValue.COMPLEX_UNIT_PX, mFontSize);
}

float effectiveLetterSpacing = mTextAttributes.getEffectiveLetterSpacing();
if (!Float.isNaN(effectiveLetterSpacing)) {
super.setLetterSpacing(effectiveLetterSpacing);
if (!Float.isNaN(mLetterSpacing)) {
super.setLetterSpacing(mLetterSpacing);
}
}
}

0 comments on commit 36057da

Please sign in to comment.