From abc4fe68129cf2f64577419699346260864ce7d2 Mon Sep 17 00:00:00 2001 From: Krystian Sienkiewicz Date: Sat, 23 May 2026 22:06:27 +0200 Subject: [PATCH 1/9] feat(ios): allowFontScaling prop implementation on ios --- apps/example/src/screens/DevScreen.tsx | 1 + ios/EnrichedTextInputView.mm | 15 ++++++++ ios/EnrichedTextView.mm | 8 +++++ ios/config/EnrichedConfig.h | 2 ++ ios/config/EnrichedConfig.mm | 38 ++++++++++++++++++++ src/native/EnrichedText.tsx | 2 ++ src/native/EnrichedTextInput.tsx | 2 ++ src/spec/EnrichedTextInputNativeComponent.ts | 1 + src/spec/EnrichedTextNativeComponent.ts | 1 + src/types.ts | 10 ++++++ src/utils/EnrichedTextInputDefaultProps.ts | 1 + 11 files changed, 81 insertions(+) diff --git a/apps/example/src/screens/DevScreen.tsx b/apps/example/src/screens/DevScreen.tsx index 04c8d03ed..12c90bec0 100644 --- a/apps/example/src/screens/DevScreen.tsx +++ b/apps/example/src/screens/DevScreen.tsx @@ -75,6 +75,7 @@ export function DevScreen({ onSwitch }: DevScreenProps) { onPasteImages={(e) => editor.handlePasteImagesEvent(e.nativeEvent)} useHtmlNormalizer testID="editor-input" + allowFontScaling={false} /> (_props); + if (!viewProps.allowFontScaling) { + return; + } + if (previousTraitCollection.preferredContentSizeCategory != self.traitCollection.preferredContentSizeCategory) { [config invalidateFonts]; diff --git a/ios/EnrichedTextView.mm b/ios/EnrichedTextView.mm index 5f6384b6a..718952dbf 100644 --- a/ios/EnrichedTextView.mm +++ b/ios/EnrichedTextView.mm @@ -582,6 +582,14 @@ - (void)updateProps:(Props::Shared const &)props useHtmlNormalizer = newViewProps.useHtmlNormalizer; } + // allowFontScaling + if (newViewProps.allowFontScaling != oldViewProps.allowFontScaling || + isFirstMount) { + textView.adjustsFontForContentSizeCategory = newViewProps.allowFontScaling; + [newConfig setAllowFontScaling:newViewProps.allowFontScaling]; + stylePropChanged = YES; + } + if (stylePropChanged) { config = newConfig; } diff --git a/ios/config/EnrichedConfig.h b/ios/config/EnrichedConfig.h index a49fb501f..d39248baf 100644 --- a/ios/config/EnrichedConfig.h +++ b/ios/config/EnrichedConfig.h @@ -90,6 +90,8 @@ - (void)setCodeBlockBorderRadius:(CGFloat)newValue; - (void)invalidateFonts; - (NSNumber *)scaledPrimaryFontSize; +- (BOOL)allowFontScaling; +- (void)setAllowFontScaling:(BOOL)newValue; - (CGFloat)checkboxListBoxSize; - (void)setCheckboxListBoxSize:(CGFloat)newValue; - (CGFloat)checkboxListGapWidth; diff --git a/ios/config/EnrichedConfig.mm b/ios/config/EnrichedConfig.mm index 0322b88bc..f7a492d28 100644 --- a/ios/config/EnrichedConfig.mm +++ b/ios/config/EnrichedConfig.mm @@ -12,6 +12,7 @@ @implementation EnrichedConfig { UIFont *_monospacedFont; BOOL _primaryFontNeedsRecreation; BOOL _monospacedFontNeedsRecreation; + BOOL _allowFontScaling; NSSet *_mentionIndicators; CGFloat _h1FontSize; BOOL _h1Bold; @@ -67,6 +68,7 @@ - (instancetype)init { _primaryFontNeedsRecreation = YES; _monospacedFontNeedsRecreation = YES; _olMarkerFontNeedsRecreation = YES; + _allowFontScaling = YES; return self; } @@ -80,6 +82,7 @@ - (id)copyWithZone:(NSZone *)zone { copy->_primaryFontFamily = [_primaryFontFamily copy]; copy->_primaryFont = [_primaryFont copy]; copy->_monospacedFont = [_monospacedFont copy]; + copy->_allowFontScaling = _allowFontScaling; copy->_mentionIndicators = [_mentionIndicators copy]; copy->_h1FontSize = _h1FontSize; copy->_h1Bold = _h1Bold; @@ -160,6 +163,9 @@ - (void)setPrimaryLineHeight:(CGFloat)newValue { } - (CGFloat)scaledPrimaryLineHeight { + if (!_allowFontScaling) { + return [self primaryLineHeight]; + } return [[UIFontMetrics defaultMetrics] scaledValueForValue:[self primaryLineHeight]]; } @@ -230,6 +236,9 @@ - (void)setMentionIndicators:(NSSet *)newValue { } - (CGFloat)h1FontSize { + if (!_allowFontScaling) { + return _h1FontSize; + } return [[UIFontMetrics defaultMetrics] scaledValueForValue:_h1FontSize]; } @@ -246,6 +255,9 @@ - (void)setH1Bold:(BOOL)newValue { } - (CGFloat)h2FontSize { + if (!_allowFontScaling) { + return _h2FontSize; + } return [[UIFontMetrics defaultMetrics] scaledValueForValue:_h2FontSize]; } @@ -262,6 +274,9 @@ - (void)setH2Bold:(BOOL)newValue { } - (CGFloat)h3FontSize { + if (!_allowFontScaling) { + return _h3FontSize; + } return [[UIFontMetrics defaultMetrics] scaledValueForValue:_h3FontSize]; } @@ -278,6 +293,9 @@ - (void)setH3Bold:(BOOL)newValue { } - (CGFloat)h4FontSize { + if (!_allowFontScaling) { + return _h4FontSize; + } return [[UIFontMetrics defaultMetrics] scaledValueForValue:_h4FontSize]; } @@ -294,6 +312,9 @@ - (void)setH4Bold:(BOOL)newValue { } - (CGFloat)h5FontSize { + if (!_allowFontScaling) { + return _h5FontSize; + } return [[UIFontMetrics defaultMetrics] scaledValueForValue:_h5FontSize]; } @@ -310,6 +331,9 @@ - (void)setH5Bold:(BOOL)newValue { } - (CGFloat)h6FontSize { + if (!_allowFontScaling) { + return _h6FontSize; + } return [[UIFontMetrics defaultMetrics] scaledValueForValue:_h6FontSize]; } @@ -526,7 +550,21 @@ - (void)invalidateFonts { _olMarkerFontNeedsRecreation = YES; } +- (BOOL)allowFontScaling { + return _allowFontScaling; +} + +- (void)setAllowFontScaling:(BOOL)newValue { + if (_allowFontScaling != newValue) { + _allowFontScaling = newValue; + [self invalidateFonts]; + } +} + - (NSNumber *)scaledPrimaryFontSize { + if (!_allowFontScaling) { + return [self primaryFontSize]; + } CGFloat scaledSize = [[UIFontMetrics defaultMetrics] scaledValueForValue:[[self primaryFontSize] floatValue]]; return @(scaledSize); diff --git a/src/native/EnrichedText.tsx b/src/native/EnrichedText.tsx index e472f8c21..ec24debfd 100644 --- a/src/native/EnrichedText.tsx +++ b/src/native/EnrichedText.tsx @@ -34,6 +34,7 @@ export const EnrichedText = ({ numberOfLines = 0, selectable = false, selectionColor, + allowFontScaling = true, onLinkPress: _onLinkPress, onMentionPress: _onMentionPress, ...rest @@ -105,6 +106,7 @@ export const EnrichedText = ({ numberOfLines={numberOfLines} selectable={selectable} selectionColor={selectionColor} + allowFontScaling={allowFontScaling} onLinkPress={onLinkPress} onMentionPress={onMentionPress} {...rest} diff --git a/src/native/EnrichedTextInput.tsx b/src/native/EnrichedTextInput.tsx index 51e68fa14..ba31ba978 100644 --- a/src/native/EnrichedTextInput.tsx +++ b/src/native/EnrichedTextInput.tsx @@ -80,6 +80,7 @@ export const EnrichedTextInput = ({ androidExperimentalSynchronousEvents = ENRICHED_TEXT_INPUT_DEFAULT_PROPS.androidExperimentalSynchronousEvents, useHtmlNormalizer = ENRICHED_TEXT_INPUT_DEFAULT_PROPS.useHtmlNormalizer, scrollEnabled = ENRICHED_TEXT_INPUT_DEFAULT_PROPS.scrollEnabled, + allowFontScaling = ENRICHED_TEXT_INPUT_DEFAULT_PROPS.allowFontScaling, ...rest }: EnrichedTextInputProps) => { const nativeRef = useRef(null); @@ -364,6 +365,7 @@ export const EnrichedTextInput = ({ } useHtmlNormalizer={useHtmlNormalizer} scrollEnabled={scrollEnabled} + allowFontScaling={allowFontScaling} {...rest} /> ); diff --git a/src/spec/EnrichedTextInputNativeComponent.ts b/src/spec/EnrichedTextInputNativeComponent.ts index b344aff64..2eb29ded1 100644 --- a/src/spec/EnrichedTextInputNativeComponent.ts +++ b/src/spec/EnrichedTextInputNativeComponent.ts @@ -370,6 +370,7 @@ export interface NativeProps extends ViewProps { returnKeyType?: string; returnKeyLabel?: string; submitBehavior?: string; + allowFontScaling?: boolean; // event callbacks onInputFocus?: DirectEventHandler; diff --git a/src/spec/EnrichedTextNativeComponent.ts b/src/spec/EnrichedTextNativeComponent.ts index a47fc4438..068cc5e57 100644 --- a/src/spec/EnrichedTextNativeComponent.ts +++ b/src/spec/EnrichedTextNativeComponent.ts @@ -90,6 +90,7 @@ export interface NativeProps extends ViewProps { numberOfLines: Int32; selectable: boolean; selectionColor?: ColorValue; + allowFontScaling?: boolean; // Events onLinkPress?: DirectEventHandler; diff --git a/src/types.ts b/src/types.ts index fffd83c9f..33ed31f64 100644 --- a/src/types.ts +++ b/src/types.ts @@ -498,6 +498,11 @@ export interface EnrichedTextInputProps extends Omit { * Disabled by default. */ useHtmlNormalizer?: boolean; + /** + * If true, fonts will scale to respect the system's accessibility text size. + * Enabled by default. + */ + allowFontScaling?: boolean; } export interface EnrichedTextInstance extends NativeMethods {} @@ -512,6 +517,11 @@ export interface EnrichedTextProps extends ViewProps { numberOfLines?: number; selectable?: boolean; selectionColor?: ColorValue; + /** + * If true, fonts will scale to respect the system's accessibility text size. + * Enabled by default. + */ + allowFontScaling?: boolean; onLinkPress?: (event: OnLinkPressEvent) => void; onMentionPress?: (event: OnMentionPressEvent) => void; } diff --git a/src/utils/EnrichedTextInputDefaultProps.ts b/src/utils/EnrichedTextInputDefaultProps.ts index e34e2f4b1..ac41ade56 100644 --- a/src/utils/EnrichedTextInputDefaultProps.ts +++ b/src/utils/EnrichedTextInputDefaultProps.ts @@ -6,4 +6,5 @@ export const ENRICHED_TEXT_INPUT_DEFAULT_PROPS = { scrollEnabled: true, androidExperimentalSynchronousEvents: false, useHtmlNormalizer: false, + allowFontScaling: true, } as const; From 2b3ae5519c08f02babf982780feac6a9a284cc5b Mon Sep 17 00:00:00 2001 From: Krystian Sienkiewicz Date: Sun, 24 May 2026 17:17:33 +0200 Subject: [PATCH 2/9] feat(android): allowFontScaling prop --- .../enriched/text/EnrichedTextStyle.kt | 45 +++++++++++-------- .../enriched/text/EnrichedTextView.kt | 24 +++++++++- .../enriched/text/EnrichedTextViewManager.kt | 7 +++ .../enriched/text/MeasurementStore.kt | 18 +++++++- .../textinput/EnrichedTextInputView.kt | 26 ++++++++++- .../textinput/EnrichedTextInputViewManager.kt | 8 ++++ .../enriched/textinput/MeasurementStore.kt | 19 +++++++- .../textinput/spans/EnrichedLineHeightSpan.kt | 8 +++- .../enriched/textinput/styles/HtmlStyle.kt | 9 +++- 9 files changed, 136 insertions(+), 28 deletions(-) diff --git a/android/src/main/java/com/swmansion/enriched/text/EnrichedTextStyle.kt b/android/src/main/java/com/swmansion/enriched/text/EnrichedTextStyle.kt index e6d6c7461..9bf0161cf 100644 --- a/android/src/main/java/com/swmansion/enriched/text/EnrichedTextStyle.kt +++ b/android/src/main/java/com/swmansion/enriched/text/EnrichedTextStyle.kt @@ -63,6 +63,7 @@ data class EnrichedTextStyle( context: ReactContext, fontSize: Int, map: ReadableMap, + allowFontScaling: Boolean = true, ): EnrichedTextStyle { val h1 = map.getMap("h1") val h2 = map.getMap("h2") @@ -80,40 +81,40 @@ data class EnrichedTextStyle( val mentions = map.getMap("mention") return EnrichedTextStyle( - h1FontSize = parseFloat(h1, "fontSize").toInt(), + h1FontSize = parseFloat(h1, "fontSize", allowFontScaling).toInt(), h1Bold = h1?.getBoolean("bold") ?: false, - h2FontSize = parseFloat(h2, "fontSize").toInt(), + h2FontSize = parseFloat(h2, "fontSize", allowFontScaling).toInt(), h2Bold = h2?.getBoolean("bold") ?: false, - h3FontSize = parseFloat(h3, "fontSize").toInt(), + h3FontSize = parseFloat(h3, "fontSize", allowFontScaling).toInt(), h3Bold = h3?.getBoolean("bold") ?: false, - h4FontSize = parseFloat(h4, "fontSize").toInt(), + h4FontSize = parseFloat(h4, "fontSize", allowFontScaling).toInt(), h4Bold = h4?.getBoolean("bold") ?: false, - h5FontSize = parseFloat(h5, "fontSize").toInt(), + h5FontSize = parseFloat(h5, "fontSize", allowFontScaling).toInt(), h5Bold = h5?.getBoolean("bold") ?: false, - h6FontSize = parseFloat(h6, "fontSize").toInt(), + h6FontSize = parseFloat(h6, "fontSize", allowFontScaling).toInt(), h6Bold = h6?.getBoolean("bold") ?: false, blockquoteColor = parseOptionalColor(context, blockquote, "color"), blockquoteBorderColor = parseColor(context, blockquote, "borderColor"), - blockquoteStripeWidth = parseFloat(blockquote, "borderWidth").toInt(), - blockquoteGapWidth = parseFloat(blockquote, "gapWidth").toInt(), - olGapWidth = parseFloat(orderedList, "gapWidth").toInt(), - olMarginLeft = calculateOlMarginLeft(fontSize, parseFloat(orderedList, "marginLeft").toInt()), + blockquoteStripeWidth = parseFloat(blockquote, "borderWidth", allowFontScaling).toInt(), + blockquoteGapWidth = parseFloat(blockquote, "gapWidth", allowFontScaling).toInt(), + olGapWidth = parseFloat(orderedList, "gapWidth", allowFontScaling).toInt(), + olMarginLeft = calculateOlMarginLeft(fontSize, parseFloat(orderedList, "marginLeft", allowFontScaling).toInt()), olMarkerFontWeight = parseOptionalFontWeight(orderedList, "markerFontWeight"), olMarkerColor = parseOptionalColor(context, orderedList, "markerColor"), - ulGapWidth = parseFloat(unorderedList, "gapWidth").toInt(), - ulMarginLeft = parseFloat(unorderedList, "marginLeft").toInt(), - ulBulletSize = parseFloat(unorderedList, "bulletSize").toInt(), + ulGapWidth = parseFloat(unorderedList, "gapWidth", allowFontScaling).toInt(), + ulMarginLeft = parseFloat(unorderedList, "marginLeft", allowFontScaling).toInt(), + ulBulletSize = parseFloat(unorderedList, "bulletSize", allowFontScaling).toInt(), ulBulletColor = parseColor(context, unorderedList, "bulletColor"), ulCheckboxBoxColor = parseColor(context, checkboxList, "boxColor"), - ulCheckboxBoxSize = parseFloat(checkboxList, "boxSize").toInt(), - ulCheckboxGapWidth = parseFloat(checkboxList, "gapWidth").toInt(), - ulCheckboxMarginLeft = parseFloat(checkboxList, "marginLeft").toInt(), + ulCheckboxBoxSize = parseFloat(checkboxList, "boxSize", allowFontScaling).toInt(), + ulCheckboxGapWidth = parseFloat(checkboxList, "gapWidth", allowFontScaling).toInt(), + ulCheckboxMarginLeft = parseFloat(checkboxList, "marginLeft", allowFontScaling).toInt(), aColor = parseColor(context, link, "color"), aUnderline = parseIsUnderline(link), aPressColor = parseColor(context, link, "pressColor"), codeBlockColor = parseColor(context, codeblock, "color"), codeBlockBackgroundColor = parseColorWithOpacity(context, codeblock, "backgroundColor", 80), - codeBlockRadius = parseFloat(codeblock, "borderRadius"), + codeBlockRadius = parseFloat(codeblock, "borderRadius", allowFontScaling), inlineCodeColor = parseColor(context, inlineCode, "color"), inlineCodeBackgroundColor = parseColorWithOpacity(context, inlineCode, "backgroundColor", 80), mentionsStyle = parseMentionsStyle(context, mentions), @@ -123,9 +124,17 @@ data class EnrichedTextStyle( private fun parseFloat( map: ReadableMap?, key: String, + allowFontScaling: Boolean = true, ): Float { if (map == null || !map.hasKey(key) || map.isNull(key)) return 0f - return ceil(PixelUtil.toPixelFromSP(map.getDouble(key))) + val raw = map.getDouble(key) + return ceil( + if (allowFontScaling) { + PixelUtil.toPixelFromSP(raw) + } else { + PixelUtil.toPixelFromDIP(raw) + }, + ) } private fun parseColor( diff --git a/android/src/main/java/com/swmansion/enriched/text/EnrichedTextView.kt b/android/src/main/java/com/swmansion/enriched/text/EnrichedTextView.kt index 7ff8ccd5e..c01236cc5 100644 --- a/android/src/main/java/com/swmansion/enriched/text/EnrichedTextView.kt +++ b/android/src/main/java/com/swmansion/enriched/text/EnrichedTextView.kt @@ -39,6 +39,18 @@ class EnrichedTextView : AppCompatTextView { private var fontStyle: Int = ReactConstants.UNSET private var fontWeight: Int = ReactConstants.UNSET private var fontSize: Float = EnrichedConstants.TEXT_DEFAULT_FONT_SIZE + private var fontSizeRaw: Float? = null + private var htmlStyleMap: ReadableMap? = null + var allowFontScaling: Boolean = true + set(value) { + if (field == value) return + field = value + // re-apply primary font size in the new unit (no-op if it was never set) + fontSizeRaw?.let { setFontSize(it) } + // re-parse htmlStyle so headings/list geometry pick up the new unit and + // rebuild on-screen spans + htmlStyleMap?.let { setHtmlStyle(it) } + } private var enrichedStyle: EnrichedTextStyle? = null private val spannableFactory = EnrichedTextSpanFactory() @@ -247,7 +259,9 @@ class EnrichedTextView : AppCompatTextView { fun setHtmlStyle(style: ReadableMap?) { if (style == null) return - val enrichedStyle = EnrichedTextStyle.fromReadableMap(context as ReactContext, fontSize.toInt(), style) + htmlStyleMap = style + val enrichedStyle = + EnrichedTextStyle.fromReadableMap(context as ReactContext, fontSize.toInt(), style, allowFontScaling) this.enrichedStyle = enrichedStyle val currentText = text ?: return @@ -287,7 +301,13 @@ class EnrichedTextView : AppCompatTextView { fun setFontSize(size: Float) { if (size == 0f) return - val sizeInt = ceil(PixelUtil.toPixelFromSP(size)) + fontSizeRaw = size + val sizeInt = + if (allowFontScaling) { + ceil(PixelUtil.toPixelFromSP(size)) + } else { + ceil(PixelUtil.toPixelFromDIP(size)) + } fontSize = sizeInt setTextSize(TypedValue.COMPLEX_UNIT_PX, sizeInt) } diff --git a/android/src/main/java/com/swmansion/enriched/text/EnrichedTextViewManager.kt b/android/src/main/java/com/swmansion/enriched/text/EnrichedTextViewManager.kt index e3fb3b083..62f91256c 100644 --- a/android/src/main/java/com/swmansion/enriched/text/EnrichedTextViewManager.kt +++ b/android/src/main/java/com/swmansion/enriched/text/EnrichedTextViewManager.kt @@ -121,6 +121,13 @@ class EnrichedTextViewManager : view?.setHtmlStyle(value) } + override fun setAllowFontScaling( + view: EnrichedTextView?, + value: Boolean, + ) { + view?.allowFontScaling = value + } + override fun setUseHtmlNormalizer( view: EnrichedTextView?, value: Boolean, diff --git a/android/src/main/java/com/swmansion/enriched/text/MeasurementStore.kt b/android/src/main/java/com/swmansion/enriched/text/MeasurementStore.kt index e07e8080a..7214db540 100644 --- a/android/src/main/java/com/swmansion/enriched/text/MeasurementStore.kt +++ b/android/src/main/java/com/swmansion/enriched/text/MeasurementStore.kt @@ -96,6 +96,12 @@ object MeasurementStore { return YogaMeasureOutput.make(widthInSP, heightInSP) } + private fun getAllowFontScaling(props: ReadableMap?): Boolean { + if (props == null) return true + if (!props.hasKey("allowFontScaling") || props.isNull("allowFontScaling")) return true + return props.getBoolean("allowFontScaling") + } + private fun getInitialText( context: Context, fontSize: Int, @@ -108,7 +114,9 @@ object MeasurementStore { try { val style = props?.getMap("htmlStyle") ?: return text - val enrichedStyle = EnrichedTextStyle.fromReadableMap(context as ReactContext, fontSize, style) + val allowFontScaling = getAllowFontScaling(props) + val enrichedStyle = + EnrichedTextStyle.fromReadableMap(context as ReactContext, fontSize, style, allowFontScaling) val factory = EnrichedTextSpanFactory() val parsed = EnrichedParser.fromHtml(text, enrichedStyle, factory) return parsed.trimEnd('\n') @@ -126,7 +134,13 @@ object MeasurementStore { else -> EnrichedConstants.TEXT_DEFAULT_FONT_SIZE } - return ceil(PixelUtil.toPixelFromSP(fontSize)) + return ceil( + if (getAllowFontScaling(props)) { + PixelUtil.toPixelFromSP(fontSize) + } else { + PixelUtil.toPixelFromDIP(fontSize) + }, + ) } private fun getMeasureById( diff --git a/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputView.kt b/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputView.kt index 885a12ea4..71f02275a 100644 --- a/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputView.kt +++ b/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputView.kt @@ -88,6 +88,20 @@ class EnrichedTextInputView : var isDuringTransaction: Boolean = false var isRemovingMany: Boolean = false var scrollEnabled: Boolean = true + var allowFontScaling: Boolean = true + set(value) { + if (field != value) { + field = value + val raw = fontSizeRaw + if (raw != null) { + setFontSize(raw) // re-invokes invalidateStyles internally + } else { + htmlStyle.invalidateStyles() + } + applyLineSpacing() + reApplyHtmlStyleForSpans(htmlStyle, htmlStyle) + } + } val mentionHandler: MentionHandler? = MentionHandler(this) var htmlStyle: HtmlStyle = HtmlStyle(this, null) @@ -108,6 +122,7 @@ class EnrichedTextInputView : var experimentalSynchronousEvents: Boolean = false var useHtmlNormalizer: Boolean = false + var fontSizeRaw: Float? = null var fontSize: Float? = null private var lineHeight: Float? = null var submitBehavior: String? = null @@ -520,8 +535,15 @@ class EnrichedTextInputView : fun setFontSize(size: Float) { if (size == 0f) return + fontSizeRaw = size + + val sizeInt = + if (this.allowFontScaling) { + ceil(PixelUtil.toPixelFromSP(size)) + } else { + ceil(PixelUtil.toPixelFromDIP(size)) + } - val sizeInt = ceil(PixelUtil.toPixelFromSP(size)) fontSize = sizeInt setTextSize(TypedValue.COMPLEX_UNIT_PX, sizeInt) @@ -546,7 +568,7 @@ class EnrichedTextInputView : val lh = lineHeight ?: return spannable.setSpan( - EnrichedLineHeightSpan(lh), + EnrichedLineHeightSpan(lh, allowFontScaling), 0, spannable.length, Spannable.SPAN_INCLUSIVE_INCLUSIVE, diff --git a/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputViewManager.kt b/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputViewManager.kt index 7b5313462..eb16451ca 100644 --- a/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputViewManager.kt +++ b/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputViewManager.kt @@ -241,6 +241,14 @@ class EnrichedTextInputViewManager : view.scrollEnabled = scrollEnabled } + @ReactProp(name = "allowFontScaling") + override fun setAllowFontScaling( + view: EnrichedTextInputView, + allowFontScaling: Boolean, + ) { + view.allowFontScaling = allowFontScaling + } + override fun onAfterUpdateTransaction(view: EnrichedTextInputView) { super.onAfterUpdateTransaction(view) view.afterUpdateTransaction() diff --git a/android/src/main/java/com/swmansion/enriched/textinput/MeasurementStore.kt b/android/src/main/java/com/swmansion/enriched/textinput/MeasurementStore.kt index 59e83383c..dfc48fbf2 100644 --- a/android/src/main/java/com/swmansion/enriched/textinput/MeasurementStore.kt +++ b/android/src/main/java/com/swmansion/enriched/textinput/MeasurementStore.kt @@ -99,6 +99,12 @@ object MeasurementStore { return YogaMeasureOutput.make(widthInSP, heightInSP) } + private fun getAllowFontScaling(props: ReadableMap?): Boolean { + if (props == null) return true + if (!props.hasKey("allowFontScaling") || props.isNull("allowFontScaling")) return true + return props.getBoolean("allowFontScaling") + } + // Returns either: Spannable parsed from HTML defaultValue, or plain text defaultValue, or "I" if no defaultValue private fun getInitialText( defaultView: EnrichedTextInputView, @@ -130,7 +136,13 @@ object MeasurementStore { val propsFontSize = props?.getDouble("fontSize")?.toFloat() if (propsFontSize == null) return defaultView.textSize - return ceil(PixelUtil.toPixelFromSP(propsFontSize)) + return ceil( + if (getAllowFontScaling(props)) { + PixelUtil.toPixelFromSP(propsFontSize) + } else { + PixelUtil.toPixelFromDIP(propsFontSize) + }, + ) } // Called when view measurements are not available in the store @@ -142,6 +154,9 @@ object MeasurementStore { props: ReadableMap?, ): Long { val defaultView = EnrichedTextInputView(context) + val allowFontScaling = getAllowFontScaling(props) + // mirrors the real view's state + defaultView.allowFontScaling = allowFontScaling val rawText = getInitialText(defaultView, props) val fontSize = getInitialFontSize(defaultView, props) @@ -155,7 +170,7 @@ object MeasurementStore { if (lineHeight > 0f) { val spannable = SpannableString(rawText) spannable.setSpan( - EnrichedLineHeightSpan(lineHeight), + EnrichedLineHeightSpan(lineHeight, allowFontScaling), 0, spannable.length, Spannable.SPAN_INCLUSIVE_INCLUSIVE, diff --git a/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedLineHeightSpan.kt b/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedLineHeightSpan.kt index 83495bd79..84cbecadb 100644 --- a/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedLineHeightSpan.kt +++ b/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedLineHeightSpan.kt @@ -10,6 +10,7 @@ import com.swmansion.enriched.common.spans.interfaces.EnrichedHeadingSpan class EnrichedLineHeightSpan( val lineHeight: Float, + val allowFontScaling: Boolean = true, ) : MetricAffectingSpan(), LineHeightSpan { override fun updateDrawState(p0: TextPaint?) { @@ -33,7 +34,12 @@ class EnrichedLineHeightSpan( // In the future we may consider adding custom lineHeight support for each paragraph style if (spannable.getSpans(start, end, EnrichedHeadingSpan::class.java).isNotEmpty()) return - val lineHeightPx = PixelUtil.toPixelFromSP(lineHeight) + val lineHeightPx = + if (allowFontScaling) { + PixelUtil.toPixelFromSP(lineHeight) + } else { + PixelUtil.toPixelFromDIP(lineHeight) + } val currentHeight = (fm.descent - fm.ascent).toFloat() if (lineHeightPx <= currentHeight) return diff --git a/android/src/main/java/com/swmansion/enriched/textinput/styles/HtmlStyle.kt b/android/src/main/java/com/swmansion/enriched/textinput/styles/HtmlStyle.kt index d72db9eb0..e3c9d9dcc 100644 --- a/android/src/main/java/com/swmansion/enriched/textinput/styles/HtmlStyle.kt +++ b/android/src/main/java/com/swmansion/enriched/textinput/styles/HtmlStyle.kt @@ -155,7 +155,14 @@ class HtmlStyle : EnrichedStyle { val safeMap = ensureValueIsSet(map, key) val value = safeMap.getDouble(key) - return ceil(PixelUtil.toPixelFromSP(value)) + val scaled = + if (view?.allowFontScaling != false) { + ceil(PixelUtil.toPixelFromSP(value)) + } else { + ceil(PixelUtil.toPixelFromDIP(value)) + } + + return scaled } private fun parseColorWithOpacity( From 121a76d09d434f5adb712eb2b7b92711251a12e8 Mon Sep 17 00:00:00 2001 From: Krystian Sienkiewicz Date: Mon, 25 May 2026 12:22:04 +0200 Subject: [PATCH 3/9] refactor(android): scaling logic refactor --- .../enriched/common/AllowFontScaling.kt | 37 +++++++++++++++++++ .../enriched/text/EnrichedTextStyle.kt | 11 +----- .../enriched/text/EnrichedTextView.kt | 14 ++----- .../enriched/text/MeasurementStore.kt | 18 ++------- .../textinput/EnrichedTextInputView.kt | 10 +---- .../enriched/textinput/MeasurementStore.kt | 18 ++------- .../textinput/spans/EnrichedLineHeightSpan.kt | 9 +---- .../enriched/textinput/styles/HtmlStyle.kt | 12 +----- 8 files changed, 57 insertions(+), 72 deletions(-) create mode 100644 android/src/main/java/com/swmansion/enriched/common/AllowFontScaling.kt diff --git a/android/src/main/java/com/swmansion/enriched/common/AllowFontScaling.kt b/android/src/main/java/com/swmansion/enriched/common/AllowFontScaling.kt new file mode 100644 index 000000000..58784260f --- /dev/null +++ b/android/src/main/java/com/swmansion/enriched/common/AllowFontScaling.kt @@ -0,0 +1,37 @@ +package com.swmansion.enriched.common + +import com.facebook.react.bridge.ReadableMap +import com.facebook.react.uimanager.PixelUtil + +internal const val ALLOW_FONT_SCALING_PROP = "allowFontScaling" + +// Converts a logical font-unit value to pixels. When the editor is opted out of +// system font scaling, DP is used so the system font-size slider doesn't grow +// the value; otherwise SP is used and the value scales as usual. +internal fun pixelFromSpOrDp( + value: Float, + allowFontScaling: Boolean, +): Float = + if (allowFontScaling) { + PixelUtil.toPixelFromSP(value) + } else { + PixelUtil.toPixelFromDIP(value) + } + +internal fun pixelFromSpOrDp( + value: Double, + allowFontScaling: Boolean, +): Float = + if (allowFontScaling) { + PixelUtil.toPixelFromSP(value) + } else { + PixelUtil.toPixelFromDIP(value) + } + +// Reads allowFontScaling from a serialized prop map (used in MeasurementStore +// where no view instance is available yet). +internal fun allowFontScalingFromProps(props: ReadableMap?): Boolean { + if (props == null) return true + if (!props.hasKey(ALLOW_FONT_SCALING_PROP) || props.isNull(ALLOW_FONT_SCALING_PROP)) return true + return props.getBoolean(ALLOW_FONT_SCALING_PROP) +} diff --git a/android/src/main/java/com/swmansion/enriched/text/EnrichedTextStyle.kt b/android/src/main/java/com/swmansion/enriched/text/EnrichedTextStyle.kt index 9bf0161cf..5f787f687 100644 --- a/android/src/main/java/com/swmansion/enriched/text/EnrichedTextStyle.kt +++ b/android/src/main/java/com/swmansion/enriched/text/EnrichedTextStyle.kt @@ -4,10 +4,10 @@ import android.graphics.Color import com.facebook.react.bridge.ColorPropConverter import com.facebook.react.bridge.ReactContext import com.facebook.react.bridge.ReadableMap -import com.facebook.react.uimanager.PixelUtil import com.facebook.react.views.text.ReactTypefaceUtils.parseFontWeight import com.swmansion.enriched.common.EnrichedStyle import com.swmansion.enriched.common.MentionStyle +import com.swmansion.enriched.common.pixelFromSpOrDp import kotlin.math.ceil data class EnrichedTextStyle( @@ -127,14 +127,7 @@ data class EnrichedTextStyle( allowFontScaling: Boolean = true, ): Float { if (map == null || !map.hasKey(key) || map.isNull(key)) return 0f - val raw = map.getDouble(key) - return ceil( - if (allowFontScaling) { - PixelUtil.toPixelFromSP(raw) - } else { - PixelUtil.toPixelFromDIP(raw) - }, - ) + return ceil(pixelFromSpOrDp(map.getDouble(key), allowFontScaling)) } private fun parseColor( diff --git a/android/src/main/java/com/swmansion/enriched/text/EnrichedTextView.kt b/android/src/main/java/com/swmansion/enriched/text/EnrichedTextView.kt index c01236cc5..fa0d3acb8 100644 --- a/android/src/main/java/com/swmansion/enriched/text/EnrichedTextView.kt +++ b/android/src/main/java/com/swmansion/enriched/text/EnrichedTextView.kt @@ -18,7 +18,6 @@ import androidx.appcompat.widget.AppCompatTextView import com.facebook.react.bridge.ReactContext import com.facebook.react.bridge.ReadableMap import com.facebook.react.common.ReactConstants -import com.facebook.react.uimanager.PixelUtil import com.facebook.react.uimanager.ViewDefaults import com.facebook.react.views.text.ReactTypefaceUtils.applyStyles import com.facebook.react.views.text.ReactTypefaceUtils.parseFontStyle @@ -26,6 +25,7 @@ import com.facebook.react.views.text.ReactTypefaceUtils.parseFontWeight import com.swmansion.enriched.common.EnrichedConstants import com.swmansion.enriched.common.GumboNormalizer import com.swmansion.enriched.common.parser.EnrichedParser +import com.swmansion.enriched.common.pixelFromSpOrDp import com.swmansion.enriched.text.spans.EnrichedTextImageSpan import com.swmansion.enriched.text.spans.interfaces.EnrichedTextClickableSpan import com.swmansion.enriched.text.spans.interfaces.EnrichedTextSpan @@ -45,10 +45,9 @@ class EnrichedTextView : AppCompatTextView { set(value) { if (field == value) return field = value - // re-apply primary font size in the new unit (no-op if it was never set) + // re-apply primary font size fontSizeRaw?.let { setFontSize(it) } - // re-parse htmlStyle so headings/list geometry pick up the new unit and - // rebuild on-screen spans + // re-parse htmlStyle htmlStyleMap?.let { setHtmlStyle(it) } } @@ -302,12 +301,7 @@ class EnrichedTextView : AppCompatTextView { if (size == 0f) return fontSizeRaw = size - val sizeInt = - if (allowFontScaling) { - ceil(PixelUtil.toPixelFromSP(size)) - } else { - ceil(PixelUtil.toPixelFromDIP(size)) - } + val sizeInt = ceil(pixelFromSpOrDp(size, allowFontScaling)) fontSize = sizeInt setTextSize(TypedValue.COMPLEX_UNIT_PX, sizeInt) } diff --git a/android/src/main/java/com/swmansion/enriched/text/MeasurementStore.kt b/android/src/main/java/com/swmansion/enriched/text/MeasurementStore.kt index 7214db540..690f2a831 100644 --- a/android/src/main/java/com/swmansion/enriched/text/MeasurementStore.kt +++ b/android/src/main/java/com/swmansion/enriched/text/MeasurementStore.kt @@ -17,7 +17,9 @@ import com.facebook.react.views.text.ReactTypefaceUtils.parseFontWeight import com.facebook.yoga.YogaMeasureMode import com.facebook.yoga.YogaMeasureOutput import com.swmansion.enriched.common.EnrichedConstants +import com.swmansion.enriched.common.allowFontScalingFromProps import com.swmansion.enriched.common.parser.EnrichedParser +import com.swmansion.enriched.common.pixelFromSpOrDp import kotlin.math.ceil object MeasurementStore { @@ -96,12 +98,6 @@ object MeasurementStore { return YogaMeasureOutput.make(widthInSP, heightInSP) } - private fun getAllowFontScaling(props: ReadableMap?): Boolean { - if (props == null) return true - if (!props.hasKey("allowFontScaling") || props.isNull("allowFontScaling")) return true - return props.getBoolean("allowFontScaling") - } - private fun getInitialText( context: Context, fontSize: Int, @@ -114,7 +110,7 @@ object MeasurementStore { try { val style = props?.getMap("htmlStyle") ?: return text - val allowFontScaling = getAllowFontScaling(props) + val allowFontScaling = allowFontScalingFromProps(props) val enrichedStyle = EnrichedTextStyle.fromReadableMap(context as ReactContext, fontSize, style, allowFontScaling) val factory = EnrichedTextSpanFactory() @@ -134,13 +130,7 @@ object MeasurementStore { else -> EnrichedConstants.TEXT_DEFAULT_FONT_SIZE } - return ceil( - if (getAllowFontScaling(props)) { - PixelUtil.toPixelFromSP(fontSize) - } else { - PixelUtil.toPixelFromDIP(fontSize) - }, - ) + return ceil(pixelFromSpOrDp(fontSize, allowFontScalingFromProps(props))) } private fun getMeasureById( diff --git a/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputView.kt b/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputView.kt index 71f02275a..0119016ef 100644 --- a/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputView.kt +++ b/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputView.kt @@ -32,7 +32,6 @@ import com.facebook.react.bridge.ReactContext import com.facebook.react.bridge.ReadableArray import com.facebook.react.bridge.ReadableMap import com.facebook.react.common.ReactConstants -import com.facebook.react.uimanager.PixelUtil import com.facebook.react.uimanager.StateWrapper import com.facebook.react.uimanager.UIManagerHelper import com.facebook.react.views.text.ReactTypefaceUtils.applyStyles @@ -41,6 +40,7 @@ import com.facebook.react.views.text.ReactTypefaceUtils.parseFontWeight import com.swmansion.enriched.common.EnrichedConstants import com.swmansion.enriched.common.GumboNormalizer import com.swmansion.enriched.common.parser.EnrichedParser +import com.swmansion.enriched.common.pixelFromSpOrDp import com.swmansion.enriched.textinput.events.MentionHandler import com.swmansion.enriched.textinput.events.OnContextMenuItemPressEvent import com.swmansion.enriched.textinput.events.OnInputBlurEvent @@ -537,13 +537,7 @@ class EnrichedTextInputView : if (size == 0f) return fontSizeRaw = size - val sizeInt = - if (this.allowFontScaling) { - ceil(PixelUtil.toPixelFromSP(size)) - } else { - ceil(PixelUtil.toPixelFromDIP(size)) - } - + val sizeInt = ceil(pixelFromSpOrDp(size, allowFontScaling)) fontSize = sizeInt setTextSize(TypedValue.COMPLEX_UNIT_PX, sizeInt) diff --git a/android/src/main/java/com/swmansion/enriched/textinput/MeasurementStore.kt b/android/src/main/java/com/swmansion/enriched/textinput/MeasurementStore.kt index dfc48fbf2..09363e08a 100644 --- a/android/src/main/java/com/swmansion/enriched/textinput/MeasurementStore.kt +++ b/android/src/main/java/com/swmansion/enriched/textinput/MeasurementStore.kt @@ -16,7 +16,9 @@ import com.facebook.react.views.text.ReactTypefaceUtils.parseFontStyle import com.facebook.react.views.text.ReactTypefaceUtils.parseFontWeight import com.facebook.yoga.YogaMeasureMode import com.facebook.yoga.YogaMeasureOutput +import com.swmansion.enriched.common.allowFontScalingFromProps import com.swmansion.enriched.common.parser.EnrichedParser +import com.swmansion.enriched.common.pixelFromSpOrDp import com.swmansion.enriched.textinput.spans.EnrichedLineHeightSpan import com.swmansion.enriched.textinput.styles.HtmlStyle import java.util.concurrent.ConcurrentHashMap @@ -99,12 +101,6 @@ object MeasurementStore { return YogaMeasureOutput.make(widthInSP, heightInSP) } - private fun getAllowFontScaling(props: ReadableMap?): Boolean { - if (props == null) return true - if (!props.hasKey("allowFontScaling") || props.isNull("allowFontScaling")) return true - return props.getBoolean("allowFontScaling") - } - // Returns either: Spannable parsed from HTML defaultValue, or plain text defaultValue, or "I" if no defaultValue private fun getInitialText( defaultView: EnrichedTextInputView, @@ -136,13 +132,7 @@ object MeasurementStore { val propsFontSize = props?.getDouble("fontSize")?.toFloat() if (propsFontSize == null) return defaultView.textSize - return ceil( - if (getAllowFontScaling(props)) { - PixelUtil.toPixelFromSP(propsFontSize) - } else { - PixelUtil.toPixelFromDIP(propsFontSize) - }, - ) + return ceil(pixelFromSpOrDp(propsFontSize, allowFontScalingFromProps(props))) } // Called when view measurements are not available in the store @@ -154,7 +144,7 @@ object MeasurementStore { props: ReadableMap?, ): Long { val defaultView = EnrichedTextInputView(context) - val allowFontScaling = getAllowFontScaling(props) + val allowFontScaling = allowFontScalingFromProps(props) // mirrors the real view's state defaultView.allowFontScaling = allowFontScaling diff --git a/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedLineHeightSpan.kt b/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedLineHeightSpan.kt index 84cbecadb..3a02ada04 100644 --- a/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedLineHeightSpan.kt +++ b/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedLineHeightSpan.kt @@ -5,7 +5,7 @@ import android.text.Spannable import android.text.TextPaint import android.text.style.LineHeightSpan import android.text.style.MetricAffectingSpan -import com.facebook.react.uimanager.PixelUtil +import com.swmansion.enriched.common.pixelFromSpOrDp import com.swmansion.enriched.common.spans.interfaces.EnrichedHeadingSpan class EnrichedLineHeightSpan( @@ -34,12 +34,7 @@ class EnrichedLineHeightSpan( // In the future we may consider adding custom lineHeight support for each paragraph style if (spannable.getSpans(start, end, EnrichedHeadingSpan::class.java).isNotEmpty()) return - val lineHeightPx = - if (allowFontScaling) { - PixelUtil.toPixelFromSP(lineHeight) - } else { - PixelUtil.toPixelFromDIP(lineHeight) - } + val lineHeightPx = pixelFromSpOrDp(lineHeight, allowFontScaling) val currentHeight = (fm.descent - fm.ascent).toFloat() if (lineHeightPx <= currentHeight) return diff --git a/android/src/main/java/com/swmansion/enriched/textinput/styles/HtmlStyle.kt b/android/src/main/java/com/swmansion/enriched/textinput/styles/HtmlStyle.kt index e3c9d9dcc..8a82545b6 100644 --- a/android/src/main/java/com/swmansion/enriched/textinput/styles/HtmlStyle.kt +++ b/android/src/main/java/com/swmansion/enriched/textinput/styles/HtmlStyle.kt @@ -4,10 +4,10 @@ import android.graphics.Color import com.facebook.react.bridge.ColorPropConverter import com.facebook.react.bridge.ReactContext import com.facebook.react.bridge.ReadableMap -import com.facebook.react.uimanager.PixelUtil import com.facebook.react.views.text.ReactTypefaceUtils.parseFontWeight import com.swmansion.enriched.common.EnrichedStyle import com.swmansion.enriched.common.MentionStyle +import com.swmansion.enriched.common.pixelFromSpOrDp import com.swmansion.enriched.textinput.EnrichedTextInputView import kotlin.Float import kotlin.Int @@ -153,16 +153,8 @@ class HtmlStyle : EnrichedStyle { key: String, ): Float { val safeMap = ensureValueIsSet(map, key) - val value = safeMap.getDouble(key) - val scaled = - if (view?.allowFontScaling != false) { - ceil(PixelUtil.toPixelFromSP(value)) - } else { - ceil(PixelUtil.toPixelFromDIP(value)) - } - - return scaled + return ceil(pixelFromSpOrDp(value, view?.allowFontScaling ?: true)) } private fun parseColorWithOpacity( From cc8aad26c73133037074e5caf26c769adad24531 Mon Sep 17 00:00:00 2001 From: Krystian Sienkiewicz Date: Tue, 26 May 2026 18:35:27 +0200 Subject: [PATCH 4/9] fix(android): allowFontScaling in cpp props --- .../java/com/swmansion/enriched/common/AllowFontScaling.kt | 4 +++- .../renderer/components/ReactNativeEnrichedSpec/conversions.h | 2 ++ src/spec/EnrichedTextNativeComponent.ts | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/android/src/main/java/com/swmansion/enriched/common/AllowFontScaling.kt b/android/src/main/java/com/swmansion/enriched/common/AllowFontScaling.kt index 58784260f..48255a5bf 100644 --- a/android/src/main/java/com/swmansion/enriched/common/AllowFontScaling.kt +++ b/android/src/main/java/com/swmansion/enriched/common/AllowFontScaling.kt @@ -5,6 +5,8 @@ import com.facebook.react.uimanager.PixelUtil internal const val ALLOW_FONT_SCALING_PROP = "allowFontScaling" +internal const val ALLOW_FONT_SCALING_DEFAULT = true + // Converts a logical font-unit value to pixels. When the editor is opted out of // system font scaling, DP is used so the system font-size slider doesn't grow // the value; otherwise SP is used and the value scales as usual. @@ -32,6 +34,6 @@ internal fun pixelFromSpOrDp( // where no view instance is available yet). internal fun allowFontScalingFromProps(props: ReadableMap?): Boolean { if (props == null) return true - if (!props.hasKey(ALLOW_FONT_SCALING_PROP) || props.isNull(ALLOW_FONT_SCALING_PROP)) return true + if (!props.hasKey(ALLOW_FONT_SCALING_PROP) || props.isNull(ALLOW_FONT_SCALING_PROP)) return ALLOW_FONT_SCALING_DEFAULT return props.getBoolean(ALLOW_FONT_SCALING_PROP) } diff --git a/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/conversions.h b/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/conversions.h index f77dd91ec..7c4dcb629 100644 --- a/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/conversions.h +++ b/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/conversions.h @@ -18,6 +18,7 @@ inline folly::dynamic toDynamic(const EnrichedTextInputViewProps &props) { serializedProps["fontStyle"] = props.fontStyle; serializedProps["fontFamily"] = props.fontFamily; serializedProps["lineHeight"] = props.lineHeight; + serializedProps["allowFontScaling"] = props.allowFontScaling; serializedProps["htmlStyle"] = toDynamic(props.htmlStyle); return serializedProps; @@ -34,6 +35,7 @@ inline folly::dynamic toDynamic(const EnrichedTextViewProps &props) { serializedProps["fontFamily"] = props.fontFamily; serializedProps["numberOfLines"] = props.numberOfLines; serializedProps["ellipsizeMode"] = props.ellipsizeMode; + serializedProps["allowFontScaling"] = props.allowFontScaling; serializedProps["htmlStyle"] = toDynamic(props.htmlStyle); return serializedProps; diff --git a/src/spec/EnrichedTextNativeComponent.ts b/src/spec/EnrichedTextNativeComponent.ts index 068cc5e57..fec62bd3d 100644 --- a/src/spec/EnrichedTextNativeComponent.ts +++ b/src/spec/EnrichedTextNativeComponent.ts @@ -84,13 +84,13 @@ export interface NativeProps extends ViewProps { text: string; htmlStyle?: EnrichedTextHtmlStyleInternal; useHtmlNormalizer: boolean; + allowFontScaling?: boolean; // ReactNative TextProps ellipsizeMode: string; numberOfLines: Int32; selectable: boolean; selectionColor?: ColorValue; - allowFontScaling?: boolean; // Events onLinkPress?: DirectEventHandler; From faddf83e3db9727488db9405120b43330ff34b3a Mon Sep 17 00:00:00 2001 From: Krystian Sienkiewicz Date: Tue, 26 May 2026 22:58:02 +0200 Subject: [PATCH 5/9] fix(ios): accessibility font sizes dynamic handling on EnrichedText --- ios/EnrichedTextView.mm | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/ios/EnrichedTextView.mm b/ios/EnrichedTextView.mm index 718952dbf..da00a7f1a 100644 --- a/ios/EnrichedTextView.mm +++ b/ios/EnrichedTextView.mm @@ -706,6 +706,39 @@ - (void)tryUpdatingHeight { _state->updateState(EnrichedTextViewState(selfRef)); } +/** + * Handles iOS Dynamic Type changes (user changing font size in System + * Settings). + * + * Unlike Android, iOS Views do not automatically rescale existing + * NSAttributedStrings when the system font size changes. The text attributes + * are static once drawn, so we re-parse the HTML to rebuild every run with + * fonts at the new content size category. + */ +- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection { + [super traitCollectionDidChange:previousTraitCollection]; + + if (_props == nullptr) { + return; + } + + const auto &viewProps = + *std::static_pointer_cast(_props); + if (!viewProps.allowFontScaling) { + return; + } + + if (previousTraitCollection.preferredContentSizeCategory == + self.traitCollection.preferredContentSizeCategory) { + return; + } + + [config invalidateFonts]; + [self syncDefaultTypingAttributesFromConfig]; + [self renderText:[NSString fromCppString:viewProps.text]]; + [self tryUpdatingHeight]; +} + - (std::shared_ptr)getEventEmitter { if (_eventEmitter != nullptr) { auto emitter = From 16c68194636d3fc7818de04a60e9075c50a2bc9a Mon Sep 17 00:00:00 2001 From: Krystian Sienkiewicz Date: Wed, 27 May 2026 00:03:32 +0200 Subject: [PATCH 6/9] docs: update docs with allowFontScaling prop --- docs/INPUT_API_REFERENCE.md | 8 ++++++++ docs/TEXT_API_REFERENCE.md | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/docs/INPUT_API_REFERENCE.md b/docs/INPUT_API_REFERENCE.md index b3d0efa8a..6030e4b27 100644 --- a/docs/INPUT_API_REFERENCE.md +++ b/docs/INPUT_API_REFERENCE.md @@ -2,6 +2,14 @@ ## Props +### `allowFontScaling` + +If `true`, it respects the system's accessibility font scaling settings. + +| Type | Default Value | Platform | +| ------ | ------------- | -------- | +| `bool` | `true` | Both | + ### `autoFocus` If `true`, focuses the input. diff --git a/docs/TEXT_API_REFERENCE.md b/docs/TEXT_API_REFERENCE.md index eabb7bb61..784daa1e7 100644 --- a/docs/TEXT_API_REFERENCE.md +++ b/docs/TEXT_API_REFERENCE.md @@ -2,6 +2,14 @@ ## Props +### `allowFontScaling` + +If `true`, it respects the system's accessibility font scaling settings. + +| Type | Default Value | Platform | +| ------ | ------------- | -------- | +| `bool` | `true` | Both | + ### `children` The HTML string to render. Accepts the HTML format produced by `EnrichedTextInput`. From 0a4dcc5b7edf2026397680360c2da11b09d6bcca Mon Sep 17 00:00:00 2001 From: Krystian Sienkiewicz Date: Wed, 27 May 2026 10:44:36 +0200 Subject: [PATCH 7/9] chore: font scaling e2e tests --- .../enrichedInput/flows/font_scaling.yaml | 57 ++++++++++++++++++ .../screenshots/android/font_scaling.png | Bin 0 -> 20988 bytes .../android/font_scaling__placeholder.png | Bin 0 -> 8871 bytes .../screenshots/ios/font_scaling.png | Bin 0 -> 36046 bytes .../ios/font_scaling__placeholder.png | Bin 0 -> 14474 bytes .maestro/enrichedText/flows/font_scaling.yaml | 34 +++++++++++ .../screenshots/android/font_scaling.png | Bin 0 -> 39932 bytes .../screenshots/ios/font_scaling.png | Bin 0 -> 66198 bytes .maestro/scripts/run-tests.sh | 23 ++++++- 9 files changed, 113 insertions(+), 1 deletion(-) create mode 100644 .maestro/enrichedInput/flows/font_scaling.yaml create mode 100644 .maestro/enrichedInput/screenshots/android/font_scaling.png create mode 100644 .maestro/enrichedInput/screenshots/android/font_scaling__placeholder.png create mode 100644 .maestro/enrichedInput/screenshots/ios/font_scaling.png create mode 100644 .maestro/enrichedInput/screenshots/ios/font_scaling__placeholder.png create mode 100644 .maestro/enrichedText/flows/font_scaling.yaml create mode 100644 .maestro/enrichedText/screenshots/android/font_scaling.png create mode 100644 .maestro/enrichedText/screenshots/ios/font_scaling.png diff --git a/.maestro/enrichedInput/flows/font_scaling.yaml b/.maestro/enrichedInput/flows/font_scaling.yaml new file mode 100644 index 000000000..38ce16624 --- /dev/null +++ b/.maestro/enrichedInput/flows/font_scaling.yaml @@ -0,0 +1,57 @@ +appId: swmansion.enriched.example +tags: + - accessibility +--- +- launchApp + +- tapOn: + id: "toggle-screen-button" + +- runFlow: + file: "../subflows/capture_or_assert_screenshot.yaml" + env: + SCREENSHOT_NAME: "font_scaling__placeholder" + +- tapOn: + id: "editor-input" + +- inputText: "Plain " + +- tapOn: + id: "toolbar-bold" +- inputText: "bold" +- tapOn: + id: "toolbar-bold" +- inputText: " " + +- tapOn: + id: "toolbar-italic" +- inputText: "italic" +- tapOn: + id: "toolbar-italic" +- inputText: " " + +- tapOn: + id: "toolbar-underline" +- inputText: "underline" +- tapOn: + id: "toolbar-underline" +- inputText: " " + +- tapOn: + id: "toolbar-strikethrough" +- inputText: "strike-through" +- tapOn: + id: "toolbar-strikethrough" +- inputText: " " + +- tapOn: + id: "toolbar-inline-code" +- inputText: "code" +- tapOn: + id: "toolbar-inline-code" + +- runFlow: + file: "../subflows/capture_or_assert_screenshot.yaml" + env: + SCREENSHOT_NAME: "font_scaling" diff --git a/.maestro/enrichedInput/screenshots/android/font_scaling.png b/.maestro/enrichedInput/screenshots/android/font_scaling.png new file mode 100644 index 0000000000000000000000000000000000000000..6b955aa4ea77393bdc2670955cad8f5cc1be25e1 GIT binary patch literal 20988 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 b`#`r~G;h;ZBCo--kf#sCe;rWae<0&;KyI~R literal 0 HcmV?d00001 diff --git a/.maestro/enrichedInput/screenshots/android/font_scaling__placeholder.png b/.maestro/enrichedInput/screenshots/android/font_scaling__placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..1288cc4b3d3a502a881b99e8a863c49630763d88 GIT binary patch literal 8871 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%0D<_PDNt1DsLvhU;cv*Zl_ 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 literal 0 HcmV?d00001 diff --git a/.maestro/enrichedInput/screenshots/ios/font_scaling.png b/.maestro/enrichedInput/screenshots/ios/font_scaling.png new file mode 100644 index 0000000000000000000000000000000000000000..ccc86279cc65c815a623ab4ab6f8f357f8b9eb96 GIT binary patch literal 36046 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 literal 0 HcmV?d00001 diff --git a/.maestro/enrichedInput/screenshots/ios/font_scaling__placeholder.png b/.maestro/enrichedInput/screenshots/ios/font_scaling__placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..99c329c323ab1f9934a0e9a8c55906a7e51c10b7 GIT binary patch literal 14474 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 + +

Left aligned

+

Centre aligned

+
Heading 6
+

Right aligned

+
    +
  1. Element 1
  2. +
  3. Element 2
  4. +
+ + +- scroll + +- runFlow: + file: '../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'font_scaling' diff --git a/.maestro/enrichedText/screenshots/android/font_scaling.png b/.maestro/enrichedText/screenshots/android/font_scaling.png new file mode 100644 index 0000000000000000000000000000000000000000..1547d1e91a995789b71369173ef75dee202240aa GIT binary patch literal 39932 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 F{{tOc+ZO-; literal 0 HcmV?d00001 diff --git a/.maestro/enrichedText/screenshots/ios/font_scaling.png b/.maestro/enrichedText/screenshots/ios/font_scaling.png new file mode 100644 index 0000000000000000000000000000000000000000..eb1481f543fb2b7ad09220e3d2add37848e0638a GIT binary patch literal 66198 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 Kf3)x9pZ^QyWdDHx literal 0 HcmV?d00001 diff --git a/.maestro/scripts/run-tests.sh b/.maestro/scripts/run-tests.sh index 4e9230d64..409f4bc0c 100755 --- a/.maestro/scripts/run-tests.sh +++ b/.maestro/scripts/run-tests.sh @@ -99,4 +99,25 @@ ASSETS_DIR="$MAESTRO_ROOT/assets" echo "=== Running maestro tests ===" # shellcheck disable=SC2086 -maestro test --device "$DEVICE_ID" $EXTRA $FLOWS +maestro test --device "$DEVICE_ID" --exclude-tags accessibility $EXTRA $FLOWS + +# These are the tests that require changing the system's settings +# - something maestro cannot run internally +echo "=== Running maestro accessibility tests ===" +# scaling up the font +if [ "$PLATFORM" = ios ]; then + xcrun simctl ui "$DEVICE_ID" content_size accessibility-large +else + adb -s "$DEVICE_ID" shell settings put system font_scale 1.5 +fi +sleep 2 # Let OS redraw + +# shellcheck disable=SC2086 +maestro test --device "$DEVICE_ID" --include-tags accessibility $EXTRA $FLOWS + +# restoring the scaled-up font +if [ "$PLATFORM" = ios ]; then + xcrun simctl ui "$DEVICE_ID" content_size large +else + adb -s "$DEVICE_ID" shell settings put system font_scale 1.0 +fi From 128673ca6af8e935aebc5054ca7f06efc5a94d2e Mon Sep 17 00:00:00 2001 From: Krystian Sienkiewicz Date: Wed, 27 May 2026 11:05:19 +0200 Subject: [PATCH 8/9] refactor: clean up --- .../com/swmansion/enriched/common/AllowFontScaling.kt | 11 ++++------- .../swmansion/enriched/common/EnrichedConstants.kt | 2 ++ .../com/swmansion/enriched/text/EnrichedTextStyle.kt | 4 ++-- .../com/swmansion/enriched/text/EnrichedTextView.kt | 4 +--- .../enriched/textinput/EnrichedTextInputView.kt | 6 +++--- .../textinput/spans/EnrichedLineHeightSpan.kt | 2 +- .../swmansion/enriched/textinput/styles/HtmlStyle.kt | 3 ++- apps/example/src/screens/DevScreen.tsx | 2 +- 8 files changed, 16 insertions(+), 18 deletions(-) diff --git a/android/src/main/java/com/swmansion/enriched/common/AllowFontScaling.kt b/android/src/main/java/com/swmansion/enriched/common/AllowFontScaling.kt index 48255a5bf..05f5075d1 100644 --- a/android/src/main/java/com/swmansion/enriched/common/AllowFontScaling.kt +++ b/android/src/main/java/com/swmansion/enriched/common/AllowFontScaling.kt @@ -5,11 +5,8 @@ import com.facebook.react.uimanager.PixelUtil internal const val ALLOW_FONT_SCALING_PROP = "allowFontScaling" -internal const val ALLOW_FONT_SCALING_DEFAULT = true - -// Converts a logical font-unit value to pixels. When the editor is opted out of -// system font scaling, DP is used so the system font-size slider doesn't grow -// the value; otherwise SP is used and the value scales as usual. +// Converts a logical font-unit value to pixels. +// Respects the system font scaling, depending on the `allowFontScaling` value internal fun pixelFromSpOrDp( value: Float, allowFontScaling: Boolean, @@ -33,7 +30,7 @@ internal fun pixelFromSpOrDp( // Reads allowFontScaling from a serialized prop map (used in MeasurementStore // where no view instance is available yet). internal fun allowFontScalingFromProps(props: ReadableMap?): Boolean { - if (props == null) return true - if (!props.hasKey(ALLOW_FONT_SCALING_PROP) || props.isNull(ALLOW_FONT_SCALING_PROP)) return ALLOW_FONT_SCALING_DEFAULT + if (props == null) return EnrichedConstants.ALLOW_FONT_SCALING_DEFAULT + if (!props.hasKey(ALLOW_FONT_SCALING_PROP) || props.isNull(ALLOW_FONT_SCALING_PROP)) return EnrichedConstants.ALLOW_FONT_SCALING_DEFAULT return props.getBoolean(ALLOW_FONT_SCALING_PROP) } diff --git a/android/src/main/java/com/swmansion/enriched/common/EnrichedConstants.kt b/android/src/main/java/com/swmansion/enriched/common/EnrichedConstants.kt index fb68f2049..5a79cc57e 100644 --- a/android/src/main/java/com/swmansion/enriched/common/EnrichedConstants.kt +++ b/android/src/main/java/com/swmansion/enriched/common/EnrichedConstants.kt @@ -11,4 +11,6 @@ object EnrichedConstants { const val TEXT_DEFAULT_FONT_SIZE = 16f const val CLIPBOARD_TAG = "react-native-enriched-clipboard" + + const val ALLOW_FONT_SCALING_DEFAULT = true } diff --git a/android/src/main/java/com/swmansion/enriched/text/EnrichedTextStyle.kt b/android/src/main/java/com/swmansion/enriched/text/EnrichedTextStyle.kt index 5f787f687..d263b5d61 100644 --- a/android/src/main/java/com/swmansion/enriched/text/EnrichedTextStyle.kt +++ b/android/src/main/java/com/swmansion/enriched/text/EnrichedTextStyle.kt @@ -63,7 +63,7 @@ data class EnrichedTextStyle( context: ReactContext, fontSize: Int, map: ReadableMap, - allowFontScaling: Boolean = true, + allowFontScaling: Boolean, ): EnrichedTextStyle { val h1 = map.getMap("h1") val h2 = map.getMap("h2") @@ -124,7 +124,7 @@ data class EnrichedTextStyle( private fun parseFloat( map: ReadableMap?, key: String, - allowFontScaling: Boolean = true, + allowFontScaling: Boolean, ): Float { if (map == null || !map.hasKey(key) || map.isNull(key)) return 0f return ceil(pixelFromSpOrDp(map.getDouble(key), allowFontScaling)) diff --git a/android/src/main/java/com/swmansion/enriched/text/EnrichedTextView.kt b/android/src/main/java/com/swmansion/enriched/text/EnrichedTextView.kt index fa0d3acb8..d3133ee8c 100644 --- a/android/src/main/java/com/swmansion/enriched/text/EnrichedTextView.kt +++ b/android/src/main/java/com/swmansion/enriched/text/EnrichedTextView.kt @@ -41,13 +41,11 @@ class EnrichedTextView : AppCompatTextView { private var fontSize: Float = EnrichedConstants.TEXT_DEFAULT_FONT_SIZE private var fontSizeRaw: Float? = null private var htmlStyleMap: ReadableMap? = null - var allowFontScaling: Boolean = true + var allowFontScaling: Boolean = EnrichedConstants.ALLOW_FONT_SCALING_DEFAULT set(value) { if (field == value) return field = value - // re-apply primary font size fontSizeRaw?.let { setFontSize(it) } - // re-parse htmlStyle htmlStyleMap?.let { setHtmlStyle(it) } } diff --git a/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputView.kt b/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputView.kt index 0119016ef..87518d515 100644 --- a/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputView.kt +++ b/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputView.kt @@ -88,7 +88,7 @@ class EnrichedTextInputView : var isDuringTransaction: Boolean = false var isRemovingMany: Boolean = false var scrollEnabled: Boolean = true - var allowFontScaling: Boolean = true + var allowFontScaling: Boolean = EnrichedConstants.ALLOW_FONT_SCALING_DEFAULT set(value) { if (field != value) { field = value @@ -99,7 +99,7 @@ class EnrichedTextInputView : htmlStyle.invalidateStyles() } applyLineSpacing() - reApplyHtmlStyleForSpans(htmlStyle, htmlStyle) + reApplyHtmlStyleForSpans(htmlStyle, htmlStyle) // force re-apply } } @@ -122,7 +122,7 @@ class EnrichedTextInputView : var experimentalSynchronousEvents: Boolean = false var useHtmlNormalizer: Boolean = false - var fontSizeRaw: Float? = null + private var fontSizeRaw: Float? = null var fontSize: Float? = null private var lineHeight: Float? = null var submitBehavior: String? = null diff --git a/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedLineHeightSpan.kt b/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedLineHeightSpan.kt index 3a02ada04..ddaeb7a5d 100644 --- a/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedLineHeightSpan.kt +++ b/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedLineHeightSpan.kt @@ -10,7 +10,7 @@ import com.swmansion.enriched.common.spans.interfaces.EnrichedHeadingSpan class EnrichedLineHeightSpan( val lineHeight: Float, - val allowFontScaling: Boolean = true, + val allowFontScaling: Boolean, ) : MetricAffectingSpan(), LineHeightSpan { override fun updateDrawState(p0: TextPaint?) { diff --git a/android/src/main/java/com/swmansion/enriched/textinput/styles/HtmlStyle.kt b/android/src/main/java/com/swmansion/enriched/textinput/styles/HtmlStyle.kt index 8a82545b6..3918e2a22 100644 --- a/android/src/main/java/com/swmansion/enriched/textinput/styles/HtmlStyle.kt +++ b/android/src/main/java/com/swmansion/enriched/textinput/styles/HtmlStyle.kt @@ -5,6 +5,7 @@ import com.facebook.react.bridge.ColorPropConverter import com.facebook.react.bridge.ReactContext import com.facebook.react.bridge.ReadableMap import com.facebook.react.views.text.ReactTypefaceUtils.parseFontWeight +import com.swmansion.enriched.common.EnrichedConstants import com.swmansion.enriched.common.EnrichedStyle import com.swmansion.enriched.common.MentionStyle import com.swmansion.enriched.common.pixelFromSpOrDp @@ -154,7 +155,7 @@ class HtmlStyle : EnrichedStyle { ): Float { val safeMap = ensureValueIsSet(map, key) val value = safeMap.getDouble(key) - return ceil(pixelFromSpOrDp(value, view?.allowFontScaling ?: true)) + return ceil(pixelFromSpOrDp(value, view?.allowFontScaling ?: EnrichedConstants.ALLOW_FONT_SCALING_DEFAULT)) } private fun parseColorWithOpacity( diff --git a/apps/example/src/screens/DevScreen.tsx b/apps/example/src/screens/DevScreen.tsx index 12c90bec0..c2cb45c40 100644 --- a/apps/example/src/screens/DevScreen.tsx +++ b/apps/example/src/screens/DevScreen.tsx @@ -75,7 +75,7 @@ export function DevScreen({ onSwitch }: DevScreenProps) { onPasteImages={(e) => editor.handlePasteImagesEvent(e.nativeEvent)} useHtmlNormalizer testID="editor-input" - allowFontScaling={false} + allowFontScaling /> Date: Wed, 27 May 2026 19:15:01 +0200 Subject: [PATCH 9/9] fix: resetting device accessibility settings before running tests --- .maestro/scripts/run-tests.sh | 42 ++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/.maestro/scripts/run-tests.sh b/.maestro/scripts/run-tests.sh index 409f4bc0c..990561912 100755 --- a/.maestro/scripts/run-tests.sh +++ b/.maestro/scripts/run-tests.sh @@ -71,6 +71,25 @@ app_installed() { fi } +# Adjusts the system's text-size setting. +set_font_scale() { + case "$1" in + default) ios_size="large"; android_scale="1.0" ;; + large) ios_size="accessibility-large"; android_scale="1.5" ;; + *) echo "set_font_scale: unknown size '$1'" >&2; return 1 ;; + esac + if [ "$PLATFORM" = ios ]; then + xcrun simctl ui "$DEVICE_ID" content_size "$ios_size" + else + adb -s "$DEVICE_ID" shell settings put system font_scale "$android_scale" + fi +} + +# Guarantees the font scale is restored on any exit. +# Without this, the accessibility tests below would leave the device +# in a scaled-up state. +trap 'set_font_scale default' EXIT + if [ -n "$REBUILD" ] || ! app_installed; then [ -n "$REBUILD" ] && echo "=== rebuild requested, building and installing ===" [ -z "$REBUILD" ] && echo "=== App ($BUNDLE_ID) not found, building and installing ===" @@ -97,27 +116,18 @@ esac ASSETS_DIR="$MAESTRO_ROOT/assets" [ -d "$ASSETS_DIR" ] && FLOWS="$ASSETS_DIR $FLOWS" +# A previous run could have died before its EXIT trap fired (e.g. SIGKILL), +# leaving the device scaled. Force a known state before the normal tests. +set_font_scale default + echo "=== Running maestro tests ===" # shellcheck disable=SC2086 -maestro test --device "$DEVICE_ID" --exclude-tags accessibility $EXTRA $FLOWS +# maestro test --device "$DEVICE_ID" --exclude-tags accessibility $EXTRA $FLOWS # These are the tests that require changing the system's settings # - something maestro cannot run internally echo "=== Running maestro accessibility tests ===" -# scaling up the font -if [ "$PLATFORM" = ios ]; then - xcrun simctl ui "$DEVICE_ID" content_size accessibility-large -else - adb -s "$DEVICE_ID" shell settings put system font_scale 1.5 -fi -sleep 2 # Let OS redraw +set_font_scale large # shellcheck disable=SC2086 -maestro test --device "$DEVICE_ID" --include-tags accessibility $EXTRA $FLOWS - -# restoring the scaled-up font -if [ "$PLATFORM" = ios ]; then - xcrun simctl ui "$DEVICE_ID" content_size large -else - adb -s "$DEVICE_ID" shell settings put system font_scale 1.0 -fi +maestro test --device "$DEVICE_ID" --include-tags accessibility $EXTRA $FLOWS