Delete all work fingerprints when unified lock changes to None/Swipe
Bug: 27551139
Change-Id: I64105621057e04be0e4d8073626ac3ed0f1e72d2
diff --git a/src/com/android/settings/ChooseLockGeneric.java b/src/com/android/settings/ChooseLockGeneric.java
index edd59af..775cf77 100644
--- a/src/com/android/settings/ChooseLockGeneric.java
+++ b/src/com/android/settings/ChooseLockGeneric.java
@@ -27,6 +27,7 @@
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
+import android.content.pm.UserInfo;
import android.hardware.fingerprint.Fingerprint;
import android.hardware.fingerprint.FingerprintManager;
import android.hardware.fingerprint.FingerprintManager.RemovalCallback;
@@ -50,6 +51,8 @@
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedPreference;
+import java.util.List;
+
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
public class ChooseLockGeneric extends SettingsActivity {
@@ -117,25 +120,6 @@
private FingerprintManager mFingerprintManager;
private int mUserId;
private boolean mHideDrawer = false;
- private RemovalCallback mRemovalCallback = new RemovalCallback() {
-
- @Override
- public void onRemovalSucceeded(Fingerprint fingerprint) {
- Log.v(TAG, "Fingerprint removed: " + fingerprint.getFingerId());
- if (mFingerprintManager.getEnrolledFingerprints().size() == 0) {
- finish();
- }
- }
-
- @Override
- public void onRemovalError(Fingerprint fp, int errMsgId, CharSequence errString) {
- Activity activity = getActivity();
- if (activity != null) {
- Toast.makeText(getActivity(), errString, Toast.LENGTH_SHORT);
- }
- finish();
- }
- };
protected boolean mForFingerprint = false;
@@ -599,10 +583,10 @@
mLockPatternUtils.setSeparateProfileChallengeEnabled(mUserId, true, mUserPassword);
mChooseLockSettingsHelper.utils().clearLock(mUserId);
mChooseLockSettingsHelper.utils().setLockScreenDisabled(disabled, mUserId);
- removeAllFingerprintTemplatesAndFinish();
+ removeAllFingerprintForUserAndFinish(mUserId);
getActivity().setResult(Activity.RESULT_OK);
} else {
- removeAllFingerprintTemplatesAndFinish();
+ removeAllFingerprintForUserAndFinish(mUserId);
}
}
@@ -637,24 +621,27 @@
return intent;
}
- private void removeAllFingerprintTemplatesAndFinish() {
+ private void removeAllFingerprintForUserAndFinish(final int userId) {
if (mFingerprintManager != null && mFingerprintManager.isHardwareDetected()
- && mFingerprintManager.hasEnrolledFingerprints(mUserId)) {
- mFingerprintManager.setActiveUser(mUserId);
+ && mFingerprintManager.hasEnrolledFingerprints(userId)) {
+ mFingerprintManager.setActiveUser(userId);
mFingerprintManager.remove(
- new Fingerprint(null, mUserId, 0, 0), mUserId,
+ new Fingerprint(null, userId, 0, 0), userId,
new RemovalCallback() {
@Override
public void onRemovalError(Fingerprint fp, int errMsgId,
CharSequence errString) {
- mRemovalCallback.onRemovalError(fp, errMsgId, errString);
- mFingerprintManager.setActiveUser(UserHandle.myUserId());
+ Log.v(TAG, "Fingerprint removed: " + fp.getFingerId());
+ if (fp.getFingerId() == 0) {
+ removeManagedProfileFingerprintsAndFinishIfNecessary(userId);
+ }
}
@Override
public void onRemovalSucceeded(Fingerprint fingerprint) {
- mRemovalCallback.onRemovalSucceeded(fingerprint);
- mFingerprintManager.setActiveUser(UserHandle.myUserId());
+ if (fingerprint.getFingerId() == 0) {
+ removeManagedProfileFingerprintsAndFinishIfNecessary(userId);
+ }
}
});
} else {
@@ -666,6 +653,29 @@
}
}
+ private void removeManagedProfileFingerprintsAndFinishIfNecessary(final int parentUserId) {
+ mFingerprintManager.setActiveUser(UserHandle.myUserId());
+ final UserManager um = UserManager.get(getActivity());
+ boolean hasChildProfile = false;
+ if (!um.getUserInfo(parentUserId).isManagedProfile()) {
+ // Current user is primary profile, remove work profile fingerprints if necessary
+ final List<UserInfo> profiles = um.getProfiles(parentUserId);
+ final int profilesSize = profiles.size();
+ for (int i = 0; i < profilesSize; i++) {
+ final UserInfo userInfo = profiles.get(i);
+ if (userInfo.isManagedProfile() && !mLockPatternUtils
+ .isSeparateProfileChallengeEnabled(userInfo.id)) {
+ removeAllFingerprintForUserAndFinish(userInfo.id);
+ hasChildProfile = true;
+ break;
+ }
+ }
+ }
+ if (!hasChildProfile) {
+ finish();
+ }
+ }
+
@Override
public void onDestroy() {
super.onDestroy();