Merge "Auto calculate grid card size"
diff --git a/res/layout/fragment_grid_picker.xml b/res/layout/fragment_grid_picker.xml
index aec8e49..34547fc 100644
--- a/res/layout/fragment_grid_picker.xml
+++ b/res/layout/fragment_grid_picker.xml
@@ -33,8 +33,8 @@
 
             <FrameLayout
                 android:id="@+id/preview_card_container"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
+                android:layout_width="0dp"
+                android:layout_height="0dp"
                 android:clipToPadding="false"
                 android:paddingTop="@dimen/preview_page_top_margin"
                 android:paddingBottom="@dimen/preview_page_bottom_margin"
@@ -42,7 +42,8 @@
                 app:layout_constraintBottom_toTopOf="@+id/options_container"
                 app:layout_constraintEnd_toEndOf="parent"
                 app:layout_constraintStart_toStartOf="parent"
-                app:layout_constraintTop_toTopOf="parent">
+                app:layout_constraintTop_toTopOf="parent"
+                app:layout_constraintVertical_bias="@dimen/preview_card_vertical_bias">
 
                 <include layout="@layout/grid_preview_card" />
             </FrameLayout>
diff --git a/src/com/android/customization/picker/grid/GridFragment.java b/src/com/android/customization/picker/grid/GridFragment.java
index 1ee75a6..c4029d6 100644
--- a/src/com/android/customization/picker/grid/GridFragment.java
+++ b/src/com/android/customization/picker/grid/GridFragment.java
@@ -18,6 +18,7 @@
 import static com.android.wallpaper.widget.BottomActionBar.BottomAction.APPLY_TEXT;
 
 import android.content.Context;
+import android.graphics.Point;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.LayoutInflater;
@@ -29,6 +30,8 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.constraintlayout.widget.ConstraintSet;
 import androidx.core.widget.ContentLoadingProgressBar;
 import androidx.lifecycle.ViewModelProvider;
 import androidx.recyclerview.widget.RecyclerView;
@@ -49,11 +52,13 @@
 import com.android.wallpaper.module.InjectorProvider;
 import com.android.wallpaper.picker.AppbarFragment;
 import com.android.wallpaper.util.LaunchUtils;
+import com.android.wallpaper.util.ScreenSizeCalculator;
 import com.android.wallpaper.widget.BottomActionBar;
 
 import com.bumptech.glide.Glide;
 
 import java.util.List;
+import java.util.Locale;
 
 /**
  * Fragment that contains the UI for selecting and applying a GridOption.
@@ -67,7 +72,7 @@
     private OptionSelectorController<GridOption> mOptionsController;
     private GridOptionsManager mGridManager;
     private ContentLoadingProgressBar mLoading;
-    private View mContent;
+    private ConstraintLayout mContent;
     private View mError;
     private BottomActionBar mBottomActionBar;
     private ThemesUserEventLogger mEventLogger;
@@ -117,6 +122,18 @@
             // Make Talkback focus won't reset when notifyDataSetChange
             mOptionsContainer.setItemAnimator(null);
         }
+
+        // Set aspect ratio on the preview card dynamically.
+        Point mScreenSize;
+        ScreenSizeCalculator screenSizeCalculator = ScreenSizeCalculator.getInstance();
+        mScreenSize = screenSizeCalculator.getScreenSize(
+                requireActivity().getWindowManager().getDefaultDisplay());
+        ConstraintSet set = new ConstraintSet();
+        set.clone(mContent);
+        String ratio = String.format(Locale.US, "%d:%d", mScreenSize.x, mScreenSize.y);
+        set.setDimensionRatio(R.id.preview_card_container, ratio);
+        set.applyTo(mContent);
+
         mLoading = view.findViewById(R.id.loading_indicator);
         mError = view.findViewById(R.id.error_section);