Merge "Auto-advance when fingerprint touch is detected."

This commit is contained in:
Jim Miller
2016-01-13 23:37:12 +00:00
committed by Android (Google) Code Review
3 changed files with 67 additions and 4 deletions

View File

@@ -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();
} }
} }

View File

@@ -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();
@@ -72,10 +111,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);
} }
@@ -85,6 +134,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();
} }
@@ -105,6 +156,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 {

View File

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