From 80cddbccb69669eb35327f1851651ee5d34a1331 Mon Sep 17 00:00:00 2001 From: Jon Miranda Date: Thu, 22 Jul 2021 13:51:16 -0700 Subject: [PATCH] Add more extra space to hotseat for taller devices. Bug: 192520231 Test: manual test on taller devices Change-Id: I3eccada67f0ba07d01f823c4156f02c3feb97f84 --- src/com/android/launcher3/DeviceProfile.java | 34 +++++++++++++++----- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 88e817111e..20d79fa468 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -89,6 +89,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; @@ -148,12 +149,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; @@ -322,6 +324,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 @@ -352,6 +355,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. @@ -371,12 +375,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); @@ -400,7 +417,8 @@ public class DeviceProfile { + hotseatBarSidePaddingEndPx; } else { hotseatBarSizePx = hotseatIconSizePx + hotseatBarTopPaddingPx - + hotseatBarBottomPaddingPx + (isScalableGrid ? 0 : hotseatExtraVerticalSize); + + hotseatBarBottomPaddingPx + (isScalableGrid ? 0 : hotseatExtraVerticalSize) + + hotseatBarSizeExtraSpacePx; } }