From e6b9508f12ffd732d773ddcf9c2f633b0eca4232 Mon Sep 17 00:00:00 2001 From: Pieter De Baets Date: Wed, 30 Jun 2021 01:18:43 -0700 Subject: [PATCH] Fix crash when PlatformColor is used as backgroundColor Summary: @public When PlatformColor is used with backgroundColor, this line would throw, as the object type is not convertible to int. Changelog: [Android][Fixed] - Fix Crash in ViewProps.isLayoutOnly Reviewed By: JoshuaGross Differential Revision: D29430151 fbshipit-source-id: a1fe801925430dad3a17871bdebb79d942775280 --- .../react/uimanager/interfaces/ViewProps.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/interfaces/ViewProps.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/interfaces/ViewProps.java index 2327b364980dae..61151919cc0db5 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/interfaces/ViewProps.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/interfaces/ViewProps.java @@ -9,6 +9,7 @@ import android.graphics.Color; import com.facebook.react.bridge.ReadableMap; +import com.facebook.react.bridge.ReadableType; import java.util.Arrays; import java.util.HashSet; @@ -258,10 +259,14 @@ public static boolean isLayoutOnly(ReadableMap map, String prop) { // Ignore if explicitly set to default opacity. return map.isNull(OPACITY) || map.getDouble(OPACITY) == 1d; case BORDER_RADIUS: // Without a background color or border width set, a border won't show. - if (map.hasKey(BACKGROUND_COLOR) - && !map.isNull(BACKGROUND_COLOR) - && map.getInt(BACKGROUND_COLOR) != Color.TRANSPARENT) { - return false; + if (map.hasKey(BACKGROUND_COLOR)) { + ReadableType valueType = map.getType(BACKGROUND_COLOR); + if (valueType == ReadableType.Number + && map.getInt(BACKGROUND_COLOR) != Color.TRANSPARENT) { + return false; + } else if (valueType != ReadableType.Null) { + return false; + } } if (map.hasKey(BORDER_WIDTH) && !map.isNull(BORDER_WIDTH)