diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManagerDelegate.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManagerDelegate.kt index 9fca177f3b1..4dcee187f60 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManagerDelegate.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManagerDelegate.kt @@ -104,7 +104,12 @@ public abstract class BaseViewManagerDelegate< mViewManager.setAccessibilityLabelledBy(view, dynamicFromObject) } ViewProps.OPACITY -> mViewManager.setOpacity(view, (value as Double?)?.toFloat() ?: 1.0f) - ViewProps.OUTLINE_COLOR -> mViewManager.setOutlineColor(view, value as Int?) + ViewProps.OUTLINE_COLOR -> + mViewManager.setOutlineColor( + view, + // Use the overload without a default value to preserve outlineColor's nullable contract. + ColorPropConverter.getColor(value, view.context), + ) ViewProps.OUTLINE_OFFSET -> mViewManager.setOutlineOffset( diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerDelegateTest.java b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerDelegateTest.java new file mode 100644 index 00000000000..a73ccf86222 --- /dev/null +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerDelegateTest.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +package com.facebook.react.uimanager; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +import com.facebook.react.bridge.BridgeReactContext; +import com.facebook.react.views.view.ReactViewGroup; +import com.facebook.react.views.view.ReactViewManager; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; + +@RunWith(RobolectricTestRunner.class) +public class BaseViewManagerDelegateTest { + private ReactViewManager viewManager; + private ReactViewGroup view; + private BaseViewManagerDelegate delegate; + + @Before + public void setUp() { + viewManager = mock(ReactViewManager.class); + BridgeReactContext context = new BridgeReactContext(RuntimeEnvironment.getApplication()); + ThemedReactContext themedReactContext = new ThemedReactContext(context, context, null, -1); + view = new ReactViewGroup(themedReactContext); + delegate = new BaseViewManagerDelegate<>(viewManager) {}; + } + + @Test + public void setOutlineColorConvertsDoubleToInt() { + int color = 0xFF336699; + + delegate.setProperty(view, ViewProps.OUTLINE_COLOR, (double) color); + + verify(viewManager).setOutlineColor(view, color); + } +}