From e441f052b0129b559c127ec24b76a5583bebf644 Mon Sep 17 00:00:00 2001 From: dudongxu Date: Sat, 10 Oct 2026 10:49:48 +0800 Subject: [PATCH] Fix Android bottom logical border radii in RTL without swapping --- .../uimanager/style/BorderRadiusStyle.kt | 4 ++-- .../react/uimanager/BorderRadiusStyleTest.kt | 21 +++++++++++++++++-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/BorderRadiusStyle.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/BorderRadiusStyle.kt index aed3c6007f97..17cdbdb099fb 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/BorderRadiusStyle.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/BorderRadiusStyle.kt @@ -208,11 +208,11 @@ internal data class BorderRadiusStyle( CornerRadii(it, width, height) } ?: zeroRadii, bottomLeft = - (endEnd ?: bottomStart ?: bottomLeft ?: uniform)?.let { + (endEnd ?: bottomEnd ?: bottomLeft ?: uniform)?.let { CornerRadii(it, width, height) } ?: zeroRadii, bottomRight = - (endStart ?: bottomEnd ?: bottomRight ?: uniform)?.let { + (endStart ?: bottomStart ?: bottomRight ?: uniform)?.let { CornerRadii(it, width, height) } ?: zeroRadii, width = width, diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/BorderRadiusStyleTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/BorderRadiusStyleTest.kt index 4a002f15fb8c..f28972f3c1c7 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/BorderRadiusStyleTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/BorderRadiusStyleTest.kt @@ -149,14 +149,14 @@ class BorderRadiusStyleTest { arrayOf( BorderRadiusProp.BORDER_RADIUS, BorderRadiusProp.BORDER_BOTTOM_LEFT_RADIUS, - BorderRadiusProp.BORDER_BOTTOM_START_RADIUS, + BorderRadiusProp.BORDER_BOTTOM_END_RADIUS, BorderRadiusProp.BORDER_END_END_RADIUS, ), ComputedBorderRadiusProp.COMPUTED_BORDER_BOTTOM_RIGHT_RADIUS to arrayOf( BorderRadiusProp.BORDER_RADIUS, BorderRadiusProp.BORDER_BOTTOM_RIGHT_RADIUS, - BorderRadiusProp.BORDER_BOTTOM_END_RADIUS, + BorderRadiusProp.BORDER_BOTTOM_START_RADIUS, BorderRadiusProp.BORDER_END_START_RADIUS, ), ) @@ -174,6 +174,23 @@ class BorderRadiusStyleTest { } } + @Test + fun testBottomLogicalCornersRTLRegardlessOfSwap() { + val borderRadiusStyle = + BorderRadiusStyle( + bottomStart = LengthPercentage(10f, LengthPercentageType.POINT), + bottomEnd = LengthPercentage(20f, LengthPercentageType.POINT), + ) + + for (swap in listOf(false, true)) { + setContextLeftAndRightSwap(ctx, swap) + val resolved = borderRadiusStyle.resolve(1, context = ctx, width = 100f, height = 100f) + + assertThat(resolved.bottomLeft).isEqualTo(CornerRadii(20f, 20f)) + assertThat(resolved.bottomRight).isEqualTo(CornerRadii(10f, 10f)) + } + } + @Test fun testBorderRadiusPercentages() { val borderRadiusStyle =