Skip to content

Commit 6747cd2

Browse files
awmetameta-codesync[bot]
authored andcommitted
Adjust padding for bottom inset (#56277)
Summary: Pull Request resolved: #56277 Changelog: [Internal] For scrollaway, we additionally need to add a bottom inset to the tab's ReactScrollView. We can do so by setting the bottom padding. This diff does that and also refreshes some of the react API/code to work altogether Reviewed By: javache Differential Revision: D97512076 fbshipit-source-id: 278d756919a98525e2285caa99764a39fe2c2d07
1 parent 185a613 commit 6747cd2

File tree

4 files changed

+48
-26
lines changed

4 files changed

+48
-26
lines changed

packages/react-native/ReactAndroid/api/ReactAndroid.api

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5735,8 +5735,8 @@ public class com/facebook/react/views/scroll/ReactScrollView : android/widget/Sc
57355735
public fun setPointerEvents (Lcom/facebook/react/uimanager/PointerEvents;)V
57365736
public fun setReactScrollViewScrollState (Lcom/facebook/react/views/scroll/ReactScrollViewHelper$ReactScrollViewScrollState;)V
57375737
public fun setRemoveClippedSubviews (Z)V
5738-
public fun setScrollAwayTopPaddingEnabledUnstable (I)V
5739-
public fun setScrollAwayTopPaddingEnabledUnstable (IZ)V
5738+
public fun setScrollAwayPaddingEnabledUnstable (II)V
5739+
public fun setScrollAwayPaddingEnabledUnstable (IIZ)V
57405740
public fun setScrollEnabled (Z)V
57415741
public fun setScrollEventThrottle (I)V
57425742
public fun setScrollPerfTag (Ljava/lang/String;)V
@@ -5858,21 +5858,23 @@ public abstract interface class com/facebook/react/views/scroll/ReactScrollViewH
58585858

58595859
public final class com/facebook/react/views/scroll/ReactScrollViewHelper$ReactScrollViewScrollState {
58605860
public fun <init> ()V
5861-
public fun <init> (Landroid/graphics/Point;ILandroid/graphics/Point;ZZFZ)V
5862-
public synthetic fun <init> (Landroid/graphics/Point;ILandroid/graphics/Point;ZZFZILkotlin/jvm/internal/DefaultConstructorMarker;)V
5861+
public fun <init> (Landroid/graphics/Point;IILandroid/graphics/Point;ZZFZ)V
5862+
public synthetic fun <init> (Landroid/graphics/Point;IILandroid/graphics/Point;ZZFZILkotlin/jvm/internal/DefaultConstructorMarker;)V
58635863
public final fun component1 ()Landroid/graphics/Point;
58645864
public final fun component2 ()I
5865-
public final fun component3 ()Landroid/graphics/Point;
5866-
public final fun component4 ()Z
5865+
public final fun component3 ()I
5866+
public final fun component4 ()Landroid/graphics/Point;
58675867
public final fun component5 ()Z
5868-
public final fun component6 ()F
5869-
public final fun component7 ()Z
5870-
public final fun copy (Landroid/graphics/Point;ILandroid/graphics/Point;ZZFZ)Lcom/facebook/react/views/scroll/ReactScrollViewHelper$ReactScrollViewScrollState;
5871-
public static synthetic fun copy$default (Lcom/facebook/react/views/scroll/ReactScrollViewHelper$ReactScrollViewScrollState;Landroid/graphics/Point;ILandroid/graphics/Point;ZZFZILjava/lang/Object;)Lcom/facebook/react/views/scroll/ReactScrollViewHelper$ReactScrollViewScrollState;
5868+
public final fun component6 ()Z
5869+
public final fun component7 ()F
5870+
public final fun component8 ()Z
5871+
public final fun copy (Landroid/graphics/Point;IILandroid/graphics/Point;ZZFZ)Lcom/facebook/react/views/scroll/ReactScrollViewHelper$ReactScrollViewScrollState;
5872+
public static synthetic fun copy$default (Lcom/facebook/react/views/scroll/ReactScrollViewHelper$ReactScrollViewScrollState;Landroid/graphics/Point;IILandroid/graphics/Point;ZZFZILjava/lang/Object;)Lcom/facebook/react/views/scroll/ReactScrollViewHelper$ReactScrollViewScrollState;
58725873
public fun equals (Ljava/lang/Object;)Z
58735874
public final fun getDecelerationRate ()F
58745875
public final fun getFinalAnimatedPositionScroll ()Landroid/graphics/Point;
58755876
public final fun getLastStateUpdateScroll ()Landroid/graphics/Point;
5877+
public final fun getScrollAwayPaddingBottom ()I
58765878
public final fun getScrollAwayPaddingTop ()I
58775879
public fun hashCode ()I
58785880
public final fun isCanceled ()Z
@@ -5883,6 +5885,7 @@ public final class com/facebook/react/views/scroll/ReactScrollViewHelper$ReactSc
58835885
public final fun setFinalAnimatedPositionScroll (II)Lcom/facebook/react/views/scroll/ReactScrollViewHelper$ReactScrollViewScrollState;
58845886
public final fun setFinished (Z)V
58855887
public final fun setLastStateUpdateScroll (II)Lcom/facebook/react/views/scroll/ReactScrollViewHelper$ReactScrollViewScrollState;
5888+
public final fun setScrollAwayPaddingBottom (I)V
58865889
public final fun setScrollAwayPaddingTop (I)V
58875890
public final fun setUpdatedByScroll (Z)V
58885891
public fun toString ()Ljava/lang/String;

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactNestedScrollView.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<f31741d016231b75604a72aa89dd6923>>
7+
* @generated SignedSource<<dd8221f4b150b4b3bec3dafd4b745482>>
88
*/
99

1010
/**
@@ -1527,11 +1527,12 @@ public void setBorderStyle(@Nullable String style) {
15271527
* and that you are **not** overriding the NestedScrollView content view to pass in a `translateY`
15281528
* style. `translateY` must never be set from ReactJS while using this feature!
15291529
*/
1530-
public void setScrollAwayTopPaddingEnabledUnstable(int topPadding) {
1531-
setScrollAwayTopPaddingEnabledUnstable(topPadding, true);
1530+
public void setScrollAwayPaddingEnabledUnstable(int topPadding, int bottomPadding) {
1531+
setScrollAwayPaddingEnabledUnstable(topPadding, bottomPadding, true);
15321532
}
15331533

1534-
public void setScrollAwayTopPaddingEnabledUnstable(int topPadding, boolean updateState) {
1534+
public void setScrollAwayPaddingEnabledUnstable(
1535+
int topPadding, int bottomPadding, boolean updateState) {
15351536
int count = getChildCount();
15361537

15371538
Assertions.assertCondition(
@@ -1548,17 +1549,18 @@ public void setScrollAwayTopPaddingEnabledUnstable(int topPadding, boolean updat
15481549
// Add the topPadding value as the bottom padding for the NestedScrollView.
15491550
// Otherwise, we'll push down the contents of the scroll view down too
15501551
// far off screen.
1551-
setPadding(0, 0, 0, topPadding);
1552+
setPadding(0, 0, 0, topPadding + bottomPadding);
15521553
}
15531554

15541555
if (updateState) {
1555-
updateScrollAwayState(topPadding);
1556+
updateScrollAwayState(topPadding, bottomPadding);
15561557
}
15571558
setRemoveClippedSubviews(mRemoveClippedSubviews);
15581559
}
15591560

1560-
private void updateScrollAwayState(int scrollAwayPaddingTop) {
1561+
private void updateScrollAwayState(int scrollAwayPaddingTop, int scrollAwayPaddingBottom) {
15611562
getReactScrollViewScrollState().setScrollAwayPaddingTop(scrollAwayPaddingTop);
1563+
getReactScrollViewScrollState().setScrollAwayPaddingBottom(scrollAwayPaddingBottom);
15621564
ReactScrollViewHelper.forceUpdateState(this);
15631565
}
15641566

@@ -1567,7 +1569,8 @@ public void setReactScrollViewScrollState(ReactScrollViewScrollState scrollState
15671569
mReactScrollViewScrollState = scrollState;
15681570
if (ReactNativeFeatureFlags.enableViewCulling()
15691571
|| ReactNativeFeatureFlags.useTraitHiddenOnAndroid()) {
1570-
setScrollAwayTopPaddingEnabledUnstable(scrollState.getScrollAwayPaddingTop(), false);
1572+
setScrollAwayPaddingEnabledUnstable(
1573+
scrollState.getScrollAwayPaddingTop(), scrollState.getScrollAwayPaddingBottom(), false);
15711574

15721575
Point scrollPosition = scrollState.getLastStateUpdateScroll();
15731576
scrollTo(scrollPosition.x, scrollPosition.y);

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1519,11 +1519,12 @@ public void setBorderStyle(@Nullable String style) {
15191519
* and that you are **not** overriding the ScrollView content view to pass in a `translateY`
15201520
* style. `translateY` must never be set from ReactJS while using this feature!
15211521
*/
1522-
public void setScrollAwayTopPaddingEnabledUnstable(int topPadding) {
1523-
setScrollAwayTopPaddingEnabledUnstable(topPadding, true);
1522+
public void setScrollAwayPaddingEnabledUnstable(int topPadding, int bottomPadding) {
1523+
setScrollAwayPaddingEnabledUnstable(topPadding, bottomPadding, true);
15241524
}
15251525

1526-
public void setScrollAwayTopPaddingEnabledUnstable(int topPadding, boolean updateState) {
1526+
public void setScrollAwayPaddingEnabledUnstable(
1527+
int topPadding, int bottomPadding, boolean updateState) {
15271528
int count = getChildCount();
15281529

15291530
Assertions.assertCondition(
@@ -1540,17 +1541,18 @@ public void setScrollAwayTopPaddingEnabledUnstable(int topPadding, boolean updat
15401541
// Add the topPadding value as the bottom padding for the ScrollView.
15411542
// Otherwise, we'll push down the contents of the scroll view down too
15421543
// far off screen.
1543-
setPadding(0, 0, 0, topPadding);
1544+
setPadding(0, 0, 0, topPadding + bottomPadding);
15441545
}
15451546

15461547
if (updateState) {
1547-
updateScrollAwayState(topPadding);
1548+
updateScrollAwayState(topPadding, bottomPadding);
15481549
}
15491550
setRemoveClippedSubviews(mRemoveClippedSubviews);
15501551
}
15511552

1552-
private void updateScrollAwayState(int scrollAwayPaddingTop) {
1553+
private void updateScrollAwayState(int scrollAwayPaddingTop, int scrollAwayPaddingBottom) {
15531554
getReactScrollViewScrollState().setScrollAwayPaddingTop(scrollAwayPaddingTop);
1555+
getReactScrollViewScrollState().setScrollAwayPaddingBottom(scrollAwayPaddingBottom);
15541556
ReactScrollViewHelper.forceUpdateState(this);
15551557
}
15561558

@@ -1559,7 +1561,8 @@ public void setReactScrollViewScrollState(ReactScrollViewScrollState scrollState
15591561
mReactScrollViewScrollState = scrollState;
15601562
if (ReactNativeFeatureFlags.enableViewCulling()
15611563
|| ReactNativeFeatureFlags.useTraitHiddenOnAndroid()) {
1562-
setScrollAwayTopPaddingEnabledUnstable(scrollState.getScrollAwayPaddingTop(), false);
1564+
setScrollAwayPaddingEnabledUnstable(
1565+
scrollState.getScrollAwayPaddingTop(), scrollState.getScrollAwayPaddingBottom(), false);
15631566

15641567
Point scrollPosition = scrollState.getLastStateUpdateScroll();
15651568
scrollTo(scrollPosition.x, scrollPosition.y);

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewHelper.kt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public object ReactScrollViewHelper {
4444
private const val CONTENT_OFFSET_LEFT = "contentOffsetLeft"
4545
private const val CONTENT_OFFSET_TOP = "contentOffsetTop"
4646
private const val SCROLL_AWAY_PADDING_TOP = "scrollAwayPaddingTop"
47+
private const val SCROLL_AWAY_PADDING_BOTTOM = "scrollAwayPaddingBottom"
4748

4849
public const val MOMENTUM_DELAY: Long = 20
4950
public const val OVER_SCROLL_ALWAYS: String = "always"
@@ -372,6 +373,7 @@ public object ReactScrollViewHelper {
372373
where T : HasScrollState?, T : HasStateWrapper?, T : ViewGroup {
373374
val scrollState = scrollView.reactScrollViewScrollState
374375
val scrollAwayPaddingTop = scrollState.scrollAwayPaddingTop
376+
val scrollAwayPaddingBottom = scrollState.scrollAwayPaddingBottom
375377
val scrollPos = scrollState.lastStateUpdateScroll
376378
val scrollX = scrollPos.x
377379
val scrollY = scrollPos.y
@@ -393,6 +395,10 @@ public object ReactScrollViewHelper {
393395
SCROLL_AWAY_PADDING_TOP,
394396
toDIPFromPixel(scrollAwayPaddingTop.toFloat()).toDouble(),
395397
)
398+
newStateData.putDouble(
399+
SCROLL_AWAY_PADDING_BOTTOM,
400+
toDIPFromPixel(scrollAwayPaddingBottom.toFloat()).toDouble(),
401+
)
396402
stateWrapper.updateState(newStateData)
397403
}
398404
}
@@ -413,9 +419,14 @@ public object ReactScrollViewHelper {
413419
val scrollX = toPixelFromDIP(stateData.getDouble(CONTENT_OFFSET_LEFT)).toInt()
414420
val scrollY = toPixelFromDIP(stateData.getDouble(CONTENT_OFFSET_TOP)).toInt()
415421
val scrollAwayPaddingTop = toPixelFromDIP(stateData.getDouble(SCROLL_AWAY_PADDING_TOP)).toInt()
422+
val scrollAwayPaddingBottom =
423+
toPixelFromDIP(stateData.getDouble(SCROLL_AWAY_PADDING_BOTTOM)).toInt()
416424

417425
val scrollState =
418-
scrollView.reactScrollViewScrollState.copy(scrollAwayPaddingTop = scrollAwayPaddingTop)
426+
scrollView.reactScrollViewScrollState.copy(
427+
scrollAwayPaddingTop = scrollAwayPaddingTop,
428+
scrollAwayPaddingBottom = scrollAwayPaddingBottom,
429+
)
419430
scrollState.setLastStateUpdateScroll(scrollX, scrollY)
420431
scrollView.reactScrollViewScrollState = scrollState
421432
}
@@ -622,6 +633,8 @@ public object ReactScrollViewHelper {
622633
val finalAnimatedPositionScroll: Point = Point(),
623634
/** Get the padding on the top for nav bar */
624635
var scrollAwayPaddingTop: Int = 0,
636+
/** Get the padding on the bottom for tab bar */
637+
var scrollAwayPaddingBottom: Int = 0,
625638
/** Get the Fabric state of last scroll position */
626639
val lastStateUpdateScroll: Point = Point(-1, -1),
627640
/** Get true if the previous animation was canceled */

0 commit comments

Comments
 (0)