Skip to content

Commit fe5c480

Browse files
committed
TtsSpan works with parent Text component
1 parent 03a125c commit fe5c480

File tree

6 files changed

+28
-24
lines changed

6 files changed

+28
-24
lines changed

ReactAndroid/src/main/java/com/facebook/react/views/text/ReactBaseTextShadowNode.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
import java.util.List;
3838
import java.util.Map;
3939
import java.util.Objects;
40-
import java.util.Set;
4140

4241
/**
4342
* {@link ReactShadowNode} abstract class for spannable text nodes.
@@ -510,8 +509,8 @@ public void setIsAccessibilityLink(@Nullable String accessibilityRole) {
510509
String roleClassName =
511510
AccessibilityRole.getValue(AccessibilityRole.fromValue(accessibilityRole));
512511
mIsAccessibilityLink = Objects.equals(accessibilityRole, "link");
513-
Set<String> UNIT_TYPES = Set.of(ReactTtsSpan.TYPE_VERBATIM, ReactTtsSpan.TYPE_DATE);
514-
mAccessibilityUnit = UNIT_TYPES.contains(roleClassName) ? roleClassName : null;
512+
mAccessibilityUnit =
513+
ReactTtsSpan.SUPPORTED_UNIT_TYPES.contains(roleClassName) ? roleClassName : null;
515514
markUpdated();
516515
}
517516
}

ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTtsSpan.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,15 @@
1010
import android.os.Parcel;
1111
import android.os.PersistableBundle;
1212
import android.text.style.TtsSpan;
13+
import java.util.Set;
1314

1415
/*
1516
* Wraps {@link BackgroundColorSpan} as a {@link ReactSpan}.
1617
*/
1718
public class ReactTtsSpan extends TtsSpan implements ReactSpan {
19+
// supported TYPES in react-native
20+
public static Set<String> SUPPORTED_UNIT_TYPES = Set.of(TYPE_VERBATIM, TYPE_DATE);
21+
1822
public ReactTtsSpan(String type, PersistableBundle args) {
1923
super(type, args);
2024
}

ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributeProps.java

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import com.facebook.react.bridge.ReadableMap;
1919
import com.facebook.react.common.mapbuffer.MapBuffer;
2020
import com.facebook.react.uimanager.PixelUtil;
21-
import com.facebook.react.uimanager.ReactAccessibilityDelegate;
21+
import com.facebook.react.uimanager.ReactAccessibilityDelegate.AccessibilityRole;
2222
import com.facebook.react.uimanager.ReactStylesDiffMap;
2323
import com.facebook.react.uimanager.ViewProps;
2424
import java.util.ArrayList;
@@ -100,13 +100,10 @@ public class TextAttributeProps {
100100
protected boolean mIsLineThroughTextDecorationSet = false;
101101
protected boolean mIncludeFontPadding = true;
102102

103-
protected @Nullable ReactAccessibilityDelegate.AccessibilityRole mAccessibilityRole = null;
103+
protected @Nullable AccessibilityRole mAccessibilityRole = null;
104104
protected boolean mIsAccessibilityRoleSet = false;
105-
protected boolean mIsAccessibilityUnitSet = false;
106-
protected @Nullable ReactAccessibilityDelegate.AccessibilityRole mAccessibilityUnit =
107-
ReactAccessibilityDelegate.AccessibilityRole.NONE;
105+
protected @Nullable String mAccessibilityUnit = null;
108106
protected boolean mIsAccessibilityLink = false;
109-
protected boolean mIsAccessibilityUnit = false;
110107

111108
protected int mFontStyle = UNSET;
112109
protected int mFontWeight = UNSET;
@@ -606,12 +603,13 @@ private void setTextTransform(@Nullable String textTransform) {
606603
private void setAccessibilityRole(@Nullable String accessibilityRole) {
607604
if (accessibilityRole != null) {
608605
mIsAccessibilityRoleSet = true;
609-
mAccessibilityRole =
610-
ReactAccessibilityDelegate.AccessibilityRole.fromValue(accessibilityRole);
606+
mAccessibilityRole = AccessibilityRole.fromValue(accessibilityRole);
611607
mIsAccessibilityLink =
612-
mAccessibilityRole.equals(ReactAccessibilityDelegate.AccessibilityRole.LINK);
613-
mIsAccessibilityUnit =
614-
mAccessibilityRole.equals(ReactAccessibilityDelegate.AccessibilityRole.VERBATIM);
608+
mAccessibilityRole.equals(AccessibilityRole.LINK);
609+
String roleClassName =
610+
AccessibilityRole.getValue(AccessibilityRole.fromValue(accessibilityRole));
611+
mAccessibilityUnit =
612+
ReactTtsSpan.SUPPORTED_UNIT_TYPES.contains(roleClassName) ? roleClassName : null;
615613
}
616614
}
617615

ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import android.text.StaticLayout;
2020
import android.text.TextPaint;
2121
import android.util.LayoutDirection;
22+
import android.util.Log;
2223
import android.util.LruCache;
2324
import android.view.View;
2425
import androidx.annotation.NonNull;
@@ -125,7 +126,11 @@ private static void buildSpannableFromFragment(
125126
new TextInlineViewPlaceholderSpan(reactTag, (int) width, (int) height)));
126127
} else if (end >= start) {
127128
if (textAttributes.mIsAccessibilityLink) {
128-
ops.add(new SetSpanOperation(start, end, new ReactClickableSpan(reactTag)));
129+
/*
130+
ops.add(
131+
new SetSpanOperation(
132+
start, end, new ReactTtsSpan.Builder(ReactTtsSpan.TYPE_VERBATIM).build()));
133+
*/
129134
}
130135
if (textAttributes.mIsColorSet) {
131136
ops.add(

ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManagerMapBuffer.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,11 @@ private static void buildSpannableFromFragment(
143143
if (textAttributes.mIsAccessibilityLink) {
144144
ops.add(new SetSpanOperation(start, end, new ReactClickableSpan(reactTag)));
145145
}
146+
if (textAttributes.mAccessibilityUnit != null && Build.VERSION.SDK_INT >= 21) {
147+
ops.add(
148+
new SetSpanOperation(
149+
start, end, new ReactTtsSpan.Builder(textAttributes.mAccessibilityUnit).build()));
150+
}
146151
if (textAttributes.mIsColorSet) {
147152
ops.add(
148153
new SetSpanOperation(

packages/rn-tester/js/examples/Text/TextAdjustsDynamicLayoutExample.js

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,8 @@ export default function TextAdjustsDynamicLayoutExample(props: {}): React.Node {
1717
return (
1818
<>
1919
<View>
20-
<Text accessible={true}>
21-
My number is{' '}
22-
<Text
23-
accessibilityRole="verbatim"
24-
accessible={true}
25-
style={{backgroundColor: 'red'}}>
26-
02/07/1987
27-
</Text>
28-
.
20+
<Text accessibilityRole="verbatim" accessible={true}>
21+
please spell
2922
</Text>
3023
</View>
3124
</>

0 commit comments

Comments
 (0)