Files
app_Settings/src/com/android/settings/fingerprint/FingerprintEnrollFindSensor.java
Maurice Lam da433902d4 [Fingerprint] Send RESULT_CANCELED when back from Add another
Forward the result in the enrolling screen from the finish screen,
so that if the user presses back in "Add another" after enrolling
the first fingerprint, it will return RESULT_CANCELED instead of
RESULT_FINISHED, and go back to find sensor screen.

This results in the following behavioral changes:
- RESULT_FINISHED will only be sent if the user presses "Done" in
  FingerprintEnrollFinish. If the user clicks back in
  FingerprintEnrollEnrolling, they will always go back to the
  previous screen with RESULT_CANCELED, which would either be
  FindSensor or FingerprintSettings.
- If the user presses back in FingerprintEnrollFinish, which is only
  possible outside of Setup Wizard, they will be back in Find Sensor,
  and pressing next will enroll an additional fingerprint.
  - Edge case: if the user enrolled the maximum number of
    fingerprints, and presses back, they will be bounced all the way
    back to Settings > Security.

Bug: 22552741
Change-Id: Ifc5e8a9150491b4303e01ebd0fc17b6d39dd372d
2015-07-21 15:23:11 -07:00

106 lines
3.6 KiB
Java

/*
* Copyright (C) 2015 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License
*/
package com.android.settings.fingerprint;
import android.content.Context;
import android.content.Intent;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
import com.android.settings.ChooseLockSettingsHelper;
import com.android.settings.R;
/**
* Activity explaining the fingerprint sensor location for fingerprint enrollment.
*/
public class FingerprintEnrollFindSensor extends FingerprintEnrollBase {
private static final int CONFIRM_REQUEST = 1;
private static final int ENROLLING = 2;
private FingerprintLocationAnimationView mAnimation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fingerprint_enroll_find_sensor);
setHeaderText(R.string.security_settings_fingerprint_enroll_find_sensor_title);
if (mToken == null) {
launchConfirmLock();
}
mAnimation = (FingerprintLocationAnimationView) findViewById(
R.id.fingerprint_sensor_location_animation);
}
@Override
protected void onStart() {
super.onStart();
mAnimation.startAnimation();
}
@Override
protected void onStop() {
super.onStop();
mAnimation.stopAnimation();
}
@Override
protected void onNextButtonClick() {
startActivityForResult(getEnrollingIntent(), ENROLLING);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CONFIRM_REQUEST) {
if (resultCode == RESULT_OK) {
mToken = data.getByteArrayExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN);
overridePendingTransition(R.anim.suw_slide_next_in, R.anim.suw_slide_next_out);
} else {
finish();
}
} else if (requestCode == ENROLLING) {
if (resultCode == RESULT_FINISHED) {
setResult(RESULT_FINISHED);
finish();
} else {
FingerprintManager fpm = getSystemService(FingerprintManager.class);
int enrolled = fpm.getEnrolledFingerprints().size();
int max = getResources().getInteger(
com.android.internal.R.integer.config_fingerprintMaxTemplatesPerUser);
if (enrolled >= max) {
finish();
}
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
private void launchConfirmLock() {
long challenge = getSystemService(FingerprintManager.class).preEnroll();
ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper(this);
if (!helper.launchConfirmationActivity(CONFIRM_REQUEST,
getString(R.string.security_settings_fingerprint_preference_title),
null, null, challenge)) {
// This shouldn't happen, as we should only end up at this step if a lock thingy is
// already set.
finish();
}
}
}