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
This commit is contained in:
Stanley Wang
2021-06-15 20:37:27 +08:00
parent 4defdfaeb4
commit 4f59c38d83
2 changed files with 41 additions and 18 deletions

View File

@@ -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="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
android:layout_gravity="center"
android:visibility="gone"/>
</FrameLayout>
<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>

View File

@@ -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);