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