From bbd5b5e1574499478ab0bf3fe9d2a21b02b7fedd Mon Sep 17 00:00:00 2001 From: Nick Gerleman Date: Thu, 8 Aug 2024 11:26:04 -0700 Subject: [PATCH] Gate off % border radii on Android Paper (#45945) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/45945 This code is forked on iOS, where we have been, as a policy, avoiding Paper-specific changes. This code is shared between renderers on Android, but it is confusing developer experience to have it work on Android Paper, to then fail on iOS unless it is on new arch. This change disables support on Android Paper for consistency. Changelog: [Android][Removed] - Gate off % border radii on Android Paper Reviewed By: cortinico Differential Revision: D60967347 fbshipit-source-id: 1d26bc71aee677aa9a0dc9bb38f781a99c7762a8 --- .../react-native/ReactAndroid/api/ReactAndroid.api | 1 + .../com/facebook/react/uimanager/LengthPercentage.kt | 2 +- .../facebook/react/views/view/ReactViewManager.java | 10 ++++++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/api/ReactAndroid.api b/packages/react-native/ReactAndroid/api/ReactAndroid.api index 65b7d4c16e2..0e1d8520838 100644 --- a/packages/react-native/ReactAndroid/api/ReactAndroid.api +++ b/packages/react-native/ReactAndroid/api/ReactAndroid.api @@ -4369,6 +4369,7 @@ public final class com/facebook/react/uimanager/LengthPercentage { public static final field Companion Lcom/facebook/react/uimanager/LengthPercentage$Companion; public fun ()V public fun (FLcom/facebook/react/uimanager/LengthPercentageType;)V + public final fun getUnit ()Lcom/facebook/react/uimanager/LengthPercentageType; public final fun resolve (FF)F public static final fun setFromDynamic (Lcom/facebook/react/bridge/Dynamic;)Lcom/facebook/react/uimanager/LengthPercentage; } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/LengthPercentage.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/LengthPercentage.kt index 6f5d5187f33..c4b18fc50a1 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/LengthPercentage.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/LengthPercentage.kt @@ -20,7 +20,7 @@ public enum class LengthPercentageType { public class LengthPercentage( private val value: Float, - private val unit: LengthPercentageType, + public val unit: LengthPercentageType, ) { public companion object { @JvmStatic diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.java index b910dd8266d..29f22aa352e 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.java @@ -26,6 +26,7 @@ import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags; import com.facebook.react.module.annotations.ReactModule; import com.facebook.react.uimanager.BackgroundStyleApplicator; import com.facebook.react.uimanager.LengthPercentage; +import com.facebook.react.uimanager.LengthPercentageType; import com.facebook.react.uimanager.PixelUtil; import com.facebook.react.uimanager.PointerEvents; import com.facebook.react.uimanager.Spacing; @@ -156,6 +157,15 @@ public class ReactViewManager extends ReactClippingViewManager { }) public void setBorderRadius(ReactViewGroup view, int index, Dynamic rawBorderRadius) { @Nullable LengthPercentage borderRadius = LengthPercentage.setFromDynamic(rawBorderRadius); + + // We do not support percentage border radii on Paper in order to be consistent with iOS (to + // avoid developer surprise if it works on one platform but not another). + if (ViewUtil.getUIManagerType(view) != UIManagerType.FABRIC + && borderRadius != null + && borderRadius.getUnit() == LengthPercentageType.PERCENT) { + borderRadius = null; + } + if (ReactNativeFeatureFlags.enableBackgroundStyleApplicator()) { BackgroundStyleApplicator.setBorderRadius( view, BorderRadiusProp.values()[index], borderRadius);