Skip to content

Commit

Permalink
Minimize EditText Spans 4/9: ReactForegroundColorSpan (facebook#36545)
Browse files Browse the repository at this point in the history
Summary:
Pull Request resolved: facebook#36545

This is part of a series of changes to minimize the number of spans committed to EditText, as a mitigation for platform issues on Samsung devices. See this [GitHub thread]( facebook#35936 (comment)) for greater context on the platform behavior.

This adds ReactForegroundColorSpan to the list of spans eligible to be stripped.

Changelog:
[Android][Fixed] - Minimize Spans 4/N: ReactForegroundColorSpan

Reviewed By: javache

Differential Revision: D44240780

fbshipit-source-id: a5898f4d1616ea1f81d00b14b5913cacfb704b23
  • Loading branch information
NickGerleman authored and facebook-github-bot committed Mar 22, 2023
1 parent 0ff4269 commit 7d03e5f
Showing 1 changed file with 12 additions and 0 deletions.
Expand Up @@ -52,6 +52,7 @@
import com.facebook.react.views.text.CustomStyleSpan;
import com.facebook.react.views.text.ReactAbsoluteSizeSpan;
import com.facebook.react.views.text.ReactBackgroundColorSpan;
import com.facebook.react.views.text.ReactForegroundColorSpan;
import com.facebook.react.views.text.ReactSpan;
import com.facebook.react.views.text.ReactTextUpdate;
import com.facebook.react.views.text.ReactTypefaceUtils;
Expand Down Expand Up @@ -692,6 +693,16 @@ public boolean test(ReactBackgroundColorSpan span) {
return span.getBackgroundColor() == mReactBackgroundManager.getBackgroundColor();
}
});

stripSpansOfKind(
sb,
ReactForegroundColorSpan.class,
new SpanPredicate<ReactForegroundColorSpan>() {
@Override
public boolean test(ReactForegroundColorSpan span) {
return span.getForegroundColor() == getCurrentTextColor();
}
});
}

private <T> void stripSpansOfKind(
Expand Down Expand Up @@ -731,6 +742,7 @@ private void restoreStyleEquivalentSpans(SpannableStringBuilder workingText) {

List<Object> spans = new ArrayList<>();
spans.add(new ReactAbsoluteSizeSpan(mTextAttributes.getEffectiveFontSize()));
spans.add(new ReactForegroundColorSpan(getCurrentTextColor()));

int backgroundColor = mReactBackgroundManager.getBackgroundColor();
if (backgroundColor != Color.TRANSPARENT) {
Expand Down

0 comments on commit 7d03e5f

Please sign in to comment.