Add BiometricPromptService
The change introduces the following:
- BiometricPrompt communicatates with BiometricPromptService (new)
system service. The service does the decision making for which
biometric modality to use.
- As a result, a lot of logic is moved from <Biometric>Manager
to BiometricPrompt. FingerprintManager now does not care about
BiometricPrompt logic anymore (reverts several P changes).
Face, and all future <Biometric>Service interfaces must be protected by
the signature-only MANAGE_BIOMETRIC permission. Settings, SystemUI, and
BiometricPromptService are their only clients.
Bug: 72825012
Test: BiometricPromptDemo works
Test: Keyguard works
Test: Settings works
Change-Id: I2b7d6eff81bc07950202c50e592d733032523bf0
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 2f6fca4..fd982d6 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -67,6 +67,7 @@
import com.android.server.am.ActivityManagerService;
import com.android.server.am.ActivityTaskManagerService;
import com.android.server.audio.AudioService;
+import com.android.server.biometrics.BiometricPromptService;
import com.android.server.broadcastradio.BroadcastRadioService;
import com.android.server.camera.CameraServiceProxy;
import com.android.server.clipboard.ClipboardService;
@@ -1552,18 +1553,30 @@
}
traceEnd();
- if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_FACE)) {
+ final boolean hasFeatureFace
+ = mPackageManager.hasSystemFeature(PackageManager.FEATURE_FACE);
+ final boolean hasFeatureFingerprint
+ = mPackageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT);
+
+ if (hasFeatureFace) {
traceBeginAndSlog("StartFaceSensor");
mSystemServiceManager.startService(FaceService.class);
traceEnd();
}
- if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) {
+ if (hasFeatureFingerprint) {
traceBeginAndSlog("StartFingerprintSensor");
mSystemServiceManager.startService(FingerprintService.class);
traceEnd();
}
+ if (hasFeatureFace || hasFeatureFingerprint) {
+ // Start this service after all biometric services.
+ traceBeginAndSlog("StartBiometricPromptService");
+ mSystemServiceManager.startService(BiometricPromptService.class);
+ traceEnd();
+ }
+
traceBeginAndSlog("StartBackgroundDexOptService");
try {
BackgroundDexOptService.schedule(context);