# fingerprint.sysprop # module becomes static class (Java) / namespace (C++) for serving API module: "android.fingerprint.virt.FingerprintHalProperties" owner: Vendor # type of fingerprint sensor prop { prop_name: "persist.vendor.fingerprint.virtual.type" type: String scope: Internal access: ReadWrite enum_values: "default|rear|udfps|side" api_name: "type" } # ids of call current enrollments prop { prop_name: "persist.vendor.fingerprint.virtual.enrollments" type: IntegerList scope: Internal access: ReadWrite api_name: "enrollments" } # authenticate and detectInteraction will succeed with this # enrollment id, when present, otherwise they will error prop { prop_name: "vendor.fingerprint.virtual.enrollment_hit" type: Integer scope: Internal access: ReadWrite api_name: "enrollment_hit" } # the next enrollment in the format of: # ":,,...:" # = # [acquiredInfos] = [acquiredInfo1, acquiredInfo2, ...] # (refer to README.md file for acquiredInfo values) # e.g. "2:100,20:true", "2:100-[5,1],20:true" # this property is reset after enroll completes prop { prop_name: "vendor.fingerprint.virtual.next_enrollment" type: String scope: Internal access: ReadWrite api_name: "next_enrollment" } # value for getAuthenticatorId or 0 prop { prop_name: "persist.vendor.fingerprint.virtual.authenticator_id" type: Long scope: Internal access: ReadWrite api_name: "authenticator_id" } # value for generateChallenge prop { prop_name: "vendor.fingerprint.virtual.challenge" type: Long scope: Internal access: ReadWrite api_name: "challenge" } # force all authenticate operations to fail prop { prop_name: "vendor.fingerprint.virtual.operation_authenticate_fails" type: Boolean scope: Internal access: ReadWrite api_name: "operation_authenticate_fails" } # force all detectInteraction operations to error out # error consists of errorCode and vendorErrorCode # valid errorCodes are listed in README.md file # vendorErrorCode = (error>1000) ? error-1000 : 0 # e.g. error(1002) --> errorCode(7) and vendorErrorCode(2) prop { prop_name: "vendor.fingerprint.virtual.operation_detect_interaction_error" type: Integer scope: Internal access: ReadWrite api_name: "operation_detect_interaction_error" } # force all enroll operations to result in error prop { prop_name: "vendor.fingerprint.virtual.operation_enroll_error" type: Integer scope: Internal access: ReadWrite api_name: "operation_enroll_error" } # add a latency to authentication operations # default to 400ms # [x] = x ms # [x,y] = randomly between x and y ms # others = invalid prop { prop_name: "vendor.fingerprint.virtual.operation_authenticate_latency" type: IntegerList scope: Internal access: ReadWrite api_name: "operation_authenticate_latency" } # add a latency to detectInteraction operations # refer to `operation_authenticate_latency` above for usage prop { prop_name: "vendor.fingerprint.virtual.operation_detect_interaction_latency" type: IntegerList scope: Internal access: ReadWrite api_name: "operation_detect_interaction_latency" } # add a latency to enroll operations # refer to `operation_authenticate_latency` above for usage prop { prop_name: "vendor.fingerprint.virtual.operation_enroll_latency" type: IntegerList scope: Internal access: ReadWrite api_name: "operation_enroll_latency" } # millisecond duration for authenticate operations # (waits for changes to enrollment_hit) prop { prop_name: "vendor.fingerprint.virtual.operation_authenticate_duration" type: Integer scope: Internal access: ReadWrite api_name: "operation_authenticate_duration" } # insert error for authenticate operations prop { prop_name: "vendor.fingerprint.virtual.operation_authenticate_error" type: Integer scope: Internal access: ReadWrite api_name: "operation_authenticate_error" } # sensor location # :: in pixel prop { prop_name: "persist.vendor.fingerprint.virtual.sensor_location" type: String scope: Internal access: ReadWrite api_name: "sensor_location" } # acquired info during authentication in format of sequence prop { prop_name: "vendor.fingerprint.virtual.operation_authenticate_acquired" type: String scope: Internal access: ReadWrite api_name: "operation_authenticate_acquired" } # millisecond duration for detect interaction operations # (waits for changes to enrollment_hit) prop { prop_name: "vendor.fingerprint.virtual.operation_detect_interaction_duration" type: Integer scope: Internal access: ReadWrite api_name: "operation_detect_interaction_duration" } # acquired info during detect interaction operation in format of sequence # e.g. 5,6,1 (TOO_SLOW, TOO_FAST, GOOD) # onAcquired() callback will be invoked in sequence # vendorAcquiredCode = (acquired>1000) ? acquired-1000 : 0 prop { prop_name: "vendor.fingerprint.virtual.operation_detect_interaction_acquired" type: String scope: Internal access: ReadWrite api_name: "operation_detect_interaction_acquired" } # sensor id (default: 5) prop { prop_name: "persist.vendor.fingerprint.virtual.sensor_id" type: Integer scope: Internal access: ReadWrite api_name: "sensor_id" } # sensor strength (default: 2) # [0=CONVENECE, 1=WEAK, 2=STRONG] prop { prop_name: "persist.vendor.fingerprint.virtual.sensor_strength" type: Integer scope: Internal access: ReadWrite api_name: "sensor_strength" } # max enrollments per user (default: 5) # prop { prop_name: "persist.vendor.fingerprint.virtual.max_enrollments" type: Integer scope: Internal access: ReadWrite api_name: "max_enrollments" } # whether support navigation guestures (default: false) prop { prop_name: "persist.vendor.fingerprint.virtual.navigation_guesture" type: Boolean scope: Internal access: ReadWrite api_name: "navigation_guesture" } # whether support detect interaction (default: false) prop { prop_name: "persist.vendor.fingerprint.virtual.detect_interaction" type: Boolean scope: Internal access: ReadWrite api_name: "detect_interaction" } # whether support display touch by hal (default: true) prop { prop_name: "persist.vendor.fingerprint.virtual.udfps.display_touch" type: Boolean scope: Internal access: ReadWrite api_name: "display_touch" } # whether support illumination control by hal (default: false) prop { prop_name: "persist.vendor.fingerprint.virtual.udfps.control_illumination" type: Boolean scope: Internal access: ReadWrite api_name: "control_illumination" } # force to be locked out (default: false) prop { prop_name: "persist.vendor.fingerprint.virtual.lockout" type: Boolean scope: Internal access: ReadWrite api_name: "lockout" } # whether support lockout based on the failed auth attempts (default: false) prop { prop_name: "persist.vendor.fingerprint.virtual.lockout_enable" type: Boolean scope: Internal access: ReadWrite api_name: "lockout_enable" } # temporarily lockout threshold in number of consecutive failed auth attempts (default: 5) prop { prop_name: "persist.vendor.fingerprint.virtual.lockout_timed_threshold" type: Integer scope: Internal access: ReadWrite api_name: "lockout_timed_threshold" } # temporary lockout duration in ms (default: 10000ms) prop { prop_name: "persist.vendor.fingerprint.virtual.lockout_timed_duration" type: Integer scope: Internal access: ReadWrite api_name: "lockout_timed_duration" } # permanently lockout threshold in number of consecutive failed auth attempts (default: 20) prop { prop_name: "persist.vendor.fingerprint.virtual.lockout_permanent_threshold" type: Integer scope: Internal access: ReadWrite api_name: "lockout_permanent_threshold" }