From 06f36e8568e436087373027e68f305e9cc53b283 Mon Sep 17 00:00:00 2001 From: Alex Chau Date: Fri, 6 Jan 2023 10:50:54 +0000 Subject: [PATCH] Reduce icon/text simultaneously when cellHeight is not enough for largest display size - Follow-up of http://ag/20691430 - Reduce iconDrawablePaddingPx to further recover space - Then proportional reduce both iconSizePx and iconTextSizePx - This will result in larger icon/text size in px when going from larger to largest for most devices - For extremely large desnity (> largest for most devices), iconSizePx/iconTextSizePx will inevitably reduce due to smaller availalbe space Fix: 264149604 Test: test different density between larger and largest, check that icon/text size continues to grow in px Change-Id: I1633566b9372acf1393c7e997598cb3e46c4a507 --- src/com/android/launcher3/DeviceProfile.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 25520e1bea..f124940e3d 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -910,12 +910,24 @@ public class DeviceProfile { cellHeightPx = cellContentHeight; cellLayoutBorderSpacePx.y -= extraHeightRequired / numBorders; } else { - // If it still doesn't fit, set borderSpace to 0 and distribute the space for - // cellHeight, and reduce iconSize. + // If it still doesn't fit, set borderSpace to 0 to recover space. cellHeightPx = (cellHeightPx * inv.numRows + cellLayoutBorderSpacePx.y * numBorders) / inv.numRows; - iconSizePx = Math.min(iconSizePx, cellHeightPx - cellTextAndPaddingHeight); cellLayoutBorderSpacePx.y = 0; + // Reduce iconDrawablePaddingPx to make cellContentHeight smaller. + int cellContentWithoutPadding = cellContentHeight - iconDrawablePaddingPx; + if (cellContentWithoutPadding <= cellHeightPx) { + iconDrawablePaddingPx = cellContentHeight - cellHeightPx; + } else { + // If it still doesn't fit, set iconDrawablePaddingPx to 0 to recover space, + // then proportional reduce iconSizePx and iconTextSizePx to fit. + iconDrawablePaddingPx = 0; + float ratio = cellHeightPx / (float) cellContentWithoutPadding; + iconSizePx = (int) (iconSizePx * ratio); + iconTextSizePx = (int) (iconTextSizePx * ratio); + } + cellTextAndPaddingHeight = + iconDrawablePaddingPx + Utilities.calculateTextHeight(iconTextSizePx); } cellContentHeight = iconSizePx + cellTextAndPaddingHeight; }