1be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown/*
2be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown * Copyright (C) 2011 The Android Open Source Project
3be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown *
4be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown * Licensed under the Apache License, Version 2.0 (the "License");
5be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown * you may not use this file except in compliance with the License.
6be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown * You may obtain a copy of the License at
7be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown *
8be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown *      http://www.apache.org/licenses/LICENSE-2.0
9be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown *
10be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown * Unless required by applicable law or agreed to in writing, software
11be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown * distributed under the License is distributed on an "AS IS" BASIS,
12be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown * See the License for the specific language governing permissions and
14be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown * limitations under the License.
15be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown */
16be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
17be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown#define LOG_TAG "InputListener"
18be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
19be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown//#define LOG_NDEBUG 0
20be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
21be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown#include "InputListener.h"
22be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
23be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown#include <cutils/log.h>
24be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
25be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownnamespace android {
26be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
27be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown// --- NotifyConfigurationChangedArgs ---
28be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
29be1aa8250cee7819c49741e819e81659d1d03823Jeff BrownNotifyConfigurationChangedArgs::NotifyConfigurationChangedArgs(nsecs_t eventTime) :
30be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        eventTime(eventTime) {
31be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown}
32be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
33be1aa8250cee7819c49741e819e81659d1d03823Jeff BrownNotifyConfigurationChangedArgs::NotifyConfigurationChangedArgs(
34be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        const NotifyConfigurationChangedArgs& other) :
35be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        eventTime(other.eventTime) {
36be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown}
37be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
38be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownvoid NotifyConfigurationChangedArgs::notify(const sp<InputListenerInterface>& listener) const {
39be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    listener->notifyConfigurationChanged(this);
40be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown}
41be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
42be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
43be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown// --- NotifyKeyArgs ---
44be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
45be1aa8250cee7819c49741e819e81659d1d03823Jeff BrownNotifyKeyArgs::NotifyKeyArgs(nsecs_t eventTime, int32_t deviceId, uint32_t source,
46be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        uint32_t policyFlags,
47be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        int32_t action, int32_t flags, int32_t keyCode, int32_t scanCode,
48be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        int32_t metaState, nsecs_t downTime) :
49be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        eventTime(eventTime), deviceId(deviceId), source(source), policyFlags(policyFlags),
50be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        action(action), flags(flags), keyCode(keyCode), scanCode(scanCode),
51be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        metaState(metaState), downTime(downTime) {
52be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown}
53be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
54be1aa8250cee7819c49741e819e81659d1d03823Jeff BrownNotifyKeyArgs::NotifyKeyArgs(const NotifyKeyArgs& other) :
55be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        eventTime(other.eventTime), deviceId(other.deviceId), source(other.source),
56be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        policyFlags(other.policyFlags),
57be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        action(other.action), flags(other.flags),
58be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        keyCode(other.keyCode), scanCode(other.scanCode),
59be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        metaState(other.metaState), downTime(other.downTime) {
60be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown}
61be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
62be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownvoid NotifyKeyArgs::notify(const sp<InputListenerInterface>& listener) const {
63be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    listener->notifyKey(this);
64be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown}
65be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
66be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
67be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown// --- NotifyMotionArgs ---
68be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
69be1aa8250cee7819c49741e819e81659d1d03823Jeff BrownNotifyMotionArgs::NotifyMotionArgs(nsecs_t eventTime, int32_t deviceId, uint32_t source,
70be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        uint32_t policyFlags,
71be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        int32_t action, int32_t flags, int32_t metaState, int32_t buttonState,
7283d616a9c7b9505153d258511eb5c16b552e268dJeff Brown        int32_t edgeFlags, int32_t displayId, uint32_t pointerCount,
73be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        const PointerProperties* pointerProperties, const PointerCoords* pointerCoords,
74be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        float xPrecision, float yPrecision, nsecs_t downTime) :
75be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        eventTime(eventTime), deviceId(deviceId), source(source), policyFlags(policyFlags),
76be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        action(action), flags(flags), metaState(metaState), buttonState(buttonState),
7783d616a9c7b9505153d258511eb5c16b552e268dJeff Brown        edgeFlags(edgeFlags), displayId(displayId), pointerCount(pointerCount),
78be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        xPrecision(xPrecision), yPrecision(yPrecision), downTime(downTime) {
79be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    for (uint32_t i = 0; i < pointerCount; i++) {
80be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        this->pointerProperties[i].copyFrom(pointerProperties[i]);
81be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        this->pointerCoords[i].copyFrom(pointerCoords[i]);
82be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    }
83be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown}
84be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
85be1aa8250cee7819c49741e819e81659d1d03823Jeff BrownNotifyMotionArgs::NotifyMotionArgs(const NotifyMotionArgs& other) :
86be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        eventTime(other.eventTime), deviceId(other.deviceId), source(other.source),
87be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        policyFlags(other.policyFlags),
88be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        action(other.action), flags(other.flags),
89be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        metaState(other.metaState), buttonState(other.buttonState),
9083d616a9c7b9505153d258511eb5c16b552e268dJeff Brown        edgeFlags(other.edgeFlags), displayId(other.displayId),
9183d616a9c7b9505153d258511eb5c16b552e268dJeff Brown        pointerCount(other.pointerCount),
92be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        xPrecision(other.xPrecision), yPrecision(other.yPrecision), downTime(other.downTime) {
93be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    for (uint32_t i = 0; i < pointerCount; i++) {
94be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        pointerProperties[i].copyFrom(other.pointerProperties[i]);
95be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        pointerCoords[i].copyFrom(other.pointerCoords[i]);
96be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    }
97be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown}
98be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
99be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownvoid NotifyMotionArgs::notify(const sp<InputListenerInterface>& listener) const {
100be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    listener->notifyMotion(this);
101be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown}
102be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
103be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
104be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown// --- NotifySwitchArgs ---
105be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
106be1aa8250cee7819c49741e819e81659d1d03823Jeff BrownNotifySwitchArgs::NotifySwitchArgs(nsecs_t eventTime, uint32_t policyFlags,
107bcc046af4ef171aa3aa3c6b64efb5cafc1e46cd3Jeff Brown        uint32_t switchValues, uint32_t switchMask) :
108be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        eventTime(eventTime), policyFlags(policyFlags),
109bcc046af4ef171aa3aa3c6b64efb5cafc1e46cd3Jeff Brown        switchValues(switchValues), switchMask(switchMask) {
110be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown}
111be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
112be1aa8250cee7819c49741e819e81659d1d03823Jeff BrownNotifySwitchArgs::NotifySwitchArgs(const NotifySwitchArgs& other) :
113be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        eventTime(other.eventTime), policyFlags(other.policyFlags),
114bcc046af4ef171aa3aa3c6b64efb5cafc1e46cd3Jeff Brown        switchValues(other.switchValues), switchMask(other.switchMask) {
115be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown}
116be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
117be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownvoid NotifySwitchArgs::notify(const sp<InputListenerInterface>& listener) const {
118be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    listener->notifySwitch(this);
119be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown}
120be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
121be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
12265fd251c3913fc921468a3dad190810db19eb9dfJeff Brown// --- NotifyDeviceResetArgs ---
12365fd251c3913fc921468a3dad190810db19eb9dfJeff Brown
12465fd251c3913fc921468a3dad190810db19eb9dfJeff BrownNotifyDeviceResetArgs::NotifyDeviceResetArgs(nsecs_t eventTime, int32_t deviceId) :
12565fd251c3913fc921468a3dad190810db19eb9dfJeff Brown        eventTime(eventTime), deviceId(deviceId) {
12665fd251c3913fc921468a3dad190810db19eb9dfJeff Brown}
12765fd251c3913fc921468a3dad190810db19eb9dfJeff Brown
12865fd251c3913fc921468a3dad190810db19eb9dfJeff BrownNotifyDeviceResetArgs::NotifyDeviceResetArgs(const NotifyDeviceResetArgs& other) :
12965fd251c3913fc921468a3dad190810db19eb9dfJeff Brown        eventTime(other.eventTime), deviceId(other.deviceId) {
13065fd251c3913fc921468a3dad190810db19eb9dfJeff Brown}
13165fd251c3913fc921468a3dad190810db19eb9dfJeff Brown
13265fd251c3913fc921468a3dad190810db19eb9dfJeff Brownvoid NotifyDeviceResetArgs::notify(const sp<InputListenerInterface>& listener) const {
13365fd251c3913fc921468a3dad190810db19eb9dfJeff Brown    listener->notifyDeviceReset(this);
13465fd251c3913fc921468a3dad190810db19eb9dfJeff Brown}
13565fd251c3913fc921468a3dad190810db19eb9dfJeff Brown
13665fd251c3913fc921468a3dad190810db19eb9dfJeff Brown
137be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown// --- QueuedInputListener ---
138be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
139be1aa8250cee7819c49741e819e81659d1d03823Jeff BrownQueuedInputListener::QueuedInputListener(const sp<InputListenerInterface>& innerListener) :
140be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        mInnerListener(innerListener) {
141be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown}
142be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
143be1aa8250cee7819c49741e819e81659d1d03823Jeff BrownQueuedInputListener::~QueuedInputListener() {
144be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    size_t count = mArgsQueue.size();
145be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    for (size_t i = 0; i < count; i++) {
146be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        delete mArgsQueue[i];
147be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    }
148be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown}
149be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
150be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownvoid QueuedInputListener::notifyConfigurationChanged(
151be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        const NotifyConfigurationChangedArgs* args) {
152be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    mArgsQueue.push(new NotifyConfigurationChangedArgs(*args));
153be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown}
154be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
155be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownvoid QueuedInputListener::notifyKey(const NotifyKeyArgs* args) {
156be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    mArgsQueue.push(new NotifyKeyArgs(*args));
157be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown}
158be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
159be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownvoid QueuedInputListener::notifyMotion(const NotifyMotionArgs* args) {
160be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    mArgsQueue.push(new NotifyMotionArgs(*args));
161be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown}
162be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
163be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownvoid QueuedInputListener::notifySwitch(const NotifySwitchArgs* args) {
164be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    mArgsQueue.push(new NotifySwitchArgs(*args));
165be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown}
166be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
16765fd251c3913fc921468a3dad190810db19eb9dfJeff Brownvoid QueuedInputListener::notifyDeviceReset(const NotifyDeviceResetArgs* args) {
16865fd251c3913fc921468a3dad190810db19eb9dfJeff Brown    mArgsQueue.push(new NotifyDeviceResetArgs(*args));
16965fd251c3913fc921468a3dad190810db19eb9dfJeff Brown}
17065fd251c3913fc921468a3dad190810db19eb9dfJeff Brown
171be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownvoid QueuedInputListener::flush() {
172be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    size_t count = mArgsQueue.size();
173be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    for (size_t i = 0; i < count; i++) {
174be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        NotifyArgs* args = mArgsQueue[i];
175be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        args->notify(mInnerListener);
176be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown        delete args;
177be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    }
178be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    mArgsQueue.clear();
179be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown}
180be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
181be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
182be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown} // namespace android
183