diff --git a/res/layout/fingerprint_enroll_find_sensor_base.xml b/res/layout/fingerprint_enroll_find_sensor_base.xml index 62203f71c81..da7fc309711 100644 --- a/res/layout/fingerprint_enroll_find_sensor_base.xml +++ b/res/layout/fingerprint_enroll_find_sensor_base.xml @@ -17,6 +17,7 @@ + + + + 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..64e066ec00c 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); @@ -220,6 +251,7 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements @Override protected void onDestroy() { + stopListenOrientationEvent(); super.onDestroy(); if (mAnimation != null) { mAnimation.stopAnimation(); @@ -297,4 +329,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; + } }