Delete all work fingerprints when unified lock changes to None/Swipe
Bug: 27551139 Change-Id: I64105621057e04be0e4d8073626ac3ed0f1e72d2
This commit is contained in:
@@ -27,6 +27,7 @@ import android.app.admin.DevicePolicyManager;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.pm.UserInfo;
|
||||||
import android.hardware.fingerprint.Fingerprint;
|
import android.hardware.fingerprint.Fingerprint;
|
||||||
import android.hardware.fingerprint.FingerprintManager;
|
import android.hardware.fingerprint.FingerprintManager;
|
||||||
import android.hardware.fingerprint.FingerprintManager.RemovalCallback;
|
import android.hardware.fingerprint.FingerprintManager.RemovalCallback;
|
||||||
@@ -50,6 +51,8 @@ import com.android.internal.widget.LockPatternUtils;
|
|||||||
import com.android.settingslib.RestrictedLockUtils;
|
import com.android.settingslib.RestrictedLockUtils;
|
||||||
import com.android.settingslib.RestrictedPreference;
|
import com.android.settingslib.RestrictedPreference;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
|
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
|
||||||
|
|
||||||
public class ChooseLockGeneric extends SettingsActivity {
|
public class ChooseLockGeneric extends SettingsActivity {
|
||||||
@@ -117,25 +120,6 @@ public class ChooseLockGeneric extends SettingsActivity {
|
|||||||
private FingerprintManager mFingerprintManager;
|
private FingerprintManager mFingerprintManager;
|
||||||
private int mUserId;
|
private int mUserId;
|
||||||
private boolean mHideDrawer = false;
|
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;
|
protected boolean mForFingerprint = false;
|
||||||
|
|
||||||
@@ -599,10 +583,10 @@ public class ChooseLockGeneric extends SettingsActivity {
|
|||||||
mLockPatternUtils.setSeparateProfileChallengeEnabled(mUserId, true, mUserPassword);
|
mLockPatternUtils.setSeparateProfileChallengeEnabled(mUserId, true, mUserPassword);
|
||||||
mChooseLockSettingsHelper.utils().clearLock(mUserId);
|
mChooseLockSettingsHelper.utils().clearLock(mUserId);
|
||||||
mChooseLockSettingsHelper.utils().setLockScreenDisabled(disabled, mUserId);
|
mChooseLockSettingsHelper.utils().setLockScreenDisabled(disabled, mUserId);
|
||||||
removeAllFingerprintTemplatesAndFinish();
|
removeAllFingerprintForUserAndFinish(mUserId);
|
||||||
getActivity().setResult(Activity.RESULT_OK);
|
getActivity().setResult(Activity.RESULT_OK);
|
||||||
} else {
|
} else {
|
||||||
removeAllFingerprintTemplatesAndFinish();
|
removeAllFingerprintForUserAndFinish(mUserId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -637,24 +621,27 @@ public class ChooseLockGeneric extends SettingsActivity {
|
|||||||
return intent;
|
return intent;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void removeAllFingerprintTemplatesAndFinish() {
|
private void removeAllFingerprintForUserAndFinish(final int userId) {
|
||||||
if (mFingerprintManager != null && mFingerprintManager.isHardwareDetected()
|
if (mFingerprintManager != null && mFingerprintManager.isHardwareDetected()
|
||||||
&& mFingerprintManager.hasEnrolledFingerprints(mUserId)) {
|
&& mFingerprintManager.hasEnrolledFingerprints(userId)) {
|
||||||
mFingerprintManager.setActiveUser(mUserId);
|
mFingerprintManager.setActiveUser(userId);
|
||||||
mFingerprintManager.remove(
|
mFingerprintManager.remove(
|
||||||
new Fingerprint(null, mUserId, 0, 0), mUserId,
|
new Fingerprint(null, userId, 0, 0), userId,
|
||||||
new RemovalCallback() {
|
new RemovalCallback() {
|
||||||
@Override
|
@Override
|
||||||
public void onRemovalError(Fingerprint fp, int errMsgId,
|
public void onRemovalError(Fingerprint fp, int errMsgId,
|
||||||
CharSequence errString) {
|
CharSequence errString) {
|
||||||
mRemovalCallback.onRemovalError(fp, errMsgId, errString);
|
Log.v(TAG, "Fingerprint removed: " + fp.getFingerId());
|
||||||
mFingerprintManager.setActiveUser(UserHandle.myUserId());
|
if (fp.getFingerId() == 0) {
|
||||||
|
removeManagedProfileFingerprintsAndFinishIfNecessary(userId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onRemovalSucceeded(Fingerprint fingerprint) {
|
public void onRemovalSucceeded(Fingerprint fingerprint) {
|
||||||
mRemovalCallback.onRemovalSucceeded(fingerprint);
|
if (fingerprint.getFingerId() == 0) {
|
||||||
mFingerprintManager.setActiveUser(UserHandle.myUserId());
|
removeManagedProfileFingerprintsAndFinishIfNecessary(userId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
@@ -666,6 +653,29 @@ public class ChooseLockGeneric extends SettingsActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
@Override
|
||||||
public void onDestroy() {
|
public void onDestroy() {
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
|
Reference in New Issue
Block a user