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

Commit 13bf76a8 authored by Linnan Li's avatar Linnan Li Committed by Siarhei Vishniakou
Browse files

Use a strongly typed LogicalDisplayId for displayId(2/n)



Currently, we use int32_t for displayId, which is not a safe type, and
it may also lead to misdefinition of types. Here, we introduce
LogicalDisplayId as a strong type for displayId and move all contents
of constants.h into LogicalDisplayId.h.

Bug: 339106983
Test: atest inputflinger_tests
Test: atest InputTests
Test: m checkinput
Test: m libsurfaceflinger_unittest
Test: presubmit

Change-Id: If44e56f69553d095af5adb59b595e4a852ab32ce
Signed-off-by: default avatarLinnan Li <lilinnan@xiaomi.corp-partner.google.com>
parent 5c636e3b
Loading
Loading
Loading
Loading
+7 −9
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@
#include <android-base/stringprintf.h>
#include <ftl/enum.h>
#include <ftl/string.h>
#include <gui/constants.h>
#include <input/Input.h>
#include <ui/Rotation.h>

@@ -47,7 +46,7 @@ enum class ViewportType : int32_t {
 * See com.android.server.display.DisplayViewport.
 */
struct DisplayViewport {
    int32_t displayId; // -1 if invalid
    ui::LogicalDisplayId displayId; // ADISPLAY_ID_NONE if invalid
    ui::Rotation orientation;
    int32_t logicalLeft;
    int32_t logicalTop;
@@ -67,7 +66,7 @@ struct DisplayViewport {
    ViewportType type;

    DisplayViewport()
          : displayId(ADISPLAY_ID_NONE),
          : displayId(ui::ADISPLAY_ID_NONE),
            orientation(ui::ROTATION_0),
            logicalLeft(0),
            logicalTop(0),
@@ -99,12 +98,10 @@ struct DisplayViewport {
        return !(*this == other);
    }

    inline bool isValid() const {
        return displayId >= 0;
    }
    inline bool isValid() const { return displayId.isValid(); }

    void setNonDisplayViewport(int32_t width, int32_t height) {
        displayId = ADISPLAY_ID_NONE;
        displayId = ui::ADISPLAY_ID_NONE;
        orientation = ui::ROTATION_0;
        logicalLeft = 0;
        logicalTop = 0;
@@ -123,12 +120,13 @@ struct DisplayViewport {
    }

    std::string toString() const {
        return StringPrintf("Viewport %s: displayId=%d, uniqueId=%s, port=%s, orientation=%d, "
        return StringPrintf("Viewport %s: displayId=%s, uniqueId=%s, port=%s, orientation=%d, "
                            "logicalFrame=[%d, %d, %d, %d], "
                            "physicalFrame=[%d, %d, %d, %d], "
                            "deviceSize=[%d, %d], "
                            "isActive=[%d]",
                            ftl::enum_string(type).c_str(), displayId, uniqueId.c_str(),
                            ftl::enum_string(type).c_str(), displayId.toString().c_str(),
                            uniqueId.c_str(),
                            physicalPort ? ftl::to_string(*physicalPort).c_str() : "<none>",
                            static_cast<int>(orientation), logicalLeft, logicalTop, logicalRight,
                            logicalBottom, physicalLeft, physicalTop, physicalRight, physicalBottom,
+8 −7
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@
#include <android/os/PointerIconType.h>
#include <math.h>
#include <stdint.h>
#include <ui/LogicalDisplayId.h>
#include <ui/Transform.h>
#include <utils/BitSet.h>
#include <utils/Timers.h>
@@ -547,9 +548,9 @@ public:

    inline void setSource(uint32_t source) { mSource = source; }

    inline int32_t getDisplayId() const { return mDisplayId; }
    inline ui::LogicalDisplayId getDisplayId() const { return mDisplayId; }

    inline void setDisplayId(int32_t displayId) { mDisplayId = displayId; }
    inline void setDisplayId(ui::LogicalDisplayId displayId) { mDisplayId = displayId; }

    inline std::array<uint8_t, 32> getHmac() const { return mHmac; }

@@ -558,7 +559,7 @@ public:
    bool operator==(const InputEvent&) const = default;

protected:
    void initialize(int32_t id, DeviceId deviceId, uint32_t source, int32_t displayId,
    void initialize(int32_t id, DeviceId deviceId, uint32_t source, ui::LogicalDisplayId displayId,
                    std::array<uint8_t, 32> hmac);

    void initialize(const InputEvent& from);
@@ -566,7 +567,7 @@ protected:
    int32_t mId;
    DeviceId mDeviceId;
    uint32_t mSource;
    int32_t mDisplayId;
    ui::LogicalDisplayId mDisplayId{ui::ADISPLAY_ID_NONE};
    std::array<uint8_t, 32> mHmac;
};

@@ -602,7 +603,7 @@ public:
    static const char* getLabel(int32_t keyCode);
    static std::optional<int> getKeyCodeFromLabel(const char* label);

    void initialize(int32_t id, DeviceId deviceId, uint32_t source, int32_t displayId,
    void initialize(int32_t id, DeviceId deviceId, uint32_t source, ui::LogicalDisplayId displayId,
                    std::array<uint8_t, 32> hmac, int32_t action, int32_t flags, int32_t keyCode,
                    int32_t scanCode, int32_t metaState, int32_t repeatCount, nsecs_t downTime,
                    nsecs_t eventTime);
@@ -864,7 +865,7 @@ public:

    ssize_t findPointerIndex(int32_t pointerId) const;

    void initialize(int32_t id, DeviceId deviceId, uint32_t source, int32_t displayId,
    void initialize(int32_t id, DeviceId deviceId, uint32_t source, ui::LogicalDisplayId displayId,
                    std::array<uint8_t, 32> hmac, int32_t action, int32_t actionButton,
                    int32_t flags, int32_t edgeFlags, int32_t metaState, int32_t buttonState,
                    MotionClassification classification, const ui::Transform& transform,
@@ -1073,7 +1074,7 @@ struct __attribute__((__packed__)) VerifiedInputEvent {
    DeviceId deviceId;
    nsecs_t eventTimeNanos;
    uint32_t source;
    int32_t displayId;
    ui::LogicalDisplayId displayId;
};

/**
+3 −3
Original line number Diff line number Diff line
@@ -280,7 +280,7 @@ public:

    void initialize(int32_t id, int32_t generation, int32_t controllerNumber,
                    const InputDeviceIdentifier& identifier, const std::string& alias,
                    bool isExternal, bool hasMic, int32_t associatedDisplayId,
                    bool isExternal, bool hasMic, ui::LogicalDisplayId associatedDisplayId,
                    InputDeviceViewBehavior viewBehavior = {{}}, bool enabled = true);

    inline int32_t getId() const { return mId; }
@@ -348,7 +348,7 @@ public:
    }
    inline std::optional<InputDeviceUsiVersion> getUsiVersion() const { return mUsiVersion; }

    inline int32_t getAssociatedDisplayId() const { return mAssociatedDisplayId; }
    inline ui::LogicalDisplayId getAssociatedDisplayId() const { return mAssociatedDisplayId; }

    inline void setEnabled(bool enabled) { mEnabled = enabled; }
    inline bool isEnabled() const { return mEnabled; }
@@ -366,7 +366,7 @@ private:
    int32_t mKeyboardType;
    std::shared_ptr<KeyCharacterMap> mKeyCharacterMap;
    std::optional<InputDeviceUsiVersion> mUsiVersion;
    int32_t mAssociatedDisplayId;
    ui::LogicalDisplayId mAssociatedDisplayId{ui::ADISPLAY_ID_NONE};
    bool mEnabled;

    bool mHasVibrator;
+4 −5
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@

#include <android/input.h>
#include <attestation/HmacKeyManager.h>
#include <gui/constants.h>
#include <input/Input.h>
#include <utils/Timers.h> // for nsecs_t, systemTime

@@ -83,7 +82,7 @@ public:
        return *this;
    }

    MotionEventBuilder& displayId(int32_t displayId) {
    MotionEventBuilder& displayId(ui::LogicalDisplayId displayId) {
        mDisplayId = displayId;
        return *this;
    }
@@ -159,7 +158,7 @@ private:
    int32_t mSource;
    nsecs_t mDownTime;
    nsecs_t mEventTime;
    int32_t mDisplayId{ADISPLAY_ID_DEFAULT};
    ui::LogicalDisplayId mDisplayId{ui::ADISPLAY_ID_DEFAULT};
    int32_t mActionButton{0};
    int32_t mButtonState{0};
    int32_t mFlags{0};
@@ -209,7 +208,7 @@ public:
        return *this;
    }

    KeyEventBuilder& displayId(int32_t displayId) {
    KeyEventBuilder& displayId(ui::LogicalDisplayId displayId) {
        mDisplayId = displayId;
        return *this;
    }
@@ -248,7 +247,7 @@ private:
    uint32_t mSource;
    nsecs_t mDownTime;
    nsecs_t mEventTime;
    int32_t mDisplayId{ADISPLAY_ID_DEFAULT};
    ui::LogicalDisplayId mDisplayId{ui::ADISPLAY_ID_DEFAULT};
    uint32_t mPolicyFlags = DEFAULT_POLICY_FLAGS;
    int32_t mFlags{0};
    int32_t mKeyCode{AKEYCODE_UNKNOWN};
+7 −6
Original line number Diff line number Diff line
@@ -353,9 +353,10 @@ public:
     * Other errors probably indicate that the channel is broken.
     */
    status_t publishKeyEvent(uint32_t seq, int32_t eventId, int32_t deviceId, int32_t source,
                             int32_t displayId, std::array<uint8_t, 32> hmac, int32_t action,
                             int32_t flags, int32_t keyCode, int32_t scanCode, int32_t metaState,
                             int32_t repeatCount, nsecs_t downTime, nsecs_t eventTime);
                             ui::LogicalDisplayId displayId, std::array<uint8_t, 32> hmac,
                             int32_t action, int32_t flags, int32_t keyCode, int32_t scanCode,
                             int32_t metaState, int32_t repeatCount, nsecs_t downTime,
                             nsecs_t eventTime);

    /* Publishes a motion event to the input channel.
     *
@@ -366,9 +367,9 @@ public:
     * Other errors probably indicate that the channel is broken.
     */
    status_t publishMotionEvent(uint32_t seq, int32_t eventId, int32_t deviceId, int32_t source,
                                int32_t displayId, std::array<uint8_t, 32> hmac, int32_t action,
                                int32_t actionButton, int32_t flags, int32_t edgeFlags,
                                int32_t metaState, int32_t buttonState,
                                ui::LogicalDisplayId displayId, std::array<uint8_t, 32> hmac,
                                int32_t action, int32_t actionButton, int32_t flags,
                                int32_t edgeFlags, int32_t metaState, int32_t buttonState,
                                MotionClassification classification, const ui::Transform& transform,
                                float xPrecision, float yPrecision, float xCursorPosition,
                                float yCursorPosition, const ui::Transform& rawTransform,
Loading