From 0571a370d1c838ce47c534f4c1a3ca8dd30e6d30 Mon Sep 17 00:00:00 2001 From: Steven Ng Date: Wed, 23 Jun 2021 17:11:05 +0100 Subject: [PATCH] Use default spans as min spans if the min spans > default spans This is to match the behavior described in AppWidgetProviderInfo#minResizeWidth/Height documentation. Test: run LauncherAppWidgetProviderInfoTest Bug: 191223844 Change-Id: I37c0c8bf5e4588919e5b30fab6d2fde7236e114b --- .../LauncherAppWidgetProviderInfoTest.java | 24 +++++++++++++++++++ .../widget/LauncherAppWidgetProviderInfo.java | 7 ++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/robolectric_tests/src/com/android/launcher3/widget/LauncherAppWidgetProviderInfoTest.java b/robolectric_tests/src/com/android/launcher3/widget/LauncherAppWidgetProviderInfoTest.java index 2d87957cf7..a6f892c048 100644 --- a/robolectric_tests/src/com/android/launcher3/widget/LauncherAppWidgetProviderInfoTest.java +++ b/robolectric_tests/src/com/android/launcher3/widget/LauncherAppWidgetProviderInfoTest.java @@ -122,6 +122,8 @@ public final class LauncherAppWidgetProviderInfoTest { @Test public void initSpans_minResizeWidthSmallerThanCellWidth_shouldInitializeMinSpansToOne() { LauncherAppWidgetProviderInfo info = new LauncherAppWidgetProviderInfo(); + info.minWidth = 100; + info.minHeight = 100; info.minResizeWidth = 20; info.minResizeHeight = 20; InvariantDeviceProfile idp = createIDP(); @@ -135,6 +137,8 @@ public final class LauncherAppWidgetProviderInfoTest { @Test public void initSpans_minResizeWidthLargerThanCellWidth_shouldInitializeMinSpans() { LauncherAppWidgetProviderInfo info = new LauncherAppWidgetProviderInfo(); + info.minWidth = 100; + info.minHeight = 100; info.minResizeWidth = 80; info.minResizeHeight = 80; InvariantDeviceProfile idp = createIDP(); @@ -157,6 +161,8 @@ public final class LauncherAppWidgetProviderInfoTest { Mockito.when(dp.shouldInsetWidgets()).thenReturn(true); LauncherAppWidgetProviderInfo info = new LauncherAppWidgetProviderInfo(); + info.minWidth = CELL_SIZE * 3; + info.minHeight = CELL_SIZE * 3; info.minResizeWidth = CELL_SIZE * 2 + maxPadding; info.minResizeHeight = CELL_SIZE * 2 + maxPadding; @@ -177,6 +183,8 @@ public final class LauncherAppWidgetProviderInfoTest { dp.cellLayoutBorderSpacingPx = maxPadding - 1; Mockito.when(dp.shouldInsetWidgets()).thenReturn(false); LauncherAppWidgetProviderInfo info = new LauncherAppWidgetProviderInfo(); + info.minWidth = CELL_SIZE * 3; + info.minHeight = CELL_SIZE * 3; info.minResizeWidth = CELL_SIZE * 2 + maxPadding; info.minResizeHeight = CELL_SIZE * 2 + maxPadding; @@ -186,6 +194,22 @@ public final class LauncherAppWidgetProviderInfoTest { assertThat(info.minSpanY).isEqualTo(3); } + @Test + public void + initSpans_minResizeWidthHeightLargerThanMinWidth_shouldUseMinWidthHeightAsMinSpans() { + LauncherAppWidgetProviderInfo info = new LauncherAppWidgetProviderInfo(); + info.minWidth = 20; + info.minHeight = 20; + info.minResizeWidth = 80; + info.minResizeHeight = 80; + InvariantDeviceProfile idp = createIDP(); + + info.initSpans(mContext, idp); + + assertThat(info.minSpanX).isEqualTo(1); + assertThat(info.minSpanY).isEqualTo(1); + } + @Test public void isMinSizeFulfilled_minWidthAndHeightWithinGridSize_shouldReturnTrue() { LauncherAppWidgetProviderInfo info = new LauncherAppWidgetProviderInfo(); diff --git a/src/com/android/launcher3/widget/LauncherAppWidgetProviderInfo.java b/src/com/android/launcher3/widget/LauncherAppWidgetProviderInfo.java index 5a29171361..d77d99dfa3 100644 --- a/src/com/android/launcher3/widget/LauncherAppWidgetProviderInfo.java +++ b/src/com/android/launcher3/widget/LauncherAppWidgetProviderInfo.java @@ -160,8 +160,11 @@ public class LauncherAppWidgetProviderInfo extends AppWidgetProviderInfo } } - this.minSpanX = minSpanX; - this.minSpanY = minSpanY; + // If minSpanX/Y > spanX/Y, ignore the minSpanX/Y to match the behavior described in + // minResizeWidth & minResizeHeight Android documentation. See + // https://developer.android.com/reference/android/appwidget/AppWidgetProviderInfo + this.minSpanX = Math.min(spanX, minSpanX); + this.minSpanY = Math.min(spanY, minSpanY); this.maxSpanX = maxSpanX; this.maxSpanY = maxSpanY; this.mIsMinSizeFulfilled = Math.min(spanX, minSpanX) <= idp.numColumns