From 378437bd7c3eaad37fe429ca49a5401a85a5981a Mon Sep 17 00:00:00 2001 From: David Vacca Date: Wed, 15 Mar 2023 16:03:39 -0700 Subject: [PATCH] Refactor usages of TextLayoutManager.sTextPaintInstance Summary: Refactor usages of TextLayoutManager.sTextPaintInstance changelog: [internal] internal Reviewed By: javache Differential Revision: D43888689 fbshipit-source-id: 64a198f3ca07e32666701204d94e6e75b3ab53ad --- .../views/text/DefaultStyleValuesUtil.java | 3 +-- .../react/views/text/TextLayoutManager.java | 22 ++++++++-------- .../text/TextLayoutManagerMapBuffer.java | 25 +++++++------------ 3 files changed, 20 insertions(+), 30 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/DefaultStyleValuesUtil.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/DefaultStyleValuesUtil.java index c71bae2d11fd34..6dffc0cce8373e 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/DefaultStyleValuesUtil.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/DefaultStyleValuesUtil.java @@ -54,8 +54,7 @@ private static ColorStateList getDefaultTextAttribute(Context context, int attri TypedArray textAppearances = null; try { textAppearances = theme.obtainStyledAttributes(new int[] {attribute}); - ColorStateList textColor = textAppearances.getColorStateList(0); - return textColor; + return textAppearances.getColorStateList(0); } finally { if (textAppearances != null) { textAppearances.recycle(); diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java index 364679fa7e3948..6dae0fea51dc85 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java @@ -238,8 +238,8 @@ private static Layout createLayout( Layout layout; int spanLength = text.length(); boolean unconstrainedWidth = widthYogaMeasureMode == YogaMeasureMode.UNDEFINED || width < 0; - TextPaint textPaint = sTextPaintInstance; - float desiredWidth = boring == null ? Layout.getDesiredWidth(text, textPaint) : Float.NaN; + float desiredWidth = + boring == null ? Layout.getDesiredWidth(text, sTextPaintInstance) : Float.NaN; if (boring == null && (unconstrainedWidth @@ -252,7 +252,7 @@ private static Layout createLayout( layout = new StaticLayout( text, - textPaint, + sTextPaintInstance, hintWidth, Layout.Alignment.ALIGN_NORMAL, 1.f, @@ -260,7 +260,7 @@ private static Layout createLayout( includeFontPadding); } else { layout = - StaticLayout.Builder.obtain(text, 0, spanLength, textPaint, hintWidth) + StaticLayout.Builder.obtain(text, 0, spanLength, sTextPaintInstance, hintWidth) .setAlignment(Layout.Alignment.ALIGN_NORMAL) .setLineSpacing(0.f, 1.f) .setIncludePad(includeFontPadding) @@ -281,7 +281,7 @@ private static Layout createLayout( layout = BoringLayout.make( text, - textPaint, + sTextPaintInstance, boringLayoutWidth, Layout.Alignment.ALIGN_NORMAL, 1.f, @@ -295,7 +295,7 @@ private static Layout createLayout( layout = new StaticLayout( text, - textPaint, + sTextPaintInstance, (int) width, Layout.Alignment.ALIGN_NORMAL, 1.f, @@ -303,7 +303,7 @@ private static Layout createLayout( includeFontPadding); } else { StaticLayout.Builder builder = - StaticLayout.Builder.obtain(text, 0, spanLength, textPaint, (int) width) + StaticLayout.Builder.obtain(text, 0, spanLength, sTextPaintInstance, (int) width) .setAlignment(Layout.Alignment.ALIGN_NORMAL) .setLineSpacing(0.f, 1.f) .setIncludePad(includeFontPadding) @@ -332,7 +332,6 @@ public static long measureText( @Nullable float[] attachmentsPositions) { // TODO(5578671): Handle text direction (see View#getTextDirectionHeuristic) - TextPaint textPaint = sTextPaintInstance; Spannable text; if (attributedString.hasKey("cacheId")) { int cacheId = attributedString.getInt("cacheId"); @@ -342,7 +341,7 @@ public static long measureText( if (sTagToSpannableCache.containsKey(cacheId)) { text = sTagToSpannableCache.get(cacheId); if (ENABLE_MEASURE_LOGGING) { - FLog.e(TAG, "Text for spannable found for cacheId[" + cacheId + "]: " + text.toString()); + FLog.e(TAG, "Text for spannable found for cacheId[" + cacheId + "]: " + text); } } else { if (ENABLE_MEASURE_LOGGING) { @@ -369,7 +368,7 @@ public static long measureText( throw new IllegalStateException("Spannable element has not been prepared in onBeforeLayout"); } - BoringLayout.Metrics boring = BoringLayout.isBoring(text, textPaint); + BoringLayout.Metrics boring = BoringLayout.isBoring(text, sTextPaintInstance); Layout layout = createLayout( @@ -527,9 +526,8 @@ public static WritableArray measureLines( ReadableMap attributedString, ReadableMap paragraphAttributes, float width) { - TextPaint textPaint = sTextPaintInstance; Spannable text = getOrCreateSpannableForText(context, attributedString, null); - BoringLayout.Metrics boring = BoringLayout.isBoring(text, textPaint); + BoringLayout.Metrics boring = BoringLayout.isBoring(text, sTextPaintInstance); int textBreakStrategy = TextAttributeProps.getTextBreakStrategy( diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManagerMapBuffer.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManagerMapBuffer.java index 3de72a880775ef..5cc8b14b3ba6b9 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManagerMapBuffer.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManagerMapBuffer.java @@ -76,7 +76,6 @@ public class TextLayoutManagerMapBuffer { private static final String INLINE_VIEW_PLACEHOLDER = "0"; - private static final Object sSpannableCacheLock = new Object(); private static final boolean DEFAULT_INCLUDE_FONT_PADDING = true; private static final LruCache sSpannableCache = new LruCache<>(spannableCacheSize); @@ -253,8 +252,8 @@ private static Layout createLayout( Layout layout; int spanLength = text.length(); boolean unconstrainedWidth = widthYogaMeasureMode == YogaMeasureMode.UNDEFINED || width < 0; - TextPaint textPaint = sTextPaintInstance; - float desiredWidth = boring == null ? Layout.getDesiredWidth(text, textPaint) : Float.NaN; + float desiredWidth = + boring == null ? Layout.getDesiredWidth(text, sTextPaintInstance) : Float.NaN; if (boring == null && (unconstrainedWidth @@ -267,7 +266,7 @@ private static Layout createLayout( layout = new StaticLayout( text, - textPaint, + sTextPaintInstance, hintWidth, Layout.Alignment.ALIGN_NORMAL, 1.f, @@ -275,7 +274,7 @@ private static Layout createLayout( includeFontPadding); } else { layout = - StaticLayout.Builder.obtain(text, 0, spanLength, textPaint, hintWidth) + StaticLayout.Builder.obtain(text, 0, spanLength, sTextPaintInstance, hintWidth) .setAlignment(Layout.Alignment.ALIGN_NORMAL) .setLineSpacing(0.f, 1.f) .setIncludePad(includeFontPadding) @@ -296,7 +295,7 @@ private static Layout createLayout( layout = BoringLayout.make( text, - textPaint, + sTextPaintInstance, boringLayoutWidth, Layout.Alignment.ALIGN_NORMAL, 1.f, @@ -310,7 +309,7 @@ private static Layout createLayout( layout = new StaticLayout( text, - textPaint, + sTextPaintInstance, (int) width, Layout.Alignment.ALIGN_NORMAL, 1.f, @@ -318,7 +317,7 @@ private static Layout createLayout( includeFontPadding); } else { StaticLayout.Builder builder = - StaticLayout.Builder.obtain(text, 0, spanLength, textPaint, (int) width) + StaticLayout.Builder.obtain(text, 0, spanLength, sTextPaintInstance, (int) width) .setAlignment(Layout.Alignment.ALIGN_NORMAL) .setLineSpacing(0.f, 1.f) .setIncludePad(includeFontPadding) @@ -357,7 +356,7 @@ public static long measureText( if (sTagToSpannableCache.containsKey(cacheId)) { text = sTagToSpannableCache.get(cacheId); if (ENABLE_MEASURE_LOGGING) { - FLog.e(TAG, "Text for spannable found for cacheId[" + cacheId + "]: " + text.toString()); + FLog.e(TAG, "Text for spannable found for cacheId[" + cacheId + "]: " + text); } } else { if (ENABLE_MEASURE_LOGGING) { @@ -385,11 +384,6 @@ public static long measureText( } BoringLayout.Metrics boring = BoringLayout.isBoring(text, textPaint); - float desiredWidth = boring == null ? Layout.getDesiredWidth(text, textPaint) : Float.NaN; - - // technically, width should never be negative, but there is currently a bug in - boolean unconstrainedWidth = widthYogaMeasureMode == YogaMeasureMode.UNDEFINED || width < 0; - Layout layout = createLayout( text, @@ -551,9 +545,8 @@ public static WritableArray measureLines( MapBuffer paragraphAttributes, float width) { - TextPaint textPaint = sTextPaintInstance; Spannable text = getOrCreateSpannableForText(context, attributedString, null); - BoringLayout.Metrics boring = BoringLayout.isBoring(text, textPaint); + BoringLayout.Metrics boring = BoringLayout.isBoring(text, sTextPaintInstance); int textBreakStrategy = TextAttributeProps.getTextBreakStrategy(