diff options
author | Kevin Chyn <kchyn@google.com> | 2019-03-04 16:45:15 -0800 |
---|---|---|
committer | Kevin Chyn <kchyn@google.com> | 2019-03-05 17:41:12 -0800 |
commit | b95f1529102fb9e73112316148a18aaaa9e3721c (patch) | |
tree | a56798f9702c9e36960a3418d614a1fc31ab2d02 | |
parent | af597830ffe9ef27a27c19ffd5218e760f61eebc (diff) |
Update framework together with IBiometricsFace.hal
Bug: 123262389
Test: Builds
Change-Id: I7d6f874e93180cb41f30cf02dd7f47c57dd6bb92
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; + } } /** |