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

Commit 207674d8 authored by Harry Cutts's avatar Harry Cutts
Browse files

Return a std::optional from EventHub::getAbsoluteAxisInfo

InputDevice::getAbsoluteAxisInfo will be refactored similarly in a
follow-up.

Test: atest inputflinger_tests
Test: m checkinput
Test: build and run inputflinger_multitouch_input_fuzzer for a while
Bug: 245989146
Flag: EXEMPT refactor
Change-Id: I57de645c889de53c8be0f9f8744a62e92fafdadb
parent 6bdcbc7f
Loading
Loading
Loading
Loading
+5 −8
Original line number Diff line number Diff line
@@ -998,26 +998,23 @@ std::optional<PropertyMap> EventHub::getConfiguration(int32_t deviceId) const {
    return *device->configuration;
}

status_t EventHub::getAbsoluteAxisInfo(int32_t deviceId, int axis,
                                       RawAbsoluteAxisInfo* outAxisInfo) const {
    outAxisInfo->clear();
std::optional<RawAbsoluteAxisInfo> EventHub::getAbsoluteAxisInfo(int32_t deviceId, int axis) const {
    if (axis < 0 || axis > ABS_MAX) {
        return NAME_NOT_FOUND;
        return std::nullopt;
    }
    std::scoped_lock _l(mLock);
    const Device* device = getDeviceLocked(deviceId);
    if (device == nullptr) {
        return NAME_NOT_FOUND;
        return std::nullopt;
    }
    // We can read the RawAbsoluteAxisInfo even if the device is disabled and doesn't have a valid
    // fd, because the info is populated once when the device is first opened, and it doesn't change
    // throughout the device lifecycle.
    auto it = device->absState.find(axis);
    if (it == device->absState.end()) {
        return NAME_NOT_FOUND;
        return std::nullopt;
    }
    *outAxisInfo = it->second.info;
    return OK;
    return it->second.info;
}

bool EventHub::hasRelativeAxis(int32_t deviceId, int axis) const {
+5 −4
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@
#include <filesystem>
#include <functional>
#include <map>
#include <optional>
#include <ostream>
#include <string>
#include <unordered_map>
@@ -278,8 +279,8 @@ public:
     */
    virtual std::optional<PropertyMap> getConfiguration(int32_t deviceId) const = 0;

    virtual status_t getAbsoluteAxisInfo(int32_t deviceId, int axis,
                                         RawAbsoluteAxisInfo* outAxisInfo) const = 0;
    virtual std::optional<RawAbsoluteAxisInfo> getAbsoluteAxisInfo(int32_t deviceId,
                                                                   int axis) const = 0;

    virtual bool hasRelativeAxis(int32_t deviceId, int axis) const = 0;

@@ -511,8 +512,8 @@ public:

    std::optional<PropertyMap> getConfiguration(int32_t deviceId) const override final;

    status_t getAbsoluteAxisInfo(int32_t deviceId, int axis,
                                 RawAbsoluteAxisInfo* outAxisInfo) const override final;
    std::optional<RawAbsoluteAxisInfo> getAbsoluteAxisInfo(int32_t deviceId,
                                                           int axis) const override final;

    bool hasRelativeAxis(int32_t deviceId, int axis) const override final;

+6 −5
Original line number Diff line number Diff line
@@ -306,9 +306,11 @@ public:
        return mEventHub->getDeviceControllerNumber(mId);
    }
    inline status_t getAbsoluteAxisInfo(int32_t code, RawAbsoluteAxisInfo* axisInfo) const {
        if (const auto status = mEventHub->getAbsoluteAxisInfo(mId, code, axisInfo); status != OK) {
            return status;
        std::optional<RawAbsoluteAxisInfo> info = mEventHub->getAbsoluteAxisInfo(mId, code);
        if (!info.has_value()) {
            return NAME_NOT_FOUND;
        }
        *axisInfo = *info;

        // Validate axis info for InputDevice.
        if (axisInfo->valid && axisInfo->minValue == axisInfo->maxValue) {
@@ -432,9 +434,8 @@ public:
    }

    inline bool hasAbsoluteAxis(int32_t code) const {
        RawAbsoluteAxisInfo info;
        mEventHub->getAbsoluteAxisInfo(mId, code, &info);
        return info.valid;
        std::optional<RawAbsoluteAxisInfo> info = mEventHub->getAbsoluteAxisInfo(mId, code);
        return info.has_value() && info->valid;
    }
    inline bool isKeyPressed(int32_t scanCode) const {
        return mEventHub->getScanCodeState(mId, scanCode) == AKEY_STATE_DOWN;
+6 −6
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

#include "FakeEventHub.h"

#include <optional>

#include <android-base/thread_annotations.h>
#include <gtest/gtest.h>
#include <linux/input-event-codes.h>
@@ -263,18 +265,16 @@ std::optional<PropertyMap> FakeEventHub::getConfiguration(int32_t deviceId) cons
    return device->configuration;
}

status_t FakeEventHub::getAbsoluteAxisInfo(int32_t deviceId, int axis,
                                           RawAbsoluteAxisInfo* outAxisInfo) const {
std::optional<RawAbsoluteAxisInfo> FakeEventHub::getAbsoluteAxisInfo(int32_t deviceId,
                                                                     int axis) const {
    Device* device = getDevice(deviceId);
    if (device) {
        ssize_t index = device->absoluteAxes.indexOfKey(axis);
        if (index >= 0) {
            *outAxisInfo = device->absoluteAxes.valueAt(index);
            return OK;
            return device->absoluteAxes.valueAt(index);
        }
    }
    outAxisInfo->clear();
    return -1;
    return std::nullopt;
}

bool FakeEventHub::hasRelativeAxis(int32_t deviceId, int axis) const {
+2 −2
Original line number Diff line number Diff line
@@ -168,8 +168,8 @@ private:
    InputDeviceIdentifier getDeviceIdentifier(int32_t deviceId) const override;
    int32_t getDeviceControllerNumber(int32_t) const override;
    std::optional<PropertyMap> getConfiguration(int32_t deviceId) const override;
    status_t getAbsoluteAxisInfo(int32_t deviceId, int axis,
                                 RawAbsoluteAxisInfo* outAxisInfo) const override;
    std::optional<RawAbsoluteAxisInfo> getAbsoluteAxisInfo(int32_t deviceId,
                                                           int axis) const override;
    bool hasRelativeAxis(int32_t deviceId, int axis) const override;
    bool hasInputProperty(int32_t, int) const override;
    bool hasMscEvent(int32_t deviceId, int mscEvent) const override final;
Loading