Loading core/java/android/hardware/face/FaceManager.java +3 −2 Original line number Diff line number Diff line Loading @@ -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; } /** Loading core/java/android/hardware/face/IFaceService.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -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); Loading services/core/java/com/android/server/biometrics/face/FaceService.java +50 −18 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; // TODO: Support multiple faces final int faceId = getFirstTemplateForUser(mCurrentUserId); if (mDaemon != null) { try { result = mDaemon != null ? mDaemon.setFeature(feature, enabled, byteToken) : Status.INTERNAL_ERROR; return mDaemon.setFeature(feature, enabled, byteToken, faceId) == Status.OK; } catch (RemoteException e) { Slog.e(getTag(), "Unable to set feature: " + feature + " to enabled:" + enabled, e); result = Status.INTERNAL_ERROR; } return result; } return false; } @Override public boolean getFeature(int feature) { checkPermission(MANAGE_BIOMETRIC); boolean result = true; // 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 { result = mDaemon != null ? mDaemon.getFeature(feature) : true; 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 Loading @@ -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; } } /** Loading Loading
core/java/android/hardware/face/FaceManager.java +3 −2 Original line number Diff line number Diff line Loading @@ -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; } /** Loading
core/java/android/hardware/face/IFaceService.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -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); Loading
services/core/java/com/android/server/biometrics/face/FaceService.java +50 −18 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; // TODO: Support multiple faces final int faceId = getFirstTemplateForUser(mCurrentUserId); if (mDaemon != null) { try { result = mDaemon != null ? mDaemon.setFeature(feature, enabled, byteToken) : Status.INTERNAL_ERROR; return mDaemon.setFeature(feature, enabled, byteToken, faceId) == Status.OK; } catch (RemoteException e) { Slog.e(getTag(), "Unable to set feature: " + feature + " to enabled:" + enabled, e); result = Status.INTERNAL_ERROR; } return result; } return false; } @Override public boolean getFeature(int feature) { checkPermission(MANAGE_BIOMETRIC); boolean result = true; // 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 { result = mDaemon != null ? mDaemon.getFeature(feature) : true; 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 Loading @@ -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; } } /** Loading