summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorCurtis Belmonte <curtislb@google.com>2021-04-05 15:08:16 -0700
committerCurtis Belmonte <curtislb@google.com>2021-04-28 10:41:52 -0700
commite39cc9a1db280b76f5dd7eed25440f3fd07edf8d (patch)
treea7df9df4fcbbd867717642210ec9fa09a6ad774f /core/java/android
parentf3b52188085b90837d7854b4e9ad989f446c7bf7 (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.java1
-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.java45
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());
}
}