From b01e2bc399391da309261ab1ad1ab8fdd231a23e Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Fri, 29 Jul 2022 12:24:30 -0600 Subject: [PATCH 1/2] [BottomSheetBehavior] Check for shouldSkipHalfExpandedWhenDragging to nested scrolling implementation Make `onStopNestedScroll` check to `shouldSkipHalfExpandedWhenDragging` before trying to set it's state to `STATE_EXPANDED`. This prevents the STATE_EXPANDED state from appearing even when `shouldSkipHalfExpandedWhenDragging` is set to true. --- .../bottomsheet/BottomSheetBehavior.java | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/lib/java/com/google/android/material/bottomsheet/BottomSheetBehavior.java b/lib/java/com/google/android/material/bottomsheet/BottomSheetBehavior.java index e071aa10774..c2a5508ac67 100644 --- a/lib/java/com/google/android/material/bottomsheet/BottomSheetBehavior.java +++ b/lib/java/com/google/android/material/bottomsheet/BottomSheetBehavior.java @@ -768,10 +768,14 @@ public void onStopNestedScroll( targetState = STATE_EXPANDED; } else { int currentTop = child.getTop(); - if (currentTop > halfExpandedOffset) { - targetState = STATE_HALF_EXPANDED; - } else { + if (currentTop < halfExpandedOffset) { targetState = STATE_EXPANDED; + } else { + if (shouldSkipHalfExpandedStateWhenDragging()) { + targetState = STATE_EXPANDED; + } else { + targetState = STATE_HALF_EXPANDED; + } } } } else if (hideable && shouldHide(child, getYVelocity())) { @@ -796,10 +800,14 @@ public void onStopNestedScroll( } } } else { - if (Math.abs(currentTop - halfExpandedOffset) < Math.abs(currentTop - collapsedOffset)) { - targetState = STATE_HALF_EXPANDED; - } else { + if (shouldSkipHalfExpandedStateWhenDragging()) { targetState = STATE_COLLAPSED; + } else { + if (Math.abs(currentTop - halfExpandedOffset) < Math.abs(currentTop - collapsedOffset)) { + targetState = STATE_HALF_EXPANDED; + } else { + targetState = STATE_COLLAPSED; + } } } } @@ -809,10 +817,14 @@ public void onStopNestedScroll( } else { // Settle to nearest height. int currentTop = child.getTop(); - if (Math.abs(currentTop - halfExpandedOffset) < Math.abs(currentTop - collapsedOffset)) { - targetState = STATE_HALF_EXPANDED; - } else { + if (shouldSkipHalfExpandedStateWhenDragging()) { targetState = STATE_COLLAPSED; + } else { + if (Math.abs(currentTop - halfExpandedOffset) < Math.abs(currentTop - collapsedOffset)) { + targetState = STATE_HALF_EXPANDED; + } else { + targetState = STATE_COLLAPSED; + } } } } From 75649545e5b4fe82aa6fd4059ef5ec26c4b8ecff Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Fri, 29 Jul 2022 12:56:13 -0600 Subject: [PATCH 2/2] [BottomSheetBehavior] Clean up nested ifs on onStopNestedScroll Clean up nested ifs in onStopNestedScroll where an OR would suffice. --- .../bottomsheet/BottomSheetBehavior.java | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/lib/java/com/google/android/material/bottomsheet/BottomSheetBehavior.java b/lib/java/com/google/android/material/bottomsheet/BottomSheetBehavior.java index c2a5508ac67..8d017e1fdc8 100644 --- a/lib/java/com/google/android/material/bottomsheet/BottomSheetBehavior.java +++ b/lib/java/com/google/android/material/bottomsheet/BottomSheetBehavior.java @@ -800,14 +800,10 @@ public void onStopNestedScroll( } } } else { - if (shouldSkipHalfExpandedStateWhenDragging()) { + if (shouldSkipHalfExpandedStateWhenDragging() || Math.abs(currentTop - halfExpandedOffset) >= Math.abs(currentTop - collapsedOffset)) { targetState = STATE_COLLAPSED; } else { - if (Math.abs(currentTop - halfExpandedOffset) < Math.abs(currentTop - collapsedOffset)) { - targetState = STATE_HALF_EXPANDED; - } else { - targetState = STATE_COLLAPSED; - } + targetState = STATE_HALF_EXPANDED; } } } @@ -817,14 +813,10 @@ public void onStopNestedScroll( } else { // Settle to nearest height. int currentTop = child.getTop(); - if (shouldSkipHalfExpandedStateWhenDragging()) { + if (shouldSkipHalfExpandedStateWhenDragging() || Math.abs(currentTop - halfExpandedOffset) >= Math.abs(currentTop - collapsedOffset)) { targetState = STATE_COLLAPSED; } else { - if (Math.abs(currentTop - halfExpandedOffset) < Math.abs(currentTop - collapsedOffset)) { - targetState = STATE_HALF_EXPANDED; - } else { - targetState = STATE_COLLAPSED; - } + targetState = STATE_HALF_EXPANDED; } } }