summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/java/com/android/internal/widget/FloatingToolbar.java56
1 files changed, 35 insertions, 21 deletions
diff --git a/core/java/com/android/internal/widget/FloatingToolbar.java b/core/java/com/android/internal/widget/FloatingToolbar.java
index 65f2f53f..523663c 100644
--- a/core/java/com/android/internal/widget/FloatingToolbar.java
+++ b/core/java/com/android/internal/widget/FloatingToolbar.java
@@ -546,25 +546,25 @@ public final class FloatingToolbar {
private void refreshCoordinatesAndOverflowDirection(Rect contentRect) {
refreshViewPort();
- int availableHeightAboveContent =
- contentRect.top - mViewPort.top - 2 * mMarginVertical;
- int availableHeightBelowContent =
- mViewPort.bottom - contentRect.bottom - 2 * mMarginVertical;
- int availableHeightThroughContent =
- mViewPort.bottom - contentRect.top + getToolbarHeightWithVerticalMargin();
-
int x = contentRect.centerX() - getWidth() / 2;
// Update x so that the toolbar isn't rendered behind the nav bar in landscape.
x = Math.max(0, Math.min(x, mViewPort.right - getWidth()));
int y;
+
+ int availableHeightAboveContent = contentRect.top - mViewPort.top;
+ int availableHeightBelowContent = mViewPort.bottom - contentRect.bottom;
+
if (mOverflowPanel == null) { // There is no overflow.
- if (availableHeightAboveContent > getToolbarHeightWithVerticalMargin()) {
+ if (availableHeightAboveContent >= getToolbarHeightWithVerticalMargin()) {
// There is enough space at the top of the content.
y = contentRect.top - getToolbarHeightWithVerticalMargin();
- } else if (availableHeightBelowContent > getToolbarHeightWithVerticalMargin()) {
+ } else if (availableHeightBelowContent >= getToolbarHeightWithVerticalMargin()) {
// There is enough space at the bottom of the content.
y = contentRect.bottom;
+ } else if (availableHeightBelowContent >= getEstimatedToolbarHeight(getContext())) {
+ // Just enough space to fit the toolbar with no vertical margins.
+ y = contentRect.bottom - mMarginVertical;
} else {
// Not enough space. Prefer to position as high as possible.
y = Math.max(
@@ -572,32 +572,47 @@ public final class FloatingToolbar {
contentRect.top - getToolbarHeightWithVerticalMargin());
}
} else { // There is an overflow.
- if (availableHeightAboveContent > mOverflowPanel.getMinimumHeight()) {
+ int margin = 2 * mMarginVertical;
+ int minimumOverflowHeightWithMargin = mOverflowPanel.getMinimumHeight() + margin;
+ int availableHeightThroughContentDown =
+ mViewPort.bottom - contentRect.top + getToolbarHeightWithVerticalMargin();
+ int availableHeightThroughContentUp =
+ contentRect.bottom - mViewPort.top + getToolbarHeightWithVerticalMargin();
+
+ if (availableHeightAboveContent >= minimumOverflowHeightWithMargin) {
// There is enough space at the top of the content rect for the overflow.
// Position above and open upwards.
- updateOverflowHeight(availableHeightAboveContent);
+ updateOverflowHeight(availableHeightAboveContent - margin);
y = contentRect.top - getHeight();
mOverflowDirection = OVERFLOW_DIRECTION_UP;
- } else if (availableHeightAboveContent > getToolbarHeightWithVerticalMargin()
- && availableHeightThroughContent > mOverflowPanel.getMinimumHeight()) {
+ } else if (availableHeightAboveContent >= getToolbarHeightWithVerticalMargin()
+ && availableHeightThroughContentDown >= minimumOverflowHeightWithMargin) {
// There is enough space at the top of the content rect for the main panel
// but not the overflow.
// Position above but open downwards.
- updateOverflowHeight(availableHeightThroughContent);
+ updateOverflowHeight(availableHeightThroughContentDown - margin);
y = contentRect.top - getToolbarHeightWithVerticalMargin();
mOverflowDirection = OVERFLOW_DIRECTION_DOWN;
- } else if (availableHeightBelowContent > mOverflowPanel.getMinimumHeight()) {
+ } else if (availableHeightBelowContent >= minimumOverflowHeightWithMargin) {
// There is enough space at the bottom of the content rect for the overflow.
// Position below and open downwards.
- updateOverflowHeight(availableHeightBelowContent);
+ updateOverflowHeight(availableHeightBelowContent - margin);
y = contentRect.bottom;
mOverflowDirection = OVERFLOW_DIRECTION_DOWN;
+ } else if (availableHeightBelowContent >= getToolbarHeightWithVerticalMargin()
+ && mViewPort.height() >= minimumOverflowHeightWithMargin) {
+ // There is enough space at the bottom of the content rect for the main panel
+ // but not the overflow.
+ // Position below but open upwards.
+ updateOverflowHeight(availableHeightThroughContentUp - margin);
+ y = contentRect.bottom + getToolbarHeightWithVerticalMargin() - getHeight();
+ mOverflowDirection = OVERFLOW_DIRECTION_UP;
} else {
// Not enough space.
- // Position at the bottom of the view port and open upwards.
- updateOverflowHeight(mViewPort.height());
- y = mViewPort.bottom - getHeight();
- mOverflowDirection = OVERFLOW_DIRECTION_UP;
+ // Position at the top of the view port and open downwards.
+ updateOverflowHeight(mViewPort.height() - margin);
+ y = mViewPort.top;
+ mOverflowDirection = OVERFLOW_DIRECTION_DOWN;
}
mOverflowPanel.setOverflowDirection(mOverflowDirection);
}
@@ -1422,7 +1437,6 @@ public final class FloatingToolbar {
PopupWindow popupWindow = new PopupWindow(popupContentHolder);
popupWindow.setWindowLayoutType(
WindowManager.LayoutParams.TYPE_APPLICATION_ABOVE_SUB_PANEL);
- popupWindow.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);
popupWindow.setAnimationStyle(0);
popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
content.setLayoutParams(new ViewGroup.LayoutParams(