From 6fe115b2ae83de3493020780acf35083937c8e03 Mon Sep 17 00:00:00 2001 From: Steven Ng Date: Mon, 12 Jul 2021 19:01:31 +0100 Subject: [PATCH] Fix shortcut size calcuation Shortcut size should be the size of all apps icon + padding Test: Check shortcuts and widgets are shown without crash in the following surfaces with display & font set to largest and display cutout enabled. Repeat the same test with normal display setting and no cutout. 1. Full widgets picker 2. Bottom widgets picker 3. Pin widget dialog Fix: 193422438 Change-Id: Ibfebf94e92eed5e9cd1dd4196d98823b0e4dda6b --- .../android/launcher3/dragndrop/AddItemActivity.java | 2 +- src/com/android/launcher3/widget/WidgetCell.java | 12 ++++-------- .../android/launcher3/widget/WidgetsBottomSheet.java | 2 +- .../picker/WidgetsListTableViewHolderBinder.java | 2 +- .../picker/WidgetsRecommendationTableLayout.java | 2 +- .../android/launcher3/widget/util/WidgetSizes.java | 5 ++++- 6 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/com/android/launcher3/dragndrop/AddItemActivity.java b/src/com/android/launcher3/dragndrop/AddItemActivity.java index df97bfbbda..80edad94f1 100644 --- a/src/com/android/launcher3/dragndrop/AddItemActivity.java +++ b/src/com/android/launcher3/dragndrop/AddItemActivity.java @@ -270,7 +270,7 @@ public class AddItemActivity extends BaseActivity @Override protected void onPostExecute(WidgetItem item) { - mWidgetCell.setPreviewSize(item.spanX, item.spanY); + mWidgetCell.setPreviewSize(item); mWidgetCell.applyFromCellItem(item, mApp.getWidgetCache()); mWidgetCell.ensurePreview(); } diff --git a/src/com/android/launcher3/widget/WidgetCell.java b/src/com/android/launcher3/widget/WidgetCell.java index c3edcce95a..993bdfbec9 100644 --- a/src/com/android/launcher3/widget/WidgetCell.java +++ b/src/com/android/launcher3/widget/WidgetCell.java @@ -208,8 +208,6 @@ public class WidgetCell extends LinearLayout implements OnLayoutChangeListener { mWidgetPreviewLoader = loader; if (item.activityInfo != null) { setTag(new PendingAddShortcutInfo(item.activityInfo)); - mPreviewWidth += mShortcutPreviewPadding; - mPreviewHeight += mShortcutPreviewPadding; } else { setTag(new PendingAddWidgetInfo(item.widgetInfo, mSourceContainer)); } @@ -356,16 +354,14 @@ public class WidgetCell extends LinearLayout implements OnLayoutChangeListener { } /** Sets the widget preview image size in number of cells. */ - public Size setPreviewSize(int spanX, int spanY) { - return setPreviewSize(spanX, spanY, 1f); + public Size setPreviewSize(WidgetItem widgetItem) { + return setPreviewSize(widgetItem, 1f); } /** Sets the widget preview image size, in number of cells, and preview scale. */ - public Size setPreviewSize(int spanX, int spanY, float previewScale) { + public Size setPreviewSize(WidgetItem widgetItem, float previewScale) { DeviceProfile deviceProfile = mActivity.getDeviceProfile(); - Size widgetSize = - mItem != null ? WidgetSizes.getWidgetItemSizePx(getContext(), deviceProfile, mItem) - : WidgetSizes.getWidgetSizePx(deviceProfile, spanX, spanY); + Size widgetSize = WidgetSizes.getWidgetItemSizePx(getContext(), deviceProfile, widgetItem); mPreviewWidth = widgetSize.getWidth(); mPreviewHeight = widgetSize.getHeight(); mPreviewScale = previewScale; diff --git a/src/com/android/launcher3/widget/WidgetsBottomSheet.java b/src/com/android/launcher3/widget/WidgetsBottomSheet.java index c045cf1b43..dedcc65d11 100644 --- a/src/com/android/launcher3/widget/WidgetsBottomSheet.java +++ b/src/com/android/launcher3/widget/WidgetsBottomSheet.java @@ -199,7 +199,7 @@ public class WidgetsBottomSheet extends BaseWidgetSheet { tableRow.setGravity(Gravity.TOP); row.forEach(widgetItem -> { WidgetCell widget = addItemCell(tableRow); - widget.setPreviewSize(widgetItem.spanX, widgetItem.spanY); + widget.setPreviewSize(widgetItem); widget.applyFromCellItem(widgetItem, LauncherAppState.getInstance(mActivityContext) .getWidgetCache()); widget.ensurePreview(); diff --git a/src/com/android/launcher3/widget/picker/WidgetsListTableViewHolderBinder.java b/src/com/android/launcher3/widget/picker/WidgetsListTableViewHolderBinder.java index 57dec1401e..9c06558b5c 100644 --- a/src/com/android/launcher3/widget/picker/WidgetsListTableViewHolderBinder.java +++ b/src/com/android/launcher3/widget/picker/WidgetsListTableViewHolderBinder.java @@ -120,7 +120,7 @@ public final class WidgetsListTableViewHolderBinder WidgetCell widget = (WidgetCell) row.getChildAt(j); widget.clear(); WidgetItem widgetItem = widgetItemsPerRow.get(j); - Size previewSize = widget.setPreviewSize(widgetItem.spanX, widgetItem.spanY); + Size previewSize = widget.setPreviewSize(widgetItem); widget.applyFromCellItem(widgetItem, mWidgetPreviewLoader); widget.setApplyBitmapDeferred(mApplyBitmapDeferred); Bitmap preview = mWidgetPreviewLoader.getPreview(widgetItem, previewSize); diff --git a/src/com/android/launcher3/widget/picker/WidgetsRecommendationTableLayout.java b/src/com/android/launcher3/widget/picker/WidgetsRecommendationTableLayout.java index 3800ede169..0b8ca3467c 100644 --- a/src/com/android/launcher3/widget/picker/WidgetsRecommendationTableLayout.java +++ b/src/com/android/launcher3/widget/picker/WidgetsRecommendationTableLayout.java @@ -115,7 +115,7 @@ public final class WidgetsRecommendationTableLayout extends TableLayout { for (WidgetItem widgetItem : widgetItems) { WidgetCell widgetCell = addItemCell(tableRow); - widgetCell.setPreviewSize(widgetItem.spanX, widgetItem.spanY, data.mPreviewScale); + widgetCell.setPreviewSize(widgetItem, data.mPreviewScale); widgetCell.applyFromCellItem(widgetItem, LauncherAppState.getInstance(getContext()).getWidgetCache()); widgetCell.ensurePreview(); diff --git a/src/com/android/launcher3/widget/util/WidgetSizes.java b/src/com/android/launcher3/widget/util/WidgetSizes.java index e2c84b5770..451ed6efcc 100644 --- a/src/com/android/launcher3/widget/util/WidgetSizes.java +++ b/src/com/android/launcher3/widget/util/WidgetSizes.java @@ -32,6 +32,7 @@ import androidx.annotation.Nullable; import com.android.launcher3.DeviceProfile; import com.android.launcher3.LauncherAppState; +import com.android.launcher3.R; import com.android.launcher3.model.WidgetItem; import java.util.ArrayList; @@ -91,7 +92,9 @@ public final class WidgetSizes { public static Size getWidgetItemSizePx(Context context, DeviceProfile profile, WidgetItem widgetItem) { if (widgetItem.isShortcut()) { - return getWidgetSizePx(profile, widgetItem.spanX, widgetItem.spanY); + int dimension = profile.allAppsIconSizePx + 2 * context.getResources() + .getDimensionPixelSize(R.dimen.widget_preview_shortcut_padding); + return new Size(dimension, dimension); } return getWidgetPaddedSizePx(context, widgetItem.componentName, profile, widgetItem.spanX, widgetItem.spanY);