Update help animation per new spec

Bug: 288155127
Bug: 305834550
Test: manually
Change-Id: I0731d65bbcbefa30c25b53e625d07b4e5771c78d
This commit is contained in:
Wu Ahan
2023-11-17 14:11:20 +00:00
parent 14f38ba36c
commit 740d345fb2
3 changed files with 45 additions and 10 deletions

View File

@@ -53,7 +53,6 @@ import android.view.Surface;
import android.view.View; import android.view.View;
import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager; import android.view.accessibility.AccessibilityManager;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.AnimationUtils; import android.view.animation.AnimationUtils;
import android.view.animation.Interpolator; import android.view.animation.Interpolator;
import android.widget.ProgressBar; import android.widget.ProgressBar;
@@ -190,7 +189,7 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
private boolean mHaveShownSfpsRightEdgeLottie; private boolean mHaveShownSfpsRightEdgeLottie;
private boolean mShouldShowLottie; private boolean mShouldShowLottie;
private ObjectAnimator mHelpAnimation; private Animator mHelpAnimation;
private OrientationEventListener mOrientationEventListener; private OrientationEventListener mOrientationEventListener;
private int mPreviousRotation = 0; private int mPreviousRotation = 0;
@@ -332,16 +331,10 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
} }
private void setHelpAnimation() { private void setHelpAnimation() {
final float translationX = 40;
final int duration = 550;
final RelativeLayout progressLottieLayout = findViewById(R.id.progress_lottie); final RelativeLayout progressLottieLayout = findViewById(R.id.progress_lottie);
mHelpAnimation = ObjectAnimator.ofFloat(progressLottieLayout, mHelpAnimation = mSfpsEnrollmentFeature.getHelpAnimator(progressLottieLayout);
"translationX" /* propertyName */,
0, translationX, -1 * translationX, translationX, 0f);
mHelpAnimation.setInterpolator(new AccelerateDecelerateInterpolator());
mHelpAnimation.setDuration(duration);
mHelpAnimation.setAutoCancel(false);
} }
@Override @Override
protected BiometricEnrollSidecar getSidecar() { protected BiometricEnrollSidecar getSidecar() {
final FingerprintEnrollSidecar sidecar = new FingerprintEnrollSidecar(this, final FingerprintEnrollSidecar sidecar = new FingerprintEnrollSidecar(this,
@@ -689,6 +682,9 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
view.setComposition(composition); view.setComposition(composition);
view.setVisibility(View.VISIBLE); view.setVisibility(View.VISIBLE);
view.playAnimation(); view.playAnimation();
if (mCanAssumeSfps) {
mSfpsEnrollmentFeature.handleOnEnrollmentLottieComposition(view);
}
} }
@EnrollStage @EnrollStage
@@ -1212,5 +1208,10 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
public float getEnrollStageThreshold(@NonNull Context context, int index) { public float getEnrollStageThreshold(@NonNull Context context, int index) {
throw new IllegalStateException(exceptionStr); throw new IllegalStateException(exceptionStr);
} }
@Override
public Animator getHelpAnimator(@NonNull View target) {
throw new IllegalStateException(exceptionStr);
}
} }
} }

View File

@@ -16,12 +16,16 @@
package com.android.settings.biometrics.fingerprint.feature; package com.android.settings.biometrics.fingerprint.feature;
import android.animation.Animator;
import android.content.Context; import android.content.Context;
import android.view.View;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.android.settings.biometrics.fingerprint.FingerprintEnrollEnrolling; import com.android.settings.biometrics.fingerprint.FingerprintEnrollEnrolling;
import com.airbnb.lottie.LottieAnimationView;
import java.util.function.Function; import java.util.function.Function;
import java.util.function.Supplier; import java.util.function.Supplier;
@@ -76,4 +80,17 @@ public interface SfpsEnrollmentFeature {
* @return threshold * @return threshold
*/ */
float getEnrollStageThreshold(@NonNull Context context, int index); float getEnrollStageThreshold(@NonNull Context context, int index);
/**
* Gets the help animator used when get help message.
* @param target the target view to animate
* @return animator
*/
Animator getHelpAnimator(@NonNull View target);
/**
* Handles extra stuffs on lottie composition.
* @param lottieView the view related to the lottie
*/
default void handleOnEnrollmentLottieComposition(LottieAnimationView lottieView) {}
} }

View File

@@ -23,8 +23,12 @@ import static com.android.settings.biometrics.fingerprint.FingerprintEnrollEnrol
import static com.android.settings.biometrics.fingerprint.FingerprintEnrollEnrolling.SFPS_STAGE_RIGHT_EDGE; import static com.android.settings.biometrics.fingerprint.FingerprintEnrollEnrolling.SFPS_STAGE_RIGHT_EDGE;
import static com.android.settings.biometrics.fingerprint.FingerprintEnrollEnrolling.STAGE_UNKNOWN; import static com.android.settings.biometrics.fingerprint.FingerprintEnrollEnrolling.STAGE_UNKNOWN;
import android.animation.Animator;
import android.animation.ObjectAnimator;
import android.content.Context; import android.content.Context;
import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintManager;
import android.view.View;
import android.view.animation.AccelerateInterpolator;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
@@ -88,4 +92,17 @@ public class SfpsEnrollmentFeatureImpl implements SfpsEnrollmentFeature {
} }
return mFingerprintManager.getEnrollStageThreshold(index); return mFingerprintManager.getEnrollStageThreshold(index);
} }
@Override
public Animator getHelpAnimator(@NonNull View target) {
final float translationX = 40;
final int duration = 550;
final ObjectAnimator help = ObjectAnimator.ofFloat(target,
"translationX" /* propertyName */,
0, translationX, -1 * translationX, translationX, 0f);
help.setInterpolator(new AccelerateInterpolator());
help.setDuration(duration);
help.setAutoCancel(false);
return help;
}
} }