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
diff --git a/robolectric_tests/src/com/android/launcher3/widget/LauncherAppWidgetProviderInfoTest.java b/robolectric_tests/src/com/android/launcher3/widget/LauncherAppWidgetProviderInfoTest.java
index 2d87957..a6f892c 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 @@
     @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 @@
     @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 @@
         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 @@
         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;
 
@@ -187,6 +195,22 @@
     }
 
     @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();
         info.minWidth = 80;
diff --git a/src/com/android/launcher3/widget/LauncherAppWidgetProviderInfo.java b/src/com/android/launcher3/widget/LauncherAppWidgetProviderInfo.java
index 5a29171..d77d99d 100644
--- a/src/com/android/launcher3/widget/LauncherAppWidgetProviderInfo.java
+++ b/src/com/android/launcher3/widget/LauncherAppWidgetProviderInfo.java
@@ -160,8 +160,11 @@
             }
         }
 
-        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