Fix setting crash when removing screenlock with fp

If a phone is operating slower than normal, when removing screen lock,
it's possible for the user to go back to settings page while removal
is still in progress. The removal callback will crash ChooseLockGeneric

Fixes: 37329856
Test: in fpc_tee_hal.c, make do_remove slow (5s). set up lockscreen, fingerprint,
then set lockscreen to none or swipe. do device rotations, go back to lock screen,
and then try to enroll fingerprint

Change-Id: I6da131a0001b22d06e359401f2ca1c6496c071ca
This commit is contained in:
Kevin Chyn
2017-04-14 13:33:21 -07:00
parent 2a3a92b513
commit ae16e55dd5

View File

@@ -129,6 +129,7 @@ public class ChooseLockGeneric extends SettingsActivity {
private boolean mHideDrawer = false; private boolean mHideDrawer = false;
private ManagedLockPasswordProvider mManagedPasswordProvider; private ManagedLockPasswordProvider mManagedPasswordProvider;
private boolean mIsSetNewPassword = false; private boolean mIsSetNewPassword = false;
private UserManager mUserManager;
protected boolean mForFingerprint = false; protected boolean mForFingerprint = false;
@@ -166,6 +167,7 @@ public class ChooseLockGeneric extends SettingsActivity {
ChooseLockSettingsHelper.EXTRA_KEY_FOR_FINGERPRINT, false); ChooseLockSettingsHelper.EXTRA_KEY_FOR_FINGERPRINT, false);
mForChangeCredRequiredForBoot = getArguments() != null && getArguments().getBoolean( mForChangeCredRequiredForBoot = getArguments() != null && getArguments().getBoolean(
ChooseLockSettingsHelper.EXTRA_KEY_FOR_CHANGE_CRED_REQUIRED_FOR_BOOT); ChooseLockSettingsHelper.EXTRA_KEY_FOR_CHANGE_CRED_REQUIRED_FOR_BOOT);
mUserManager = UserManager.get(getActivity());
if (savedInstanceState != null) { if (savedInstanceState != null) {
mPasswordConfirmed = savedInstanceState.getBoolean(PASSWORD_CONFIRMED); mPasswordConfirmed = savedInstanceState.getBoolean(PASSWORD_CONFIRMED);
@@ -751,11 +753,10 @@ public class ChooseLockGeneric extends SettingsActivity {
if (mFingerprintManager != null && mFingerprintManager.isHardwareDetected()) { if (mFingerprintManager != null && mFingerprintManager.isHardwareDetected()) {
mFingerprintManager.setActiveUser(UserHandle.myUserId()); mFingerprintManager.setActiveUser(UserHandle.myUserId());
} }
final UserManager um = UserManager.get(getActivity());
boolean hasChildProfile = false; boolean hasChildProfile = false;
if (!um.getUserInfo(parentUserId).isManagedProfile()) { if (!mUserManager.getUserInfo(parentUserId).isManagedProfile()) {
// Current user is primary profile, remove work profile fingerprints if necessary // Current user is primary profile, remove work profile fingerprints if necessary
final List<UserInfo> profiles = um.getProfiles(parentUserId); final List<UserInfo> profiles = mUserManager.getProfiles(parentUserId);
final int profilesSize = profiles.size(); final int profilesSize = profiles.size();
for (int i = 0; i < profilesSize; i++) { for (int i = 0; i < profilesSize; i++) {
final UserInfo userInfo = profiles.get(i); final UserInfo userInfo = profiles.get(i);