import android.view.View;
import android.view.View.MeasureSpec;
import android.view.View.OnLayoutChangeListener;
+import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.Window;
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;
}
};
- /* 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.
.start();
}
+ /**
+ * Defines the position of the floating toolbar popup panels when transition animation has
+ * stopped.
+ */
private void setPanelsStatesAtRestingPosition() {
mOverflowButton.setEnabled(true);
mOverflowPanel.awakenScrollBars();
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.
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()) {
Math.min(
Math.max(MIN_OVERFLOW_SIZE, maxItemSize),
mOverflowPanel.getCount()));
- return actualSize * getLineHeight(mContext) + mOverflowButtonSize.getHeight();
+ int extension = 0;
+ if (actualSize < mOverflowPanel.getCount()) {
+ // The overflow will require scrolling to get to all the items.
+ // Extend the height so that part of the hidden items is displayed.
+ extension = (int) (getLineHeight(mContext) * 0.5f);
+ }
+ return actualSize * getLineHeight(mContext)
+ + mOverflowButtonSize.getHeight()
+ + extension;
}
private void setButtonTagAndClickListener(View menuItemButton, MenuItem menuItem) {
mToArrow.start();
openOverflow();
}
- overflowButton.postDelayed(
- mResetOverflowButtonDrawable, OVERFLOW_BUTTON_ANIMATION_DELAY);
}
});
return overflowButton;
// 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
OverflowPanel(FloatingToolbarPopup popup) {
super(Preconditions.checkNotNull(popup).mContext);
this.mPopup = popup;
+ setScrollBarDefaultDelayBeforeFade(ViewConfiguration.getScrollDefaultDelay() * 3);
}
@Override