From 7bc3335be4bd28b9e40eb6f41d516b920d1c476f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateo=20Guzm=C3=A1n?= Date: Fri, 13 Dec 2024 11:34:25 +0100 Subject: [PATCH 1/2] feat(scrollview): [android] handling testID property setter --- .../facebook/react/views/scroll/ReactScrollViewManager.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewManager.java index e9d28efec0a296..4686d04c7ae7e1 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewManager.java @@ -12,6 +12,7 @@ import androidx.annotation.Nullable; import androidx.core.view.ViewCompat; import com.facebook.infer.annotation.Nullsafe; +import com.facebook.react.R; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.RetryableMountingLayerException; @@ -337,6 +338,11 @@ public void setMaintainVisibleContentPosition(ReactScrollView view, ReadableMap } } + @ReactProp(name = "testID") + public void setTestID(ReactScrollView view, @Nullable String testID) { + view.setTag(R.id.react_test_id, testID); + } + @Override public @Nullable Object updateState( ReactScrollView view, ReactStylesDiffMap props, StateWrapper stateWrapper) { From d4b2148f002c3df81a3206928f3bb1f8bdb7958a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateo=20Guzm=C3=A1n?= Date: Fri, 13 Dec 2024 15:55:53 +0100 Subject: [PATCH 2/2] fix(scrollview): [android] setting resource id for horizontal scrollview and reverting the test id prop setter overwrite --- .../views/scroll/ReactHorizontalScrollView.java | 16 ++++++++++++++++ .../views/scroll/ReactScrollViewManager.java | 6 ------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java index 8dc00b6bd1f352..5692c86c1c2816 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java @@ -26,6 +26,7 @@ import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; +import android.view.accessibility.AccessibilityNodeInfo; import android.widget.HorizontalScrollView; import android.widget.OverScroller; import androidx.annotation.Nullable; @@ -33,6 +34,7 @@ import com.facebook.common.logging.FLog; import com.facebook.infer.annotation.Assertions; import com.facebook.infer.annotation.Nullsafe; +import com.facebook.react.R; import com.facebook.react.animated.NativeAnimatedModule; import com.facebook.react.bridge.ReactContext; import com.facebook.react.common.ReactConstants; @@ -143,6 +145,20 @@ public ReactHorizontalScrollView(Context context, @Nullable FpsListener fpsListe setClipChildren(false); } + @Override + public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { + super.onInitializeAccessibilityNodeInfo(info); + + // Expose the testID prop as the resource-id name of the view. Black-box E2E/UI testing + // frameworks, which interact with the UI through the accessibility framework, do not have + // access to view tags. This allows developers/testers to avoid polluting the + // content-description with test identifiers. + final String testId = (String) this.getTag(R.id.react_test_id); + if (testId != null) { + info.setViewIdResourceName(testId); + } + } + public boolean getScrollEnabled() { return mScrollEnabled; } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewManager.java index 4686d04c7ae7e1..e9d28efec0a296 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewManager.java @@ -12,7 +12,6 @@ import androidx.annotation.Nullable; import androidx.core.view.ViewCompat; import com.facebook.infer.annotation.Nullsafe; -import com.facebook.react.R; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.RetryableMountingLayerException; @@ -338,11 +337,6 @@ public void setMaintainVisibleContentPosition(ReactScrollView view, ReadableMap } } - @ReactProp(name = "testID") - public void setTestID(ReactScrollView view, @Nullable String testID) { - view.setTag(R.id.react_test_id, testID); - } - @Override public @Nullable Object updateState( ReactScrollView view, ReactStylesDiffMap props, StateWrapper stateWrapper) {