From de0132939b0c163407d57caa8931a3be854746d3 Mon Sep 17 00:00:00 2001 From: "sfufa@google.com" Date: Tue, 21 Sep 2021 18:22:44 -0700 Subject: [PATCH] [Foldable] Apply max width to AllApps in unfolded state. Since we are applying the same iconWidth in AllApps as Workspace in unfolded state, this change restricts AllApps to span only the area required to display AllApps contents and not span full available width. Unfolded/phone behavior remains the same. Bug: 199959857 Bug: 194259694 Test: visual Change-Id: Ie5658d566f20e825e666ef17db79a87b07dc2936 --- .../appprediction/AppsDividerView.java | 3 +-- .../appprediction/PredictionRowView.java | 3 +-- res/values/attrs.xml | 2 ++ src/com/android/launcher3/DeviceProfile.java | 15 +++++++++++ .../launcher3/InvariantDeviceProfile.java | 27 +++++++++++++------ .../allapps/AllAppsContainerView.java | 4 +-- 6 files changed, 39 insertions(+), 15 deletions(-) diff --git a/quickstep/src/com/android/launcher3/appprediction/AppsDividerView.java b/quickstep/src/com/android/launcher3/appprediction/AppsDividerView.java index 63a569a65c..1b0f967a1f 100644 --- a/quickstep/src/com/android/launcher3/appprediction/AppsDividerView.java +++ b/quickstep/src/com/android/launcher3/appprediction/AppsDividerView.java @@ -282,8 +282,7 @@ public class AppsDividerView extends View implements StateListener + + diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index ce8cf3c218..e13147d5f0 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -168,11 +168,13 @@ public class DeviceProfile { public int qsbBottomMarginPx; // All apps + public int allAppsCellSpacingPx; public int allAppsOpenVerticalTranslate; public int allAppsCellHeightPx; public int allAppsCellWidthPx; public int allAppsIconSizePx; public int allAppsIconDrawablePaddingPx; + public int allAppsLeftRightPadding; public final int numShownAllAppsColumns; public float allAppsIconTextSizePx; @@ -283,6 +285,7 @@ public class DeviceProfile { folderContentPaddingTop = res.getDimensionPixelSize(R.dimen.folder_content_padding_top); setCellLayoutBorderSpacing(pxFromDp(inv.borderSpacing, mMetrics, 1f)); + allAppsCellSpacingPx = pxFromDp(inv.allAppsCellSpacing, mMetrics, 1f); cellLayoutBorderSpacingOriginalPx = cellLayoutBorderSpacingPx; folderCellLayoutBorderSpacingPx = cellLayoutBorderSpacingPx; @@ -547,6 +550,17 @@ public class DeviceProfile { + textHeight + (topBottomPadding * 2); } + private void updateAllAppsWidth() { + if (isTwoPanels) { + int usedWidth = (allAppsCellWidthPx * numShownAllAppsColumns) + + (allAppsCellSpacingPx * (numShownAllAppsColumns + 1)); + allAppsLeftRightPadding = Math.max(1, (availableWidthPx - usedWidth) / 2); + } else { + allAppsLeftRightPadding = + desiredWorkspaceLeftRightMarginPx + cellLayoutPaddingLeftRightPx; + } + } + /** * Returns the amount of extra (or unused) vertical space. */ @@ -666,6 +680,7 @@ public class DeviceProfile { allAppsCellHeightPx = getCellSize().y; } allAppsCellWidthPx = allAppsIconSizePx + allAppsIconDrawablePaddingPx; + updateAllAppsWidth(); if (isVerticalLayout) { hideWorkspaceLabelsIfNotEnoughSpace(); diff --git a/src/com/android/launcher3/InvariantDeviceProfile.java b/src/com/android/launcher3/InvariantDeviceProfile.java index 1799f26e06..fea0f05784 100644 --- a/src/com/android/launcher3/InvariantDeviceProfile.java +++ b/src/com/android/launcher3/InvariantDeviceProfile.java @@ -108,6 +108,7 @@ public class InvariantDeviceProfile { public float iconTextSize; public float allAppsIconSize; public float allAppsIconTextSize; + public float allAppsCellSpacing; public boolean isSplitDisplay; public float minCellHeight; @@ -153,7 +154,8 @@ public class InvariantDeviceProfile { */ public List supportedProfiles = Collections.EMPTY_LIST; - @Nullable public DevicePaddings devicePaddings; + @Nullable + public DevicePaddings devicePaddings; public Point defaultWallpaperSize; public Rect defaultWidgetPadding; @@ -161,7 +163,8 @@ public class InvariantDeviceProfile { private final ArrayList mChangeListeners = new ArrayList<>(); @VisibleForTesting - public InvariantDeviceProfile() {} + public InvariantDeviceProfile() { + } @TargetApi(23) private InvariantDeviceProfile(Context context) { @@ -219,6 +222,7 @@ public class InvariantDeviceProfile { result.minCellHeight = defaultDisplayOption.minCellHeight; result.minCellWidth = defaultDisplayOption.minCellWidth; result.borderSpacing = defaultDisplayOption.borderSpacing; + result.allAppsCellSpacing = defaultDisplayOption.allAppsCellSpacing; initGrid(context, myInfo, result, false); } @@ -283,6 +287,7 @@ public class InvariantDeviceProfile { twoPanelLandscapeMinCellHeightDps = displayOption.twoPanelLandscapeMinCellHeightDps; twoPanelLandscapeMinCellWidthDps = displayOption.twoPanelLandscapeMinCellWidthDps; borderSpacing = displayOption.borderSpacing; + allAppsCellSpacing = displayOption.allAppsCellSpacing; numShownHotseatIcons = closestProfile.numHotseatIcons; numDatabaseHotseatIcons = isSplitDisplay @@ -356,7 +361,7 @@ public class InvariantDeviceProfile { } private Object[] toModelState() { - return new Object[] { + return new Object[]{ numColumns, numRows, numDatabaseHotseatIcons, iconBitmapSize, fillResIconDpi, numDatabaseAllAppsColumns, dbFile}; } @@ -402,7 +407,7 @@ public class InvariantDeviceProfile { } } } - } catch (IOException|XmlPullParserException e) { + } catch (IOException | XmlPullParserException e) { throw new RuntimeException(e); } @@ -456,7 +461,7 @@ public class InvariantDeviceProfile { private int getLauncherIconDensity(int requiredSize) { // Densities typically defined by an app. - int[] densityBuckets = new int[] { + int[] densityBuckets = new int[]{ DisplayMetrics.DENSITY_LOW, DisplayMetrics.DENSITY_MEDIUM, DisplayMetrics.DENSITY_TV, @@ -596,8 +601,8 @@ public class InvariantDeviceProfile { // We will use these two data points to extrapolate how much the wallpaper parallax effect // to span (ie travel) at any aspect ratio: - final float ASPECT_RATIO_LANDSCAPE = 16/10f; - final float ASPECT_RATIO_PORTRAIT = 10/16f; + final float ASPECT_RATIO_LANDSCAPE = 16 / 10f; + final float ASPECT_RATIO_PORTRAIT = 10 / 16f; final float WALLPAPER_WIDTH_TO_SCREEN_RATIO_LANDSCAPE = 1.5f; final float WALLPAPER_WIDTH_TO_SCREEN_RATIO_PORTRAIT = 1.2f; @@ -607,7 +612,8 @@ public class InvariantDeviceProfile { // (10/16)x + y = 1.2 // We solve for x and y and end up with a final formula: final float x = - (WALLPAPER_WIDTH_TO_SCREEN_RATIO_LANDSCAPE - WALLPAPER_WIDTH_TO_SCREEN_RATIO_PORTRAIT) / + (WALLPAPER_WIDTH_TO_SCREEN_RATIO_LANDSCAPE + - WALLPAPER_WIDTH_TO_SCREEN_RATIO_PORTRAIT) / (ASPECT_RATIO_LANDSCAPE - ASPECT_RATIO_PORTRAIT); final float y = WALLPAPER_WIDTH_TO_SCREEN_RATIO_PORTRAIT - x * ASPECT_RATIO_PORTRAIT; return x * aspectRatio + y; @@ -719,6 +725,7 @@ public class InvariantDeviceProfile { private float twoPanelPortraitMinCellWidthDps; private float twoPanelLandscapeMinCellHeightDps; private float twoPanelLandscapeMinCellWidthDps; + private float allAppsCellSpacing; private float borderSpacing; private final float[] iconSizes = new float[COUNT_TOTAL]; @@ -750,6 +757,8 @@ public class InvariantDeviceProfile { R.styleable.ProfileDisplayOption_twoPanelLandscapeMinCellWidthDps, twoPanelPortraitMinCellWidthDps); borderSpacing = a.getFloat(R.styleable.ProfileDisplayOption_borderSpacingDps, 0); + allAppsCellSpacing = a.getFloat(R.styleable.ProfileDisplayOption_allAppsCellSpacingDps, + borderSpacing); iconSizes[INDEX_DEFAULT] = a.getFloat(R.styleable.ProfileDisplayOption_iconImageSize, 0); @@ -810,6 +819,7 @@ public class InvariantDeviceProfile { twoPanelLandscapeMinCellHeightDps *= w; twoPanelLandscapeMinCellWidthDps *= w; borderSpacing *= w; + allAppsCellSpacing *= w; return this; } @@ -825,6 +835,7 @@ public class InvariantDeviceProfile { twoPanelLandscapeMinCellHeightDps += p.twoPanelLandscapeMinCellHeightDps; twoPanelLandscapeMinCellWidthDps += p.twoPanelLandscapeMinCellWidthDps; borderSpacing += p.borderSpacing; + allAppsCellSpacing += p.allAppsCellSpacing; return this; } } diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java index a701548a26..df45527bc3 100644 --- a/src/com/android/launcher3/allapps/AllAppsContainerView.java +++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java @@ -400,12 +400,10 @@ public class AllAppsContainerView extends SpringRelativeLayout implements DragSo public void setInsets(Rect insets) { mInsets.set(insets); DeviceProfile grid = mLauncher.getDeviceProfile(); - int leftRightPadding = grid.desiredWorkspaceLeftRightMarginPx - + grid.cellLayoutPaddingLeftRightPx; for (int i = 0; i < mAH.length; i++) { mAH[i].padding.bottom = insets.bottom; - mAH[i].padding.left = mAH[i].padding.right = leftRightPadding; + mAH[i].padding.left = mAH[i].padding.right = grid.allAppsLeftRightPadding; mAH[i].applyPadding(); }