summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Kevin Chyn <kchyn@google.com> 2020-07-19 18:56:19 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2020-07-19 18:56:19 +0000
commitdaf034b36271957e3211f80772d71a56f67a60e8 (patch)
tree7f9370bf2f91418930bbe14dd01a39c4bc4f3214
parent00b469dd0bfb598a894cdb43384b7bb9623986aa (diff)
parentc486219bcb566c851fa81dcc3fc58a8db29fe30f (diff)
Merge "Update Fingerprint/Face getSensorProperties"
-rw-r--r--core/java/android/hardware/face/FaceManager.java7
-rw-r--r--core/java/android/hardware/face/FaceSensorProperties.java13
-rw-r--r--core/java/android/hardware/face/IFaceService.aidl6
-rw-r--r--core/java/android/hardware/fingerprint/FingerprintManager.java37
-rw-r--r--core/java/android/hardware/fingerprint/FingerprintSensorProperties.aidl18
-rw-r--r--core/java/android/hardware/fingerprint/FingerprintSensorProperties.java85
-rw-r--r--core/java/android/hardware/fingerprint/IFingerprintService.aidl7
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java7
-rw-r--r--packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java13
-rw-r--r--packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java10
-rw-r--r--services/core/java/com/android/server/biometrics/sensors/face/Face10.java6
-rw-r--r--services/core/java/com/android/server/biometrics/sensors/face/FaceService.java21
-rw-r--r--services/core/java/com/android/server/biometrics/sensors/fingerprint/Fingerprint21.java38
-rw-r--r--services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java25
14 files changed, 206 insertions, 87 deletions
diff --git a/core/java/android/hardware/face/FaceManager.java b/core/java/android/hardware/face/FaceManager.java
index 308718f3871b..885d137dd2fe 100644
--- a/core/java/android/hardware/face/FaceManager.java
+++ b/core/java/android/hardware/face/FaceManager.java
@@ -47,6 +47,7 @@ import android.view.Surface;
import com.android.internal.R;
import com.android.internal.os.SomeArgs;
+import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@@ -622,16 +623,16 @@ public class FaceManager implements BiometricAuthenticator, BiometricFaceConstan
*/
@RequiresPermission(USE_BIOMETRIC_INTERNAL)
@NonNull
- public FaceSensorProperties getSensorProperties() {
+ public List<FaceSensorProperties> getSensorProperties() {
try {
if (mService == null || !mService.isHardwareDetected(mContext.getOpPackageName())) {
- return new FaceSensorProperties();
+ return new ArrayList<>();
}
return mService.getSensorProperties(mContext.getOpPackageName());
} catch (RemoteException e) {
e.rethrowFromSystemServer();
}
- return new FaceSensorProperties();
+ return new ArrayList<>();
}
/**
diff --git a/core/java/android/hardware/face/FaceSensorProperties.java b/core/java/android/hardware/face/FaceSensorProperties.java
index 28c1d8772506..e3b2fbb6c614 100644
--- a/core/java/android/hardware/face/FaceSensorProperties.java
+++ b/core/java/android/hardware/face/FaceSensorProperties.java
@@ -25,23 +25,19 @@ import android.os.Parcelable;
*/
public class FaceSensorProperties implements Parcelable {
+ public final int sensorId;
public final boolean supportsFaceDetection;
/**
- * Creates a SensorProperties class with safe default values
- */
- public FaceSensorProperties() {
- supportsFaceDetection = false;
- }
-
- /**
* Initializes SensorProperties with specified values
*/
- public FaceSensorProperties(boolean supportsFaceDetection) {
+ public FaceSensorProperties(int sensorId, boolean supportsFaceDetection) {
+ this.sensorId = sensorId;
this.supportsFaceDetection = supportsFaceDetection;
}
protected FaceSensorProperties(Parcel in) {
+ sensorId = in.readInt();
supportsFaceDetection = in.readBoolean();
}
@@ -65,6 +61,7 @@ public class FaceSensorProperties implements Parcelable {
@Override
public void writeToParcel(Parcel dest, int flags) {
+ dest.writeInt(sensorId);
dest.writeBoolean(supportsFaceDetection);
}
}
diff --git a/core/java/android/hardware/face/IFaceService.aidl b/core/java/android/hardware/face/IFaceService.aidl
index 5d5fe4e270a1..a9097d401349 100644
--- a/core/java/android/hardware/face/IFaceService.aidl
+++ b/core/java/android/hardware/face/IFaceService.aidl
@@ -28,6 +28,9 @@ import android.view.Surface;
* @hide
*/
interface IFaceService {
+ // Retrieve static sensor properties for all face sensors
+ List<FaceSensorProperties> getSensorProperties(String opPackageName);
+
// Authenticate the given sessionId with a face
void authenticate(IBinder token, long operationId, int userid, IFaceServiceReceiver receiver,
String opPackageName);
@@ -88,9 +91,6 @@ interface IFaceService {
// Determine if a user has at least one enrolled face
boolean hasEnrolledFaces(int userId, String opPackageName);
- // Retrieve static sensor properties
- FaceSensorProperties getSensorProperties(String opPackageName);
-
// Return the LockoutTracker status for the specified user
int getLockoutModeForUser(int userId);
diff --git a/core/java/android/hardware/fingerprint/FingerprintManager.java b/core/java/android/hardware/fingerprint/FingerprintManager.java
index 8488454933da..e384da7574ad 100644
--- a/core/java/android/hardware/fingerprint/FingerprintManager.java
+++ b/core/java/android/hardware/fingerprint/FingerprintManager.java
@@ -50,6 +50,7 @@ import android.util.Slog;
import android.view.Surface;
import java.security.Signature;
+import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executor;
@@ -740,24 +741,6 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing
* @hide
*/
@RequiresPermission(USE_BIOMETRIC_INTERNAL)
- public boolean isUdfps() {
- if (mService == null) {
- Slog.w(TAG, "isUdfps: no fingerprint service");
- return false;
- }
-
- try {
- return mService.isUdfps();
- } catch (RemoteException e) {
- e.rethrowFromSystemServer();
- }
- return false;
- }
-
- /**
- * @hide
- */
- @RequiresPermission(USE_BIOMETRIC_INTERNAL)
public void setUdfpsOverlayController(IUdfpsOverlayController controller) {
if (mService == null) {
Slog.w(TAG, "setUdfpsOverlayController: no fingerprint service");
@@ -862,6 +845,24 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing
}
/**
+ * Get statically configured sensor properties.
+ * @hide
+ */
+ @RequiresPermission(USE_BIOMETRIC_INTERNAL)
+ @NonNull
+ public List<FingerprintSensorProperties> getSensorProperties() {
+ try {
+ if (mService == null || !mService.isHardwareDetected(mContext.getOpPackageName())) {
+ return new ArrayList<>();
+ }
+ return mService.getSensorProperties(mContext.getOpPackageName());
+ } catch (RemoteException e) {
+ e.rethrowFromSystemServer();
+ }
+ return new ArrayList<>();
+ }
+
+ /**
* @hide
*/
public void addLockoutResetCallback(final LockoutResetCallback callback) {
diff --git a/core/java/android/hardware/fingerprint/FingerprintSensorProperties.aidl b/core/java/android/hardware/fingerprint/FingerprintSensorProperties.aidl
new file mode 100644
index 000000000000..83d853dd4048
--- /dev/null
+++ b/core/java/android/hardware/fingerprint/FingerprintSensorProperties.aidl
@@ -0,0 +1,18 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.hardware.fingerprint;
+
+parcelable FingerprintSensorProperties; \ No newline at end of file
diff --git a/core/java/android/hardware/fingerprint/FingerprintSensorProperties.java b/core/java/android/hardware/fingerprint/FingerprintSensorProperties.java
new file mode 100644
index 000000000000..a774121c43f4
--- /dev/null
+++ b/core/java/android/hardware/fingerprint/FingerprintSensorProperties.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.hardware.fingerprint;
+
+import android.annotation.IntDef;
+import android.hardware.face.FaceSensorProperties;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Container for fingerprint sensor properties.
+ * @hide
+ */
+public class FingerprintSensorProperties implements Parcelable {
+
+ public static final int TYPE_UNKNOWN = 0;
+ public static final int TYPE_REAR = 1;
+ public static final int TYPE_UDFPS = 2;
+ public static final int TYPE_POWER_BUTTON = 3;
+
+ @IntDef({
+ TYPE_UNKNOWN,
+ TYPE_REAR,
+ TYPE_UDFPS,
+ TYPE_POWER_BUTTON})
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface SensorType {}
+
+ public final int sensorId;
+ public final @SensorType int sensorType;
+
+ /**
+ * Initializes SensorProperties with specified values
+ */
+ public FingerprintSensorProperties(int sensorId, @SensorType int sensorType) {
+ this.sensorId = sensorId;
+ this.sensorType = sensorType;
+ }
+
+ protected FingerprintSensorProperties(Parcel in) {
+ sensorId = in.readInt();
+ sensorType = in.readInt();
+ }
+
+ public static final Creator<FingerprintSensorProperties> CREATOR =
+ new Creator<FingerprintSensorProperties>() {
+ @Override
+ public FingerprintSensorProperties createFromParcel(Parcel in) {
+ return new FingerprintSensorProperties(in);
+ }
+
+ @Override
+ public FingerprintSensorProperties[] newArray(int size) {
+ return new FingerprintSensorProperties[size];
+ }
+ };
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeInt(sensorId);
+ dest.writeInt(sensorType);
+ }
+}
diff --git a/core/java/android/hardware/fingerprint/IFingerprintService.aidl b/core/java/android/hardware/fingerprint/IFingerprintService.aidl
index 3604b5e8671d..f6069d81934f 100644
--- a/core/java/android/hardware/fingerprint/IFingerprintService.aidl
+++ b/core/java/android/hardware/fingerprint/IFingerprintService.aidl
@@ -21,6 +21,7 @@ import android.hardware.fingerprint.IFingerprintClientActiveCallback;
import android.hardware.fingerprint.IFingerprintServiceReceiver;
import android.hardware.fingerprint.IUdfpsOverlayController;
import android.hardware.fingerprint.Fingerprint;
+import android.hardware.fingerprint.FingerprintSensorProperties;
import android.view.Surface;
import java.util.List;
@@ -29,6 +30,9 @@ import java.util.List;
* @hide
*/
interface IFingerprintService {
+ // Retrieve static sensor properties for all fingerprint sensors
+ List<FingerprintSensorProperties> getSensorProperties(String opPackageName);
+
// Authenticate the given sessionId with a fingerprint. This is protected by
// USE_FINGERPRINT/USE_BIOMETRIC permission. This is effectively deprecated, since it only comes
// through FingerprintManager now.
@@ -122,9 +126,6 @@ interface IFingerprintService {
// Notifies about a finger leaving the sensor area.
void onFingerUp();
- // Returns whether the sensor is an under-display fingerprint sensor (UDFPS).
- boolean isUdfps();
-
// Sets the controller for managing the UDFPS overlay.
void setUdfpsOverlayController(in IUdfpsOverlayController controller);
}
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
index 498b6b2455d7..8a36e7b127db 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -1338,7 +1338,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
private CancellationSignal mFaceCancelSignal;
private FingerprintManager mFpm;
private FaceManager mFaceManager;
- private FaceSensorProperties mFaceSensorProperties;
+ private List<FaceSensorProperties> mFaceSensorProperties;
private boolean mFingerprintLockedOut;
private TelephonyManager mTelephonyManager;
@@ -2100,7 +2100,10 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
}
mFaceCancelSignal = new CancellationSignal();
- if (isEncryptedOrLockdown(userId) && mFaceSensorProperties.supportsFaceDetection) {
+ // This would need to be updated for multi-sensor devices
+ final boolean supportsFaceDetection = !mFaceSensorProperties.isEmpty()
+ && mFaceSensorProperties.get(0).supportsFaceDetection;
+ if (isEncryptedOrLockdown(userId) && supportsFaceDetection) {
mFaceManager.detectFace(mFaceCancelSignal, mFaceDetectionCallback, userId);
} else {
mFaceManager.authenticate(null /* crypto */, mFaceCancelSignal,
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java
index 42911374dc87..980e4c0fd333 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java
@@ -38,6 +38,7 @@ import android.hardware.biometrics.IBiometricSysuiReceiver;
import android.hardware.biometrics.PromptInfo;
import android.hardware.face.FaceManager;
import android.hardware.fingerprint.FingerprintManager;
+import android.hardware.fingerprint.FingerprintSensorProperties;
import android.hardware.fingerprint.IFingerprintService;
import android.os.Bundle;
import android.os.Handler;
@@ -265,6 +266,7 @@ public class AuthController extends SystemUI implements CommandQueue.Callbacks,
context.registerReceiver(mBroadcastReceiver, filter);
}
+ @SuppressWarnings("deprecation")
@Override
public void start() {
mCommandQueue.addCallback(this);
@@ -273,10 +275,13 @@ public class AuthController extends SystemUI implements CommandQueue.Callbacks,
final FingerprintManager fpm = mContext.getSystemService(FingerprintManager.class);
if (fpm != null && fpm.isHardwareDetected()) {
- // TODO(b/160024833): Enumerate through all of the sensors and check whether
- // at least one of them is UDFPS.
- if (fpm.isUdfps()) {
- mUdfpsController = new UdfpsController(mContext, mWindowManager);
+ final List<FingerprintSensorProperties> fingerprintSensorProperties =
+ fpm.getSensorProperties();
+ for (FingerprintSensorProperties props : fingerprintSensorProperties) {
+ if (props.sensorType == FingerprintSensorProperties.TYPE_UDFPS) {
+ mUdfpsController = new UdfpsController(mContext, mWindowManager);
+ break;
+ }
}
}
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
index 5f153f86d322..4a8ada09b3d2 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
@@ -132,6 +132,8 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
@Mock
private FaceManager mFaceManager;
@Mock
+ private List<FaceSensorProperties> mFaceSensorProperties;
+ @Mock
private BiometricManager mBiometricManager;
@Mock
private PackageManager mPackageManager;
@@ -175,7 +177,13 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
when(mFaceManager.isHardwareDetected()).thenReturn(true);
when(mFaceManager.hasEnrolledTemplates()).thenReturn(true);
when(mFaceManager.hasEnrolledTemplates(anyInt())).thenReturn(true);
- when(mFaceManager.getSensorProperties()).thenReturn(new FaceSensorProperties());
+ when(mFaceManager.getSensorProperties()).thenReturn(mFaceSensorProperties);
+
+ // IBiometricsFace@1.0 does not support detection, only authentication.
+ when(mFaceSensorProperties.isEmpty()).thenReturn(false);
+ when(mFaceSensorProperties.get(anyInt())).thenReturn(new FaceSensorProperties(0 /* id */,
+ false /* supportsFaceDetection */));
+
when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
when(mFingerprintManager.hasEnrolledTemplates(anyInt())).thenReturn(true);
when(mUserManager.isUserUnlocked(anyInt())).thenReturn(true);
diff --git a/services/core/java/com/android/server/biometrics/sensors/face/Face10.java b/services/core/java/com/android/server/biometrics/sensors/face/Face10.java
index 7f2b18b9edf5..6c57208c1e84 100644
--- a/services/core/java/com/android/server/biometrics/sensors/face/Face10.java
+++ b/services/core/java/com/android/server/biometrics/sensors/face/Face10.java
@@ -29,8 +29,8 @@ import android.hardware.biometrics.BiometricsProtoEnums;
import android.hardware.biometrics.face.V1_0.IBiometricsFace;
import android.hardware.biometrics.face.V1_0.IBiometricsFaceClientCallback;
import android.hardware.face.Face;
-import android.hardware.face.IFaceServiceReceiver;
import android.hardware.face.FaceSensorProperties;
+import android.hardware.face.IFaceServiceReceiver;
import android.os.Build;
import android.os.Handler;
import android.os.IBinder;
@@ -269,7 +269,7 @@ class Face10 implements IHwBinder.DeathRecipient {
Face10(@NonNull Context context, int sensorId,
@NonNull LockoutResetDispatcher lockoutResetDispatcher) {
- mFaceSensorProperties = new FaceSensorProperties(false /* supportsFaceDetect */);
+ mFaceSensorProperties = new FaceSensorProperties(sensorId, false /* supportsFaceDetect */);
mContext = context;
mSensorId = sensorId;
mScheduler = new BiometricScheduler(TAG, null /* gestureAvailabilityTracker */);
@@ -559,7 +559,7 @@ class Face10 implements IHwBinder.DeathRecipient {
return daemon != null;
}
- FaceSensorProperties getFaceSensorProperties() {
+ @NonNull FaceSensorProperties getFaceSensorProperties() {
return mFaceSensorProperties;
}
diff --git a/services/core/java/com/android/server/biometrics/sensors/face/FaceService.java b/services/core/java/com/android/server/biometrics/sensors/face/FaceService.java
index 610faa04ca3b..b832a09f8f88 100644
--- a/services/core/java/com/android/server/biometrics/sensors/face/FaceService.java
+++ b/services/core/java/com/android/server/biometrics/sensors/face/FaceService.java
@@ -44,6 +44,7 @@ import com.android.server.biometrics.sensors.LockoutTracker;
import java.io.FileDescriptor;
import java.io.PrintWriter;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -65,6 +66,20 @@ public class FaceService extends SystemService {
*/
private final class FaceServiceWrapper extends IFaceService.Stub {
@Override // Binder call
+ public List<FaceSensorProperties> getSensorProperties(String opPackageName) {
+ Utils.checkPermission(getContext(), USE_BIOMETRIC_INTERNAL);
+ final List<FaceSensorProperties> properties = new ArrayList<>();
+
+ if (mFace10 != null) {
+ properties.add(mFace10.getFaceSensorProperties());
+ }
+
+ Slog.d(TAG, "Retrieved sensor properties for: " + opPackageName
+ + ", sensors: " + properties.size());
+ return properties;
+ }
+
+ @Override // Binder call
public void generateChallenge(IBinder token, IFaceServiceReceiver receiver,
String opPackageName) {
Utils.checkPermission(getContext(), MANAGE_BIOMETRIC);
@@ -239,12 +254,6 @@ public class FaceService extends SystemService {
return !mFace10.getEnrolledFaces(userId).isEmpty();
}
- @Override // Binder call
- public FaceSensorProperties getSensorProperties(String opPackageName) {
- Utils.checkPermission(getContext(), USE_BIOMETRIC_INTERNAL);
- return mFace10.getFaceSensorProperties();
- }
-
@Override
public @LockoutTracker.LockoutMode int getLockoutModeForUser(int userId) {
Utils.checkPermission(getContext(), USE_BIOMETRIC_INTERNAL);
diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/Fingerprint21.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/Fingerprint21.java
index 20ee3f375ab1..dad038626762 100644
--- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/Fingerprint21.java
+++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/Fingerprint21.java
@@ -31,6 +31,7 @@ import android.hardware.biometrics.BiometricsProtoEnums;
import android.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint;
import android.hardware.biometrics.fingerprint.V2_2.IBiometricsFingerprintClientCallback;
import android.hardware.fingerprint.Fingerprint;
+import android.hardware.fingerprint.FingerprintSensorProperties;
import android.hardware.fingerprint.IFingerprintServiceReceiver;
import android.hardware.fingerprint.IUdfpsOverlayController;
import android.os.Handler;
@@ -85,7 +86,7 @@ class Fingerprint21 implements IHwBinder.DeathRecipient {
private final Context mContext;
private final IActivityTaskManager mActivityTaskManager;
- private final SensorProperties mSensorProperties;
+ private final FingerprintSensorProperties mSensorProperties;
private final BiometricScheduler mScheduler;
private final Handler mHandler;
private final LockoutResetDispatcher mLockoutResetDispatcher;
@@ -98,25 +99,6 @@ class Fingerprint21 implements IHwBinder.DeathRecipient {
@Nullable private IUdfpsOverlayController mUdfpsOverlayController;
private int mCurrentUserId = UserHandle.USER_NULL;
- /**
- * Static properties that never change for a given sensor.
- */
- private static final class SensorProperties {
- // Unique sensorId
- final int sensorId;
- // Is the sensor under-display
- final boolean isUdfps;
- // Supports finger detection without exposing accept/reject and without incrementing the
- // lockout counter
- final boolean supportsFingerDetectOnly;
-
- SensorProperties(int sensorId, boolean isUdfps, boolean supportsFingerDetectOnly) {
- this.sensorId = sensorId;
- this.isUdfps = isUdfps;
- this.supportsFingerDetectOnly = supportsFingerDetectOnly;
- }
- }
-
private final class BiometricTaskStackListener extends TaskStackListener {
@Override
public void onTaskStackChanged() {
@@ -314,9 +296,11 @@ class Fingerprint21 implements IHwBinder.DeathRecipient {
isUdfps = false;
}
}
- // Fingerprint2.1 supports finger-detect only since lockout is controlled in the framework.
- mSensorProperties = new SensorProperties(sensorId, isUdfps,
- true /* supportsFingerDetectOnly */);
+
+ final @FingerprintSensorProperties.SensorType int sensorType =
+ isUdfps ? FingerprintSensorProperties.TYPE_UDFPS
+ : FingerprintSensorProperties.TYPE_REAR;
+ mSensorProperties = new FingerprintSensorProperties(sensorId, sensorType);
}
@Override
@@ -558,6 +542,10 @@ class Fingerprint21 implements IHwBinder.DeathRecipient {
return daemon != null;
}
+ @NonNull FingerprintSensorProperties getFingerprintSensorProperties() {
+ return mSensorProperties;
+ }
+
void rename(int fingerId, int userId, String name) {
mHandler.post(() -> {
FingerprintUtils.getInstance().renameBiometricForUser(mContext, userId, fingerId, name);
@@ -592,10 +580,6 @@ class Fingerprint21 implements IHwBinder.DeathRecipient {
udfps.onFingerUp();
}
- boolean isUdfps() {
- return mSensorProperties.isUdfps;
- }
-
void setUdfpsOverlayController(IUdfpsOverlayController controller) {
mUdfpsOverlayController = controller;
}
diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java
index 4d33fd6301e2..6afe61e07465 100644
--- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java
+++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java
@@ -23,10 +23,8 @@ import static android.Manifest.permission.RESET_FINGERPRINT_LOCKOUT;
import static android.Manifest.permission.USE_BIOMETRIC;
import static android.Manifest.permission.USE_BIOMETRIC_INTERNAL;
import static android.Manifest.permission.USE_FINGERPRINT;
-import static android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND_SERVICE;
import android.annotation.NonNull;
-import android.app.ActivityManager;
import android.app.AppOpsManager;
import android.content.Context;
import android.content.pm.PackageManager;
@@ -34,6 +32,7 @@ import android.hardware.biometrics.BiometricsProtoEnums;
import android.hardware.biometrics.IBiometricSensorReceiver;
import android.hardware.biometrics.IBiometricServiceLockoutResetCallback;
import android.hardware.fingerprint.Fingerprint;
+import android.hardware.fingerprint.FingerprintSensorProperties;
import android.hardware.fingerprint.IFingerprintClientActiveCallback;
import android.hardware.fingerprint.IFingerprintService;
import android.hardware.fingerprint.IFingerprintServiceReceiver;
@@ -42,7 +41,6 @@ import android.os.Binder;
import android.os.IBinder;
import android.os.NativeHandle;
import android.os.Process;
-import android.os.RemoteException;
import android.os.UserHandle;
import android.util.EventLog;
import android.util.Slog;
@@ -58,6 +56,7 @@ import com.android.server.biometrics.sensors.LockoutTracker;
import java.io.FileDescriptor;
import java.io.PrintWriter;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -81,6 +80,20 @@ public class FingerprintService extends SystemService {
*/
private final class FingerprintServiceWrapper extends IFingerprintService.Stub {
@Override // Binder call
+ public List<FingerprintSensorProperties> getSensorProperties(String opPackageName) {
+ Utils.checkPermission(getContext(), USE_BIOMETRIC_INTERNAL);
+ final List<FingerprintSensorProperties> properties = new ArrayList<>();
+
+ if (mFingerprint21 != null) {
+ properties.add(mFingerprint21.getFingerprintSensorProperties());
+ }
+
+ Slog.d(TAG, "Retrieved sensor properties for: " + opPackageName
+ + ", sensors: " + properties.size());
+ return properties;
+ }
+
+ @Override // Binder call
public void generateChallenge(IBinder token, IFingerprintServiceReceiver receiver,
String opPackageName) {
Utils.checkPermission(getContext(), MANAGE_FINGERPRINT);
@@ -365,12 +378,6 @@ public class FingerprintService extends SystemService {
}
@Override
- public boolean isUdfps() {
- Utils.checkPermission(getContext(), USE_BIOMETRIC_INTERNAL);
- return mFingerprint21.isUdfps();
- }
-
- @Override
public void setUdfpsOverlayController(IUdfpsOverlayController controller) {
Utils.checkPermission(getContext(), USE_BIOMETRIC_INTERNAL);
mFingerprint21.setUdfpsOverlayController(controller);