From 08a27087392c8277e7a477154da5d9846d1df0ff Mon Sep 17 00:00:00 2001 From: Saumya Prakash Date: Fri, 9 Jun 2023 23:20:10 +0000 Subject: [PATCH] Scale the gesture tutorial animation to work on smaller devices The lottie animations in the gesture navigation tutorial would get cut off due to having to crop them to smaller devices. This change uses a matrix to correctly scale the animation such that the aspect ratio is maintained. Flag: ENABLE_NEW_GESTURE_NAV_TUTORIAL Fix: 283969417 Test: Went through the tutorial on devices of different sizes and aspect ratios and ensured that the lottie animation isn't cut off. Change-Id: I4b4cc9e11a68daef29fa31d6a89a1c9006041937 --- .../redesigned_gesture_tutorial_fragment.xml | 2 +- .../interaction/TutorialController.java | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/quickstep/res/layout/redesigned_gesture_tutorial_fragment.xml b/quickstep/res/layout/redesigned_gesture_tutorial_fragment.xml index 7d5505e4e2..a1bcad0a7c 100644 --- a/quickstep/res/layout/redesigned_gesture_tutorial_fragment.xml +++ b/quickstep/res/layout/redesigned_gesture_tutorial_fragment.xml @@ -124,7 +124,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" - android:scaleType="centerCrop" + android:scaleType="matrix" app:lottie_loop="true" /> diff --git a/quickstep/src/com/android/quickstep/interaction/TutorialController.java b/quickstep/src/com/android/quickstep/interaction/TutorialController.java index a58f4538c8..222e604580 100644 --- a/quickstep/src/com/android/quickstep/interaction/TutorialController.java +++ b/quickstep/src/com/android/quickstep/interaction/TutorialController.java @@ -30,6 +30,7 @@ import android.annotation.RawRes; import android.content.Context; import android.content.pm.PackageManager; import android.graphics.Color; +import android.graphics.Matrix; import android.graphics.Outline; import android.graphics.Rect; import android.graphics.drawable.AnimatedVectorDrawable; @@ -67,6 +68,7 @@ import com.android.quickstep.interaction.NavBarGestureHandler.NavBarGestureAttem import com.android.systemui.shared.system.QuickStepContract; import com.airbnb.lottie.LottieAnimationView; +import com.airbnb.lottie.LottieComposition; import java.util.ArrayList; @@ -175,6 +177,8 @@ abstract class TutorialController implements BackGestureAttemptCallback, mExitingAppStartingCornerRadius = QuickStepContract.getWindowCornerRadius(mContext); mExitingAppEndingCornerRadius = mContext.getResources().getDimensionPixelSize( R.dimen.gesture_tutorial_back_gesture_end_corner_radius); + mAnimatedGestureDemonstration.addLottieOnCompositionLoadedListener( + this::createScalingMatrix); mFeedbackTitleView.setText(getIntroductionTitle()); mFeedbackSubtitleView.setText(getIntroductionSubtitle()); @@ -214,6 +218,24 @@ abstract class TutorialController implements BackGestureAttemptCallback, }; } + /** Scale the Lottie gesture animation to fit the device based on device dimensions */ + private void createScalingMatrix(LottieComposition composition) { + Rect animationBoundsRect = composition.getBounds(); + if (animationBoundsRect == null) { + mAnimatedGestureDemonstration.setScaleType(ImageView.ScaleType.CENTER_CROP); + return; + } + Matrix scaleMatrix = new Matrix(); + float pivotX = mScreenWidth / 2f; + float pivotY = mScreenHeight; + float scaleFactor = mScreenWidth / animationBoundsRect.width(); + + scaleMatrix.postScale(scaleFactor, scaleFactor, pivotX, pivotY); + scaleMatrix.postTranslate(0, + mTutorialFragment.getDeviceProfile().heightPx - animationBoundsRect.height()); + mAnimatedGestureDemonstration.setImageMatrix(scaleMatrix); + } + private void showSkipTutorialDialog() { if (mSkipTutorialDialog != null) { mSkipTutorialDialog.show();