diff --git a/lib/java/com/google/android/material/motion/MaterialMainContainerBackHelper.java b/lib/java/com/google/android/material/motion/MaterialMainContainerBackHelper.java index b15c99711cf..3e843a36ce4 100644 --- a/lib/java/com/google/android/material/motion/MaterialMainContainerBackHelper.java +++ b/lib/java/com/google/android/material/motion/MaterialMainContainerBackHelper.java @@ -92,17 +92,20 @@ public void startBackProgress(@NonNull BackEvent backEvent, @NonNull View collap @VisibleForTesting @RequiresApi(VERSION_CODES.UPSIDE_DOWN_CAKE) public void startBackProgress(float touchY, @NonNull View collapsedView) { - collapsedView.setVisibility(View.INVISIBLE); - initialHideToClipBounds = ViewUtils.calculateRectFromBounds(view); initialHideFromClipBounds = ViewUtils.calculateOffsetRectFromBounds(view, collapsedView); initialTouchY = touchY; } @RequiresApi(VERSION_CODES.UPSIDE_DOWN_CAKE) - public void updateBackProgress(@NonNull BackEvent backEvent, float collapsedCornerSize) { + public void updateBackProgress( + @NonNull BackEvent backEvent, @NonNull View collapsedView, float collapsedCornerSize) { super.onUpdateBackProgress(backEvent); + if (collapsedView.getVisibility() != View.INVISIBLE) { + collapsedView.setVisibility(View.INVISIBLE); + } + boolean leftSwipeEdge = backEvent.getSwipeEdge() == BackEvent.EDGE_LEFT; updateBackProgress( backEvent.getProgress(), leftSwipeEdge, backEvent.getTouchY(), collapsedCornerSize); diff --git a/lib/java/com/google/android/material/search/SearchViewAnimationHelper.java b/lib/java/com/google/android/material/search/SearchViewAnimationHelper.java index 2a54d8cd8ce..14f0b8805e0 100644 --- a/lib/java/com/google/android/material/search/SearchViewAnimationHelper.java +++ b/lib/java/com/google/android/material/search/SearchViewAnimationHelper.java @@ -615,23 +615,27 @@ private void setMenuItemsNotClickable(Toolbar toolbar) { @RequiresApi(VERSION_CODES.UPSIDE_DOWN_CAKE) void startBackProgress(@NonNull BackEvent backEvent) { backHelper.startBackProgress(backEvent, searchBar); - - if (searchView.isAdjustNothingSoftInputMode()) { - searchView.clearFocusAndHideKeyboard(); - } - - // Start and immediately pause the animator set so that we can seek it with setCurrentPlayTime() - // in updateBackProgress() when the progress value changes. - backProgressAnimatorSet = getButtonsProgressAnimator(/* show= */ false); - backProgressAnimatorSet.start(); - backProgressAnimatorSet.pause(); } @RequiresApi(VERSION_CODES.UPSIDE_DOWN_CAKE) public void updateBackProgress(@NonNull BackEvent backEvent) { - backHelper.updateBackProgress(backEvent, searchBar.getCornerSize()); + if (backEvent.getProgress() <= 0f) { + return; + } - if (backProgressAnimatorSet != null) { + backHelper.updateBackProgress(backEvent, searchBar, searchBar.getCornerSize()); + + if (backProgressAnimatorSet == null) { + if (searchView.isAdjustNothingSoftInputMode()) { + searchView.clearFocusAndHideKeyboard(); + } + + // Start and immediately pause the animator set so we can seek it with setCurrentPlayTime() in + // subsequent updateBackProgress() calls when the progress value changes. + backProgressAnimatorSet = getButtonsProgressAnimator(/* show= */ false); + backProgressAnimatorSet.start(); + backProgressAnimatorSet.pause(); + } else { backProgressAnimatorSet.setCurrentPlayTime( (long) (backEvent.getProgress() * backProgressAnimatorSet.getDuration())); }