You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fix keyboard navigation for FlatList with removeClippedSubviews enabled (facebook#49543)
Summary:
Pull Request resolved: facebook#49543
When using `ReactScrollView` or `ReactHorizontalScrollView` Views with `removeClippedSubviews` keyboard navigation didn't work.
This is because keyboard navigation relies on Android's View hierarchy to find the next focusable element. With `removeClippedSubviews` the next View might've been removed from the hierarchy.
With this change we delegate the job of figuring out the next focusable element to the Shadow Tree, which will always contain layout information of the next element of the ScrollView.
Changelog: [Android][Fixed] - Fix keyboard navigation on lists with `removeClippedSubviews` enabled
Reviewed By: joevilches
Differential Revision: D69618406
fbshipit-source-id: 1df7f90066dfc685e74a89b29222937777714b87
Copy file name to clipboardexpand all lines: packages/react-native/ReactAndroid/api/ReactAndroid.api
+12
Original file line number
Diff line number
Diff line change
@@ -2396,6 +2396,7 @@ public class com/facebook/react/fabric/FabricUIManager : com/facebook/react/brid
2396
2396
public fun dispatchCommand (IILcom/facebook/react/bridge/ReadableArray;)V
2397
2397
public fun dispatchCommand (IILjava/lang/String;Lcom/facebook/react/bridge/ReadableArray;)V
2398
2398
public fun dispatchCommand (ILjava/lang/String;Lcom/facebook/react/bridge/ReadableArray;)V
2399
+
public fun findNextFocusableElementMetrics (III)Lcom/facebook/react/fabric/NextFocusableNode;
2399
2400
public fun getColor (I[Ljava/lang/String;)I
2400
2401
public fun getEventDispatcher ()Lcom/facebook/react/uimanager/events/EventDispatcher;
2401
2402
public fun getPerformanceCounters ()Ljava/util/Map;
@@ -2435,6 +2436,12 @@ public final class com/facebook/react/fabric/FabricUIManagerProviderImpl : com/f
2435
2436
public fun createUIManager (Lcom/facebook/react/bridge/ReactApplicationContext;)Lcom/facebook/react/bridge/UIManager;
2436
2437
}
2437
2438
2439
+
public final class com/facebook/react/fabric/NextFocusableNode {
2440
+
public fun <init> (IF)V
2441
+
public final fun getDeltaScroll ()F
2442
+
public final fun getId ()I
2443
+
}
2444
+
2438
2445
public class com/facebook/react/fabric/StateWrapperImpl : com/facebook/jni/HybridClassBase, com/facebook/react/uimanager/StateWrapper {
2439
2446
public fun destroyState ()V
2440
2447
public fun getStateData ()Lcom/facebook/react/bridge/ReadableNativeMap;
@@ -6198,6 +6205,7 @@ public class com/facebook/react/views/scroll/ReactHorizontalScrollView : android
6198
6205
public fun executeKeyEvent (Landroid/view/KeyEvent;)Z
6199
6206
public fun flashScrollIndicators ()V
6200
6207
public fun fling (I)V
6208
+
public fun focusSearch (Landroid/view/View;I)Landroid/view/View;
6201
6209
public fun getChildVisibleRect (Landroid/view/View;Landroid/graphics/Rect;Landroid/graphics/Point;)Z
6202
6210
public fun getClippingRect (Landroid/graphics/Rect;)V
6203
6211
public fun getFlingAnimator ()Landroid/animation/ValueAnimator;
@@ -6320,6 +6328,7 @@ public class com/facebook/react/views/scroll/ReactScrollView : android/widget/Sc
6320
6328
public fun executeKeyEvent (Landroid/view/KeyEvent;)Z
6321
6329
public fun flashScrollIndicators ()V
6322
6330
public fun fling (I)V
6331
+
public fun focusSearch (Landroid/view/View;I)Landroid/view/View;
6323
6332
public fun getChildVisibleRect (Landroid/view/View;Landroid/graphics/Rect;Landroid/graphics/Point;)Z
6324
6333
public fun getClippingRect (Landroid/graphics/Rect;)V
6325
6334
public fun getFlingAnimator ()Landroid/animation/ValueAnimator;
@@ -6440,6 +6449,8 @@ public final class com/facebook/react/views/scroll/ReactScrollViewHelper {
6440
6449
public static final fun emitScrollEvent (Landroid/view/ViewGroup;FF)V
6441
6450
public static final fun emitScrollMomentumBeginEvent (Landroid/view/ViewGroup;II)V
6442
6451
public static final fun emitScrollMomentumEndEvent (Landroid/view/ViewGroup;)V
6452
+
public static final fun findNextClippedElement (Landroid/view/ViewGroup;Landroid/view/View;ILcom/facebook/react/bridge/ReactContext;)Landroid/view/View;
6453
+
public static final fun findNextFocusableView (Landroid/view/ViewGroup;Landroid/view/View;IZ)Landroid/view/View;
6443
6454
public static final fun forceUpdateState (Landroid/view/ViewGroup;)V
6444
6455
public static final fun getDefaultScrollAnimationDuration (Landroid/content/Context;)I
6445
6456
public static final fun getNextFlingStartValue (Landroid/view/ViewGroup;III)I
@@ -6449,6 +6460,7 @@ public final class com/facebook/react/views/scroll/ReactScrollViewHelper {
6449
6460
public final fun registerFlingAnimator (Landroid/view/ViewGroup;)V
6450
6461
public static final fun removeLayoutChangeListener (Lcom/facebook/react/views/scroll/ReactScrollViewHelper$LayoutChangeListener;)V
6451
6462
public static final fun removeScrollListener (Lcom/facebook/react/views/scroll/ReactScrollViewHelper$ScrollListener;)V
6463
+
public static final fun resolveAbsoluteDirection (IZI)I
6452
6464
public static final fun smoothScrollTo (Landroid/view/ViewGroup;II)V
6453
6465
public static final fun updateFabricScrollState (Landroid/view/ViewGroup;)V
6454
6466
public final fun updateFabricScrollState (Landroid/view/ViewGroup;II)V
Copy file name to clipboardexpand all lines: packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java
0 commit comments