diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostManager.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostManager.kt index 88157aea50294c..ca12140191e0d6 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostManager.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostManager.kt @@ -93,6 +93,12 @@ public class ReactModalHostManager : @ReactProp(name = "identifier") public override fun setIdentifier(view: ReactModalHostView, value: Int): Unit = Unit + @ReactProp(name = "testID") + public override fun setTestId(view: ReactModalHostView, value: String?) { + super.setTestId(view, value) + view.setDialogRootViewGroupTestId(value) + } + protected override fun addEventEmitters( reactContext: ThemedReactContext, view: ReactModalHostView diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.kt index 271e00f425fca2..8d093ae7ea3488 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.kt @@ -24,6 +24,7 @@ import android.view.Window import android.view.WindowInsetsController import android.view.WindowManager import android.view.accessibility.AccessibilityEvent +import android.view.accessibility.AccessibilityNodeInfo import android.widget.FrameLayout import androidx.annotation.UiThread import com.facebook.common.logging.FLog @@ -386,6 +387,15 @@ public class ReactModalHostView(context: ThemedReactContext) : } } + /** + * Sets the testID on the DialogRootViewGroup. Since the accessibility events + * are not triggered on the on the ReactModalHostView, the testID is forwarded + * to the DialogRootViewGroup to set the resource-id. + */ + public fun setDialogRootViewGroupTestId(testId: String?) { + dialogRootViewGroup.setTag(R.id.react_test_id, testId) + } + // This listener is called when the user presses KeyEvent.KEYCODE_BACK // An event is then passed to JS which can either close or not close the Modal by setting the // visible property @@ -427,6 +437,15 @@ public class ReactModalHostView(context: ThemedReactContext) : } } + override fun onInitializeAccessibilityNodeInfo(info: AccessibilityNodeInfo) { + super.onInitializeAccessibilityNodeInfo(info) + + val testId = getTag(R.id.react_test_id) as String? + if (testId != null) { + info.viewIdResourceName = testId + } + } + override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) { super.onSizeChanged(w, h, oldw, oldh) viewWidth = w