diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollFindSensor.java b/src/com/android/settings/fingerprint/FingerprintEnrollFindSensor.java
index 2aad3132912..e34a90b1ace 100644
--- a/src/com/android/settings/fingerprint/FingerprintEnrollFindSensor.java
+++ b/src/com/android/settings/fingerprint/FingerprintEnrollFindSensor.java
@@ -20,6 +20,8 @@ import android.content.Intent;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
import android.os.UserHandle;
+import android.support.annotation.Nullable;
+import android.view.View;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
@@ -36,6 +38,7 @@ public class FingerprintEnrollFindSensor extends FingerprintEnrollBase {
private static final int ENROLLING = 2;
public static final String EXTRA_KEY_LAUNCHED_CONFIRM = "launched_confirm_lock";
+ @Nullable
private FingerprintFindSensorAnimation mAnimation;
private boolean mLaunchedConfirmLock;
private FingerprintEnrollSidecar mSidecar;
@@ -56,8 +59,12 @@ public class FingerprintEnrollFindSensor extends FingerprintEnrollBase {
} else if (mToken != null) {
startLookingForFingerprint(); // already confirmed, so start looking for fingerprint
}
- mAnimation = (FingerprintFindSensorAnimation) findViewById(
- R.id.fingerprint_sensor_location_animation);
+ View animationView = findViewById(R.id.fingerprint_sensor_location_animation);
+ if (animationView instanceof FingerprintFindSensorAnimation) {
+ mAnimation = (FingerprintFindSensorAnimation) animationView;
+ } else {
+ mAnimation = null;
+ }
}
protected int getContentView() {
@@ -67,7 +74,9 @@ public class FingerprintEnrollFindSensor extends FingerprintEnrollBase {
@Override
protected void onStart() {
super.onStart();
- mAnimation.startAnimation();
+ if (mAnimation != null) {
+ mAnimation.startAnimation();
+ }
}
private void startLookingForFingerprint() {
@@ -102,13 +111,17 @@ public class FingerprintEnrollFindSensor extends FingerprintEnrollBase {
@Override
protected void onStop() {
super.onStop();
- mAnimation.pauseAnimation();
+ if (mAnimation != null) {
+ mAnimation.pauseAnimation();
+ }
}
@Override
protected void onDestroy() {
super.onDestroy();
- mAnimation.stopAnimation();
+ if (mAnimation != null) {
+ mAnimation.stopAnimation();
+ }
}
@Override
diff --git a/tests/robotests/res/layout-mcc999/fingerprint_enroll_find_sensor.xml b/tests/robotests/res/layout-mcc999/fingerprint_enroll_find_sensor.xml
new file mode 100644
index 00000000000..04489dee962
--- /dev/null
+++ b/tests/robotests/res/layout-mcc999/fingerprint_enroll_find_sensor.xml
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/robotests/src/com/android/settings/fingerprint/FingerprintEnrollFindSensorTest.java b/tests/robotests/src/com/android/settings/fingerprint/FingerprintEnrollFindSensorTest.java
index 74cfc7b7c6c..7df3083df1d 100644
--- a/tests/robotests/src/com/android/settings/fingerprint/FingerprintEnrollFindSensorTest.java
+++ b/tests/robotests/src/com/android/settings/fingerprint/FingerprintEnrollFindSensorTest.java
@@ -93,18 +93,11 @@ public class FingerprintEnrollFindSensorTest {
@Test
public void clickNextAndFingerprint_shouldNotCrash() {
- ArgumentCaptor callbackCaptor =
- ArgumentCaptor.forClass(EnrollmentCallback.class);
- verify(mFingerprintManager).enroll(
- any(byte[].class),
- any(CancellationSignal.class),
- anyInt(),
- anyInt(),
- callbackCaptor.capture());
+ EnrollmentCallback enrollmentCallback = verifyAndCaptureEnrollmentCallback();
Button nextButton = mActivity.findViewById(R.id.next_button);
nextButton.performClick();
- callbackCaptor.getValue().onEnrollmentProgress(123);
+ enrollmentCallback.onEnrollmentProgress(123);
nextButton.performClick();
ShadowActivity shadowActivity = Shadows.shadowOf(mActivity);
@@ -118,4 +111,37 @@ public class FingerprintEnrollFindSensorTest {
assertThat(shadowActivity.getNextStartedActivityForResult()).named("Next activity 2")
.isNull();
}
+
+ // Use a non-default resource qualifier to load the test layout in
+ // robotests/res/layout-mcc999/fingerprint_enroll_find_sensor. This layout is a copy of the
+ // regular find sensor layout, with the animation removed.
+ @Config(qualifiers = "mcc999")
+ @Test
+ public void layoutWithoutAnimation_shouldNotCrash() {
+ EnrollmentCallback enrollmentCallback = verifyAndCaptureEnrollmentCallback();
+ enrollmentCallback.onEnrollmentProgress(123);
+
+ Button nextButton = mActivity.findViewById(R.id.next_button);
+ nextButton.performClick();
+
+ ShadowActivity shadowActivity = Shadows.shadowOf(mActivity);
+ IntentForResult startedActivity =
+ shadowActivity.getNextStartedActivityForResult();
+ assertThat(startedActivity).named("Next activity").isNotNull();
+ assertThat(startedActivity.intent.getComponent())
+ .isEqualTo(new ComponentName(application, FingerprintEnrollEnrolling.class));
+ }
+
+ private EnrollmentCallback verifyAndCaptureEnrollmentCallback() {
+ ArgumentCaptor callbackCaptor =
+ ArgumentCaptor.forClass(EnrollmentCallback.class);
+ verify(mFingerprintManager).enroll(
+ any(byte[].class),
+ any(CancellationSignal.class),
+ anyInt(),
+ anyInt(),
+ callbackCaptor.capture());
+
+ return callbackCaptor.getValue();
+ }
}