Fix getWidgetItemSizePx estimation
The size returned by getWidgetItemSizePx is used by the widget picker
for the NavigableAppWidgetHostView. We should NOT deduct the padding
applied to NavigableAppWidgetHostView to this size.
If a launcher grid insets NavigableAppWidgetHostView, then we must
add the inset to the NavigableAppWidgetHostView width / height.
Test: Compare the size of widgets in preview and home screen using
layout inspector. See screenshots in the bug
Fix: 200983939
Change-Id: I35022861b65f2624f69940cf3856d9c47f8dbbd9
diff --git a/src/com/android/launcher3/widget/util/WidgetSizes.java b/src/com/android/launcher3/widget/util/WidgetSizes.java
index 451ed6e..b211f4c 100644
--- a/src/com/android/launcher3/widget/util/WidgetSizes.java
+++ b/src/com/android/launcher3/widget/util/WidgetSizes.java
@@ -17,7 +17,6 @@
import static android.appwidget.AppWidgetHostView.getDefaultPaddingForWidget;
-
import android.appwidget.AppWidgetHostView;
import android.appwidget.AppWidgetManager;
import android.content.ComponentName;
@@ -87,7 +86,13 @@
}
/**
- * Returns the size of a WidgetItem.
+ * Returns the size of a {@link WidgetItem}.
+ *
+ * <p>This size is used by the widget picker. It should NEVER be shared with app widgets.
+ *
+ * <p>For sizes shared with app widgets, please refer to
+ * {@link #getWidgetPaddedSizes(Context, ComponentName, int, int)} &
+ * {@link #getWidgetPaddedSizePx(Context, ComponentName, DeviceProfile, int, int)}.
*/
public static Size getWidgetItemSizePx(Context context, DeviceProfile profile,
WidgetItem widgetItem) {
@@ -96,8 +101,15 @@
.getDimensionPixelSize(R.dimen.widget_preview_shortcut_padding);
return new Size(dimension, dimension);
}
- return getWidgetPaddedSizePx(context, widgetItem.componentName, profile, widgetItem.spanX,
- widgetItem.spanY);
+ Size widgetItemSize = getWidgetSizePx(profile, widgetItem.spanX,
+ widgetItem.spanY, /* recycledCellSize= */ null);
+ if (profile.shouldInsetWidgets()) {
+ Rect inset = new Rect();
+ AppWidgetHostView.getDefaultPaddingForWidget(context, widgetItem.componentName, inset);
+ return new Size(widgetItemSize.getWidth() + inset.left + inset.right,
+ widgetItemSize.getHeight() + inset.top + inset.bottom);
+ }
+ return widgetItemSize;
}
private static Size getWidgetSizePx(DeviceProfile profile, int spanX, int spanY,