Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 35b10723 authored by Jeff Pu's avatar Jeff Pu Committed by Android (Google) Code Review
Browse files

Merge "Support multiple displays in fingerprint VHAL" into main

parents 32142134 4facadf8
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -311,7 +311,7 @@ interface IVirtualHal {
    void setSensorStrength(in SensorStrength strength);
    void setMaxEnrollmentPerUser(in int max);
    void setSensorLocation(in SensorLocation loc);
    void setNavigationGuesture(in boolean v);
    void setNavigationGesture(in boolean v);
    void setDetectInteraction(in boolean v);
    void setDisplayTouch(in boolean v);
    void setControlIllumination(in boolean v);
+45 −26
Original line number Diff line number Diff line
@@ -414,13 +414,22 @@ ndk::ScopedAStatus FakeFingerprintEngine::onUiReadyImpl() {
    return ndk::ScopedAStatus::ok();
}

bool FakeFingerprintEngine::getSensorLocationConfig(SensorLocation& out) {
    auto loc = Fingerprint::cfg().get<std::string>("sensor_location");
bool FakeFingerprintEngine::getSensorLocationConfig(std::vector<SensorLocation>& out) {
    auto locStr = Fingerprint::cfg().get<std::string>("sensor_location");
    auto isValidStr = false;

    // sensor_location format: x:y:r:d,x:y:r:d,...
    //   x: x location in pixel, y: y location in pixel, r: radus in pixel, d:display in string
    auto locations = Util::split(locStr, ",");
    for (int i = 0; i < locations.size(); i++) {
        auto loc = locations[i];

        // expect loc in the format: x:y:r  or x:y:d:r
        auto dim = Util::split(loc, ":");

    if (dim.size() < 3 or dim.size() > 4) {
        if (dim.size() < 3) {
            if (!loc.empty()) LOG(WARNING) << "Invalid sensor location input (x:y:radius):" + loc;
            out.clear();
            return false;
        } else {
            int32_t x, y, r;
@@ -429,26 +438,36 @@ bool FakeFingerprintEngine::getSensorLocationConfig(SensorLocation& out) {
                isValidStr = ParseInt(dim[0], &x) && ParseInt(dim[1], &y) && ParseInt(dim[2], &r);
            }
            if (dim.size() >= 4) {
            d = dim[3];
                for (int i = 3; i < dim.size(); i++) {
                    if (i > 3) d += ':';
                    d += dim[i];
                }
            }
            if (isValidStr) {
                out.push_back(SensorLocation{.sensorLocationX = x,
                                             .sensorLocationY = y,
                                             .sensorRadius = r,
                                             .display = d});
            }
        if (isValidStr)
            out = {.sensorLocationX = x, .sensorLocationY = y, .sensorRadius = r, .display = d};

        return isValidStr;
        }
    }
SensorLocation FakeFingerprintEngine::getSensorLocation() {
    SensorLocation location;

    if (getSensorLocationConfig(location)) {
        return location;
    LOG(INFO) << "getSensorLocationConfig: isValidStr=" << isValidStr << " locStr=" << locStr;
    if (isValidStr) {
        for (auto loc : out) {
            LOG(INFO) << loc.toString();
        }
    } else {
        return defaultSensorLocation();
        out.clear();
    }

    return isValidStr;
}

SensorLocation FakeFingerprintEngine::defaultSensorLocation() {
    return SensorLocation();
void FakeFingerprintEngine::getSensorLocation(std::vector<SensorLocation>& location) {
    if (!getSensorLocationConfig(location)) {
        getDefaultSensorLocation(location);
    }
}

std::pair<AcquiredInfo, int32_t> FakeFingerprintEngine::convertAcquiredInfo(int32_t code) {
+9 −4
Original line number Diff line number Diff line
@@ -26,12 +26,17 @@
using namespace ::android::fingerprint::virt;

namespace aidl::android::hardware::biometrics::fingerprint {
SensorLocation FakeFingerprintEngineSide::defaultLocation[] = {
        // default to CF display
        {.sensorLocationX = 0, 200, 90, "local:4619827353912518656"}};

FakeFingerprintEngineSide::FakeFingerprintEngineSide() : FakeFingerprintEngine() {}

SensorLocation FakeFingerprintEngineSide::defaultSensorLocation() {
    return SensorLocation{.sensorLocationX = defaultSensorLocationX,
                          .sensorLocationY = defaultSensorLocationY,
                          .sensorRadius = defaultSensorRadius};
void FakeFingerprintEngineSide::getDefaultSensorLocation(
        std::vector<SensorLocation>& sensorLocation) {
    for (int i = 0; i < (sizeof(defaultLocation) / sizeof(defaultLocation[0])); i++) {
        sensorLocation.push_back(defaultLocation[i]);
    }
}

}  // namespace aidl::android::hardware::biometrics::fingerprint
+8 −4
Original line number Diff line number Diff line
@@ -34,10 +34,14 @@ namespace aidl::android::hardware::biometrics::fingerprint {
FakeFingerprintEngineUdfps::FakeFingerprintEngineUdfps()
    : FakeFingerprintEngine(), mPointerDownTime(0), mUiReadyTime(0) {}

SensorLocation FakeFingerprintEngineUdfps::defaultSensorLocation() {
    return SensorLocation{.sensorLocationX = defaultSensorLocationX,
void FakeFingerprintEngineUdfps::getDefaultSensorLocation(
        std::vector<SensorLocation>& sensorLocation) {
    sensorLocation.clear();
    sensorLocation.push_back(SensorLocation{
            .sensorLocationX = defaultSensorLocationX,
            .sensorLocationY = defaultSensorLocationY,
                          .sensorRadius = defaultSensorRadius};
            .sensorRadius = defaultSensorRadius,
    });
}

ndk::ScopedAStatus FakeFingerprintEngineUdfps::onPointerDownImpl(int32_t /*pointerId*/,
+10 −14
Original line number Diff line number Diff line
@@ -74,7 +74,7 @@ ndk::ScopedAStatus Fingerprint::getSensorProps(std::vector<SensorProps>* out) {
    auto sensorId = Fingerprint::cfg().get<std::int32_t>("sensor_id");
    auto sensorStrength = Fingerprint::cfg().get<std::int32_t>("sensor_strength");
    auto maxEnrollments = Fingerprint::cfg().get<std::int32_t>("max_enrollments");
    auto navigationGuesture = Fingerprint::cfg().get<bool>("navigation_guesture");
    auto navigationGesture = Fingerprint::cfg().get<bool>("navigation_gesture");
    auto detectInteraction = Fingerprint::cfg().get<bool>("detect_interaction");
    auto displayTouch = Fingerprint::cfg().get<bool>("display_touch");
    auto controlIllumination = Fingerprint::cfg().get<bool>("control_illumination");
@@ -82,19 +82,15 @@ ndk::ScopedAStatus Fingerprint::getSensorProps(std::vector<SensorProps>* out) {
    common::CommonProps commonProps = {sensorId, (common::SensorStrength)sensorStrength,
                                       maxEnrollments, componentInfo};

    SensorLocation sensorLocation = mEngine->getSensorLocation();

    LOG(INFO) << "sensor type:" << ::android::internal::ToString(mSensorType)
              << " location:" << sensorLocation.toString();
    std::vector<SensorLocation> sensorLocation;
    mEngine->getSensorLocation(sensorLocation);
    LOG(INFO) << "sensor type:" << ::android::internal::ToString(mSensorType);
    for (auto location : sensorLocation) {
        LOG(INFO) << "sensor location:  " << location.toString();
    }

    *out = {{commonProps,
             mSensorType,
             {sensorLocation},
             navigationGuesture,
             detectInteraction,
             displayTouch,
             controlIllumination,
             std::nullopt}};
    *out = {{commonProps, mSensorType, sensorLocation, navigationGesture, detectInteraction,
             displayTouch, controlIllumination, std::nullopt}};
    return ndk::ScopedAStatus::ok();
}

@@ -204,7 +200,7 @@ void Fingerprint::clearConfigSysprop() {
    RESET_CONFIG_O(sensor_id);
    RESET_CONFIG_O(sensor_strength);
    RESET_CONFIG_O(max_enrollments);
    RESET_CONFIG_O(navigation_guesture);
    RESET_CONFIG_O(navigation_gesture);
    RESET_CONFIG_O(detect_interaction);
    RESET_CONFIG_O(display_touch);
    RESET_CONFIG_O(control_illumination);
Loading