From 033ac15763e1839d8ae0d025b3a3d3bfa7d47e9a Mon Sep 17 00:00:00 2001 From: Jorge Cabiedes Acosta Date: Wed, 12 Mar 2025 12:39:22 -0700 Subject: [PATCH] Add nullptr checks for findNextFocusableView Summary: We were missing some null checks that could cause a crash. There seems to be some cases where either the parent or the currently focused View are present on Android's hierarchy but not present on the Shadow Tree, in this cases we can just return a nullptr to fall back to default focusing behavior on Android. Reviewed By: joevilches Differential Revision: D71050870 --- .../src/main/jni/react/fabric/FabricUIManagerBinding.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.cpp index 67d4e124ef18..f7a13acc1791 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.cpp @@ -226,9 +226,18 @@ jfloatArray FabricUIManagerBinding::findNextFocusableElementMetrics( std::shared_ptr uimanager = getScheduler()->getUIManager(); parentShadowNode = uimanager->findShadowNodeByTag_DEPRECATED(parentTag); + + if (parentShadowNode == nullptr) { + return nullptr; + } + focusedShadowNode = FocusOrderingHelper::findShadowNodeByTagRecursively( parentShadowNode, focusedTag); + if (focusedShadowNode == nullptr) { + return nullptr; + } + LayoutMetrics childLayoutMetrics = uimanager->getRelativeLayoutMetrics( *focusedShadowNode, parentShadowNode.get(), {.includeTransform = true});