From 7435ea2e1843beb1485603d97cf8be355803e1f0 Mon Sep 17 00:00:00 2001 From: HURRAEY Date: Wed, 15 Jul 2026 16:19:40 +0900 Subject: [PATCH 1/2] fix(android): convert outlineColor values before delegation --- .../uimanager/BaseViewManagerDelegate.kt | 7 ++- .../BaseViewManagerDelegateTest.java | 45 +++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerDelegateTest.java 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 9fca177f3b14..38482139bece 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, + // outlineColor의 nullable 계약을 보존하기 위해 기본값이 없는 변환을 사용한다. + 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 000000000000..a73ccf862222 --- /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); + } +} From ee60ce2eb8840b3f2bc5c22da939c40a3e6206fe Mon Sep 17 00:00:00 2001 From: HURRAEY Date: Thu, 16 Jul 2026 10:59:35 +0900 Subject: [PATCH 2/2] docs(android): translate outlineColor comment --- .../com/facebook/react/uimanager/BaseViewManagerDelegate.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 38482139bece..4dcee187f60f 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 @@ -107,7 +107,7 @@ public abstract class BaseViewManagerDelegate< ViewProps.OUTLINE_COLOR -> mViewManager.setOutlineColor( view, - // outlineColor의 nullable 계약을 보존하기 위해 기본값이 없는 변환을 사용한다. + // Use the overload without a default value to preserve outlineColor's nullable contract. ColorPropConverter.getColor(value, view.context), )