From ec273aca1279e1117137a051bdaf0785b171c3cf Mon Sep 17 00:00:00 2001 From: josephpv Date: Mon, 22 Jan 2024 16:21:58 +0000 Subject: [PATCH] Remove private space biometrics on switching to device lock Bug: 320685466 Test: Verified manually Change-Id: I5fe850ada9ae53bb1a00ed171beb6f8e099fbc0d --- src/com/android/settings/Utils.java | 62 +++++++++++++++++++ .../FaceFingerprintUnlockController.java | 3 + .../PrivateSpaceFacePreferenceController.java | 1 + ...eSpaceFingerprintPreferenceController.java | 1 + 4 files changed, 67 insertions(+) diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java index 25fd3a20f68..108e331a090 100644 --- a/src/com/android/settings/Utils.java +++ b/src/com/android/settings/Utils.java @@ -54,7 +54,9 @@ import android.graphics.drawable.AdaptiveIconDrawable; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.VectorDrawable; +import android.hardware.face.Face; import android.hardware.face.FaceManager; +import android.hardware.fingerprint.Fingerprint; import android.hardware.fingerprint.FingerprintManager; import android.net.ConnectivityManager; import android.net.LinkAddress; @@ -1333,4 +1335,64 @@ public final class Utils extends com.android.settingslib.Utils { 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); + } + } + }; + } } diff --git a/src/com/android/settings/privatespace/onelock/FaceFingerprintUnlockController.java b/src/com/android/settings/privatespace/onelock/FaceFingerprintUnlockController.java index 271a2195d30..2e3f2840b70 100644 --- a/src/com/android/settings/privatespace/onelock/FaceFingerprintUnlockController.java +++ b/src/com/android/settings/privatespace/onelock/FaceFingerprintUnlockController.java @@ -23,6 +23,7 @@ import android.util.Log; import androidx.preference.Preference; import com.android.settings.R; +import com.android.settings.Utils; import com.android.settings.biometrics.combination.CombinedBiometricStatusPreferenceController; import com.android.settings.privatespace.PrivateSpaceMaintainer; import com.android.settingslib.core.lifecycle.Lifecycle; @@ -72,6 +73,8 @@ public class FaceFingerprintUnlockController extends CombinedBiometricStatusPref super.updateState(preference); preference.setEnabled(true); } else { + Utils.removeEnrolledFaceForUser(mContext, getUserId()); + Utils.removeEnrolledFingerprintForUser(mContext, getUserId()); preference.setSummary( mContext.getString(R.string.lock_settings_profile_unified_summary)); preference.setEnabled(false); diff --git a/src/com/android/settings/privatespace/onelock/PrivateSpaceFacePreferenceController.java b/src/com/android/settings/privatespace/onelock/PrivateSpaceFacePreferenceController.java index 2a5ff885dfd..b841d9aded5 100644 --- a/src/com/android/settings/privatespace/onelock/PrivateSpaceFacePreferenceController.java +++ b/src/com/android/settings/privatespace/onelock/PrivateSpaceFacePreferenceController.java @@ -74,6 +74,7 @@ public class PrivateSpaceFacePreferenceController extends BiometricFaceStatusPre super.updateState(preference); preference.setEnabled(true); } else { + Utils.removeEnrolledFaceForUser(mContext, getUserId()); preference.setSummary( mContext.getString(R.string.lock_settings_profile_unified_summary)); preference.setEnabled(false); diff --git a/src/com/android/settings/privatespace/onelock/PrivateSpaceFingerprintPreferenceController.java b/src/com/android/settings/privatespace/onelock/PrivateSpaceFingerprintPreferenceController.java index b6c44574fc4..d48490460b5 100644 --- a/src/com/android/settings/privatespace/onelock/PrivateSpaceFingerprintPreferenceController.java +++ b/src/com/android/settings/privatespace/onelock/PrivateSpaceFingerprintPreferenceController.java @@ -76,6 +76,7 @@ public class PrivateSpaceFingerprintPreferenceController super.updateState(preference); preference.setEnabled(true); } else { + Utils.removeEnrolledFingerprintForUser(mContext, getUserId()); preference.setSummary( mContext.getString(R.string.lock_settings_profile_unified_summary)); preference.setEnabled(false);