diff options
| author | Curtis Belmonte <curtislb@google.com> | 2021-04-05 15:08:16 -0700 |
|---|---|---|
| committer | Curtis Belmonte <curtislb@google.com> | 2021-04-28 10:41:52 -0700 |
| commit | e39cc9a1db280b76f5dd7eed25440f3fd07edf8d (patch) | |
| tree | a7df9df4fcbbd867717642210ec9fa09a6ad774f /core/java/android | |
| parent | f3b52188085b90837d7854b4e9ad989f446c7bf7 (diff) | |
Send AIDL face enrollment frame info to clients
Test: Manually tested grid and traffic light face enrollment
Bug: 181374571
Change-Id: If742c6c32547d56be417d4eb0cbb729ed90552a5
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/hardware/face/FaceEnrollFrame.java | 1 | ||||
| -rw-r--r-- | core/java/android/hardware/face/FaceEnrollStages.java (renamed from core/java/android/hardware/face/FaceEnrollStage.java) | 48 | ||||
| -rw-r--r-- | core/java/android/hardware/face/FaceManager.java | 45 |
3 files changed, 70 insertions, 24 deletions
diff --git a/core/java/android/hardware/face/FaceEnrollFrame.java b/core/java/android/hardware/face/FaceEnrollFrame.java index 551139d240a3..822a57944449 100644 --- a/core/java/android/hardware/face/FaceEnrollFrame.java +++ b/core/java/android/hardware/face/FaceEnrollFrame.java @@ -18,6 +18,7 @@ package android.hardware.face; import android.annotation.NonNull; import android.annotation.Nullable; +import android.hardware.face.FaceEnrollStages.FaceEnrollStage; import android.os.Parcel; import android.os.Parcelable; diff --git a/core/java/android/hardware/face/FaceEnrollStage.java b/core/java/android/hardware/face/FaceEnrollStages.java index de717fbe46b4..de374b319ff9 100644 --- a/core/java/android/hardware/face/FaceEnrollStage.java +++ b/core/java/android/hardware/face/FaceEnrollStages.java @@ -22,53 +22,63 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** - * A stage that may occur during face enrollment. + * A collection of constants representing different stages of face enrollment. * * @hide */ -@Retention(RetentionPolicy.SOURCE) -@IntDef({ - FaceEnrollStage.UNKNOWN, - FaceEnrollStage.FIRST_FRAME_RECEIVED, - FaceEnrollStage.WAITING_FOR_CENTERING, - FaceEnrollStage.HOLD_STILL_IN_CENTER, - FaceEnrollStage.ENROLLING_MOVEMENT_1, - FaceEnrollStage.ENROLLING_MOVEMENT_2, - FaceEnrollStage.ENROLLMENT_FINISHED -}) -public @interface FaceEnrollStage { +public final class FaceEnrollStages { + // Prevent instantiation. + private FaceEnrollStages() {} + + /** + * A stage that may occur during face enrollment. + * + * @hide + */ + @IntDef({ + UNKNOWN, + FIRST_FRAME_RECEIVED, + WAITING_FOR_CENTERING, + HOLD_STILL_IN_CENTER, + ENROLLING_MOVEMENT_1, + ENROLLING_MOVEMENT_2, + ENROLLMENT_FINISHED + }) + @Retention(RetentionPolicy.SOURCE) + public @interface FaceEnrollStage {} + /** * The current enrollment stage is not known. */ - int UNKNOWN = -1; + public static final int UNKNOWN = 0; /** * Enrollment has just begun. No action is needed from the user yet. */ - int FIRST_FRAME_RECEIVED = 0; + public static final int FIRST_FRAME_RECEIVED = 1; /** * The user must center their face in the frame. */ - int WAITING_FOR_CENTERING = 1; + public static final int WAITING_FOR_CENTERING = 2; /** * The user must keep their face centered in the frame. */ - int HOLD_STILL_IN_CENTER = 2; + public static final int HOLD_STILL_IN_CENTER = 3; /** * The user must follow a first set of movement instructions. */ - int ENROLLING_MOVEMENT_1 = 3; + public static final int ENROLLING_MOVEMENT_1 = 4; /** * The user must follow a second set of movement instructions. */ - int ENROLLING_MOVEMENT_2 = 4; + public static final int ENROLLING_MOVEMENT_2 = 5; /** * Enrollment has completed. No more action is needed from the user. */ - int ENROLLMENT_FINISHED = 5; + public static final int ENROLLMENT_FINISHED = 6; } diff --git a/core/java/android/hardware/face/FaceManager.java b/core/java/android/hardware/face/FaceManager.java index 5f8789993a5e..9a27a99437bc 100644 --- a/core/java/android/hardware/face/FaceManager.java +++ b/core/java/android/hardware/face/FaceManager.java @@ -1023,6 +1023,34 @@ public class FaceManager implements BiometricAuthenticator, BiometricFaceConstan } /** + * Called each time a single frame is captured during enrollment. + * + * <p>For older, non-AIDL implementations, only {@code helpCode} and {@code helpMessage} are + * supported. Sensible default values will be provided for all other arguments. + * + * @param helpCode An integer identifying the capture status for this frame. + * @param helpMessage A human-readable help string that can be shown in UI. + * @param cell The cell captured during this frame of enrollment, if any. + * @param stage An integer representing the current stage of enrollment. + * @param pan The horizontal pan of the detected face. Values in the range [-1, 1] + * indicate a good capture. + * @param tilt The vertical tilt of the detected face. Values in the range [-1, 1] + * indicate a good capture. + * @param distance The distance of the detected face from the device. Values in + * the range [-1, 1] indicate a good capture. + */ + public void onEnrollmentFrame( + int helpCode, + @Nullable CharSequence helpMessage, + @Nullable FaceEnrollCell cell, + @FaceEnrollStages.FaceEnrollStage int stage, + float pan, + float tilt, + float distance) { + onEnrollmentHelp(helpCode, helpMessage); + } + + /** * Called as each enrollment step progresses. Enrollment is considered complete when * remaining reaches 0. This function will not be called if enrollment fails. See * {@link EnrollmentCallback#onEnrollmentError(int, CharSequence)} @@ -1305,7 +1333,7 @@ public class FaceManager implements BiometricAuthenticator, BiometricFaceConstan } else if (mEnrollmentCallback != null) { final FaceEnrollFrame frame = new FaceEnrollFrame( null /* cell */, - FaceEnrollStage.UNKNOWN, + FaceEnrollStages.UNKNOWN, new FaceDataFrame(acquireInfo, vendorCode)); sendEnrollmentFrame(frame); } @@ -1333,12 +1361,19 @@ public class FaceManager implements BiometricAuthenticator, BiometricFaceConstan if (frame == null) { Slog.w(TAG, "Received null enrollment frame"); } else if (mEnrollmentCallback != null) { - // TODO(b/178414967): Send additional frame data to callback - final int acquireInfo = frame.getData().getAcquiredInfo(); - final int vendorCode = frame.getData().getVendorCode(); + final FaceDataFrame data = frame.getData(); + final int acquireInfo = data.getAcquiredInfo(); + final int vendorCode = data.getVendorCode(); final int helpCode = getHelpCode(acquireInfo, vendorCode); final String helpMessage = getEnrollHelpMessage(mContext, acquireInfo, vendorCode); - mEnrollmentCallback.onEnrollmentHelp(helpCode, helpMessage); + mEnrollmentCallback.onEnrollmentFrame( + helpCode, + helpMessage, + frame.getCell(), + frame.getStage(), + data.getPan(), + data.getTilt(), + data.getDistance()); } } |
