From e6554d23a564a5d7a929c7aa8bbecf639750079d Mon Sep 17 00:00:00 2001 From: Mill Chen Date: Fri, 5 Nov 2021 14:23:08 +0800 Subject: [PATCH] Revert "Revert "Update animation for fingerprint edu page"" This reverts commit ba0a012b5783c71ff1f589949fbbde3a41d20b54. Fix: 204719520 Test: Settings should not crash when entering fingerprint edu page Change-Id: If79fc50bbd6b198e7fccc52fce66c27cf3761d6d --- res/layout/sfps_enroll_find_sensor_layout.xml | 56 +++++++++++++++ res/raw/fingerprint_edu_lottie.json | 0 res/raw/fingerprint_edu_lottie_portrait.json | 0 .../FingerprintEnrollFindSensor.java | 69 ++++++++++++++++++- 4 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 res/layout/sfps_enroll_find_sensor_layout.xml create mode 100644 res/raw/fingerprint_edu_lottie.json create mode 100644 res/raw/fingerprint_edu_lottie_portrait.json diff --git a/res/layout/sfps_enroll_find_sensor_layout.xml b/res/layout/sfps_enroll_find_sensor_layout.xml new file mode 100644 index 00000000000..fe74e583e89 --- /dev/null +++ b/res/layout/sfps_enroll_find_sensor_layout.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + diff --git a/res/raw/fingerprint_edu_lottie.json b/res/raw/fingerprint_edu_lottie.json new file mode 100644 index 00000000000..e69de29bb2d diff --git a/res/raw/fingerprint_edu_lottie_portrait.json b/res/raw/fingerprint_edu_lottie_portrait.json new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java index 3cea9629069..405c0905523 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java @@ -21,13 +21,14 @@ import android.content.Intent; import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintSensorPropertiesInternal; import android.os.Bundle; +import android.view.OrientationEventListener; +import android.view.Surface; import android.view.View; import android.view.View.OnClickListener; import android.view.accessibility.AccessibilityManager; import androidx.annotation.Nullable; -import com.airbnb.lottie.LottieAnimationView; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.biometrics.BiometricEnrollBase; @@ -35,6 +36,7 @@ import com.android.settings.biometrics.BiometricEnrollSidecar; import com.android.settings.biometrics.BiometricUtils; import com.android.settings.password.ChooseLockSettingsHelper; +import com.airbnb.lottie.LottieAnimationView; import com.google.android.setupcompat.template.FooterBarMixin; import com.google.android.setupcompat.template.FooterButton; @@ -52,6 +54,10 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements private FingerprintEnrollSidecar mSidecar; private boolean mNextClicked; private boolean mCanAssumeUdfps; + private boolean mCanAssumeSidefps; + + private OrientationEventListener mOrientationEventListener; + private int mPreviousRotation = 0; @Override protected void onCreate(Bundle savedInstanceState) { @@ -61,6 +67,7 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements final List props = fingerprintManager.getSensorPropertiesInternal(); mCanAssumeUdfps = props != null && props.size() == 1 && props.get(0).isAnyUdfpsType(); + mCanAssumeSidefps = props != null && props.size() == 1 && props.get(0).isAnySidefpsType(); setContentView(getContentView()); mFooterBarMixin = getLayout().getMixin(FooterBarMixin.class); mFooterBarMixin.setSecondaryButton( @@ -72,6 +79,8 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements .build() ); + listenOrientationEvent(); + if (mCanAssumeUdfps) { setHeaderText(R.string.security_settings_udfps_enroll_find_sensor_title); setDescriptionText(R.string.security_settings_udfps_enroll_find_sensor_message); @@ -90,6 +99,28 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements lottieAnimationView.setAnimation(R.raw.udfps_edu_a11y_lottie); } + } else if (mCanAssumeSidefps) { + setHeaderText(R.string.security_settings_fingerprint_enroll_find_sensor_title); + setDescriptionText(R.string.security_settings_fingerprint_enroll_find_sensor_message); + final LottieAnimationView lottieAnimationView = findViewById(R.id.illustration_lottie); + final LottieAnimationView lottieAnimationViewPortrait = + findViewById(R.id.illustration_lottie_portrait); + final int rotation = getApplicationContext().getDisplay().getRotation(); + switch(rotation) { + case Surface.ROTATION_90: + lottieAnimationView.setVisibility(View.GONE); + lottieAnimationViewPortrait.setVisibility(View.VISIBLE); + break; + case Surface.ROTATION_270: + lottieAnimationView.setVisibility(View.GONE); + lottieAnimationViewPortrait.setVisibility(View.VISIBLE); + lottieAnimationViewPortrait.setRotation(180); + break; + default: + lottieAnimationView.setVisibility(View.VISIBLE); + lottieAnimationViewPortrait.setVisibility(View.GONE); + break; + } } else { setHeaderText(R.string.security_settings_fingerprint_enroll_find_sensor_title); setDescriptionText(R.string.security_settings_fingerprint_enroll_find_sensor_message); @@ -145,6 +176,8 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements protected int getContentView() { if (mCanAssumeUdfps) { return R.layout.udfps_enroll_find_sensor_layout; + } else if (mCanAssumeSidefps) { + return R.layout.sfps_enroll_find_sensor_layout; } return R.layout.fingerprint_enroll_find_sensor; } @@ -220,6 +253,7 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements @Override protected void onDestroy() { + stopListenOrientationEvent(); super.onDestroy(); if (mAnimation != null) { mAnimation.stopAnimation(); @@ -297,4 +331,37 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements public int getMetricsCategory() { return SettingsEnums.FINGERPRINT_FIND_SENSOR; } + + private void listenOrientationEvent() { + if (!mCanAssumeSidefps) { + // Do nothing if the device doesn't support SideFPS. + return; + } + mOrientationEventListener = new OrientationEventListener(this) { + @Override + public void onOrientationChanged(int orientation) { + final int currentRotation = getDisplay().getRotation(); + if ((mPreviousRotation == Surface.ROTATION_90 + && currentRotation == Surface.ROTATION_270) || ( + mPreviousRotation == Surface.ROTATION_270 + && currentRotation == Surface.ROTATION_90)) { + mPreviousRotation = currentRotation; + recreate(); + } + } + }; + mOrientationEventListener.enable(); + mPreviousRotation = getDisplay().getRotation(); + } + + private void stopListenOrientationEvent() { + if (!mCanAssumeSidefps) { + // Do nothing if the device doesn't support SideFPS. + return; + } + if (mOrientationEventListener != null) { + mOrientationEventListener.disable(); + } + mOrientationEventListener = null; + } }