diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index c96036638e..78c0ded372 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -93,6 +93,7 @@ public class DeviceProfile { private static final float MAX_HORIZONTAL_PADDING_PERCENT = 0.14f; private static final float TALL_DEVICE_ASPECT_RATIO_THRESHOLD = 2.0f; + private static final float TALLER_DEVICE_ASPECT_RATIO_THRESHOLD = 2.15f; // To evenly space the icons, increase the left/right margins for tablets in portrait mode. private static final int PORTRAIT_TABLET_LEFT_RIGHT_PADDING_MULTIPLIER = 4; @@ -152,12 +153,13 @@ public class DeviceProfile { public int folderChildDrawablePaddingPx; // Hotseat + public int hotseatBarSizeExtraSpacePx; public final int numShownHotseatIcons; public int hotseatCellHeightPx; private final int hotseatExtraVerticalSize; // In portrait: size = height, in landscape: size = width public int hotseatBarSizePx; - public final int hotseatBarTopPaddingPx; + public int hotseatBarTopPaddingPx; public final int hotseatBarBottomPaddingPx; // Start is the side next to the nav bar, end is the side next to the workspace public final int hotseatBarSidePaddingStartPx; @@ -328,6 +330,7 @@ public class DeviceProfile { isTwoPanels ? inv.numDatabaseHotseatIcons : inv.numShownHotseatIcons; numShownAllAppsColumns = isTwoPanels ? inv.numDatabaseAllAppsColumns : inv.numAllAppsColumns; + hotseatBarSizeExtraSpacePx = 0; hotseatBarTopPaddingPx = res.getDimensionPixelSize(R.dimen.dynamic_grid_hotseat_top_padding); hotseatBarBottomPaddingPx = (isTallDevice ? 0 @@ -358,6 +361,7 @@ public class DeviceProfile { // Calculate all of the remaining variables. extraSpace = updateAvailableDimensions(res); + // Now that we have all of the variables calculated, we can tune certain sizes. if (isScalableGrid && inv.devicePaddings != null) { // Paddings were created assuming no scaling, so we first unscale the extra space. @@ -377,12 +381,25 @@ public class DeviceProfile { qsbBottomMarginPx = Math.round(qsbBottomMarginOriginalPx * cellScaleToFit); } else if (!isVerticalBarLayout() && isPhone && isTallDevice) { // We increase the hotseat size when there is extra space. - // ie. For a display with a large aspect ratio, we can keep the icons on the workspace - // in portrait mode closer together by adding more height to the hotseat. - // Note: This calculation was created after noticing a pattern in the design spec. - int extraSpace = getCellSize().y - iconSizePx - iconDrawablePaddingPx * 2 - - workspacePageIndicatorHeight; - hotseatBarSizePx += extraSpace; + + if (Float.compare(aspectRatio, TALLER_DEVICE_ASPECT_RATIO_THRESHOLD) >= 0) { + // For taller devices, we will take a third of the extra space from each row, + // and add it to the space above and below the hotseat. + int extraSpace = ((getCellSize().y - iconSizePx - iconDrawablePaddingPx * 2) + * inv.numRows) / 3; + + int halfExtraSpace = extraSpace / 2; + hotseatBarTopPaddingPx += halfExtraSpace; + hotseatBarSizeExtraSpacePx = halfExtraSpace; + } else { + // ie. For a display with a large aspect ratio, we can keep the icons on the + // workspace in portrait mode closer together by adding more height to the hotseat. + // Note: This calculation was created after noticing a pattern in the design spec. + hotseatBarSizeExtraSpacePx = getCellSize().y - iconSizePx + - iconDrawablePaddingPx * 2 - workspacePageIndicatorHeight; + } + + updateHotseatIconSize(iconSizePx); // Recalculate the available dimensions using the new hotseat size. updateAvailableDimensions(res); @@ -407,7 +424,8 @@ public class DeviceProfile { + hotseatBarSidePaddingEndPx; } else { hotseatBarSizePx = hotseatIconSizePx + hotseatBarTopPaddingPx - + hotseatBarBottomPaddingPx + (isScalableGrid ? 0 : hotseatExtraVerticalSize); + + hotseatBarBottomPaddingPx + (isScalableGrid ? 0 : hotseatExtraVerticalSize) + + hotseatBarSizeExtraSpacePx; } }