From e43c5db84b3ddf5bb34022ec00f8e41f74fb7c67 Mon Sep 17 00:00:00 2001 From: Nick Gerleman Date: Tue, 29 Apr 2025 18:45:58 -0700 Subject: [PATCH] Spannable -> Spanned (#51006) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/51006 Moves a bit of code, reading spans that we may not control, to query for `Spanned`, instead of `Spannable`, since some code (see last diff around ellipsization) may wrap intermediate Spannables. Changelog: [internal] Reviewed By: joevilches Differential Revision: D73820368 fbshipit-source-id: e107bcf1f2f7d5555fca68fb2209c12c3f99c099 --- .../react/views/text/PreparedLayoutTextViewManager.kt | 11 +++++------ .../views/text/ReactTextViewAccessibilityDelegate.kt | 3 +-- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/PreparedLayoutTextViewManager.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/PreparedLayoutTextViewManager.kt index df5fbc29cc2..a1105457a16 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/PreparedLayoutTextViewManager.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/PreparedLayoutTextViewManager.kt @@ -8,7 +8,7 @@ package com.facebook.react.views.text import android.text.Layout -import android.text.Spannable +import android.text.Spanned import android.view.View import com.facebook.react.R import com.facebook.react.internal.SystraceSection @@ -69,15 +69,14 @@ internal class PreparedLayoutTextViewManager : // If this text view contains any clickable spans, set a view tag and reset the accessibility // delegate so that these can be picked up by the accessibility system. - if (layout.text is Spannable) { - val spannableText = layout.text as Spannable + if (layout.text is Spanned) { + val spannedText = layout.text as Spanned val clickableSpans = - spannableText.getSpans(0, layout.text.length, ReactClickableSpan::class.java) + spannedText.getSpans(0, layout.text.length, ReactClickableSpan::class.java) view.setTag( R.id.accessibility_links, - if (clickableSpans.size > 0) AccessibilityLinks(clickableSpans, spannableText) - else null) + if (clickableSpans.size > 0) AccessibilityLinks(clickableSpans, spannedText) else null) ReactTextViewAccessibilityDelegate.resetDelegate( view, view.isFocusable, view.importantForAccessibility) } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewAccessibilityDelegate.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewAccessibilityDelegate.kt index 3e686ac2126..4be9717aaa5 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewAccessibilityDelegate.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewAccessibilityDelegate.kt @@ -10,7 +10,6 @@ package com.facebook.react.views.text import android.graphics.Paint import android.graphics.Rect import android.os.Bundle -import android.text.Spannable import android.text.Spanned import android.text.style.AbsoluteSizeSpan import android.text.style.ClickableSpan @@ -270,7 +269,7 @@ internal class ReactTextViewAccessibilityDelegate : ReactAccessibilityDelegate { return null } - public class AccessibilityLinks(spans: Array, text: Spannable) { + public class AccessibilityLinks(spans: Array, text: Spanned) { private val links: List init {