Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4f59c38d authored by Stanley Wang's avatar Stanley Wang
Browse files

Update the IllustrationPreference of SettingsLib.

- Adjust the frame size of the LottieView. We set the frame height
  to 300dp and set the length of the short side of the screen to
  the width of the frame. In this way, LottieView has a fixed size
  to solve the problem of incorrect illustration spec.
- Set the importantForAccessibility value to noHideDescendants to
  avoid the a11y issue.

Bug: 190807662
Test: robotest and see the UI.
Change-Id: Ib48f9c65e0dfbf36b7ebb70718fa5423c918a7a9
parent 4defdfae
Loading
Loading
Loading
Loading
+20 −17
Original line number Diff line number Diff line
@@ -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:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@android:color/transparent"
            android:layout_gravity="center"
            android:visibility="gone"/>
    </FrameLayout>

</FrameLayout>
+20 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.content.res.TypedArray;
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 @@ public class IllustrationPreference extends Preference {
            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 @@ public class IllustrationPreference extends Preference {
                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);