From 8b69b0e6f3c68b880bdfe37d1b4c4c199001643a Mon Sep 17 00:00:00 2001 From: Pieter De Baets Date: Tue, 1 Oct 2024 06:42:01 -0700 Subject: [PATCH] Fix BoxShadow support for platform colors (#46753) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/46753 Colors can be more than just ints, so we need to use `ColorPropConverter` to convert it correctly. For ViewManagers, this happens automatically through the ReactProp annotation, but since this is a nested field, we need to manually apply it. Changelog: [Android][Fixed] BoxShadow now supports platformColor. Reviewed By: fabriziocucci Differential Revision: D63693048 --- .../ReactAndroid/api/ReactAndroid.api | 4 ++-- .../react/uimanager/BackgroundStyleApplicator.kt | 2 +- .../facebook/react/uimanager/style/BoxShadow.kt | 15 +++++++++++++-- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/packages/react-native/ReactAndroid/api/ReactAndroid.api b/packages/react-native/ReactAndroid/api/ReactAndroid.api index 08145b0c6cc7..695bc55d5e8b 100644 --- a/packages/react-native/ReactAndroid/api/ReactAndroid.api +++ b/packages/react-native/ReactAndroid/api/ReactAndroid.api @@ -6125,12 +6125,12 @@ public final class com/facebook/react/uimanager/style/BoxShadow { public final fun getOffsetY ()F public final fun getSpreadDistance ()Ljava/lang/Float; public fun hashCode ()I - public static final fun parse (Lcom/facebook/react/bridge/ReadableMap;)Lcom/facebook/react/uimanager/style/BoxShadow; + public static final fun parse (Lcom/facebook/react/bridge/ReadableMap;Landroid/content/Context;)Lcom/facebook/react/uimanager/style/BoxShadow; public fun toString ()Ljava/lang/String; } public final class com/facebook/react/uimanager/style/BoxShadow$Companion { - public final fun parse (Lcom/facebook/react/bridge/ReadableMap;)Lcom/facebook/react/uimanager/style/BoxShadow; + public final fun parse (Lcom/facebook/react/bridge/ReadableMap;Landroid/content/Context;)Lcom/facebook/react/uimanager/style/BoxShadow; } public final class com/facebook/react/uimanager/style/ComputedBorderRadius { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/BackgroundStyleApplicator.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/BackgroundStyleApplicator.kt index 3c0441d72cc6..50724f23a6f7 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/BackgroundStyleApplicator.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/BackgroundStyleApplicator.kt @@ -255,7 +255,7 @@ public object BackgroundStyleApplicator { val shadowStyles = mutableListOf() for (i in 0.. boxShadow.getInt("color") + ReadableType.Map -> ColorPropConverter.getColor(boxShadow.getMap("color"), context) + else -> throw JSApplicationCausedNativeException("Unsupported color type ${type}") + } + } else null val blurRadius = if (boxShadow.hasKey("blurRadius")) boxShadow.getDouble("blurRadius").toFloat() else null val spreadDistance =