Auto-advance when fingerprint touch is detected.
Because there's no way to listen to the fingerprint sensor without enrolling or authenticating, we start a short enrollment session to detect first press of a finger to advance to the next stage. Change-Id: If242ade8729f34464171cda54deab0922ad85b1d
This commit is contained in:
@@ -50,7 +50,7 @@ import com.android.settings.R;
|
|||||||
public class FingerprintEnrollEnrolling extends FingerprintEnrollBase
|
public class FingerprintEnrollEnrolling extends FingerprintEnrollBase
|
||||||
implements FingerprintEnrollSidecar.Listener {
|
implements FingerprintEnrollSidecar.Listener {
|
||||||
|
|
||||||
private static final String TAG_SIDECAR = "sidecar";
|
static final String TAG_SIDECAR = "sidecar";
|
||||||
|
|
||||||
private static final int PROGRESS_BAR_MAX = 10000;
|
private static final int PROGRESS_BAR_MAX = 10000;
|
||||||
private static final int FINISH_DELAY = 250;
|
private static final int FINISH_DELAY = 250;
|
||||||
@@ -170,6 +170,8 @@ public class FingerprintEnrollEnrolling extends FingerprintEnrollBase
|
|||||||
mSidecar.setListener(null);
|
mSidecar.setListener(null);
|
||||||
stopIconAnimation();
|
stopIconAnimation();
|
||||||
if (!isChangingConfigurations()) {
|
if (!isChangingConfigurations()) {
|
||||||
|
mSidecar.cancelEnrollment();
|
||||||
|
getFragmentManager().beginTransaction().remove(mSidecar).commit();
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -23,6 +23,7 @@ import android.os.Bundle;
|
|||||||
import com.android.internal.logging.MetricsLogger;
|
import com.android.internal.logging.MetricsLogger;
|
||||||
import com.android.settings.ChooseLockSettingsHelper;
|
import com.android.settings.ChooseLockSettingsHelper;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.fingerprint.FingerprintEnrollSidecar.Listener;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Activity explaining the fingerprint sensor location for fingerprint enrollment.
|
* Activity explaining the fingerprint sensor location for fingerprint enrollment.
|
||||||
@@ -35,16 +36,23 @@ public class FingerprintEnrollFindSensor extends FingerprintEnrollBase {
|
|||||||
|
|
||||||
private FingerprintFindSensorAnimation mAnimation;
|
private FingerprintFindSensorAnimation mAnimation;
|
||||||
private boolean mLaunchedConfirmLock;
|
private boolean mLaunchedConfirmLock;
|
||||||
|
private FingerprintEnrollSidecar mSidecar;
|
||||||
|
private boolean mNextClicked;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.fingerprint_enroll_find_sensor);
|
setContentView(R.layout.fingerprint_enroll_find_sensor);
|
||||||
setHeaderText(R.string.security_settings_fingerprint_enroll_find_sensor_title);
|
setHeaderText(R.string.security_settings_fingerprint_enroll_find_sensor_title);
|
||||||
mLaunchedConfirmLock = savedInstanceState != null && savedInstanceState.getBoolean(
|
if (savedInstanceState != null) {
|
||||||
EXTRA_KEY_LAUNCHED_CONFIRM);
|
mLaunchedConfirmLock = savedInstanceState.getBoolean(EXTRA_KEY_LAUNCHED_CONFIRM);
|
||||||
|
mToken = savedInstanceState.getByteArray(
|
||||||
|
ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN);
|
||||||
|
}
|
||||||
if (mToken == null && !mLaunchedConfirmLock) {
|
if (mToken == null && !mLaunchedConfirmLock) {
|
||||||
launchConfirmLock();
|
launchConfirmLock();
|
||||||
|
} else if (mToken != null) {
|
||||||
|
startLookingForFingerprint(); // already confirmed, so start looking for fingerprint
|
||||||
}
|
}
|
||||||
mAnimation = (FingerprintFindSensorAnimation) findViewById(
|
mAnimation = (FingerprintFindSensorAnimation) findViewById(
|
||||||
R.id.fingerprint_sensor_location_animation);
|
R.id.fingerprint_sensor_location_animation);
|
||||||
@@ -56,6 +64,37 @@ public class FingerprintEnrollFindSensor extends FingerprintEnrollBase {
|
|||||||
mAnimation.startAnimation();
|
mAnimation.startAnimation();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void startLookingForFingerprint() {
|
||||||
|
mSidecar = (FingerprintEnrollSidecar) getFragmentManager().findFragmentByTag(
|
||||||
|
FingerprintEnrollEnrolling.TAG_SIDECAR);
|
||||||
|
if (mSidecar == null) {
|
||||||
|
mSidecar = new FingerprintEnrollSidecar();
|
||||||
|
getFragmentManager().beginTransaction()
|
||||||
|
.add(mSidecar, FingerprintEnrollEnrolling.TAG_SIDECAR).commit();
|
||||||
|
}
|
||||||
|
mSidecar.setListener(new Listener() {
|
||||||
|
@Override
|
||||||
|
public void onEnrollmentProgressChange(int steps, int remaining) {
|
||||||
|
mNextClicked = true;
|
||||||
|
if (!mSidecar.cancelEnrollment()) {
|
||||||
|
proceedToEnrolling();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onEnrollmentHelp(CharSequence helpString) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onEnrollmentError(int errMsgId, CharSequence errString) {
|
||||||
|
if (mNextClicked && errMsgId == FingerprintManager.FINGERPRINT_ERROR_CANCELED) {
|
||||||
|
mNextClicked = false;
|
||||||
|
proceedToEnrolling();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onStop() {
|
protected void onStop() {
|
||||||
super.onStop();
|
super.onStop();
|
||||||
@@ -66,10 +105,20 @@ public class FingerprintEnrollFindSensor extends FingerprintEnrollBase {
|
|||||||
public void onSaveInstanceState(Bundle outState) {
|
public void onSaveInstanceState(Bundle outState) {
|
||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
outState.putBoolean(EXTRA_KEY_LAUNCHED_CONFIRM, mLaunchedConfirmLock);
|
outState.putBoolean(EXTRA_KEY_LAUNCHED_CONFIRM, mLaunchedConfirmLock);
|
||||||
|
outState.putByteArray(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, mToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onNextButtonClick() {
|
protected void onNextButtonClick() {
|
||||||
|
mNextClicked = true;
|
||||||
|
if (mSidecar == null || (mSidecar != null && !mSidecar.cancelEnrollment())) {
|
||||||
|
proceedToEnrolling();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void proceedToEnrolling() {
|
||||||
|
getFragmentManager().beginTransaction().remove(mSidecar).commit();
|
||||||
|
mSidecar = null;
|
||||||
startActivityForResult(getEnrollingIntent(), ENROLLING);
|
startActivityForResult(getEnrollingIntent(), ENROLLING);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,6 +128,8 @@ public class FingerprintEnrollFindSensor extends FingerprintEnrollBase {
|
|||||||
if (resultCode == RESULT_OK) {
|
if (resultCode == RESULT_OK) {
|
||||||
mToken = data.getByteArrayExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN);
|
mToken = data.getByteArrayExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN);
|
||||||
overridePendingTransition(R.anim.suw_slide_next_in, R.anim.suw_slide_next_out);
|
overridePendingTransition(R.anim.suw_slide_next_in, R.anim.suw_slide_next_out);
|
||||||
|
getIntent().putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, mToken);
|
||||||
|
startLookingForFingerprint();
|
||||||
} else {
|
} else {
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
@@ -99,6 +150,9 @@ public class FingerprintEnrollFindSensor extends FingerprintEnrollBase {
|
|||||||
com.android.internal.R.integer.config_fingerprintMaxTemplatesPerUser);
|
com.android.internal.R.integer.config_fingerprintMaxTemplatesPerUser);
|
||||||
if (enrolled >= max) {
|
if (enrolled >= max) {
|
||||||
finish();
|
finish();
|
||||||
|
} else {
|
||||||
|
// We came back from enrolling but it wasn't completed, start again.
|
||||||
|
startLookingForFingerprint();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@@ -79,13 +79,15 @@ public class FingerprintEnrollSidecar extends InstrumentedFragment {
|
|||||||
mEnrolling = true;
|
mEnrolling = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void cancelEnrollment() {
|
boolean cancelEnrollment() {
|
||||||
mHandler.removeCallbacks(mTimeoutRunnable);
|
mHandler.removeCallbacks(mTimeoutRunnable);
|
||||||
if (mEnrolling) {
|
if (mEnrolling) {
|
||||||
mEnrollmentCancel.cancel();
|
mEnrollmentCancel.cancel();
|
||||||
mEnrolling = false;
|
mEnrolling = false;
|
||||||
mEnrollmentSteps = -1;
|
mEnrollmentSteps = -1;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setListener(Listener listener) {
|
public void setListener(Listener listener) {
|
||||||
@@ -131,6 +133,7 @@ public class FingerprintEnrollSidecar extends InstrumentedFragment {
|
|||||||
if (mListener != null) {
|
if (mListener != null) {
|
||||||
mListener.onEnrollmentError(errMsgId, errString);
|
mListener.onEnrollmentError(errMsgId, errString);
|
||||||
}
|
}
|
||||||
|
mEnrolling = false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -151,4 +154,8 @@ public class FingerprintEnrollSidecar extends InstrumentedFragment {
|
|||||||
void onEnrollmentError(int errMsgId, CharSequence errString);
|
void onEnrollmentError(int errMsgId, CharSequence errString);
|
||||||
void onEnrollmentProgressChange(int steps, int remaining);
|
void onEnrollmentProgressChange(int steps, int remaining);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isEnrolling() {
|
||||||
|
return mEnrolling;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user