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

Commit 50faccda authored by Harry Cutts's avatar Harry Cutts Committed by Android (Google) Code Review
Browse files

Merge changes I51c750d2,I57de645c into main

* changes:
  Return std::optional from getAbsoluteAxisValue
  Return a std::optional from EventHub::getAbsoluteAxisInfo
parents 8faf3d40 e2c5e20e
Loading
Loading
Loading
Loading
+10 −15
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 {
@@ -1130,22 +1127,20 @@ int32_t EventHub::getSwitchState(int32_t deviceId, int32_t sw) const {
    return device->swState.test(sw) ? AKEY_STATE_DOWN : AKEY_STATE_UP;
}

status_t EventHub::getAbsoluteAxisValue(int32_t deviceId, int32_t axis, int32_t* outValue) const {
    *outValue = 0;
std::optional<int32_t> EventHub::getAbsoluteAxisValue(int32_t deviceId, int32_t 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 || !device->hasValidFd()) {
        return NAME_NOT_FOUND;
        return std::nullopt;
    }
    const auto it = device->absState.find(axis);
    if (it == device->absState.end()) {
        return NAME_NOT_FOUND;
        return std::nullopt;
    }
    *outValue = it->second.value;
    return OK;
    return it->second.value;
}

base::Result<std::vector<int32_t>> EventHub::getMtSlotValues(int32_t deviceId, int32_t axis,
+8 −8
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;

@@ -339,8 +340,7 @@ public:
    virtual int32_t getScanCodeState(int32_t deviceId, int32_t scanCode) const = 0;
    virtual int32_t getKeyCodeState(int32_t deviceId, int32_t keyCode) const = 0;
    virtual int32_t getSwitchState(int32_t deviceId, int32_t sw) const = 0;
    virtual status_t getAbsoluteAxisValue(int32_t deviceId, int32_t axis,
                                          int32_t* outValue) const = 0;
    virtual std::optional<int32_t> getAbsoluteAxisValue(int32_t deviceId, int32_t axis) const = 0;
    /* Query Multi-Touch slot values for an axis. Returns error or an 1 indexed array of size
     * (slotCount + 1). The value at the 0 index is set to queried axis. */
    virtual base::Result<std::vector<int32_t>> getMtSlotValues(int32_t deviceId, int32_t axis,
@@ -511,8 +511,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;

@@ -559,8 +559,8 @@ public:
    int32_t getSwitchState(int32_t deviceId, int32_t sw) const override final;
    int32_t getKeyCodeForKeyLocation(int32_t deviceId,
                                     int32_t locationKeyCode) const override final;
    status_t getAbsoluteAxisValue(int32_t deviceId, int32_t axis,
                                  int32_t* outValue) const override final;
    std::optional<int32_t> getAbsoluteAxisValue(int32_t deviceId,
                                                int32_t axis) const override final;
    base::Result<std::vector<int32_t>> getMtSlotValues(int32_t deviceId, int32_t axis,
                                                       size_t slotCount) const override final;

+8 −12
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) {
@@ -379,8 +381,8 @@ public:
        return mEventHub->getKeyCodeForKeyLocation(mId, locationKeyCode);
    }
    inline int32_t getSwitchState(int32_t sw) const { return mEventHub->getSwitchState(mId, sw); }
    inline status_t getAbsoluteAxisValue(int32_t code, int32_t* outValue) const {
        return mEventHub->getAbsoluteAxisValue(mId, code, outValue);
    inline std::optional<int32_t> getAbsoluteAxisValue(int32_t code) const {
        return mEventHub->getAbsoluteAxisValue(mId, code);
    }
    inline base::Result<std::vector<int32_t>> getMtSlotValues(int32_t axis,
                                                              size_t slotCount) const {
@@ -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;
@@ -442,11 +443,6 @@ public:
    inline bool isKeyCodePressed(int32_t keyCode) const {
        return mEventHub->getKeyCodeState(mId, keyCode) == AKEY_STATE_DOWN;
    }
    inline int32_t getAbsoluteAxisValue(int32_t code) const {
        int32_t value;
        mEventHub->getAbsoluteAxisValue(mId, code, &value);
        return value;
    }
    inline bool isDeviceEnabled() { return mEventHub->isDeviceEnabled(mId); }
    inline status_t enableDevice() { return mEventHub->enableDevice(mId); }
    inline status_t disableDevice() { return mEventHub->disableDevice(mId); }
+4 −6
Original line number Diff line number Diff line
@@ -139,13 +139,11 @@ void MultiTouchMotionAccumulator::populateCurrentSlot(
    if (!mUsingSlotsProtocol) {
        return;
    }
    int32_t initialSlot;
    if (const auto status = deviceContext.getAbsoluteAxisValue(ABS_MT_SLOT, &initialSlot);
        status == OK) {
        mCurrentSlot = initialSlot;
    if (const std::optional<int32_t> initialSlot = deviceContext.getAbsoluteAxisValue(ABS_MT_SLOT);
        initialSlot.has_value()) {
        mCurrentSlot = initialSlot.value();
    } else {
        ALOGE("Could not retrieve current multi-touch slot index. status=%s",
              statusToString(status).c_str());
        ALOGE("Could not retrieve current multi-touch slot index");
    }
}

+7 −7
Original line number Diff line number Diff line
@@ -26,13 +26,13 @@ SingleTouchMotionAccumulator::SingleTouchMotionAccumulator() {
}

void SingleTouchMotionAccumulator::reset(InputDeviceContext& deviceContext) {
    mAbsX = deviceContext.getAbsoluteAxisValue(ABS_X);
    mAbsY = deviceContext.getAbsoluteAxisValue(ABS_Y);
    mAbsPressure = deviceContext.getAbsoluteAxisValue(ABS_PRESSURE);
    mAbsToolWidth = deviceContext.getAbsoluteAxisValue(ABS_TOOL_WIDTH);
    mAbsDistance = deviceContext.getAbsoluteAxisValue(ABS_DISTANCE);
    mAbsTiltX = deviceContext.getAbsoluteAxisValue(ABS_TILT_X);
    mAbsTiltY = deviceContext.getAbsoluteAxisValue(ABS_TILT_Y);
    mAbsX = deviceContext.getAbsoluteAxisValue(ABS_X).value_or(0);
    mAbsY = deviceContext.getAbsoluteAxisValue(ABS_Y).value_or(0);
    mAbsPressure = deviceContext.getAbsoluteAxisValue(ABS_PRESSURE).value_or(0);
    mAbsToolWidth = deviceContext.getAbsoluteAxisValue(ABS_TOOL_WIDTH).value_or(0);
    mAbsDistance = deviceContext.getAbsoluteAxisValue(ABS_DISTANCE).value_or(0);
    mAbsTiltX = deviceContext.getAbsoluteAxisValue(ABS_TILT_X).value_or(0);
    mAbsTiltY = deviceContext.getAbsoluteAxisValue(ABS_TILT_Y).value_or(0);
}

void SingleTouchMotionAccumulator::clearAbsoluteAxes() {
Loading