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

Commit 0a8b1ce1 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Validate axes and led labels correctly"

parents 79bee823 5df3493d
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -529,7 +529,7 @@ public:
    inline nsecs_t getEventTime() const { return mEventTime; }

    static const char* getLabel(int32_t keyCode);
    static int32_t getKeyCodeFromLabel(const char* label);
    static std::optional<int> getKeyCodeFromLabel(const char* label);

    void initialize(int32_t id, int32_t deviceId, uint32_t source, int32_t displayId,
                    std::array<uint8_t, 32> hmac, int32_t action, int32_t flags, int32_t keyCode,
@@ -842,7 +842,7 @@ public:
    }

    static const char* getLabel(int32_t axis);
    static int32_t getAxisFromLabel(const char* label);
    static std::optional<int> getAxisFromLabel(const char* label);

    static std::string actionToString(int32_t action);

+6 −6
Original line number Diff line number Diff line
@@ -35,22 +35,22 @@ struct InputEventLabel {

class InputEventLookup {
public:
    static int lookupValueByLabel(const std::unordered_map<std::string, int>& map,
    static std::optional<int> lookupValueByLabel(const std::unordered_map<std::string, int>& map,
                                                 const char* literal);

    static const char* lookupLabelByValue(const std::vector<InputEventLabel>& vec, int value);

    static int32_t getKeyCodeByLabel(const char* label);
    static std::optional<int> getKeyCodeByLabel(const char* label);

    static const char* getLabelByKeyCode(int32_t keyCode);

    static uint32_t getKeyFlagByLabel(const char* label);
    static std::optional<int> getKeyFlagByLabel(const char* label);

    static int32_t getAxisByLabel(const char* label);
    static std::optional<int> getAxisByLabel(const char* label);

    static const char* getAxisLabel(int32_t axisId);

    static int32_t getLedByLabel(const char* label);
    static std::optional<int> getLedByLabel(const char* label);

private:
    static const std::unordered_map<std::string, int> KEYCODES;
+2 −2
Original line number Diff line number Diff line
@@ -299,7 +299,7 @@ const char* KeyEvent::getLabel(int32_t keyCode) {
    return InputEventLookup::getLabelByKeyCode(keyCode);
}

int32_t KeyEvent::getKeyCodeFromLabel(const char* label) {
std::optional<int> KeyEvent::getKeyCodeFromLabel(const char* label) {
    return InputEventLookup::getKeyCodeByLabel(label);
}

@@ -891,7 +891,7 @@ const char* MotionEvent::getLabel(int32_t axis) {
    return InputEventLookup::getAxisLabel(axis);
}

int32_t MotionEvent::getAxisFromLabel(const char* label) {
std::optional<int> MotionEvent::getAxisFromLabel(const char* label) {
    return InputEventLookup::getAxisByLabel(label);
}

+11 −11
Original line number Diff line number Diff line
@@ -438,11 +438,11 @@ const std::unordered_map<std::string, int> InputEventLookup::LEDS = {LEDS_SEQUEN

const std::unordered_map<std::string, int> InputEventLookup::FLAGS = {FLAGS_SEQUENCE};

int InputEventLookup::lookupValueByLabel(const std::unordered_map<std::string, int>& map,
                                         const char* literal) {
std::optional<int> InputEventLookup::lookupValueByLabel(
        const std::unordered_map<std::string, int>& map, const char* literal) {
    std::string str(literal);
    auto it = map.find(str);
    return it != map.end() ? it->second : 0;
    return it != map.end() ? std::make_optional(it->second) : std::nullopt;
}

const char* InputEventLookup::lookupLabelByValue(const std::vector<InputEventLabel>& vec,
@@ -453,8 +453,8 @@ const char* InputEventLookup::lookupLabelByValue(const std::vector<InputEventLab
    return nullptr;
}

int32_t InputEventLookup::getKeyCodeByLabel(const char* label) {
    return int32_t(lookupValueByLabel(KEYCODES, label));
std::optional<int> InputEventLookup::getKeyCodeByLabel(const char* label) {
    return lookupValueByLabel(KEYCODES, label);
}

const char* InputEventLookup::getLabelByKeyCode(int32_t keyCode) {
@@ -464,20 +464,20 @@ const char* InputEventLookup::getLabelByKeyCode(int32_t keyCode) {
    return nullptr;
}

uint32_t InputEventLookup::getKeyFlagByLabel(const char* label) {
    return uint32_t(lookupValueByLabel(FLAGS, label));
std::optional<int> InputEventLookup::getKeyFlagByLabel(const char* label) {
    return lookupValueByLabel(FLAGS, label);
}

int32_t InputEventLookup::getAxisByLabel(const char* label) {
    return int32_t(lookupValueByLabel(AXES, label));
std::optional<int> InputEventLookup::getAxisByLabel(const char* label) {
    return lookupValueByLabel(AXES, label);
}

const char* InputEventLookup::getAxisLabel(int32_t axisId) {
    return lookupLabelByValue(AXES_NAMES, axisId);
}

int32_t InputEventLookup::getLedByLabel(const char* label) {
    return int32_t(lookupValueByLabel(LEDS, label));
std::optional<int> InputEventLookup::getLedByLabel(const char* label) {
    return lookupValueByLabel(LEDS, label);
}

} // namespace android
+11 −13
Original line number Diff line number Diff line
@@ -999,7 +999,7 @@ status_t KeyCharacterMap::Parser::parseMapKey() {

    mTokenizer->skipDelimiters(WHITESPACE);
    String8 keyCodeToken = mTokenizer->nextToken(WHITESPACE);
    int32_t keyCode = InputEventLookup::getKeyCodeByLabel(keyCodeToken.string());
    std::optional<int> keyCode = InputEventLookup::getKeyCodeByLabel(keyCodeToken.string());
    if (!keyCode) {
        ALOGE("%s: Expected key code label, got '%s'.", mTokenizer->getLocation().string(),
                keyCodeToken.string());
@@ -1010,19 +1010,19 @@ status_t KeyCharacterMap::Parser::parseMapKey() {
    ALOGD("Parsed map key %s: code=%d, keyCode=%d.",
            mapUsage ? "usage" : "scan code", code, keyCode);
#endif
    map.insert_or_assign(code, keyCode);
    map.insert_or_assign(code, *keyCode);
    return NO_ERROR;
}

status_t KeyCharacterMap::Parser::parseKey() {
    String8 keyCodeToken = mTokenizer->nextToken(WHITESPACE);
    int32_t keyCode = InputEventLookup::getKeyCodeByLabel(keyCodeToken.string());
    std::optional<int> keyCode = InputEventLookup::getKeyCodeByLabel(keyCodeToken.string());
    if (!keyCode) {
        ALOGE("%s: Expected key code label, got '%s'.", mTokenizer->getLocation().string(),
                keyCodeToken.string());
        return BAD_VALUE;
    }
    if (mMap->mKeys.indexOfKey(keyCode) >= 0) {
    if (mMap->mKeys.indexOfKey(*keyCode) >= 0) {
        ALOGE("%s: Duplicate entry for key code '%s'.", mTokenizer->getLocation().string(),
                keyCodeToken.string());
        return BAD_VALUE;
@@ -1036,11 +1036,9 @@ status_t KeyCharacterMap::Parser::parseKey() {
        return BAD_VALUE;
    }

#if DEBUG_PARSER
    ALOGD("Parsed beginning of key: keyCode=%d.", keyCode);
#endif
    mKeyCode = keyCode;
    mMap->mKeys.add(keyCode, new Key());
    ALOGD_IF(DEBUG_PARSER, "Parsed beginning of key: keyCode=%d.", *keyCode);
    mKeyCode = *keyCode;
    mMap->mKeys.add(*keyCode, new Key());
    mState = STATE_KEY;
    return NO_ERROR;
}
@@ -1136,7 +1134,7 @@ status_t KeyCharacterMap::Parser::parseKeyProperty() {
            } else if (token == "fallback") {
                mTokenizer->skipDelimiters(WHITESPACE);
                token = mTokenizer->nextToken(WHITESPACE);
                int32_t keyCode = InputEventLookup::getKeyCodeByLabel(token.string());
                std::optional<int> keyCode = InputEventLookup::getKeyCodeByLabel(token.string());
                if (!keyCode) {
                    ALOGE("%s: Invalid key code label for fallback behavior, got '%s'.",
                            mTokenizer->getLocation().string(),
@@ -1148,12 +1146,12 @@ status_t KeyCharacterMap::Parser::parseKeyProperty() {
                            mTokenizer->getLocation().string());
                    return BAD_VALUE;
                }
                behavior.fallbackKeyCode = keyCode;
                behavior.fallbackKeyCode = *keyCode;
                haveFallback = true;
            } else if (token == "replace") {
                mTokenizer->skipDelimiters(WHITESPACE);
                token = mTokenizer->nextToken(WHITESPACE);
                int32_t keyCode = InputEventLookup::getKeyCodeByLabel(token.string());
                std::optional<int> keyCode = InputEventLookup::getKeyCodeByLabel(token.string());
                if (!keyCode) {
                    ALOGE("%s: Invalid key code label for replace, got '%s'.",
                            mTokenizer->getLocation().string(),
@@ -1170,7 +1168,7 @@ status_t KeyCharacterMap::Parser::parseKeyProperty() {
                            mTokenizer->getLocation().string());
                    return BAD_VALUE;
                }
                behavior.replacementKeyCode = keyCode;
                behavior.replacementKeyCode = *keyCode;
                haveReplacement = true;

            } else {
Loading