Skip to content

Commit dba0df8

Browse files
rozelefacebook-github-bot
authored andcommitted
Do not reset accessibility delegate if there was no delegate (#54785)
Summary: There's a bug with focus states if we reset the accessibility delegate. We probably should not reset the delegate if we didn't previously have one. ## Changelog [Android][Fixed] - Fix issue with focus when re-rendering text Differential Revision: D88390326
1 parent 284d841 commit dba0df8

File tree

1 file changed

+21
-18
lines changed

1 file changed

+21
-18
lines changed

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewAccessibilityDelegate.kt

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,20 @@ internal class ReactTextViewAccessibilityDelegate(
3333
}
3434

3535
companion object {
36+
fun needsDelegate(view: View): Boolean {
37+
return view.getTag(R.id.accessibility_role) != null ||
38+
view.getTag(R.id.accessibility_state) != null ||
39+
view.getTag(R.id.accessibility_actions) != null ||
40+
view.getTag(R.id.react_test_id) != null ||
41+
view.getTag(R.id.accessibility_collection_item) != null ||
42+
view.getTag(R.id.accessibility_links) != null ||
43+
view.getTag(R.id.role) != null
44+
}
45+
3646
fun setDelegate(view: View, originalFocus: Boolean, originalImportantForAccessibility: Int) {
3747
// if a view already has an accessibility delegate, replacing it could cause
3848
// problems,so leave it alone.
39-
if (
40-
!ViewCompat.hasAccessibilityDelegate(view) &&
41-
(view.getTag(R.id.accessibility_role) != null ||
42-
view.getTag(R.id.accessibility_state) != null ||
43-
view.getTag(R.id.accessibility_actions) != null ||
44-
view.getTag(R.id.react_test_id) != null ||
45-
view.getTag(R.id.accessibility_collection_item) != null ||
46-
view.getTag(R.id.accessibility_links) != null ||
47-
view.getTag(R.id.role) != null)
48-
) {
49+
if (!ViewCompat.hasAccessibilityDelegate(view) && needsDelegate(view)) {
4950
ViewCompat.setAccessibilityDelegate(
5051
view,
5152
ReactTextViewAccessibilityDelegate(
@@ -58,14 +59,16 @@ internal class ReactTextViewAccessibilityDelegate(
5859
}
5960

6061
fun resetDelegate(view: View, originalFocus: Boolean, originalImportantForAccessibility: Int) {
61-
ViewCompat.setAccessibilityDelegate(
62-
view,
63-
ReactTextViewAccessibilityDelegate(
64-
view,
65-
originalFocus,
66-
originalImportantForAccessibility,
67-
),
68-
)
62+
if (ViewCompat.hasAccessibilityDelegate(view) || needsDelegate(view)) {
63+
ViewCompat.setAccessibilityDelegate(
64+
view,
65+
ReactTextViewAccessibilityDelegate(
66+
view,
67+
originalFocus,
68+
originalImportantForAccessibility,
69+
),
70+
)
71+
}
6972
}
7073
}
7174

0 commit comments

Comments
 (0)