Adjust the preview UI.

1. Adjust the preview’s aspect ratio to match screen’s aspect ratio.
2. No peeking second preview in the preview pager.
3. Fix the incorrect aspect ratio when only one preview in the preview pager.

Bug: 154334570
Change-Id: I15affbe3a06abb652f8e4c335951dc234609bfdb
diff --git a/src/com/android/wallpaper/widget/PreviewPager.java b/src/com/android/wallpaper/widget/PreviewPager.java
index da0e45a..e9a37fa 100644
--- a/src/com/android/wallpaper/widget/PreviewPager.java
+++ b/src/com/android/wallpaper/widget/PreviewPager.java
@@ -19,11 +19,12 @@
 import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.database.DataSetObserver;
+import android.graphics.Point;
 import android.util.AttributeSet;
-import android.util.DisplayMetrics;
 import android.util.TypedValue;
 import android.view.LayoutInflater;
 import android.view.View;
+import android.view.WindowManager;
 import android.widget.LinearLayout;
 
 import androidx.annotation.Nullable;
@@ -34,6 +35,7 @@
 import androidx.viewpager.widget.ViewPager.OnPageChangeListener;
 
 import com.android.wallpaper.R;
+import com.android.wallpaper.util.ScreenSizeCalculator;
 
 import java.util.Locale;
 
@@ -97,15 +99,27 @@
                     hMargin,
                     res.getDimensionPixelOffset(R.dimen.preview_page_bottom_margin));
         } else if (mPageStyle == STYLE_ASPECT_RATIO) {
-            DisplayMetrics dm = res.getDisplayMetrics();
-            mScreenAspectRatio = dm.heightPixels > dm.widthPixels
-                    ? (float) dm.heightPixels / dm.widthPixels
-                    : (float) dm.widthPixels / dm.heightPixels;
+            WindowManager windowManager = context.getSystemService(WindowManager.class);
+            Point screenSize = ScreenSizeCalculator.getInstance()
+                    .getScreenSize(windowManager.getDefaultDisplay());
+            mScreenAspectRatio = (float) screenSize.y / screenSize.x;
             mViewPager.setPadding(
                     0,
                     res.getDimensionPixelOffset(R.dimen.preview_page_top_margin),
                     0,
                     res.getDimensionPixelOffset(R.dimen.preview_page_bottom_margin));
+            // Set the default margin to make sure not peeking the second page before calculating
+            // the real margin.
+            mViewPager.setPageMargin(screenSize.x / 2);
+            mViewPager.addOnLayoutChangeListener(new OnLayoutChangeListener() {
+                @Override
+                public void onLayoutChange(View view, int left, int top, int right, int bottom,
+                                           int oldLeft, int oldTop, int oldRight, int oldBottom) {
+                    // Set the minimum margin which can't peek the second page.
+                    mViewPager.setPageMargin(view.getPaddingEnd());
+                    mViewPager.removeOnLayoutChangeListener(this);
+                }
+            });
         }
         mPageIndicator = findViewById(R.id.page_indicator);
         mPreviousArrow = findViewById(R.id.arrow_previous);
@@ -124,12 +138,18 @@
 
     @Override
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        View parentView = (View) getParent();
+        float parentHeight = parentView != null ? parentView.getMeasuredHeight() : 0;
+        if (parentHeight > 0) {
+            int maxHeight = Math.min(MeasureSpec.getSize(heightMeasureSpec),
+                    (int) (parentHeight * mMaxHeightRatio));
+            heightMeasureSpec = MeasureSpec.makeMeasureSpec(maxHeight, MeasureSpec.AT_MOST);
+        }
+
         if (mPageStyle == STYLE_ASPECT_RATIO) {
             int availableWidth = MeasureSpec.getSize(widthMeasureSpec);
             int availableHeight = MeasureSpec.getSize(heightMeasureSpec);
-            int indicatorHeight = mPageIndicator.getVisibility() == VISIBLE
-                    ? ((View) mPageIndicator.getParent()).getLayoutParams().height
-                    : 0;
+            int indicatorHeight = ((View) mPageIndicator.getParent()).getLayoutParams().height;
             int pagerHeight = availableHeight - indicatorHeight;
             if (availableWidth > 0) {
                 int absoluteCardWidth = (int) ((pagerHeight - mViewPager.getPaddingBottom()
@@ -143,14 +163,6 @@
             }
         }
 
-        View parentView = (View) getParent();
-        float parentHeight = parentView != null ? parentView.getMeasuredHeight() : 0;
-        if (parentHeight > 0) {
-            int maxHeight = Math.min(MeasureSpec.getSize(heightMeasureSpec),
-                    (int) (parentHeight * mMaxHeightRatio));
-            heightMeasureSpec = MeasureSpec.makeMeasureSpec(maxHeight, MeasureSpec.AT_MOST);
-        }
-
         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
     }