Merge "Update the IllustrationPreference of SettingsLib." into sc-dev
diff --git a/packages/SettingsLib/IllustrationPreference/res/layout/illustration_preference.xml b/packages/SettingsLib/IllustrationPreference/res/layout/illustration_preference.xml
index 3f8439c..efcd41c 100644
--- a/packages/SettingsLib/IllustrationPreference/res/layout/illustration_preference.xml
+++ b/packages/SettingsLib/IllustrationPreference/res/layout/illustration_preference.xml
@@ -20,35 +20,38 @@
     android:layout_height="wrap_content"
     android:layout_width="match_parent"
     android:background="?android:attr/colorBackground"
+    android:importantForAccessibility="noHideDescendants"
     android:gravity="center"
     android:orientation="horizontal">
 
-    <LinearLayout
-        android:layout_width="match_parent"
+    <FrameLayout
+        android:id="@+id/illustration_frame"
+        android:layout_width="wrap_content"
         android:layout_height="@dimen/settingslib_illustration_height"
         android:layout_gravity="center"
         android:gravity="center_vertical"
         android:padding="@dimen/settingslib_illustration_padding"
         android:orientation="vertical">
+
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:background="@drawable/protection_background"/>
+
         <com.airbnb.lottie.LottieAnimationView
             android:id="@+id/lottie_view"
-            android:adjustViewBounds="true"
-            android:maxWidth="@dimen/settingslib_illustration_width"
-            android:layout_width="wrap_content"
+            android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:layout_gravity="center"
-            android:clipToOutline="true"
-            android:background="@drawable/protection_background"
-            android:importantForAccessibility="no"/>
-    </LinearLayout>
+            android:layout_gravity="center" />
 
-    <FrameLayout
-        android:id="@+id/middleground_layout"
-        android:layout_width="@dimen/settingslib_illustration_width"
-        android:layout_height="@dimen/settingslib_illustration_height"
-        android:padding="@dimen/settingslib_illustration_padding"
-        android:background="@android:color/transparent"
-        android:layout_gravity="center"
-        android:visibility="gone"/>
+        <FrameLayout
+            android:id="@+id/middleground_layout"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:background="@android:color/transparent"
+            android:layout_gravity="center"
+            android:visibility="gone"/>
+    </FrameLayout>
+
 </FrameLayout>
 
diff --git a/packages/SettingsLib/IllustrationPreference/src/com/android/settingslib/widget/IllustrationPreference.java b/packages/SettingsLib/IllustrationPreference/src/com/android/settingslib/widget/IllustrationPreference.java
index 8e6c579..e91dd94 100644
--- a/packages/SettingsLib/IllustrationPreference/src/com/android/settingslib/widget/IllustrationPreference.java
+++ b/packages/SettingsLib/IllustrationPreference/src/com/android/settingslib/widget/IllustrationPreference.java
@@ -21,6 +21,7 @@
 import android.util.AttributeSet;
 import android.util.Log;
 import android.view.View;
+import android.view.ViewGroup.LayoutParams;
 import android.widget.FrameLayout;
 import android.widget.ImageView;
 
@@ -68,6 +69,18 @@
             Log.w(TAG, "Invalid illustration resource id.");
             return;
         }
+
+        // To solve the problem of non-compliant illustrations, we set the frame height
+        // to 300dp and set the length of the short side of the screen to
+        // the width of the frame.
+        final int screenWidth = getContext().getResources().getDisplayMetrics().widthPixels;
+        final int screenHeight = getContext().getResources().getDisplayMetrics().heightPixels;
+        final FrameLayout illustrationFrame = (FrameLayout) holder.findViewById(
+                R.id.illustration_frame);
+        final LayoutParams lp = (LayoutParams) illustrationFrame.getLayoutParams();
+        lp.width = screenWidth < screenHeight ? screenWidth : screenHeight;
+        illustrationFrame.setLayoutParams(lp);
+
         mMiddleGroundLayout = (FrameLayout) holder.findViewById(R.id.middleground_layout);
         mIllustrationView = (LottieAnimationView) holder.findViewById(R.id.lottie_view);
         mIllustrationView.setAnimation(mAnimationId);
@@ -124,6 +137,13 @@
                 mIsAutoScale ? ImageView.ScaleType.CENTER_CROP : ImageView.ScaleType.CENTER_INSIDE);
     }
 
+    /**
+     * Set the lottie illustration resource id.
+     */
+    public void setLottieAnimationResId(int resId) {
+        mAnimationId = resId;
+    }
+
     private void enableMiddleGroundView() {
         mMiddleGroundLayout.removeAllViews();
         mMiddleGroundLayout.addView(mMiddleGroundView);