/* * Copyright (C) 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.hardware.face; import android.annotation.NonNull; import android.hardware.biometrics.ComponentInfoInternal; import android.hardware.biometrics.SensorProperties; import android.hardware.biometrics.SensorPropertiesInternal; import android.os.Parcel; import java.util.List; /** * Container for face sensor properties. * @hide */ public class FaceSensorPropertiesInternal extends SensorPropertiesInternal { /** * See {@link FaceSensorProperties.SensorType}. */ public final @FaceSensorProperties.SensorType int sensorType; /** * True if the sensor is able to perform generic face detection, without running the * matching algorithm, and without affecting the lockout counter. */ public final boolean supportsFaceDetection; /** * True if the sensor is able to provide self illumination in dark scenarios, without support * from above the HAL. */ public final boolean supportsSelfIllumination; /** * Initializes SensorProperties with specified values */ public FaceSensorPropertiesInternal(int sensorId, @SensorProperties.Strength int strength, int maxEnrollmentsPerUser, @NonNull List componentInfo, @FaceSensorProperties.SensorType int sensorType, boolean supportsFaceDetection, boolean supportsSelfIllumination, boolean resetLockoutRequiresChallenge) { // resetLockout is managed by the HAL and requires a HardwareAuthToken for all face // HAL interfaces (IBiometricsFace@1.0 HIDL and IFace@1.0 AIDL). super(sensorId, strength, maxEnrollmentsPerUser, componentInfo, true /* resetLockoutRequiresHardwareAuthToken */, resetLockoutRequiresChallenge); this.sensorType = sensorType; this.supportsFaceDetection = supportsFaceDetection; this.supportsSelfIllumination = supportsSelfIllumination; } protected FaceSensorPropertiesInternal(Parcel in) { super(in); sensorType = in.readInt(); supportsFaceDetection = in.readBoolean(); supportsSelfIllumination = in.readBoolean(); } public static final Creator CREATOR = new Creator() { @Override public FaceSensorPropertiesInternal createFromParcel(Parcel in) { return new FaceSensorPropertiesInternal(in); } @Override public FaceSensorPropertiesInternal[] newArray(int size) { return new FaceSensorPropertiesInternal[size]; } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { super.writeToParcel(dest, flags); dest.writeInt(sensorType); dest.writeBoolean(supportsFaceDetection); dest.writeBoolean(supportsSelfIllumination); } @Override public String toString() { return "ID: " + sensorId + ", Strength: " + sensorStrength + ", Type: " + sensorType + ", SupportsFaceDetection: " + supportsFaceDetection; } }