@@ -434,17 +434,19 @@ private AnimatorSet getButtonsTranslationAnimator(boolean show) {
434434 }
435435
436436 private void addBackButtonTranslationAnimatorIfNeeded (AnimatorSet animatorSet ) {
437- ImageButton backButton = ToolbarUtils .getNavigationIconButton (toolbar );
438- if (backButton == null ) {
437+ ImageButton searchViewBackButton = ToolbarUtils .getNavigationIconButton (toolbar );
438+ if (searchViewBackButton == null ) {
439439 return ;
440440 }
441+ ImageButton searchBarBackButton = ToolbarUtils .getNavigationIconButton (searchBar );
441442
442443 ValueAnimator backButtonAnimatorX =
443- ValueAnimator .ofFloat (getFromTranslationXStart (backButton ), 0 );
444- backButtonAnimatorX .addUpdateListener (MultiViewUpdateListener .translationXListener (backButton ));
444+ ValueAnimator .ofFloat (
445+ getTranslationXBetweenViews (searchBarBackButton , searchViewBackButton ), 0 );
446+ backButtonAnimatorX .addUpdateListener (MultiViewUpdateListener .translationXListener (searchViewBackButton ));
445447
446448 ValueAnimator backButtonAnimatorY = ValueAnimator .ofFloat (getFromTranslationY (), 0 );
447- backButtonAnimatorY .addUpdateListener (MultiViewUpdateListener .translationYListener (backButton ));
449+ backButtonAnimatorY .addUpdateListener (MultiViewUpdateListener .translationYListener (searchViewBackButton ));
448450
449451 animatorSet .playTogether (backButtonAnimatorX , backButtonAnimatorY );
450452 }
@@ -508,19 +510,21 @@ private void setFullDrawableProgressIfNeeded(Drawable drawable) {
508510 }
509511
510512 private void addActionMenuViewAnimatorIfNeeded (AnimatorSet animatorSet ) {
511- ActionMenuView actionMenuView = ToolbarUtils .getActionMenuView (toolbar );
512- if (actionMenuView == null ) {
513+ ActionMenuView searchViewActionMenuView = ToolbarUtils .getActionMenuView (toolbar );
514+ if (searchViewActionMenuView == null ) {
513515 return ;
514516 }
517+ ActionMenuView searchBarActionMenuView = ToolbarUtils .getActionMenuView (searchBar );
515518
516519 ValueAnimator actionMenuViewAnimatorX =
517- ValueAnimator .ofFloat (getFromTranslationXEnd (actionMenuView ), 0 );
520+ ValueAnimator .ofFloat (
521+ getTranslationXBetweenViews (searchBarActionMenuView , searchViewActionMenuView ), 0 );
518522 actionMenuViewAnimatorX .addUpdateListener (
519- MultiViewUpdateListener .translationXListener (actionMenuView ));
523+ MultiViewUpdateListener .translationXListener (searchViewActionMenuView ));
520524
521525 ValueAnimator actionMenuViewAnimatorY = ValueAnimator .ofFloat (getFromTranslationY (), 0 );
522526 actionMenuViewAnimatorY .addUpdateListener (
523- MultiViewUpdateListener .translationYListener (actionMenuView ));
527+ MultiViewUpdateListener .translationYListener (searchViewActionMenuView ));
524528
525529 animatorSet .playTogether (actionMenuViewAnimatorX , actionMenuViewAnimatorY );
526530 }
@@ -663,19 +667,32 @@ private Animator getTranslationAnimator(boolean show, View view, int startX, int
663667 return animatorSet ;
664668 }
665669
666- private int getFromTranslationXStart (View view ) {
667- int marginStart = ((MarginLayoutParams ) view .getLayoutParams ()).getMarginStart ();
668- int paddingStart = searchBar .getPaddingStart ();
669- return ViewUtils .isLayoutRtl (searchBar )
670- ? searchBar .getWidth () - searchBar .getRight () + marginStart - paddingStart
671- : searchBar .getLeft () - marginStart + paddingStart ;
670+ private int getTranslationXBetweenViews (
671+ @ Nullable View searchBarSubView , @ NonNull View searchViewSubView ) {
672+ // If there is no equivalent for the SearchView subview in the SearchBar, we return the
673+ // translation between the SearchBar and the start of the SearchView subview
674+ if (searchBarSubView == null ) {
675+ int marginStart = ((MarginLayoutParams ) searchViewSubView .getLayoutParams ()).getMarginStart ();
676+ int paddingStart = searchBar .getPaddingStart ();
677+ int searchBarLeft = getViewLeftFromSearchViewParent (searchBar );
678+ return ViewUtils .isLayoutRtl (searchBar )
679+ ? searchBarLeft
680+ + searchBar .getWidth ()
681+ + marginStart
682+ - paddingStart
683+ - searchView .getRight ()
684+ : (searchBarLeft - marginStart + paddingStart );
685+ }
686+ return getViewLeftFromSearchViewParent (searchBarSubView )
687+ - getViewLeftFromSearchViewParent (searchViewSubView );
672688 }
673689
674690 private int getFromTranslationXEnd (View view ) {
675691 int marginEnd = ((MarginLayoutParams ) view .getLayoutParams ()).getMarginEnd ();
692+ int viewLeft = getViewLeftFromSearchViewParent (searchBar );
676693 return ViewUtils .isLayoutRtl (searchBar )
677- ? searchBar . getLeft () - marginEnd
678- : searchBar .getRight () - searchView .getWidth () + marginEnd ;
694+ ? viewLeft - marginEnd
695+ : viewLeft + searchBar .getWidth () + marginEnd - searchView .getWidth ();
679696 }
680697
681698 private int getFromTranslationY () {
0 commit comments