From 0cf648917fcbea6c91406566639294caacfa6fa1 Mon Sep 17 00:00:00 2001 From: Abodunrinwa Toki Date: Thu, 17 Mar 2016 15:29:36 +0000 Subject: [PATCH] FloatingToolbar: Hide panels when they're invisible. This patch sets the visibility of a panel to INVISIBLE when it's alpha is 0. This will ensure that a user cannot interact with a view that cannot be seen. Not doing this resulted in a bug where the user will tap on an area of the toolbar and activate an unintended action. It also removes the redundant mResetOverflowButtonDrawable. It's actions are already performed in setPanelsStatesAtRestingPosition. Bug: 27693433 Change-Id: Iafcde23622c7d1604924c520f6748fdbb8b135e7 --- .../internal/widget/FloatingToolbar.java | 25 ++++++------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/core/java/com/android/internal/widget/FloatingToolbar.java b/core/java/com/android/internal/widget/FloatingToolbar.java index ce03bb81c08bc..86820306d634f 100644 --- a/core/java/com/android/internal/widget/FloatingToolbar.java +++ b/core/java/com/android/internal/widget/FloatingToolbar.java @@ -308,9 +308,6 @@ public final class FloatingToolbar { private static final int MIN_OVERFLOW_SIZE = 2; private static final int MAX_OVERFLOW_SIZE = 4; - /* The duration of the overflow button vector animation duration. */ - private static final int OVERFLOW_BUTTON_ANIMATION_DELAY = 400; - private final Context mContext; private final View mParent; // Parent for the popup window. private final PopupWindow mPopupWindow; @@ -377,18 +374,6 @@ public final class FloatingToolbar { } }; - /* Runnable to reset the overflow button's drawable after an overflow transition. */ - private final Runnable mResetOverflowButtonDrawable = new Runnable() { - @Override - public void run() { - if (mIsOverflowOpen) { - mOverflowButton.setImageDrawable(mArrow); - } else { - mOverflowButton.setImageDrawable(mOverflow); - } - } - }; - private boolean mDismissed = true; // tracks whether this popup is dismissed or dismissing. private boolean mHidden; // tracks whether this popup is hidden or hiding. @@ -902,7 +887,9 @@ public final class FloatingToolbar { final Size containerSize = mOverflowPanelSize; setSize(mContentContainer, containerSize); mMainPanel.setAlpha(0); + mMainPanel.setVisibility(View.INVISIBLE); mOverflowPanel.setAlpha(1); + mOverflowPanel.setVisibility(View.VISIBLE); mOverflowButton.setImageDrawable(mArrow); // Update x-coordinates depending on RTL state. @@ -941,7 +928,9 @@ public final class FloatingToolbar { final Size containerSize = mMainPanelSize; setSize(mContentContainer, containerSize); mMainPanel.setAlpha(1); + mMainPanel.setVisibility(View.VISIBLE); mOverflowPanel.setAlpha(0); + mOverflowPanel.setVisibility(View.INVISIBLE); mOverflowButton.setImageDrawable(mOverflow); if (hasOverflow()) { @@ -1327,8 +1316,6 @@ public final class FloatingToolbar { mToArrow.start(); openOverflow(); } - overflowButton.postDelayed( - mResetOverflowButtonDrawable, OVERFLOW_BUTTON_ANIMATION_DELAY); } }); return overflowButton; @@ -1389,6 +1376,10 @@ public final class FloatingToolbar { // Disable the overflow button while it's animating. // It will be re-enabled when the animation stops. mOverflowButton.setEnabled(false); + // Ensure both panels have visibility turned on when the overflow animation + // starts. + mMainPanel.setVisibility(View.VISIBLE); + mOverflowPanel.setVisibility(View.VISIBLE); } @Override