Resolve challenge lifecycle race conditions
1) FaceSettings now gets closed when it loses foreground. This prevents A) Keyguard/LockSettingsService's resetLockout's revokeChallenge from leaving FaceSettings with a stale HAT which prevents users from enrolling or toggling elements that require the HAT. B) generateChallenge has a timeout, which may already have been met C) User may have forgotten FaceSettings was open and lost context. Thus it makes no sense to show ConfirmLock* since the user may have no idea why it's showing anymore. 2) FaceSettings now generatesChallenge in onResume. onCreate is too early since again, FaceSettings can be launched via intent while on Keyguard. Similarly, we must ensure that Settings's challenge is generated late enough (e.g. when it actually gains foregroundness) Fixes: 133440610 Fixes: 133498264 Test: Open face settings, confirm password, lock screen. After unlocking, user needs to re-open face settings. Test: Modify HAL/framework to show re-enroll notification Tap re-enroll notificaton on keyguard Delete and re-enroll in settings, successful Test: FaceSettings enroll works accross orientation change Test: Tapping enroll button doesn't cause challenge to be revoked due to onStop() Change-Id: I60f606314c458a61e9c1b4f4b66bc27bc44287da
This commit is contained in:
@@ -42,6 +42,7 @@ public class FaceSettingsEnrollButtonPreferenceController extends BasePreference
|
||||
private byte[] mToken;
|
||||
private SettingsActivity mActivity;
|
||||
private Button mButton;
|
||||
private boolean mIsClicked;
|
||||
|
||||
public FaceSettingsEnrollButtonPreferenceController(Context context) {
|
||||
this(context, KEY);
|
||||
@@ -63,6 +64,7 @@ public class FaceSettingsEnrollButtonPreferenceController extends BasePreference
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
mIsClicked = true;
|
||||
final Intent intent = new Intent();
|
||||
intent.setClassName("com.android.settings", FaceEnrollIntroduction.class.getName());
|
||||
intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
|
||||
@@ -83,6 +85,13 @@ public class FaceSettingsEnrollButtonPreferenceController extends BasePreference
|
||||
mToken = token;
|
||||
}
|
||||
|
||||
// Return the click state, then clear its state.
|
||||
public boolean isClicked() {
|
||||
final boolean wasClicked = mIsClicked;
|
||||
mIsClicked = false;
|
||||
return wasClicked;
|
||||
}
|
||||
|
||||
public void setActivity(SettingsActivity activity) {
|
||||
mActivity = activity;
|
||||
}
|
||||
|
Reference in New Issue
Block a user