diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt index d987635b424..c47f67ce036 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt @@ -416,6 +416,14 @@ public open class ReactViewGroup public constructor(context: Context?) : updateClippingToRect(clippingRect, excludedViews) } + internal fun requestFocusFromJS() { + super.requestFocus(FOCUS_DOWN, null) + } + + internal fun clearFocusFromJS() { + super.clearFocus() + } + override fun endViewTransition(view: View) { super.endViewTransition(view) childrenRemovedWhileTransitioning?.remove(view.id) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.kt index 6c2d3bd52dc..424b724abe2 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.kt @@ -404,6 +404,8 @@ public open class ReactViewManager : ReactClippingViewManager() when (commandId) { HOTSPOT_UPDATE_KEY -> handleHotspotUpdate(root, args) "setPressed" -> handleSetPressed(root, args) + "focus" -> handleFocus(root) + "blur" -> handleBlur(root) else -> {} } } @@ -428,4 +430,16 @@ public open class ReactViewManager : ReactClippingViewManager() val y = args.getDouble(1).dpToPx() root.drawableHotspotChanged(x, y) } + + private fun handleFocus(root: ReactViewGroup) { + if (ReactNativeFeatureFlags.enableImperativeFocus()) { + root.requestFocusFromJS() + } + } + + private fun handleBlur(root: ReactViewGroup) { + if (ReactNativeFeatureFlags.enableImperativeFocus()) { + root.clearFocusFromJS() + } + } }