summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2022-09-27 23:59:26 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-09-27 23:59:26 +0000
commit137a05255602bfa1ece8a71a83b0418c2efdfbb2 (patch)
tree5abf294743ff28a1dcf57feeaeecf7133a62f331
parentc71a81cd1b63decc0e27467c8376b7d77273544a (diff)
parent51b46e2abaab95a07cc66116ffd4479ac1036a7a (diff)
Merge changes from topic "variant notifyargs"
* changes: Add a generic 'notify' function Use std::variant for NotifyArgs
-rw-r--r--services/inputflinger/InputListener.cpp177
-rw-r--r--services/inputflinger/InputProcessor.cpp41
-rw-r--r--services/inputflinger/InputProcessor.h10
-rw-r--r--services/inputflinger/include/InputListener.h122
4 files changed, 120 insertions, 230 deletions
diff --git a/services/inputflinger/InputListener.cpp b/services/inputflinger/InputListener.cpp
index dce327ed18..54d0e02e1e 100644
--- a/services/inputflinger/InputListener.cpp
+++ b/services/inputflinger/InputListener.cpp
@@ -34,19 +34,7 @@ namespace android {
// --- NotifyConfigurationChangedArgs ---
NotifyConfigurationChangedArgs::NotifyConfigurationChangedArgs(int32_t id, nsecs_t eventTime)
- : NotifyArgs(id, eventTime) {}
-
-NotifyConfigurationChangedArgs::NotifyConfigurationChangedArgs(
- const NotifyConfigurationChangedArgs& other)
- : NotifyArgs(other.id, other.eventTime) {}
-
-bool NotifyConfigurationChangedArgs::operator==(const NotifyConfigurationChangedArgs& rhs) const {
- return id == rhs.id && eventTime == rhs.eventTime;
-}
-
-void NotifyConfigurationChangedArgs::notify(InputListenerInterface& listener) const {
- listener.notifyConfigurationChanged(this);
-}
+ : id(id), eventTime(eventTime) {}
// --- NotifyKeyArgs ---
@@ -54,7 +42,8 @@ NotifyKeyArgs::NotifyKeyArgs(int32_t id, nsecs_t eventTime, nsecs_t readTime, in
uint32_t source, int32_t displayId, uint32_t policyFlags,
int32_t action, int32_t flags, int32_t keyCode, int32_t scanCode,
int32_t metaState, nsecs_t downTime)
- : NotifyArgs(id, eventTime),
+ : id(id),
+ eventTime(eventTime),
deviceId(deviceId),
source(source),
displayId(displayId),
@@ -67,32 +56,6 @@ NotifyKeyArgs::NotifyKeyArgs(int32_t id, nsecs_t eventTime, nsecs_t readTime, in
downTime(downTime),
readTime(readTime) {}
-NotifyKeyArgs::NotifyKeyArgs(const NotifyKeyArgs& other)
- : NotifyArgs(other.id, other.eventTime),
- deviceId(other.deviceId),
- source(other.source),
- displayId(other.displayId),
- policyFlags(other.policyFlags),
- action(other.action),
- flags(other.flags),
- keyCode(other.keyCode),
- scanCode(other.scanCode),
- metaState(other.metaState),
- downTime(other.downTime),
- readTime(other.readTime) {}
-
-bool NotifyKeyArgs::operator==(const NotifyKeyArgs& rhs) const {
- return id == rhs.id && eventTime == rhs.eventTime && readTime == rhs.readTime &&
- deviceId == rhs.deviceId && source == rhs.source && displayId == rhs.displayId &&
- policyFlags == rhs.policyFlags && action == rhs.action && flags == rhs.flags &&
- keyCode == rhs.keyCode && scanCode == rhs.scanCode && metaState == rhs.metaState &&
- downTime == rhs.downTime;
-}
-
-void NotifyKeyArgs::notify(InputListenerInterface& listener) const {
- listener.notifyKey(this);
-}
-
// --- NotifyMotionArgs ---
NotifyMotionArgs::NotifyMotionArgs(
@@ -103,7 +66,8 @@ NotifyMotionArgs::NotifyMotionArgs(
const PointerCoords* pointerCoords, float xPrecision, float yPrecision,
float xCursorPosition, float yCursorPosition, nsecs_t downTime,
const std::vector<TouchVideoFrame>& videoFrames)
- : NotifyArgs(id, eventTime),
+ : id(id),
+ eventTime(eventTime),
deviceId(deviceId),
source(source),
displayId(displayId),
@@ -130,7 +94,8 @@ NotifyMotionArgs::NotifyMotionArgs(
}
NotifyMotionArgs::NotifyMotionArgs(const NotifyMotionArgs& other)
- : NotifyArgs(other.id, other.eventTime),
+ : id(other.id),
+ eventTime(other.eventTime),
deviceId(other.deviceId),
source(other.source),
displayId(other.displayId),
@@ -220,41 +185,24 @@ std::string NotifyMotionArgs::dump() const {
flags);
}
-void NotifyMotionArgs::notify(InputListenerInterface& listener) const {
- listener.notifyMotion(this);
-}
-
// --- NotifySwitchArgs ---
NotifySwitchArgs::NotifySwitchArgs(int32_t id, nsecs_t eventTime, uint32_t policyFlags,
uint32_t switchValues, uint32_t switchMask)
- : NotifyArgs(id, eventTime),
+ : id(id),
+ eventTime(eventTime),
policyFlags(policyFlags),
switchValues(switchValues),
switchMask(switchMask) {}
-NotifySwitchArgs::NotifySwitchArgs(const NotifySwitchArgs& other)
- : NotifyArgs(other.id, other.eventTime),
- policyFlags(other.policyFlags),
- switchValues(other.switchValues),
- switchMask(other.switchMask) {}
-
-bool NotifySwitchArgs::operator==(const NotifySwitchArgs rhs) const {
- return id == rhs.id && eventTime == rhs.eventTime && policyFlags == rhs.policyFlags &&
- switchValues == rhs.switchValues && switchMask == rhs.switchMask;
-}
-
-void NotifySwitchArgs::notify(InputListenerInterface& listener) const {
- listener.notifySwitch(this);
-}
-
// --- NotifySensorArgs ---
NotifySensorArgs::NotifySensorArgs(int32_t id, nsecs_t eventTime, int32_t deviceId, uint32_t source,
InputDeviceSensorType sensorType,
InputDeviceSensorAccuracy accuracy, bool accuracyChanged,
nsecs_t hwTimestamp, std::vector<float> values)
- : NotifyArgs(id, eventTime),
+ : id(id),
+ eventTime(eventTime),
deviceId(deviceId),
source(source),
sensorType(sensorType),
@@ -263,76 +211,49 @@ NotifySensorArgs::NotifySensorArgs(int32_t id, nsecs_t eventTime, int32_t device
hwTimestamp(hwTimestamp),
values(std::move(values)) {}
-NotifySensorArgs::NotifySensorArgs(const NotifySensorArgs& other)
- : NotifyArgs(other.id, other.eventTime),
- deviceId(other.deviceId),
- source(other.source),
- sensorType(other.sensorType),
- accuracy(other.accuracy),
- accuracyChanged(other.accuracyChanged),
- hwTimestamp(other.hwTimestamp),
- values(other.values) {}
-
-bool NotifySensorArgs::operator==(const NotifySensorArgs rhs) const {
- return id == rhs.id && eventTime == rhs.eventTime && sensorType == rhs.sensorType &&
- accuracy == rhs.accuracy && accuracyChanged == rhs.accuracyChanged &&
- hwTimestamp == rhs.hwTimestamp && values == rhs.values;
-}
-
-void NotifySensorArgs::notify(InputListenerInterface& listener) const {
- listener.notifySensor(this);
-}
-
// --- NotifyVibratorStateArgs ---
NotifyVibratorStateArgs::NotifyVibratorStateArgs(int32_t id, nsecs_t eventTime, int32_t deviceId,
bool isOn)
- : NotifyArgs(id, eventTime), deviceId(deviceId), isOn(isOn) {}
+ : id(id), eventTime(eventTime), deviceId(deviceId), isOn(isOn) {}
NotifyVibratorStateArgs::NotifyVibratorStateArgs(const NotifyVibratorStateArgs& other)
- : NotifyArgs(other.id, other.eventTime), deviceId(other.deviceId), isOn(other.isOn) {}
-
-bool NotifyVibratorStateArgs::operator==(const NotifyVibratorStateArgs rhs) const {
- return id == rhs.id && eventTime == rhs.eventTime && deviceId == rhs.deviceId &&
- isOn == rhs.isOn;
-}
-
-void NotifyVibratorStateArgs::notify(InputListenerInterface& listener) const {
- listener.notifyVibratorState(this);
-}
+ : id(other.id), eventTime(other.eventTime), deviceId(other.deviceId), isOn(other.isOn) {}
// --- NotifyDeviceResetArgs ---
NotifyDeviceResetArgs::NotifyDeviceResetArgs(int32_t id, nsecs_t eventTime, int32_t deviceId)
- : NotifyArgs(id, eventTime), deviceId(deviceId) {}
-
-NotifyDeviceResetArgs::NotifyDeviceResetArgs(const NotifyDeviceResetArgs& other)
- : NotifyArgs(other.id, other.eventTime), deviceId(other.deviceId) {}
-
-bool NotifyDeviceResetArgs::operator==(const NotifyDeviceResetArgs& rhs) const {
- return id == rhs.id && eventTime == rhs.eventTime && deviceId == rhs.deviceId;
-}
-
-void NotifyDeviceResetArgs::notify(InputListenerInterface& listener) const {
- listener.notifyDeviceReset(this);
-}
+ : id(id), eventTime(eventTime), deviceId(deviceId) {}
// --- NotifyPointerCaptureChangedArgs ---
NotifyPointerCaptureChangedArgs::NotifyPointerCaptureChangedArgs(
int32_t id, nsecs_t eventTime, const PointerCaptureRequest& request)
- : NotifyArgs(id, eventTime), request(request) {}
-
-NotifyPointerCaptureChangedArgs::NotifyPointerCaptureChangedArgs(
- const NotifyPointerCaptureChangedArgs& other)
- : NotifyArgs(other.id, other.eventTime), request(other.request) {}
-
-bool NotifyPointerCaptureChangedArgs::operator==(const NotifyPointerCaptureChangedArgs& rhs) const {
- return id == rhs.id && eventTime == rhs.eventTime && request == rhs.request;
-}
-
-void NotifyPointerCaptureChangedArgs::notify(InputListenerInterface& listener) const {
- listener.notifyPointerCaptureChanged(this);
+ : id(id), eventTime(eventTime), request(request) {}
+
+// --- InputListenerInterface ---
+
+// Helper to std::visit with lambdas.
+template <typename... V>
+struct Visitor : V... {};
+// explicit deduction guide (not needed as of C++20)
+template <typename... V>
+Visitor(V...) -> Visitor<V...>;
+
+void InputListenerInterface::notify(const NotifyArgs& generalArgs) {
+ Visitor v{
+ [&](const NotifyConfigurationChangedArgs& args) { notifyConfigurationChanged(&args); },
+ [&](const NotifyKeyArgs& args) { notifyKey(&args); },
+ [&](const NotifyMotionArgs& args) { notifyMotion(&args); },
+ [&](const NotifySwitchArgs& args) { notifySwitch(&args); },
+ [&](const NotifySensorArgs& args) { notifySensor(&args); },
+ [&](const NotifyVibratorStateArgs& args) { notifyVibratorState(&args); },
+ [&](const NotifyDeviceResetArgs& args) { notifyDeviceReset(&args); },
+ [&](const NotifyPointerCaptureChangedArgs& args) {
+ notifyPointerCaptureChanged(&args);
+ },
+ };
+ std::visit(v, generalArgs);
}
// --- QueuedInputListener ---
@@ -350,47 +271,47 @@ QueuedInputListener::QueuedInputListener(InputListenerInterface& innerListener)
void QueuedInputListener::notifyConfigurationChanged(
const NotifyConfigurationChangedArgs* args) {
traceEvent(__func__, args->id);
- mArgsQueue.emplace_back(std::make_unique<NotifyConfigurationChangedArgs>(*args));
+ mArgsQueue.emplace_back(*args);
}
void QueuedInputListener::notifyKey(const NotifyKeyArgs* args) {
traceEvent(__func__, args->id);
- mArgsQueue.emplace_back(std::make_unique<NotifyKeyArgs>(*args));
+ mArgsQueue.emplace_back(*args);
}
void QueuedInputListener::notifyMotion(const NotifyMotionArgs* args) {
traceEvent(__func__, args->id);
- mArgsQueue.emplace_back(std::make_unique<NotifyMotionArgs>(*args));
+ mArgsQueue.emplace_back(*args);
}
void QueuedInputListener::notifySwitch(const NotifySwitchArgs* args) {
traceEvent(__func__, args->id);
- mArgsQueue.emplace_back(std::make_unique<NotifySwitchArgs>(*args));
+ mArgsQueue.emplace_back(*args);
}
void QueuedInputListener::notifySensor(const NotifySensorArgs* args) {
traceEvent(__func__, args->id);
- mArgsQueue.emplace_back(std::make_unique<NotifySensorArgs>(*args));
+ mArgsQueue.emplace_back(*args);
}
void QueuedInputListener::notifyVibratorState(const NotifyVibratorStateArgs* args) {
traceEvent(__func__, args->id);
- mArgsQueue.emplace_back(std::make_unique<NotifyVibratorStateArgs>(*args));
+ mArgsQueue.emplace_back(*args);
}
void QueuedInputListener::notifyDeviceReset(const NotifyDeviceResetArgs* args) {
traceEvent(__func__, args->id);
- mArgsQueue.emplace_back(std::make_unique<NotifyDeviceResetArgs>(*args));
+ mArgsQueue.emplace_back(*args);
}
void QueuedInputListener::notifyPointerCaptureChanged(const NotifyPointerCaptureChangedArgs* args) {
traceEvent(__func__, args->id);
- mArgsQueue.emplace_back(std::make_unique<NotifyPointerCaptureChangedArgs>(*args));
+ mArgsQueue.emplace_back(*args);
}
void QueuedInputListener::flush() {
- for (const std::unique_ptr<NotifyArgs>& args : mArgsQueue) {
- args->notify(mInnerListener);
+ for (const NotifyArgs& args : mArgsQueue) {
+ mInnerListener.notify(args);
}
mArgsQueue.clear();
}
diff --git a/services/inputflinger/InputProcessor.cpp b/services/inputflinger/InputProcessor.cpp
index 126cb33b8d..02d62bffb2 100644
--- a/services/inputflinger/InputProcessor.cpp
+++ b/services/inputflinger/InputProcessor.cpp
@@ -124,40 +124,38 @@ ScopedDeathRecipient::~ScopedDeathRecipient() {
// --- ClassifierEvent ---
-ClassifierEvent::ClassifierEvent(std::unique_ptr<NotifyMotionArgs> args)
- : type(ClassifierEventType::MOTION), args(std::move(args)){};
-ClassifierEvent::ClassifierEvent(std::unique_ptr<NotifyDeviceResetArgs> args)
- : type(ClassifierEventType::DEVICE_RESET), args(std::move(args)){};
-ClassifierEvent::ClassifierEvent(ClassifierEventType type, std::unique_ptr<NotifyArgs> args)
- : type(type), args(std::move(args)){};
+ClassifierEvent::ClassifierEvent(const NotifyMotionArgs& args)
+ : type(ClassifierEventType::MOTION), args(args){};
-ClassifierEvent::ClassifierEvent(ClassifierEvent&& other)
- : type(other.type), args(std::move(other.args)){};
+ClassifierEvent::ClassifierEvent(const NotifyDeviceResetArgs& args)
+ : type(ClassifierEventType::DEVICE_RESET), args(args){};
+
+ClassifierEvent::ClassifierEvent(ClassifierEventType type, std::optional<NotifyArgs> args)
+ : type(type), args(args){};
ClassifierEvent& ClassifierEvent::operator=(ClassifierEvent&& other) {
type = other.type;
- args = std::move(other.args);
+ args = other.args;
return *this;
}
ClassifierEvent ClassifierEvent::createHalResetEvent() {
- return ClassifierEvent(ClassifierEventType::HAL_RESET, nullptr);
+ return ClassifierEvent(ClassifierEventType::HAL_RESET, std::nullopt);
}
ClassifierEvent ClassifierEvent::createExitEvent() {
- return ClassifierEvent(ClassifierEventType::EXIT, nullptr);
+ return ClassifierEvent(ClassifierEventType::EXIT, std::nullopt);
}
std::optional<int32_t> ClassifierEvent::getDeviceId() const {
switch (type) {
case ClassifierEventType::MOTION: {
- NotifyMotionArgs* motionArgs = static_cast<NotifyMotionArgs*>(args.get());
- return motionArgs->deviceId;
+ const NotifyMotionArgs& motionArgs = std::get<NotifyMotionArgs>(*args);
+ return motionArgs.deviceId;
}
case ClassifierEventType::DEVICE_RESET: {
- NotifyDeviceResetArgs* deviceResetArgs =
- static_cast<NotifyDeviceResetArgs*>(args.get());
- return deviceResetArgs->deviceId;
+ const NotifyDeviceResetArgs& deviceResetArgs = std::get<NotifyDeviceResetArgs>(*args);
+ return deviceResetArgs.deviceId;
}
case ClassifierEventType::HAL_RESET: {
return std::nullopt;
@@ -213,12 +211,12 @@ void MotionClassifier::processEvents() {
bool halResponseOk = true;
switch (event.type) {
case ClassifierEventType::MOTION: {
- NotifyMotionArgs* motionArgs = static_cast<NotifyMotionArgs*>(event.args.get());
- common::MotionEvent motionEvent = notifyMotionArgsToHalMotionEvent(*motionArgs);
+ NotifyMotionArgs& motionArgs = std::get<NotifyMotionArgs>(*event.args);
+ common::MotionEvent motionEvent = notifyMotionArgsToHalMotionEvent(motionArgs);
common::Classification classification;
ndk::ScopedAStatus response = mService->classify(motionEvent, &classification);
if (response.isOk()) {
- updateClassification(motionArgs->deviceId, motionArgs->eventTime,
+ updateClassification(motionArgs.deviceId, motionArgs.eventTime,
getMotionClassification(classification));
}
break;
@@ -308,8 +306,7 @@ MotionClassification MotionClassifier::classify(const NotifyMotionArgs& args) {
updateLastDownTime(args.deviceId, args.downTime);
}
- ClassifierEvent event(std::make_unique<NotifyMotionArgs>(args));
- enqueueEvent(std::move(event));
+ enqueueEvent(args);
return getClassification(args.deviceId);
}
@@ -329,7 +326,7 @@ void MotionClassifier::reset(const NotifyDeviceResetArgs& args) {
std::optional<int32_t> eventDeviceId = event.getDeviceId();
return eventDeviceId && (*eventDeviceId == deviceId);
});
- enqueueEvent(std::make_unique<NotifyDeviceResetArgs>(args));
+ enqueueEvent(args);
}
void MotionClassifier::dump(std::string& dump) {
diff --git a/services/inputflinger/InputProcessor.h b/services/inputflinger/InputProcessor.h
index bbf391e069..f4d02b6f30 100644
--- a/services/inputflinger/InputProcessor.h
+++ b/services/inputflinger/InputProcessor.h
@@ -35,12 +35,12 @@ enum class ClassifierEventType : uint8_t {
struct ClassifierEvent {
ClassifierEventType type;
- std::unique_ptr<NotifyArgs> args;
+ std::optional<NotifyArgs> args;
- ClassifierEvent(ClassifierEventType type, std::unique_ptr<NotifyArgs> args);
- ClassifierEvent(std::unique_ptr<NotifyMotionArgs> args);
- ClassifierEvent(std::unique_ptr<NotifyDeviceResetArgs> args);
- ClassifierEvent(ClassifierEvent&& other);
+ ClassifierEvent(ClassifierEventType type, std::optional<NotifyArgs> args);
+ ClassifierEvent(const NotifyMotionArgs& args);
+ ClassifierEvent(const NotifyDeviceResetArgs& args);
+ ClassifierEvent(ClassifierEvent&& other) = default;
ClassifierEvent& operator=(ClassifierEvent&& other);
// Convenience function to create a HAL_RESET event
diff --git a/services/inputflinger/include/InputListener.h b/services/inputflinger/include/InputListener.h
index c8ab6c5011..036d57e1bb 100644
--- a/services/inputflinger/include/InputListener.h
+++ b/services/inputflinger/include/InputListener.h
@@ -26,41 +26,25 @@ namespace android {
class InputListenerInterface;
-
-/* Superclass of all input event argument objects */
-struct NotifyArgs {
+/* Describes a configuration change event. */
+struct NotifyConfigurationChangedArgs {
int32_t id;
nsecs_t eventTime;
- inline NotifyArgs() : id(0), eventTime(0) {}
-
- inline explicit NotifyArgs(int32_t id, nsecs_t eventTime) : id(id), eventTime(eventTime) {}
-
- virtual ~NotifyArgs() { }
-
- virtual void notify(InputListenerInterface& listener) const = 0;
-};
-
-
-/* Describes a configuration change event. */
-struct NotifyConfigurationChangedArgs : public NotifyArgs {
-
inline NotifyConfigurationChangedArgs() { }
- bool operator==(const NotifyConfigurationChangedArgs& rhs) const;
-
NotifyConfigurationChangedArgs(int32_t id, nsecs_t eventTime);
- NotifyConfigurationChangedArgs(const NotifyConfigurationChangedArgs& other);
+ bool operator==(const NotifyConfigurationChangedArgs& rhs) const = default;
- virtual ~NotifyConfigurationChangedArgs() { }
-
- void notify(InputListenerInterface& listener) const override;
+ NotifyConfigurationChangedArgs(const NotifyConfigurationChangedArgs& other) = default;
};
-
/* Describes a key event. */
-struct NotifyKeyArgs : public NotifyArgs {
+struct NotifyKeyArgs {
+ int32_t id;
+ nsecs_t eventTime;
+
int32_t deviceId;
uint32_t source;
int32_t displayId;
@@ -80,18 +64,16 @@ struct NotifyKeyArgs : public NotifyArgs {
int32_t flags, int32_t keyCode, int32_t scanCode, int32_t metaState,
nsecs_t downTime);
- bool operator==(const NotifyKeyArgs& rhs) const;
-
- NotifyKeyArgs(const NotifyKeyArgs& other);
-
- virtual ~NotifyKeyArgs() { }
+ bool operator==(const NotifyKeyArgs& rhs) const = default;
- void notify(InputListenerInterface& listener) const override;
+ NotifyKeyArgs(const NotifyKeyArgs& other) = default;
};
-
/* Describes a motion event. */
-struct NotifyMotionArgs : public NotifyArgs {
+struct NotifyMotionArgs {
+ int32_t id;
+ nsecs_t eventTime;
+
int32_t deviceId;
uint32_t source;
int32_t displayId;
@@ -136,17 +118,16 @@ struct NotifyMotionArgs : public NotifyArgs {
NotifyMotionArgs(const NotifyMotionArgs& other);
- virtual ~NotifyMotionArgs() { }
-
bool operator==(const NotifyMotionArgs& rhs) const;
- void notify(InputListenerInterface& listener) const override;
-
std::string dump() const;
};
/* Describes a sensor event. */
-struct NotifySensorArgs : public NotifyArgs {
+struct NotifySensorArgs {
+ int32_t id;
+ nsecs_t eventTime;
+
int32_t deviceId;
uint32_t source;
InputDeviceSensorType sensorType;
@@ -161,17 +142,14 @@ struct NotifySensorArgs : public NotifyArgs {
InputDeviceSensorType sensorType, InputDeviceSensorAccuracy accuracy,
bool accuracyChanged, nsecs_t hwTimestamp, std::vector<float> values);
- NotifySensorArgs(const NotifySensorArgs& other);
-
- bool operator==(const NotifySensorArgs rhs) const;
-
- ~NotifySensorArgs() override {}
-
- void notify(InputListenerInterface& listener) const override;
+ NotifySensorArgs(const NotifySensorArgs& other) = default;
};
/* Describes a switch event. */
-struct NotifySwitchArgs : public NotifyArgs {
+struct NotifySwitchArgs {
+ int32_t id;
+ nsecs_t eventTime;
+
uint32_t policyFlags;
uint32_t switchValues;
uint32_t switchMask;
@@ -181,54 +159,48 @@ struct NotifySwitchArgs : public NotifyArgs {
NotifySwitchArgs(int32_t id, nsecs_t eventTime, uint32_t policyFlags, uint32_t switchValues,
uint32_t switchMask);
- NotifySwitchArgs(const NotifySwitchArgs& other);
-
- bool operator==(const NotifySwitchArgs rhs) const;
-
- virtual ~NotifySwitchArgs() { }
+ NotifySwitchArgs(const NotifySwitchArgs& other) = default;
- void notify(InputListenerInterface& listener) const override;
+ bool operator==(const NotifySwitchArgs& rhs) const = default;
};
-
/* Describes a device reset event, such as when a device is added,
* reconfigured, or removed. */
-struct NotifyDeviceResetArgs : public NotifyArgs {
+struct NotifyDeviceResetArgs {
+ int32_t id;
+ nsecs_t eventTime;
+
int32_t deviceId;
inline NotifyDeviceResetArgs() { }
NotifyDeviceResetArgs(int32_t id, nsecs_t eventTime, int32_t deviceId);
- NotifyDeviceResetArgs(const NotifyDeviceResetArgs& other);
+ NotifyDeviceResetArgs(const NotifyDeviceResetArgs& other) = default;
- bool operator==(const NotifyDeviceResetArgs& rhs) const;
-
- virtual ~NotifyDeviceResetArgs() { }
-
- void notify(InputListenerInterface& listener) const override;
+ bool operator==(const NotifyDeviceResetArgs& rhs) const = default;
};
/* Describes a change in the state of Pointer Capture. */
-struct NotifyPointerCaptureChangedArgs : public NotifyArgs {
+struct NotifyPointerCaptureChangedArgs {
// The sequence number of the Pointer Capture request, if enabled.
+ int32_t id;
+ nsecs_t eventTime;
+
PointerCaptureRequest request;
inline NotifyPointerCaptureChangedArgs() {}
NotifyPointerCaptureChangedArgs(int32_t id, nsecs_t eventTime, const PointerCaptureRequest&);
- NotifyPointerCaptureChangedArgs(const NotifyPointerCaptureChangedArgs& other);
-
- bool operator==(const NotifyPointerCaptureChangedArgs& rhs) const;
-
- virtual ~NotifyPointerCaptureChangedArgs() {}
-
- void notify(InputListenerInterface& listener) const override;
+ NotifyPointerCaptureChangedArgs(const NotifyPointerCaptureChangedArgs& other) = default;
};
/* Describes a vibrator state event. */
-struct NotifyVibratorStateArgs : public NotifyArgs {
+struct NotifyVibratorStateArgs {
+ int32_t id;
+ nsecs_t eventTime;
+
int32_t deviceId;
bool isOn;
@@ -237,14 +209,12 @@ struct NotifyVibratorStateArgs : public NotifyArgs {
NotifyVibratorStateArgs(int32_t id, nsecs_t eventTIme, int32_t deviceId, bool isOn);
NotifyVibratorStateArgs(const NotifyVibratorStateArgs& other);
-
- bool operator==(const NotifyVibratorStateArgs rhs) const;
-
- virtual ~NotifyVibratorStateArgs() {}
-
- void notify(InputListenerInterface& listener) const override;
};
+using NotifyArgs = std::variant<NotifyConfigurationChangedArgs, NotifyKeyArgs, NotifyMotionArgs,
+ NotifySensorArgs, NotifySwitchArgs, NotifyDeviceResetArgs,
+ NotifyPointerCaptureChangedArgs, NotifyVibratorStateArgs>;
+
/*
* The interface used by the InputReader to notify the InputListener about input events.
*/
@@ -263,6 +233,8 @@ public:
virtual void notifyVibratorState(const NotifyVibratorStateArgs* args) = 0;
virtual void notifyDeviceReset(const NotifyDeviceResetArgs* args) = 0;
virtual void notifyPointerCaptureChanged(const NotifyPointerCaptureChangedArgs* args) = 0;
+
+ void notify(const NotifyArgs& args);
};
/*
@@ -287,7 +259,7 @@ public:
private:
InputListenerInterface& mInnerListener;
- std::vector<std::unique_ptr<NotifyArgs>> mArgsQueue;
+ std::vector<NotifyArgs> mArgsQueue;
};
} // namespace android