Remove private space biometrics on switching to device lock

Bug: 320685466
Test: Verified manually
Change-Id: I5fe850ada9ae53bb1a00ed171beb6f8e099fbc0d
This commit is contained in:
josephpv
2024-01-22 16:21:58 +00:00
parent a05b33b661
commit ec273aca12
4 changed files with 67 additions and 0 deletions

View File

@@ -54,7 +54,9 @@ import android.graphics.drawable.AdaptiveIconDrawable;
import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.graphics.drawable.VectorDrawable; import android.graphics.drawable.VectorDrawable;
import android.hardware.face.Face;
import android.hardware.face.FaceManager; import android.hardware.face.FaceManager;
import android.hardware.fingerprint.Fingerprint;
import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintManager;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.LinkAddress; import android.net.LinkAddress;
@@ -1333,4 +1335,64 @@ public final class Utils extends com.android.settingslib.Utils {
return dreamsSupported && (!dreamsOnlyEnabledForDockUser || canCurrentUserDream(context)); return dreamsSupported && (!dreamsOnlyEnabledForDockUser || canCurrentUserDream(context));
} }
/**
* Removes fingerprint templates enrolled for a given user.
*
* @param context application context.
* @param userId the id of the relevant user
*/
public static void removeEnrolledFingerprintForUser(Context context, int userId) {
FingerprintManager fingerprintManager = getFingerprintManagerOrNull(context);
if (fingerprintManager != null && fingerprintManager.hasEnrolledTemplates(userId)) {
fingerprintManager.removeAll(userId,
fingerprintManagerRemovalCallback(userId));
}
}
/**
* Removes face templates enrolled for a given user.
*
* @param context application context.
* @param userId the id of the relevant user
*/
public static void removeEnrolledFaceForUser(Context context, int userId) {
FaceManager faceManager = getFaceManagerOrNull(context);
if (faceManager != null && faceManager.hasEnrolledTemplates(userId)) {
faceManager.removeAll(userId, faceManagerRemovalCallback(userId));
}
}
private static FaceManager.RemovalCallback faceManagerRemovalCallback(int userId) {
return new FaceManager.RemovalCallback() {
@Override
public void onRemovalError(@Nullable Face face, int errMsgId, CharSequence err) {
Log.e(TAG, "Unable to remove face template for user " + userId + ", error: " + err);
}
@Override
public void onRemovalSucceeded(Face face, int remaining) {
if (remaining == 0) {
Log.d(TAG, "Enrolled face templates removed for user " + userId);
}
}
};
}
private static FingerprintManager.RemovalCallback fingerprintManagerRemovalCallback(
int userId) {
return new FingerprintManager.RemovalCallback() {
@Override
public void onRemovalError(@Nullable Fingerprint fp, int errMsgId, CharSequence err) {
Log.e(TAG, "Unable to remove fingerprint for user " + userId + " , error: " + err);
}
@Override
public void onRemovalSucceeded(Fingerprint fp, int remaining) {
if (remaining == 0) {
Log.d(TAG, "Enrolled fingerprints removed for user " + userId);
}
}
};
}
} }

View File

@@ -23,6 +23,7 @@ import android.util.Log;
import androidx.preference.Preference; import androidx.preference.Preference;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.biometrics.combination.CombinedBiometricStatusPreferenceController; import com.android.settings.biometrics.combination.CombinedBiometricStatusPreferenceController;
import com.android.settings.privatespace.PrivateSpaceMaintainer; import com.android.settings.privatespace.PrivateSpaceMaintainer;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -72,6 +73,8 @@ public class FaceFingerprintUnlockController extends CombinedBiometricStatusPref
super.updateState(preference); super.updateState(preference);
preference.setEnabled(true); preference.setEnabled(true);
} else { } else {
Utils.removeEnrolledFaceForUser(mContext, getUserId());
Utils.removeEnrolledFingerprintForUser(mContext, getUserId());
preference.setSummary( preference.setSummary(
mContext.getString(R.string.lock_settings_profile_unified_summary)); mContext.getString(R.string.lock_settings_profile_unified_summary));
preference.setEnabled(false); preference.setEnabled(false);

View File

@@ -74,6 +74,7 @@ public class PrivateSpaceFacePreferenceController extends BiometricFaceStatusPre
super.updateState(preference); super.updateState(preference);
preference.setEnabled(true); preference.setEnabled(true);
} else { } else {
Utils.removeEnrolledFaceForUser(mContext, getUserId());
preference.setSummary( preference.setSummary(
mContext.getString(R.string.lock_settings_profile_unified_summary)); mContext.getString(R.string.lock_settings_profile_unified_summary));
preference.setEnabled(false); preference.setEnabled(false);

View File

@@ -76,6 +76,7 @@ public class PrivateSpaceFingerprintPreferenceController
super.updateState(preference); super.updateState(preference);
preference.setEnabled(true); preference.setEnabled(true);
} else { } else {
Utils.removeEnrolledFingerprintForUser(mContext, getUserId());
preference.setSummary( preference.setSummary(
mContext.getString(R.string.lock_settings_profile_unified_summary)); mContext.getString(R.string.lock_settings_profile_unified_summary));
preference.setEnabled(false); preference.setEnabled(false);