summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Chyn <kchyn@google.com>2019-03-04 16:45:15 -0800
committerKevin Chyn <kchyn@google.com>2019-03-05 17:41:12 -0800
commitb95f1529102fb9e73112316148a18aaaa9e3721c (patch)
treea56798f9702c9e36960a3418d614a1fc31ab2d02
parentaf597830ffe9ef27a27c19ffd5218e760f61eebc (diff)
Update framework together with IBiometricsFace.hal
Bug: 123262389 Test: Builds Change-Id: I7d6f874e93180cb41f30cf02dd7f47c57dd6bb92
-rw-r--r--core/java/android/hardware/face/FaceManager.java5
-rw-r--r--core/java/android/hardware/face/IFaceService.aidl2
-rw-r--r--services/core/java/com/android/server/biometrics/face/FaceService.java68
3 files changed, 54 insertions, 21 deletions
diff --git a/core/java/android/hardware/face/FaceManager.java b/core/java/android/hardware/face/FaceManager.java
index 55b340f267a6..139a5ee09dd8 100644
--- a/core/java/android/hardware/face/FaceManager.java
+++ b/core/java/android/hardware/face/FaceManager.java
@@ -286,14 +286,15 @@ public class FaceManager implements BiometricAuthenticator, BiometricFaceConstan
* @hide
*/
@RequiresPermission(MANAGE_BIOMETRIC)
- public void setFeature(int feature, boolean enabled, byte[] token) {
+ public boolean setFeature(int feature, boolean enabled, byte[] token) {
if (mService != null) {
try {
- mService.setFeature(feature, enabled, token);
+ return mService.setFeature(feature, enabled, token);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
+ return false;
}
/**
diff --git a/core/java/android/hardware/face/IFaceService.aidl b/core/java/android/hardware/face/IFaceService.aidl
index 9609e99275c9..5043d4ce86df 100644
--- a/core/java/android/hardware/face/IFaceService.aidl
+++ b/core/java/android/hardware/face/IFaceService.aidl
@@ -98,7 +98,7 @@ interface IFaceService {
// Enumerate all faces
void enumerate(IBinder token, int userId, IFaceServiceReceiver receiver);
- int setFeature(int feature, boolean enabled, in byte [] token);
+ boolean setFeature(int feature, boolean enabled, in byte [] token);
boolean getFeature(int feature);
diff --git a/services/core/java/com/android/server/biometrics/face/FaceService.java b/services/core/java/com/android/server/biometrics/face/FaceService.java
index d2d14829d597..feeb16b3ea62 100644
--- a/services/core/java/com/android/server/biometrics/face/FaceService.java
+++ b/services/core/java/com/android/server/biometrics/face/FaceService.java
@@ -32,6 +32,7 @@ import android.hardware.biometrics.IBiometricServiceLockoutResetCallback;
import android.hardware.biometrics.IBiometricServiceReceiverInternal;
import android.hardware.biometrics.face.V1_0.IBiometricsFace;
import android.hardware.biometrics.face.V1_0.IBiometricsFaceClientCallback;
+import android.hardware.biometrics.face.V1_0.OptionalBool;
import android.hardware.biometrics.face.V1_0.Status;
import android.hardware.face.Face;
import android.hardware.face.FaceManager;
@@ -54,7 +55,6 @@ import com.android.server.SystemServerInitThreadPool;
import com.android.server.biometrics.AuthenticationClient;
import com.android.server.biometrics.BiometricServiceBase;
import com.android.server.biometrics.BiometricUtils;
-import com.android.server.biometrics.ClientMonitor;
import com.android.server.biometrics.EnumerateClient;
import com.android.server.biometrics.Metrics;
import com.android.server.biometrics.RemovalClient;
@@ -385,38 +385,61 @@ public class FaceService extends BiometricServiceBase {
}
@Override
- public int setFeature(int feature, boolean enabled, final byte[] token) {
+ public boolean setFeature(int feature, boolean enabled, final byte[] token) {
checkPermission(MANAGE_BIOMETRIC);
+ if (!FaceService.this.hasEnrolledBiometrics(mCurrentUserId)) {
+ Slog.e(TAG, "No enrolled biometrics while setting feature: " + feature);
+ return false;
+ }
+
final ArrayList<Byte> byteToken = new ArrayList<>();
for (int i = 0; i < token.length; i++) {
byteToken.add(token[i]);
}
- int result;
- try {
- result = mDaemon != null ? mDaemon.setFeature(feature, enabled, byteToken)
- : Status.INTERNAL_ERROR;
- } catch (RemoteException e) {
- Slog.e(getTag(), "Unable to set feature: " + feature + " to enabled:" + enabled,
- e);
- result = Status.INTERNAL_ERROR;
- }
+ // TODO: Support multiple faces
+ final int faceId = getFirstTemplateForUser(mCurrentUserId);
- return result;
+ if (mDaemon != null) {
+ try {
+ return mDaemon.setFeature(feature, enabled, byteToken, faceId) == Status.OK;
+ } catch (RemoteException e) {
+ Slog.e(getTag(), "Unable to set feature: " + feature + " to enabled:" + enabled,
+ e);
+ }
+ }
+ return false;
}
@Override
public boolean getFeature(int feature) {
checkPermission(MANAGE_BIOMETRIC);
- boolean result = true;
- try {
- result = mDaemon != null ? mDaemon.getFeature(feature) : true;
- } catch (RemoteException e) {
- Slog.e(getTag(), "Unable to getRequireAttention", e);
+ // This should ideally return tri-state, but the user isn't shown settings unless
+ // they are enrolled so it's fine for now.
+ if (!FaceService.this.hasEnrolledBiometrics(mCurrentUserId)) {
+ Slog.e(TAG, "No enrolled biometrics while getting feature: " + feature);
+ return false;
+ }
+
+ // TODO: Support multiple faces
+ final int faceId = getFirstTemplateForUser(mCurrentUserId);
+
+ if (mDaemon != null) {
+ try {
+ OptionalBool result = mDaemon.getFeature(feature, faceId);
+ if (result.status == Status.OK) {
+ return result.value;
+ } else {
+ // Same tri-state comment applies here.
+ return false;
+ }
+ } catch (RemoteException e) {
+ Slog.e(getTag(), "Unable to getRequireAttention", e);
+ }
}
- return result;
+ return false;
}
@Override
@@ -431,6 +454,15 @@ public class FaceService extends BiometricServiceBase {
}
}
}
+
+ // TODO: Support multiple faces
+ private int getFirstTemplateForUser(int user) {
+ final List<Face> faces = FaceService.this.getEnrolledTemplates(user);
+ if (!faces.isEmpty()) {
+ return faces.get(0).getBiometricId();
+ }
+ return 0;
+ }
}
/**