diff --git a/packages/react-native/ReactAndroid/api/ReactAndroid.api b/packages/react-native/ReactAndroid/api/ReactAndroid.api index 4adddfaa84a0f5..714498b12fcd3e 100644 --- a/packages/react-native/ReactAndroid/api/ReactAndroid.api +++ b/packages/react-native/ReactAndroid/api/ReactAndroid.api @@ -6586,6 +6586,8 @@ public final class com/facebook/react/views/modal/ReactModalHostManager : com/fa public fun setStatusBarTranslucent (Lcom/facebook/react/views/modal/ReactModalHostView;Z)V public synthetic fun setSupportedOrientations (Landroid/view/View;Lcom/facebook/react/bridge/ReadableArray;)V public fun setSupportedOrientations (Lcom/facebook/react/views/modal/ReactModalHostView;Lcom/facebook/react/bridge/ReadableArray;)V + public synthetic fun setTestId (Landroid/view/View;Ljava/lang/String;)V + public fun setTestId (Lcom/facebook/react/views/modal/ReactModalHostView;Ljava/lang/String;)V public synthetic fun setTransparent (Landroid/view/View;Z)V public fun setTransparent (Lcom/facebook/react/views/modal/ReactModalHostView;Z)V public synthetic fun setVisible (Landroid/view/View;Z)V @@ -6621,6 +6623,7 @@ public final class com/facebook/react/views/modal/ReactModalHostView : android/v public fun removeView (Landroid/view/View;)V public fun removeViewAt (I)V public final fun setAnimationType (Ljava/lang/String;)V + public final fun setDialogRootViewGroupTestId (Ljava/lang/String;)V public final fun setEventDispatcher (Lcom/facebook/react/uimanager/events/EventDispatcher;)V public final fun setHardwareAccelerated (Z)V public fun setId (I)V @@ -6638,6 +6641,7 @@ public final class com/facebook/react/views/modal/ReactModalHostView$DialogRootV public fun onChildEndedNativeGesture (Landroid/view/View;Landroid/view/MotionEvent;)V public fun onChildStartedNativeGesture (Landroid/view/View;Landroid/view/MotionEvent;)V public fun onHoverEvent (Landroid/view/MotionEvent;)Z + public fun onInitializeAccessibilityNodeInfo (Landroid/view/accessibility/AccessibilityNodeInfo;)V public fun onInterceptHoverEvent (Landroid/view/MotionEvent;)Z public fun onInterceptTouchEvent (Landroid/view/MotionEvent;)Z public fun onTouchEvent (Landroid/view/MotionEvent;)Z 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..a5326fa2c8d1bc 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,11 @@ public class ReactModalHostManager : @ReactProp(name = "identifier") public override fun setIdentifier(view: ReactModalHostView, value: Int): Unit = Unit + 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..0315727906675e 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