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;
+ }
}