• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2009 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 "input"
18 #include <utils/Log.h>
19 
20 #include <android/input.h>
21 #include <androidfw/Input.h>
22 #include <androidfw/InputTransport.h>
23 #include <utils/Looper.h>
24 #include <utils/RefBase.h>
25 #include <utils/Vector.h>
26 
27 #include <android_runtime/android_app_NativeActivity.h>
28 
29 #include <poll.h>
30 #include <errno.h>
31 
32 using android::InputEvent;
33 using android::KeyEvent;
34 using android::MotionEvent;
35 using android::sp;
36 using android::Vector;
37 
AInputEvent_getType(const AInputEvent * event)38 int32_t AInputEvent_getType(const AInputEvent* event) {
39     return static_cast<const InputEvent*>(event)->getType();
40 }
41 
AInputEvent_getDeviceId(const AInputEvent * event)42 int32_t AInputEvent_getDeviceId(const AInputEvent* event) {
43     return static_cast<const InputEvent*>(event)->getDeviceId();
44 }
45 
AInputEvent_getSource(const AInputEvent * event)46 int32_t AInputEvent_getSource(const AInputEvent* event) {
47     return static_cast<const InputEvent*>(event)->getSource();
48 }
49 
AKeyEvent_getAction(const AInputEvent * key_event)50 int32_t AKeyEvent_getAction(const AInputEvent* key_event) {
51     return static_cast<const KeyEvent*>(key_event)->getAction();
52 }
53 
AKeyEvent_getFlags(const AInputEvent * key_event)54 int32_t AKeyEvent_getFlags(const AInputEvent* key_event) {
55     return static_cast<const KeyEvent*>(key_event)->getFlags();
56 }
57 
AKeyEvent_getKeyCode(const AInputEvent * key_event)58 int32_t AKeyEvent_getKeyCode(const AInputEvent* key_event) {
59     return static_cast<const KeyEvent*>(key_event)->getKeyCode();
60 }
61 
AKeyEvent_getScanCode(const AInputEvent * key_event)62 int32_t AKeyEvent_getScanCode(const AInputEvent* key_event) {
63     return static_cast<const KeyEvent*>(key_event)->getScanCode();
64 }
65 
AKeyEvent_getMetaState(const AInputEvent * key_event)66 int32_t AKeyEvent_getMetaState(const AInputEvent* key_event) {
67     return static_cast<const KeyEvent*>(key_event)->getMetaState();
68 }
AKeyEvent_getRepeatCount(const AInputEvent * key_event)69 int32_t AKeyEvent_getRepeatCount(const AInputEvent* key_event) {
70     return static_cast<const KeyEvent*>(key_event)->getRepeatCount();
71 }
72 
AKeyEvent_getDownTime(const AInputEvent * key_event)73 int64_t AKeyEvent_getDownTime(const AInputEvent* key_event) {
74     return static_cast<const KeyEvent*>(key_event)->getDownTime();
75 }
76 
77 
AKeyEvent_getEventTime(const AInputEvent * key_event)78 int64_t AKeyEvent_getEventTime(const AInputEvent* key_event) {
79     return static_cast<const KeyEvent*>(key_event)->getEventTime();
80 }
81 
AMotionEvent_getAction(const AInputEvent * motion_event)82 int32_t AMotionEvent_getAction(const AInputEvent* motion_event) {
83     return static_cast<const MotionEvent*>(motion_event)->getAction();
84 }
85 
AMotionEvent_getFlags(const AInputEvent * motion_event)86 int32_t AMotionEvent_getFlags(const AInputEvent* motion_event) {
87     return static_cast<const MotionEvent*>(motion_event)->getFlags();
88 }
89 
AMotionEvent_getMetaState(const AInputEvent * motion_event)90 int32_t AMotionEvent_getMetaState(const AInputEvent* motion_event) {
91     return static_cast<const MotionEvent*>(motion_event)->getMetaState();
92 }
93 
AMotionEvent_getButtonState(const AInputEvent * motion_event)94 int32_t AMotionEvent_getButtonState(const AInputEvent* motion_event) {
95     return static_cast<const MotionEvent*>(motion_event)->getButtonState();
96 }
97 
AMotionEvent_getEdgeFlags(const AInputEvent * motion_event)98 int32_t AMotionEvent_getEdgeFlags(const AInputEvent* motion_event) {
99     return reinterpret_cast<const MotionEvent*>(motion_event)->getEdgeFlags();
100 }
101 
AMotionEvent_getDownTime(const AInputEvent * motion_event)102 int64_t AMotionEvent_getDownTime(const AInputEvent* motion_event) {
103     return static_cast<const MotionEvent*>(motion_event)->getDownTime();
104 }
105 
AMotionEvent_getEventTime(const AInputEvent * motion_event)106 int64_t AMotionEvent_getEventTime(const AInputEvent* motion_event) {
107     return static_cast<const MotionEvent*>(motion_event)->getEventTime();
108 }
109 
AMotionEvent_getXOffset(const AInputEvent * motion_event)110 float AMotionEvent_getXOffset(const AInputEvent* motion_event) {
111     return static_cast<const MotionEvent*>(motion_event)->getXOffset();
112 }
113 
AMotionEvent_getYOffset(const AInputEvent * motion_event)114 float AMotionEvent_getYOffset(const AInputEvent* motion_event) {
115     return static_cast<const MotionEvent*>(motion_event)->getYOffset();
116 }
117 
AMotionEvent_getXPrecision(const AInputEvent * motion_event)118 float AMotionEvent_getXPrecision(const AInputEvent* motion_event) {
119     return static_cast<const MotionEvent*>(motion_event)->getXPrecision();
120 }
121 
AMotionEvent_getYPrecision(const AInputEvent * motion_event)122 float AMotionEvent_getYPrecision(const AInputEvent* motion_event) {
123     return static_cast<const MotionEvent*>(motion_event)->getYPrecision();
124 }
125 
AMotionEvent_getPointerCount(const AInputEvent * motion_event)126 size_t AMotionEvent_getPointerCount(const AInputEvent* motion_event) {
127     return static_cast<const MotionEvent*>(motion_event)->getPointerCount();
128 }
129 
AMotionEvent_getPointerId(const AInputEvent * motion_event,size_t pointer_index)130 int32_t AMotionEvent_getPointerId(const AInputEvent* motion_event, size_t pointer_index) {
131     return static_cast<const MotionEvent*>(motion_event)->getPointerId(pointer_index);
132 }
133 
AMotionEvent_getToolType(const AInputEvent * motion_event,size_t pointer_index)134 int32_t AMotionEvent_getToolType(const AInputEvent* motion_event, size_t pointer_index) {
135     return static_cast<const MotionEvent*>(motion_event)->getToolType(pointer_index);
136 }
137 
AMotionEvent_getRawX(const AInputEvent * motion_event,size_t pointer_index)138 float AMotionEvent_getRawX(const AInputEvent* motion_event, size_t pointer_index) {
139     return static_cast<const MotionEvent*>(motion_event)->getRawX(pointer_index);
140 }
141 
AMotionEvent_getRawY(const AInputEvent * motion_event,size_t pointer_index)142 float AMotionEvent_getRawY(const AInputEvent* motion_event, size_t pointer_index) {
143     return static_cast<const MotionEvent*>(motion_event)->getRawY(pointer_index);
144 }
145 
AMotionEvent_getX(const AInputEvent * motion_event,size_t pointer_index)146 float AMotionEvent_getX(const AInputEvent* motion_event, size_t pointer_index) {
147     return static_cast<const MotionEvent*>(motion_event)->getX(pointer_index);
148 }
149 
AMotionEvent_getY(const AInputEvent * motion_event,size_t pointer_index)150 float AMotionEvent_getY(const AInputEvent* motion_event, size_t pointer_index) {
151     return static_cast<const MotionEvent*>(motion_event)->getY(pointer_index);
152 }
153 
AMotionEvent_getPressure(const AInputEvent * motion_event,size_t pointer_index)154 float AMotionEvent_getPressure(const AInputEvent* motion_event, size_t pointer_index) {
155     return static_cast<const MotionEvent*>(motion_event)->getPressure(pointer_index);
156 }
157 
AMotionEvent_getSize(const AInputEvent * motion_event,size_t pointer_index)158 float AMotionEvent_getSize(const AInputEvent* motion_event, size_t pointer_index) {
159     return static_cast<const MotionEvent*>(motion_event)->getSize(pointer_index);
160 }
161 
AMotionEvent_getTouchMajor(const AInputEvent * motion_event,size_t pointer_index)162 float AMotionEvent_getTouchMajor(const AInputEvent* motion_event, size_t pointer_index) {
163     return static_cast<const MotionEvent*>(motion_event)->getTouchMajor(pointer_index);
164 }
165 
AMotionEvent_getTouchMinor(const AInputEvent * motion_event,size_t pointer_index)166 float AMotionEvent_getTouchMinor(const AInputEvent* motion_event, size_t pointer_index) {
167     return static_cast<const MotionEvent*>(motion_event)->getTouchMinor(pointer_index);
168 }
169 
AMotionEvent_getToolMajor(const AInputEvent * motion_event,size_t pointer_index)170 float AMotionEvent_getToolMajor(const AInputEvent* motion_event, size_t pointer_index) {
171     return static_cast<const MotionEvent*>(motion_event)->getToolMajor(pointer_index);
172 }
173 
AMotionEvent_getToolMinor(const AInputEvent * motion_event,size_t pointer_index)174 float AMotionEvent_getToolMinor(const AInputEvent* motion_event, size_t pointer_index) {
175     return static_cast<const MotionEvent*>(motion_event)->getToolMinor(pointer_index);
176 }
177 
AMotionEvent_getOrientation(const AInputEvent * motion_event,size_t pointer_index)178 float AMotionEvent_getOrientation(const AInputEvent* motion_event, size_t pointer_index) {
179     return static_cast<const MotionEvent*>(motion_event)->getOrientation(pointer_index);
180 }
181 
AMotionEvent_getAxisValue(const AInputEvent * motion_event,int32_t axis,size_t pointer_index)182 float AMotionEvent_getAxisValue(const AInputEvent* motion_event,
183         int32_t axis, size_t pointer_index) {
184     return static_cast<const MotionEvent*>(motion_event)->getAxisValue(axis, pointer_index);
185 }
186 
AMotionEvent_getHistorySize(const AInputEvent * motion_event)187 size_t AMotionEvent_getHistorySize(const AInputEvent* motion_event) {
188     return static_cast<const MotionEvent*>(motion_event)->getHistorySize();
189 }
190 
AMotionEvent_getHistoricalEventTime(AInputEvent * motion_event,size_t history_index)191 int64_t AMotionEvent_getHistoricalEventTime(AInputEvent* motion_event,
192         size_t history_index) {
193     return static_cast<const MotionEvent*>(motion_event)->getHistoricalEventTime(
194             history_index);
195 }
196 
AMotionEvent_getHistoricalRawX(AInputEvent * motion_event,size_t pointer_index,size_t history_index)197 float AMotionEvent_getHistoricalRawX(AInputEvent* motion_event, size_t pointer_index,
198         size_t history_index) {
199     return static_cast<const MotionEvent*>(motion_event)->getHistoricalRawX(
200             pointer_index, history_index);
201 }
202 
AMotionEvent_getHistoricalRawY(AInputEvent * motion_event,size_t pointer_index,size_t history_index)203 float AMotionEvent_getHistoricalRawY(AInputEvent* motion_event, size_t pointer_index,
204         size_t history_index) {
205     return static_cast<const MotionEvent*>(motion_event)->getHistoricalRawY(
206             pointer_index, history_index);
207 }
208 
AMotionEvent_getHistoricalX(AInputEvent * motion_event,size_t pointer_index,size_t history_index)209 float AMotionEvent_getHistoricalX(AInputEvent* motion_event, size_t pointer_index,
210         size_t history_index) {
211     return static_cast<const MotionEvent*>(motion_event)->getHistoricalX(
212             pointer_index, history_index);
213 }
214 
AMotionEvent_getHistoricalY(AInputEvent * motion_event,size_t pointer_index,size_t history_index)215 float AMotionEvent_getHistoricalY(AInputEvent* motion_event, size_t pointer_index,
216         size_t history_index) {
217     return static_cast<const MotionEvent*>(motion_event)->getHistoricalY(
218             pointer_index, history_index);
219 }
220 
AMotionEvent_getHistoricalPressure(AInputEvent * motion_event,size_t pointer_index,size_t history_index)221 float AMotionEvent_getHistoricalPressure(AInputEvent* motion_event, size_t pointer_index,
222         size_t history_index) {
223     return static_cast<const MotionEvent*>(motion_event)->getHistoricalPressure(
224             pointer_index, history_index);
225 }
226 
AMotionEvent_getHistoricalSize(AInputEvent * motion_event,size_t pointer_index,size_t history_index)227 float AMotionEvent_getHistoricalSize(AInputEvent* motion_event, size_t pointer_index,
228         size_t history_index) {
229     return static_cast<const MotionEvent*>(motion_event)->getHistoricalSize(
230             pointer_index, history_index);
231 }
232 
AMotionEvent_getHistoricalTouchMajor(AInputEvent * motion_event,size_t pointer_index,size_t history_index)233 float AMotionEvent_getHistoricalTouchMajor(AInputEvent* motion_event, size_t pointer_index,
234         size_t history_index) {
235     return static_cast<const MotionEvent*>(motion_event)->getHistoricalTouchMajor(
236             pointer_index, history_index);
237 }
238 
AMotionEvent_getHistoricalTouchMinor(AInputEvent * motion_event,size_t pointer_index,size_t history_index)239 float AMotionEvent_getHistoricalTouchMinor(AInputEvent* motion_event, size_t pointer_index,
240         size_t history_index) {
241     return static_cast<const MotionEvent*>(motion_event)->getHistoricalTouchMinor(
242             pointer_index, history_index);
243 }
244 
AMotionEvent_getHistoricalToolMajor(AInputEvent * motion_event,size_t pointer_index,size_t history_index)245 float AMotionEvent_getHistoricalToolMajor(AInputEvent* motion_event, size_t pointer_index,
246         size_t history_index) {
247     return static_cast<const MotionEvent*>(motion_event)->getHistoricalToolMajor(
248             pointer_index, history_index);
249 }
250 
AMotionEvent_getHistoricalToolMinor(AInputEvent * motion_event,size_t pointer_index,size_t history_index)251 float AMotionEvent_getHistoricalToolMinor(AInputEvent* motion_event, size_t pointer_index,
252         size_t history_index) {
253     return static_cast<const MotionEvent*>(motion_event)->getHistoricalToolMinor(
254             pointer_index, history_index);
255 }
256 
AMotionEvent_getHistoricalOrientation(AInputEvent * motion_event,size_t pointer_index,size_t history_index)257 float AMotionEvent_getHistoricalOrientation(AInputEvent* motion_event, size_t pointer_index,
258         size_t history_index) {
259     return static_cast<const MotionEvent*>(motion_event)->getHistoricalOrientation(
260             pointer_index, history_index);
261 }
262 
AMotionEvent_getHistoricalAxisValue(const AInputEvent * motion_event,int32_t axis,size_t pointer_index,size_t history_index)263 float AMotionEvent_getHistoricalAxisValue(const AInputEvent* motion_event,
264         int32_t axis, size_t pointer_index, size_t history_index) {
265     return static_cast<const MotionEvent*>(motion_event)->getHistoricalAxisValue(
266             axis, pointer_index, history_index);
267 }
268 
269 
AInputQueue_attachLooper(AInputQueue * queue,ALooper * looper,int ident,ALooper_callbackFunc callback,void * data)270 void AInputQueue_attachLooper(AInputQueue* queue, ALooper* looper,
271         int ident, ALooper_callbackFunc callback, void* data) {
272     queue->attachLooper(looper, ident, callback, data);
273 }
274 
AInputQueue_detachLooper(AInputQueue * queue)275 void AInputQueue_detachLooper(AInputQueue* queue) {
276     queue->detachLooper();
277 }
278 
AInputQueue_hasEvents(AInputQueue * queue)279 int32_t AInputQueue_hasEvents(AInputQueue* queue) {
280     return queue->hasEvents();
281 }
282 
AInputQueue_getEvent(AInputQueue * queue,AInputEvent ** outEvent)283 int32_t AInputQueue_getEvent(AInputQueue* queue, AInputEvent** outEvent) {
284     return queue->getEvent(outEvent);
285 }
286 
AInputQueue_preDispatchEvent(AInputQueue * queue,AInputEvent * event)287 int32_t AInputQueue_preDispatchEvent(AInputQueue* queue, AInputEvent* event) {
288     return queue->preDispatchEvent(event) ? 1 : 0;
289 }
290 
AInputQueue_finishEvent(AInputQueue * queue,AInputEvent * event,int handled)291 void AInputQueue_finishEvent(AInputQueue* queue, AInputEvent* event, int handled) {
292     queue->finishEvent(event, handled != 0, false);
293 }
294