mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-27 23:36:47 +00:00
Scale down folder cells to fit within bounds if necessary.
The number of folder cols/rows are set in InvariantDeviceProfile. Because of this, we may need to scale down the folder cells in multi-window mode. Bug: 32176631 Change-Id: I925d5ac9d29439c5d61cf089e7784065a8cb5ebd
This commit is contained in:
@@ -88,7 +88,6 @@
|
||||
<item name="android:background">@null</item>
|
||||
<item name="android:textColor">@color/quantum_panel_text_color</item>
|
||||
<item name="android:shadowRadius">0</item>
|
||||
<item name="android:textSize">@dimen/folder_child_text_size</item>
|
||||
<item name="android:gravity">center_horizontal</item>
|
||||
<item name="android:includeFontPadding">false</item>
|
||||
<item name="customShadows">false</item>
|
||||
|
||||
@@ -128,7 +128,9 @@ public class BubbleTextView extends TextView
|
||||
setCompoundDrawablePadding(grid.allAppsIconDrawablePaddingPx);
|
||||
defaultIconSize = grid.allAppsIconSizePx;
|
||||
} else if (display == DISPLAY_FOLDER) {
|
||||
setTextSize(TypedValue.COMPLEX_UNIT_PX, grid.folderChildTextSizePx);
|
||||
setCompoundDrawablePadding(grid.folderChildDrawablePaddingPx);
|
||||
defaultIconSize = grid.folderChildIconSizePx;
|
||||
}
|
||||
mCenterVertically = a.getBoolean(R.styleable.BubbleTextView_centerVertically, false);
|
||||
|
||||
|
||||
@@ -96,8 +96,14 @@ public class DeviceProfile {
|
||||
public int folderBackgroundOffset;
|
||||
public int folderIconSizePx;
|
||||
public int folderIconPreviewPadding;
|
||||
|
||||
// Folder cell
|
||||
public int folderCellWidthPx;
|
||||
public int folderCellHeightPx;
|
||||
|
||||
// Folder child
|
||||
public int folderChildIconSizePx;
|
||||
public int folderChildTextSizePx;
|
||||
public int folderChildDrawablePaddingPx;
|
||||
|
||||
// Hotseat
|
||||
@@ -228,19 +234,17 @@ public class DeviceProfile {
|
||||
}
|
||||
|
||||
private void updateAvailableDimensions(DisplayMetrics dm, Resources res) {
|
||||
// Check to see if the icons fit in the new available height. If not, then we need to
|
||||
// shrink the icon size.
|
||||
float scale = 1f;
|
||||
int drawablePadding = iconDrawablePaddingOriginalPx;
|
||||
updateIconSize(1f, drawablePadding, res, dm);
|
||||
float usedHeight = (cellHeightPx * inv.numRows);
|
||||
updateIconSize(1f, iconDrawablePaddingOriginalPx, res, dm);
|
||||
|
||||
// Check to see if the icons fit within the available height. If not, then scale down.
|
||||
float usedHeight = (cellHeightPx * inv.numRows);
|
||||
int maxHeight = (availableHeightPx - getTotalWorkspacePadding().y);
|
||||
if (usedHeight > maxHeight) {
|
||||
scale = maxHeight / usedHeight;
|
||||
drawablePadding = 0;
|
||||
float scale = maxHeight / usedHeight;
|
||||
updateIconSize(scale, 0, res, dm);
|
||||
}
|
||||
updateIconSize(scale, drawablePadding, res, dm);
|
||||
|
||||
updateAvailableFolderCellDimensions(dm, res);
|
||||
}
|
||||
|
||||
private void updateIconSize(float scale, int drawablePadding, Resources res,
|
||||
@@ -276,31 +280,47 @@ public class DeviceProfile {
|
||||
res.getInteger(R.integer.config_workspaceSpringLoadShrinkPercentage) / 100.0f;
|
||||
}
|
||||
|
||||
// Folder cell
|
||||
int cellPaddingX = res.getDimensionPixelSize(R.dimen.folder_cell_x_padding);
|
||||
int cellPaddingY = res.getDimensionPixelSize(R.dimen.folder_cell_y_padding);
|
||||
final int folderChildTextSize =
|
||||
Utilities.calculateTextHeight(res.getDimension(R.dimen.folder_child_text_size));
|
||||
|
||||
final int folderBottomPanelSize =
|
||||
res.getDimensionPixelSize(R.dimen.folder_label_padding_top)
|
||||
+ res.getDimensionPixelSize(R.dimen.folder_label_padding_bottom)
|
||||
+ Utilities.calculateTextHeight(res.getDimension(R.dimen.folder_label_text_size));
|
||||
|
||||
// Don't let the folder get too close to the edges of the screen.
|
||||
folderCellWidthPx = Math.min(iconSizePx + 2 * cellPaddingX,
|
||||
(availableWidthPx - 4 * edgeMarginPx) / inv.numFolderColumns);
|
||||
folderCellHeightPx = Math.min(iconSizePx + 3 * cellPaddingY + folderChildTextSize,
|
||||
(availableHeightPx - 4 * edgeMarginPx - folderBottomPanelSize) / inv.numFolderRows);
|
||||
folderChildDrawablePaddingPx = Math.max(0,
|
||||
(folderCellHeightPx - iconSizePx - folderChildTextSize) / 3);
|
||||
|
||||
// Folder icon
|
||||
folderBackgroundOffset = -edgeMarginPx;
|
||||
folderIconSizePx = iconSizePx + 2 * -folderBackgroundOffset;
|
||||
folderIconPreviewPadding = res.getDimensionPixelSize(R.dimen.folder_preview_padding);
|
||||
}
|
||||
|
||||
private void updateAvailableFolderCellDimensions(DisplayMetrics dm, Resources res) {
|
||||
int folderBottomPanelSize = res.getDimensionPixelSize(R.dimen.folder_label_padding_top)
|
||||
+ res.getDimensionPixelSize(R.dimen.folder_label_padding_bottom)
|
||||
+ Utilities.calculateTextHeight(res.getDimension(R.dimen.folder_label_text_size));
|
||||
|
||||
updateFolderCellSize(1f, dm, res, folderBottomPanelSize);
|
||||
|
||||
// Check to see if the icons fit within the available height. If not, then scale down.
|
||||
float usedHeight = (folderCellHeightPx * inv.numFolderRows) + folderBottomPanelSize;
|
||||
int maxHeight = availableHeightPx - getTotalWorkspacePadding().y - (2 * edgeMarginPx);
|
||||
if (usedHeight > maxHeight) {
|
||||
float scale = maxHeight / usedHeight;
|
||||
updateFolderCellSize(scale, dm, res, folderBottomPanelSize);
|
||||
}
|
||||
}
|
||||
|
||||
private void updateFolderCellSize(float scale, DisplayMetrics dm, Resources res,
|
||||
int folderBottomPanelSize) {
|
||||
folderChildIconSizePx = (int) (Utilities.pxFromDp(inv.iconSize, dm) * scale);
|
||||
folderChildTextSizePx =
|
||||
(int) (res.getDimensionPixelSize(R.dimen.folder_child_text_size) * scale);
|
||||
|
||||
int textHeight = Utilities.calculateTextHeight(folderChildTextSizePx);
|
||||
int cellPaddingX = (int) (res.getDimensionPixelSize(R.dimen.folder_cell_x_padding) * scale);
|
||||
int cellPaddingY = (int) (res.getDimensionPixelSize(R.dimen.folder_cell_y_padding) * scale);
|
||||
|
||||
// Don't let the folder get too close to the edges of the screen.
|
||||
folderCellWidthPx = Math.min(folderChildIconSizePx + 2 * cellPaddingX,
|
||||
(availableWidthPx - 4 * edgeMarginPx) / inv.numFolderColumns);
|
||||
folderCellHeightPx = Math.min(folderChildIconSizePx + 2 * cellPaddingY + textHeight,
|
||||
(availableHeightPx - 4 * edgeMarginPx - folderBottomPanelSize) / inv.numFolderRows);
|
||||
folderChildDrawablePaddingPx = Math.max(0,
|
||||
(folderCellHeightPx - folderChildIconSizePx - textHeight) / 3);
|
||||
}
|
||||
|
||||
public void updateInsets(Rect insets) {
|
||||
mInsets.set(insets);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user