Merge changes from topic "face-settings-challenge" into qt-r1-dev
* changes: Resolve challenge lifecycle race conditions Revert "Add generateChallenge() in onResume()"
This commit is contained in:
@@ -69,6 +69,8 @@ public class FaceSettings extends DashboardFragment {
|
|||||||
private Preference mRemoveButton;
|
private Preference mRemoveButton;
|
||||||
private Preference mEnrollButton;
|
private Preference mEnrollButton;
|
||||||
|
|
||||||
|
private boolean mConfirmingPassword;
|
||||||
|
|
||||||
private final FaceSettingsRemoveButtonPreferenceController.Listener mRemovalListener = () -> {
|
private final FaceSettingsRemoveButtonPreferenceController.Listener mRemovalListener = () -> {
|
||||||
|
|
||||||
// Disable the toggles until the user re-enrolls
|
// Disable the toggles until the user re-enrolls
|
||||||
@@ -150,9 +152,15 @@ public class FaceSettings extends DashboardFragment {
|
|||||||
@Override
|
@Override
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
if (mToken == null) {
|
|
||||||
|
if (mToken == null && !mConfirmingPassword) {
|
||||||
|
// Generate challenge in onResume instead of onCreate, since FaceSettings can be
|
||||||
|
// created while Keyguard is showing, in which case the resetLockout revokeChallenge
|
||||||
|
// will invalidate the too-early created challenge here.
|
||||||
final long challenge = mFaceManager.generateChallenge();
|
final long challenge = mFaceManager.generateChallenge();
|
||||||
ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper(getActivity(), this);
|
ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper(getActivity(), this);
|
||||||
|
|
||||||
|
mConfirmingPassword = true;
|
||||||
if (!helper.launchConfirmationActivity(CONFIRM_REQUEST,
|
if (!helper.launchConfirmationActivity(CONFIRM_REQUEST,
|
||||||
getString(R.string.security_settings_face_preference_title),
|
getString(R.string.security_settings_face_preference_title),
|
||||||
null, null, challenge, mUserId)) {
|
null, null, challenge, mUserId)) {
|
||||||
@@ -173,6 +181,7 @@ public class FaceSettings extends DashboardFragment {
|
|||||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
super.onActivityResult(requestCode, resultCode, data);
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
if (requestCode == CONFIRM_REQUEST) {
|
if (requestCode == CONFIRM_REQUEST) {
|
||||||
|
mConfirmingPassword = false;
|
||||||
if (resultCode == RESULT_FINISHED || resultCode == RESULT_OK) {
|
if (resultCode == RESULT_FINISHED || resultCode == RESULT_OK) {
|
||||||
mFaceManager.setActiveUser(mUserId);
|
mFaceManager.setActiveUser(mUserId);
|
||||||
// The pin/pattern/password was set.
|
// The pin/pattern/password was set.
|
||||||
@@ -196,11 +205,19 @@ public class FaceSettings extends DashboardFragment {
|
|||||||
@Override
|
@Override
|
||||||
public void onStop() {
|
public void onStop() {
|
||||||
super.onStop();
|
super.onStop();
|
||||||
mToken = null;
|
|
||||||
|
if (!mEnrollController.isClicked() && !getActivity().isChangingConfigurations()
|
||||||
|
&& !mConfirmingPassword) {
|
||||||
|
// Revoke challenge and finish
|
||||||
|
if (mToken != null) {
|
||||||
final int result = mFaceManager.revokeChallenge();
|
final int result = mFaceManager.revokeChallenge();
|
||||||
if (result < 0) {
|
if (result < 0) {
|
||||||
Log.w(TAG, "revokeChallenge failed, result: " + result);
|
Log.w(TAG, "revokeChallenge failed, result: " + result);
|
||||||
}
|
}
|
||||||
|
mToken = null;
|
||||||
|
}
|
||||||
|
getActivity().finish();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -42,6 +42,7 @@ public class FaceSettingsEnrollButtonPreferenceController extends BasePreference
|
|||||||
private byte[] mToken;
|
private byte[] mToken;
|
||||||
private SettingsActivity mActivity;
|
private SettingsActivity mActivity;
|
||||||
private Button mButton;
|
private Button mButton;
|
||||||
|
private boolean mIsClicked;
|
||||||
|
|
||||||
public FaceSettingsEnrollButtonPreferenceController(Context context) {
|
public FaceSettingsEnrollButtonPreferenceController(Context context) {
|
||||||
this(context, KEY);
|
this(context, KEY);
|
||||||
@@ -63,6 +64,7 @@ public class FaceSettingsEnrollButtonPreferenceController extends BasePreference
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
|
mIsClicked = true;
|
||||||
final Intent intent = new Intent();
|
final Intent intent = new Intent();
|
||||||
intent.setClassName("com.android.settings", FaceEnrollIntroduction.class.getName());
|
intent.setClassName("com.android.settings", FaceEnrollIntroduction.class.getName());
|
||||||
intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
|
intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
|
||||||
@@ -83,6 +85,13 @@ public class FaceSettingsEnrollButtonPreferenceController extends BasePreference
|
|||||||
mToken = token;
|
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) {
|
public void setActivity(SettingsActivity activity) {
|
||||||
mActivity = activity;
|
mActivity = activity;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user