~mir-team/mir/in-process-egl+input-conglomeration

« back to all changes in this revision

Viewing changes to 3rd_party/android-input/android_pristine/frameworks/native/include/android/input.h

Merged trunk and fixed issues

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * Copyright (C) 2010 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
 
#ifndef _ANDROID_INPUT_H
18
 
#define _ANDROID_INPUT_H
19
 
 
20
 
/******************************************************************
21
 
 *
22
 
 * IMPORTANT NOTICE:
23
 
 *
24
 
 *   This file is part of Android's set of stable system headers
25
 
 *   exposed by the Android NDK (Native Development Kit).
26
 
 *
27
 
 *   Third-party source AND binary code relies on the definitions
28
 
 *   here to be FROZEN ON ALL UPCOMING PLATFORM RELEASES.
29
 
 *
30
 
 *   - DO NOT MODIFY ENUMS (EXCEPT IF YOU ADD NEW 32-BIT VALUES)
31
 
 *   - DO NOT MODIFY CONSTANTS OR FUNCTIONAL MACROS
32
 
 *   - DO NOT CHANGE THE SIGNATURE OF FUNCTIONS IN ANY WAY
33
 
 *   - DO NOT CHANGE THE LAYOUT OR SIZE OF STRUCTURES
34
 
 */
35
 
 
36
 
/*
37
 
 * Structures and functions to receive and process input events in
38
 
 * native code.
39
 
 *
40
 
 * NOTE: These functions MUST be implemented by /system/lib/libui.so
41
 
 */
42
 
 
43
 
#include <stdint.h>
44
 
#include <sys/types.h>
45
 
#include <android/keycodes.h>
46
 
#include <android/looper.h>
47
 
 
48
 
#ifdef __cplusplus
49
 
extern "C" {
50
 
#endif
51
 
 
52
 
/*
53
 
 * Key states (may be returned by queries about the current state of a
54
 
 * particular key code, scan code or switch).
55
 
 */
56
 
enum {
57
 
    /* The key state is unknown or the requested key itself is not supported. */
58
 
    AKEY_STATE_UNKNOWN = -1,
59
 
 
60
 
    /* The key is up. */
61
 
    AKEY_STATE_UP = 0,
62
 
 
63
 
    /* The key is down. */
64
 
    AKEY_STATE_DOWN = 1,
65
 
 
66
 
    /* The key is down but is a virtual key press that is being emulated by the system. */
67
 
    AKEY_STATE_VIRTUAL = 2
68
 
};
69
 
 
70
 
/*
71
 
 * Meta key / modifer state.
72
 
 */
73
 
enum {
74
 
    /* No meta keys are pressed. */
75
 
    AMETA_NONE = 0,
76
 
 
77
 
    /* This mask is used to check whether one of the ALT meta keys is pressed. */
78
 
    AMETA_ALT_ON = 0x02,
79
 
 
80
 
    /* This mask is used to check whether the left ALT meta key is pressed. */
81
 
    AMETA_ALT_LEFT_ON = 0x10,
82
 
 
83
 
    /* This mask is used to check whether the right ALT meta key is pressed. */
84
 
    AMETA_ALT_RIGHT_ON = 0x20,
85
 
 
86
 
    /* This mask is used to check whether one of the SHIFT meta keys is pressed. */
87
 
    AMETA_SHIFT_ON = 0x01,
88
 
 
89
 
    /* This mask is used to check whether the left SHIFT meta key is pressed. */
90
 
    AMETA_SHIFT_LEFT_ON = 0x40,
91
 
 
92
 
    /* This mask is used to check whether the right SHIFT meta key is pressed. */
93
 
    AMETA_SHIFT_RIGHT_ON = 0x80,
94
 
 
95
 
    /* This mask is used to check whether the SYM meta key is pressed. */
96
 
    AMETA_SYM_ON = 0x04,
97
 
 
98
 
    /* This mask is used to check whether the FUNCTION meta key is pressed. */
99
 
    AMETA_FUNCTION_ON = 0x08,
100
 
 
101
 
    /* This mask is used to check whether one of the CTRL meta keys is pressed. */
102
 
    AMETA_CTRL_ON = 0x1000,
103
 
 
104
 
    /* This mask is used to check whether the left CTRL meta key is pressed. */
105
 
    AMETA_CTRL_LEFT_ON = 0x2000,
106
 
 
107
 
    /* This mask is used to check whether the right CTRL meta key is pressed. */
108
 
    AMETA_CTRL_RIGHT_ON = 0x4000,
109
 
 
110
 
    /* This mask is used to check whether one of the META meta keys is pressed. */
111
 
    AMETA_META_ON = 0x10000,
112
 
 
113
 
    /* This mask is used to check whether the left META meta key is pressed. */
114
 
    AMETA_META_LEFT_ON = 0x20000,
115
 
 
116
 
    /* This mask is used to check whether the right META meta key is pressed. */
117
 
    AMETA_META_RIGHT_ON = 0x40000,
118
 
 
119
 
    /* This mask is used to check whether the CAPS LOCK meta key is on. */
120
 
    AMETA_CAPS_LOCK_ON = 0x100000,
121
 
 
122
 
    /* This mask is used to check whether the NUM LOCK meta key is on. */
123
 
    AMETA_NUM_LOCK_ON = 0x200000,
124
 
 
125
 
    /* This mask is used to check whether the SCROLL LOCK meta key is on. */
126
 
    AMETA_SCROLL_LOCK_ON = 0x400000,
127
 
};
128
 
 
129
 
/*
130
 
 * Input events.
131
 
 *
132
 
 * Input events are opaque structures.  Use the provided accessors functions to
133
 
 * read their properties.
134
 
 */
135
 
struct AInputEvent;
136
 
typedef struct AInputEvent AInputEvent;
137
 
 
138
 
/*
139
 
 * Input event types.
140
 
 */
141
 
enum {
142
 
    /* Indicates that the input event is a key event. */
143
 
    AINPUT_EVENT_TYPE_KEY = 1,
144
 
 
145
 
    /* Indicates that the input event is a motion event. */
146
 
    AINPUT_EVENT_TYPE_MOTION = 2
147
 
};
148
 
 
149
 
/*
150
 
 * Key event actions.
151
 
 */
152
 
enum {
153
 
    /* The key has been pressed down. */
154
 
    AKEY_EVENT_ACTION_DOWN = 0,
155
 
 
156
 
    /* The key has been released. */
157
 
    AKEY_EVENT_ACTION_UP = 1,
158
 
 
159
 
    /* Multiple duplicate key events have occurred in a row, or a complex string is
160
 
     * being delivered.  The repeat_count property of the key event contains the number
161
 
     * of times the given key code should be executed.
162
 
     */
163
 
    AKEY_EVENT_ACTION_MULTIPLE = 2
164
 
};
165
 
 
166
 
/*
167
 
 * Key event flags.
168
 
 */
169
 
enum {
170
 
    /* This mask is set if the device woke because of this key event. */
171
 
    AKEY_EVENT_FLAG_WOKE_HERE = 0x1,
172
 
 
173
 
    /* This mask is set if the key event was generated by a software keyboard. */
174
 
    AKEY_EVENT_FLAG_SOFT_KEYBOARD = 0x2,
175
 
 
176
 
    /* This mask is set if we don't want the key event to cause us to leave touch mode. */
177
 
    AKEY_EVENT_FLAG_KEEP_TOUCH_MODE = 0x4,
178
 
 
179
 
    /* This mask is set if an event was known to come from a trusted part
180
 
     * of the system.  That is, the event is known to come from the user,
181
 
     * and could not have been spoofed by a third party component. */
182
 
    AKEY_EVENT_FLAG_FROM_SYSTEM = 0x8,
183
 
 
184
 
    /* This mask is used for compatibility, to identify enter keys that are
185
 
     * coming from an IME whose enter key has been auto-labelled "next" or
186
 
     * "done".  This allows TextView to dispatch these as normal enter keys
187
 
     * for old applications, but still do the appropriate action when
188
 
     * receiving them. */
189
 
    AKEY_EVENT_FLAG_EDITOR_ACTION = 0x10,
190
 
 
191
 
    /* When associated with up key events, this indicates that the key press
192
 
     * has been canceled.  Typically this is used with virtual touch screen
193
 
     * keys, where the user can slide from the virtual key area on to the
194
 
     * display: in that case, the application will receive a canceled up
195
 
     * event and should not perform the action normally associated with the
196
 
     * key.  Note that for this to work, the application can not perform an
197
 
     * action for a key until it receives an up or the long press timeout has
198
 
     * expired. */
199
 
    AKEY_EVENT_FLAG_CANCELED = 0x20,
200
 
 
201
 
    /* This key event was generated by a virtual (on-screen) hard key area.
202
 
     * Typically this is an area of the touchscreen, outside of the regular
203
 
     * display, dedicated to "hardware" buttons. */
204
 
    AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY = 0x40,
205
 
 
206
 
    /* This flag is set for the first key repeat that occurs after the
207
 
     * long press timeout. */
208
 
    AKEY_EVENT_FLAG_LONG_PRESS = 0x80,
209
 
 
210
 
    /* Set when a key event has AKEY_EVENT_FLAG_CANCELED set because a long
211
 
     * press action was executed while it was down. */
212
 
    AKEY_EVENT_FLAG_CANCELED_LONG_PRESS = 0x100,
213
 
 
214
 
    /* Set for AKEY_EVENT_ACTION_UP when this event's key code is still being
215
 
     * tracked from its initial down.  That is, somebody requested that tracking
216
 
     * started on the key down and a long press has not caused
217
 
     * the tracking to be canceled. */
218
 
    AKEY_EVENT_FLAG_TRACKING = 0x200,
219
 
 
220
 
    /* Set when a key event has been synthesized to implement default behavior
221
 
     * for an event that the application did not handle.
222
 
     * Fallback key events are generated by unhandled trackball motions
223
 
     * (to emulate a directional keypad) and by certain unhandled key presses
224
 
     * that are declared in the key map (such as special function numeric keypad
225
 
     * keys when numlock is off). */
226
 
    AKEY_EVENT_FLAG_FALLBACK = 0x400,
227
 
};
228
 
 
229
 
/*
230
 
 * Motion event actions.
231
 
 */
232
 
 
233
 
/* Bit shift for the action bits holding the pointer index as
234
 
 * defined by AMOTION_EVENT_ACTION_POINTER_INDEX_MASK.
235
 
 */
236
 
#define AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT 8
237
 
 
238
 
enum {
239
 
    /* Bit mask of the parts of the action code that are the action itself.
240
 
     */
241
 
    AMOTION_EVENT_ACTION_MASK = 0xff,
242
 
 
243
 
    /* Bits in the action code that represent a pointer index, used with
244
 
     * AMOTION_EVENT_ACTION_POINTER_DOWN and AMOTION_EVENT_ACTION_POINTER_UP.  Shifting
245
 
     * down by AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT provides the actual pointer
246
 
     * index where the data for the pointer going up or down can be found.
247
 
     */
248
 
    AMOTION_EVENT_ACTION_POINTER_INDEX_MASK  = 0xff00,
249
 
 
250
 
    /* A pressed gesture has started, the motion contains the initial starting location.
251
 
     */
252
 
    AMOTION_EVENT_ACTION_DOWN = 0,
253
 
 
254
 
    /* A pressed gesture has finished, the motion contains the final release location
255
 
     * as well as any intermediate points since the last down or move event.
256
 
     */
257
 
    AMOTION_EVENT_ACTION_UP = 1,
258
 
 
259
 
    /* A change has happened during a press gesture (between AMOTION_EVENT_ACTION_DOWN and
260
 
     * AMOTION_EVENT_ACTION_UP).  The motion contains the most recent point, as well as
261
 
     * any intermediate points since the last down or move event.
262
 
     */
263
 
    AMOTION_EVENT_ACTION_MOVE = 2,
264
 
 
265
 
    /* The current gesture has been aborted.
266
 
     * You will not receive any more points in it.  You should treat this as
267
 
     * an up event, but not perform any action that you normally would.
268
 
     */
269
 
    AMOTION_EVENT_ACTION_CANCEL = 3,
270
 
 
271
 
    /* A movement has happened outside of the normal bounds of the UI element.
272
 
     * This does not provide a full gesture, but only the initial location of the movement/touch.
273
 
     */
274
 
    AMOTION_EVENT_ACTION_OUTSIDE = 4,
275
 
 
276
 
    /* A non-primary pointer has gone down.
277
 
     * The bits in AMOTION_EVENT_ACTION_POINTER_INDEX_MASK indicate which pointer changed.
278
 
     */
279
 
    AMOTION_EVENT_ACTION_POINTER_DOWN = 5,
280
 
 
281
 
    /* A non-primary pointer has gone up.
282
 
     * The bits in AMOTION_EVENT_ACTION_POINTER_INDEX_MASK indicate which pointer changed.
283
 
     */
284
 
    AMOTION_EVENT_ACTION_POINTER_UP = 6,
285
 
 
286
 
    /* A change happened but the pointer is not down (unlike AMOTION_EVENT_ACTION_MOVE).
287
 
     * The motion contains the most recent point, as well as any intermediate points since
288
 
     * the last hover move event.
289
 
     */
290
 
    AMOTION_EVENT_ACTION_HOVER_MOVE = 7,
291
 
 
292
 
    /* The motion event contains relative vertical and/or horizontal scroll offsets.
293
 
     * Use getAxisValue to retrieve the information from AMOTION_EVENT_AXIS_VSCROLL
294
 
     * and AMOTION_EVENT_AXIS_HSCROLL.
295
 
     * The pointer may or may not be down when this event is dispatched.
296
 
     * This action is always delivered to the winder under the pointer, which
297
 
     * may not be the window currently touched.
298
 
     */
299
 
    AMOTION_EVENT_ACTION_SCROLL = 8,
300
 
 
301
 
    /* The pointer is not down but has entered the boundaries of a window or view.
302
 
     */
303
 
    AMOTION_EVENT_ACTION_HOVER_ENTER = 9,
304
 
 
305
 
    /* The pointer is not down but has exited the boundaries of a window or view.
306
 
     */
307
 
    AMOTION_EVENT_ACTION_HOVER_EXIT = 10,
308
 
};
309
 
 
310
 
/*
311
 
 * Motion event flags.
312
 
 */
313
 
enum {
314
 
    /* This flag indicates that the window that received this motion event is partly
315
 
     * or wholly obscured by another visible window above it.  This flag is set to true
316
 
     * even if the event did not directly pass through the obscured area.
317
 
     * A security sensitive application can check this flag to identify situations in which
318
 
     * a malicious application may have covered up part of its content for the purpose
319
 
     * of misleading the user or hijacking touches.  An appropriate response might be
320
 
     * to drop the suspect touches or to take additional precautions to confirm the user's
321
 
     * actual intent.
322
 
     */
323
 
    AMOTION_EVENT_FLAG_WINDOW_IS_OBSCURED = 0x1,
324
 
};
325
 
 
326
 
/*
327
 
 * Motion event edge touch flags.
328
 
 */
329
 
enum {
330
 
    /* No edges intersected */
331
 
    AMOTION_EVENT_EDGE_FLAG_NONE = 0,
332
 
 
333
 
    /* Flag indicating the motion event intersected the top edge of the screen. */
334
 
    AMOTION_EVENT_EDGE_FLAG_TOP = 0x01,
335
 
 
336
 
    /* Flag indicating the motion event intersected the bottom edge of the screen. */
337
 
    AMOTION_EVENT_EDGE_FLAG_BOTTOM = 0x02,
338
 
 
339
 
    /* Flag indicating the motion event intersected the left edge of the screen. */
340
 
    AMOTION_EVENT_EDGE_FLAG_LEFT = 0x04,
341
 
 
342
 
    /* Flag indicating the motion event intersected the right edge of the screen. */
343
 
    AMOTION_EVENT_EDGE_FLAG_RIGHT = 0x08
344
 
};
345
 
 
346
 
/*
347
 
 * Constants that identify each individual axis of a motion event.
348
 
 * Refer to the documentation on the MotionEvent class for descriptions of each axis.
349
 
 */
350
 
enum {
351
 
    AMOTION_EVENT_AXIS_X = 0,
352
 
    AMOTION_EVENT_AXIS_Y = 1,
353
 
    AMOTION_EVENT_AXIS_PRESSURE = 2,
354
 
    AMOTION_EVENT_AXIS_SIZE = 3,
355
 
    AMOTION_EVENT_AXIS_TOUCH_MAJOR = 4,
356
 
    AMOTION_EVENT_AXIS_TOUCH_MINOR = 5,
357
 
    AMOTION_EVENT_AXIS_TOOL_MAJOR = 6,
358
 
    AMOTION_EVENT_AXIS_TOOL_MINOR = 7,
359
 
    AMOTION_EVENT_AXIS_ORIENTATION = 8,
360
 
    AMOTION_EVENT_AXIS_VSCROLL = 9,
361
 
    AMOTION_EVENT_AXIS_HSCROLL = 10,
362
 
    AMOTION_EVENT_AXIS_Z = 11,
363
 
    AMOTION_EVENT_AXIS_RX = 12,
364
 
    AMOTION_EVENT_AXIS_RY = 13,
365
 
    AMOTION_EVENT_AXIS_RZ = 14,
366
 
    AMOTION_EVENT_AXIS_HAT_X = 15,
367
 
    AMOTION_EVENT_AXIS_HAT_Y = 16,
368
 
    AMOTION_EVENT_AXIS_LTRIGGER = 17,
369
 
    AMOTION_EVENT_AXIS_RTRIGGER = 18,
370
 
    AMOTION_EVENT_AXIS_THROTTLE = 19,
371
 
    AMOTION_EVENT_AXIS_RUDDER = 20,
372
 
    AMOTION_EVENT_AXIS_WHEEL = 21,
373
 
    AMOTION_EVENT_AXIS_GAS = 22,
374
 
    AMOTION_EVENT_AXIS_BRAKE = 23,
375
 
    AMOTION_EVENT_AXIS_DISTANCE = 24,
376
 
    AMOTION_EVENT_AXIS_TILT = 25,
377
 
    AMOTION_EVENT_AXIS_GENERIC_1 = 32,
378
 
    AMOTION_EVENT_AXIS_GENERIC_2 = 33,
379
 
    AMOTION_EVENT_AXIS_GENERIC_3 = 34,
380
 
    AMOTION_EVENT_AXIS_GENERIC_4 = 35,
381
 
    AMOTION_EVENT_AXIS_GENERIC_5 = 36,
382
 
    AMOTION_EVENT_AXIS_GENERIC_6 = 37,
383
 
    AMOTION_EVENT_AXIS_GENERIC_7 = 38,
384
 
    AMOTION_EVENT_AXIS_GENERIC_8 = 39,
385
 
    AMOTION_EVENT_AXIS_GENERIC_9 = 40,
386
 
    AMOTION_EVENT_AXIS_GENERIC_10 = 41,
387
 
    AMOTION_EVENT_AXIS_GENERIC_11 = 42,
388
 
    AMOTION_EVENT_AXIS_GENERIC_12 = 43,
389
 
    AMOTION_EVENT_AXIS_GENERIC_13 = 44,
390
 
    AMOTION_EVENT_AXIS_GENERIC_14 = 45,
391
 
    AMOTION_EVENT_AXIS_GENERIC_15 = 46,
392
 
    AMOTION_EVENT_AXIS_GENERIC_16 = 47,
393
 
 
394
 
    // NOTE: If you add a new axis here you must also add it to several other files.
395
 
    //       Refer to frameworks/base/core/java/android/view/MotionEvent.java for the full list.
396
 
};
397
 
 
398
 
/*
399
 
 * Constants that identify buttons that are associated with motion events.
400
 
 * Refer to the documentation on the MotionEvent class for descriptions of each button.
401
 
 */
402
 
enum {
403
 
    AMOTION_EVENT_BUTTON_PRIMARY = 1 << 0,
404
 
    AMOTION_EVENT_BUTTON_SECONDARY = 1 << 1,
405
 
    AMOTION_EVENT_BUTTON_TERTIARY = 1 << 2,
406
 
    AMOTION_EVENT_BUTTON_BACK = 1 << 3,
407
 
    AMOTION_EVENT_BUTTON_FORWARD = 1 << 4,
408
 
};
409
 
 
410
 
/*
411
 
 * Constants that identify tool types.
412
 
 * Refer to the documentation on the MotionEvent class for descriptions of each tool type.
413
 
 */
414
 
enum {
415
 
    AMOTION_EVENT_TOOL_TYPE_UNKNOWN = 0,
416
 
    AMOTION_EVENT_TOOL_TYPE_FINGER = 1,
417
 
    AMOTION_EVENT_TOOL_TYPE_STYLUS = 2,
418
 
    AMOTION_EVENT_TOOL_TYPE_MOUSE = 3,
419
 
    AMOTION_EVENT_TOOL_TYPE_ERASER = 4,
420
 
};
421
 
 
422
 
/*
423
 
 * Input sources.
424
 
 *
425
 
 * Refer to the documentation on android.view.InputDevice for more details about input sources
426
 
 * and their correct interpretation.
427
 
 */
428
 
enum {
429
 
    AINPUT_SOURCE_CLASS_MASK = 0x000000ff,
430
 
 
431
 
    AINPUT_SOURCE_CLASS_BUTTON = 0x00000001,
432
 
    AINPUT_SOURCE_CLASS_POINTER = 0x00000002,
433
 
    AINPUT_SOURCE_CLASS_NAVIGATION = 0x00000004,
434
 
    AINPUT_SOURCE_CLASS_POSITION = 0x00000008,
435
 
    AINPUT_SOURCE_CLASS_JOYSTICK = 0x00000010,
436
 
};
437
 
 
438
 
enum {
439
 
    AINPUT_SOURCE_UNKNOWN = 0x00000000,
440
 
 
441
 
    AINPUT_SOURCE_KEYBOARD = 0x00000100 | AINPUT_SOURCE_CLASS_BUTTON,
442
 
    AINPUT_SOURCE_DPAD = 0x00000200 | AINPUT_SOURCE_CLASS_BUTTON,
443
 
    AINPUT_SOURCE_GAMEPAD = 0x00000400 | AINPUT_SOURCE_CLASS_BUTTON,
444
 
    AINPUT_SOURCE_TOUCHSCREEN = 0x00001000 | AINPUT_SOURCE_CLASS_POINTER,
445
 
    AINPUT_SOURCE_MOUSE = 0x00002000 | AINPUT_SOURCE_CLASS_POINTER,
446
 
    AINPUT_SOURCE_STYLUS = 0x00004000 | AINPUT_SOURCE_CLASS_POINTER,
447
 
    AINPUT_SOURCE_TRACKBALL = 0x00010000 | AINPUT_SOURCE_CLASS_NAVIGATION,
448
 
    AINPUT_SOURCE_TOUCHPAD = 0x00100000 | AINPUT_SOURCE_CLASS_POSITION,
449
 
    AINPUT_SOURCE_JOYSTICK = 0x01000000 | AINPUT_SOURCE_CLASS_JOYSTICK,
450
 
 
451
 
    AINPUT_SOURCE_ANY = 0xffffff00,
452
 
};
453
 
 
454
 
/*
455
 
 * Keyboard types.
456
 
 *
457
 
 * Refer to the documentation on android.view.InputDevice for more details.
458
 
 */
459
 
enum {
460
 
    AINPUT_KEYBOARD_TYPE_NONE = 0,
461
 
    AINPUT_KEYBOARD_TYPE_NON_ALPHABETIC = 1,
462
 
    AINPUT_KEYBOARD_TYPE_ALPHABETIC = 2,
463
 
};
464
 
 
465
 
/*
466
 
 * Constants used to retrieve information about the range of motion for a particular
467
 
 * coordinate of a motion event.
468
 
 *
469
 
 * Refer to the documentation on android.view.InputDevice for more details about input sources
470
 
 * and their correct interpretation.
471
 
 *
472
 
 * DEPRECATION NOTICE: These constants are deprecated.  Use AMOTION_EVENT_AXIS_* constants instead.
473
 
 */
474
 
enum {
475
 
    AINPUT_MOTION_RANGE_X = AMOTION_EVENT_AXIS_X,
476
 
    AINPUT_MOTION_RANGE_Y = AMOTION_EVENT_AXIS_Y,
477
 
    AINPUT_MOTION_RANGE_PRESSURE = AMOTION_EVENT_AXIS_PRESSURE,
478
 
    AINPUT_MOTION_RANGE_SIZE = AMOTION_EVENT_AXIS_SIZE,
479
 
    AINPUT_MOTION_RANGE_TOUCH_MAJOR = AMOTION_EVENT_AXIS_TOUCH_MAJOR,
480
 
    AINPUT_MOTION_RANGE_TOUCH_MINOR = AMOTION_EVENT_AXIS_TOUCH_MINOR,
481
 
    AINPUT_MOTION_RANGE_TOOL_MAJOR = AMOTION_EVENT_AXIS_TOOL_MAJOR,
482
 
    AINPUT_MOTION_RANGE_TOOL_MINOR = AMOTION_EVENT_AXIS_TOOL_MINOR,
483
 
    AINPUT_MOTION_RANGE_ORIENTATION = AMOTION_EVENT_AXIS_ORIENTATION,
484
 
} __attribute__ ((deprecated));
485
 
 
486
 
 
487
 
/*
488
 
 * Input event accessors.
489
 
 *
490
 
 * Note that most functions can only be used on input events that are of a given type.
491
 
 * Calling these functions on input events of other types will yield undefined behavior.
492
 
 */
493
 
 
494
 
/*** Accessors for all input events. ***/
495
 
 
496
 
/* Get the input event type. */
497
 
int32_t AInputEvent_getType(const AInputEvent* event);
498
 
 
499
 
/* Get the id for the device that an input event came from.
500
 
 *
501
 
 * Input events can be generated by multiple different input devices.
502
 
 * Use the input device id to obtain information about the input
503
 
 * device that was responsible for generating a particular event.
504
 
 *
505
 
 * An input device id of 0 indicates that the event didn't come from a physical device;
506
 
 * other numbers are arbitrary and you shouldn't depend on the values.
507
 
 * Use the provided input device query API to obtain information about input devices.
508
 
 */
509
 
int32_t AInputEvent_getDeviceId(const AInputEvent* event);
510
 
 
511
 
/* Get the input event source. */
512
 
int32_t AInputEvent_getSource(const AInputEvent* event);
513
 
 
514
 
/*** Accessors for key events only. ***/
515
 
 
516
 
/* Get the key event action. */
517
 
int32_t AKeyEvent_getAction(const AInputEvent* key_event);
518
 
 
519
 
/* Get the key event flags. */
520
 
int32_t AKeyEvent_getFlags(const AInputEvent* key_event);
521
 
 
522
 
/* Get the key code of the key event.
523
 
 * This is the physical key that was pressed, not the Unicode character. */
524
 
int32_t AKeyEvent_getKeyCode(const AInputEvent* key_event);
525
 
 
526
 
/* Get the hardware key id of this key event.
527
 
 * These values are not reliable and vary from device to device. */
528
 
int32_t AKeyEvent_getScanCode(const AInputEvent* key_event);
529
 
 
530
 
/* Get the meta key state. */
531
 
int32_t AKeyEvent_getMetaState(const AInputEvent* key_event);
532
 
 
533
 
/* Get the repeat count of the event.
534
 
 * For both key up an key down events, this is the number of times the key has
535
 
 * repeated with the first down starting at 0 and counting up from there.  For
536
 
 * multiple key events, this is the number of down/up pairs that have occurred. */
537
 
int32_t AKeyEvent_getRepeatCount(const AInputEvent* key_event);
538
 
 
539
 
/* Get the time of the most recent key down event, in the
540
 
 * java.lang.System.nanoTime() time base.  If this is a down event,
541
 
 * this will be the same as eventTime.
542
 
 * Note that when chording keys, this value is the down time of the most recently
543
 
 * pressed key, which may not be the same physical key of this event. */
544
 
int64_t AKeyEvent_getDownTime(const AInputEvent* key_event);
545
 
 
546
 
/* Get the time this event occurred, in the
547
 
 * java.lang.System.nanoTime() time base. */
548
 
int64_t AKeyEvent_getEventTime(const AInputEvent* key_event);
549
 
 
550
 
/*** Accessors for motion events only. ***/
551
 
 
552
 
/* Get the combined motion event action code and pointer index. */
553
 
int32_t AMotionEvent_getAction(const AInputEvent* motion_event);
554
 
 
555
 
/* Get the motion event flags. */
556
 
int32_t AMotionEvent_getFlags(const AInputEvent* motion_event);
557
 
 
558
 
/* Get the state of any meta / modifier keys that were in effect when the
559
 
 * event was generated. */
560
 
int32_t AMotionEvent_getMetaState(const AInputEvent* motion_event);
561
 
 
562
 
/* Get the button state of all buttons that are pressed. */
563
 
int32_t AMotionEvent_getButtonState(const AInputEvent* motion_event);
564
 
 
565
 
/* Get a bitfield indicating which edges, if any, were touched by this motion event.
566
 
 * For touch events, clients can use this to determine if the user's finger was
567
 
 * touching the edge of the display. */
568
 
int32_t AMotionEvent_getEdgeFlags(const AInputEvent* motion_event);
569
 
 
570
 
/* Get the time when the user originally pressed down to start a stream of
571
 
 * position events, in the java.lang.System.nanoTime() time base. */
572
 
int64_t AMotionEvent_getDownTime(const AInputEvent* motion_event);
573
 
 
574
 
/* Get the time when this specific event was generated,
575
 
 * in the java.lang.System.nanoTime() time base. */
576
 
int64_t AMotionEvent_getEventTime(const AInputEvent* motion_event);
577
 
 
578
 
/* Get the X coordinate offset.
579
 
 * For touch events on the screen, this is the delta that was added to the raw
580
 
 * screen coordinates to adjust for the absolute position of the containing windows
581
 
 * and views. */
582
 
float AMotionEvent_getXOffset(const AInputEvent* motion_event);
583
 
 
584
 
/* Get the precision of the Y coordinates being reported.
585
 
 * For touch events on the screen, this is the delta that was added to the raw
586
 
 * screen coordinates to adjust for the absolute position of the containing windows
587
 
 * and views. */
588
 
float AMotionEvent_getYOffset(const AInputEvent* motion_event);
589
 
 
590
 
/* Get the precision of the X coordinates being reported.
591
 
 * You can multiply this number with an X coordinate sample to find the
592
 
 * actual hardware value of the X coordinate. */
593
 
float AMotionEvent_getXPrecision(const AInputEvent* motion_event);
594
 
 
595
 
/* Get the precision of the Y coordinates being reported.
596
 
 * You can multiply this number with a Y coordinate sample to find the
597
 
 * actual hardware value of the Y coordinate. */
598
 
float AMotionEvent_getYPrecision(const AInputEvent* motion_event);
599
 
 
600
 
/* Get the number of pointers of data contained in this event.
601
 
 * Always >= 1. */
602
 
size_t AMotionEvent_getPointerCount(const AInputEvent* motion_event);
603
 
 
604
 
/* Get the pointer identifier associated with a particular pointer
605
 
 * data index in this event.  The identifier tells you the actual pointer
606
 
 * number associated with the data, accounting for individual pointers
607
 
 * going up and down since the start of the current gesture. */
608
 
int32_t AMotionEvent_getPointerId(const AInputEvent* motion_event, size_t pointer_index);
609
 
 
610
 
/* Get the tool type of a pointer for the given pointer index.
611
 
 * The tool type indicates the type of tool used to make contact such as a
612
 
 * finger or stylus, if known. */
613
 
int32_t AMotionEvent_getToolType(const AInputEvent* motion_event, size_t pointer_index);
614
 
 
615
 
/* Get the original raw X coordinate of this event.
616
 
 * For touch events on the screen, this is the original location of the event
617
 
 * on the screen, before it had been adjusted for the containing window
618
 
 * and views. */
619
 
float AMotionEvent_getRawX(const AInputEvent* motion_event, size_t pointer_index);
620
 
 
621
 
/* Get the original raw X coordinate of this event.
622
 
 * For touch events on the screen, this is the original location of the event
623
 
 * on the screen, before it had been adjusted for the containing window
624
 
 * and views. */
625
 
float AMotionEvent_getRawY(const AInputEvent* motion_event, size_t pointer_index);
626
 
 
627
 
/* Get the current X coordinate of this event for the given pointer index.
628
 
 * Whole numbers are pixels; the value may have a fraction for input devices
629
 
 * that are sub-pixel precise. */
630
 
float AMotionEvent_getX(const AInputEvent* motion_event, size_t pointer_index);
631
 
 
632
 
/* Get the current Y coordinate of this event for the given pointer index.
633
 
 * Whole numbers are pixels; the value may have a fraction for input devices
634
 
 * that are sub-pixel precise. */
635
 
float AMotionEvent_getY(const AInputEvent* motion_event, size_t pointer_index);
636
 
 
637
 
/* Get the current pressure of this event for the given pointer index.
638
 
 * The pressure generally ranges from 0 (no pressure at all) to 1 (normal pressure),
639
 
 * although values higher than 1 may be generated depending on the calibration of
640
 
 * the input device. */
641
 
float AMotionEvent_getPressure(const AInputEvent* motion_event, size_t pointer_index);
642
 
 
643
 
/* Get the current scaled value of the approximate size for the given pointer index.
644
 
 * This represents some approximation of the area of the screen being
645
 
 * pressed; the actual value in pixels corresponding to the
646
 
 * touch is normalized with the device specific range of values
647
 
 * and scaled to a value between 0 and 1.  The value of size can be used to
648
 
 * determine fat touch events. */
649
 
float AMotionEvent_getSize(const AInputEvent* motion_event, size_t pointer_index);
650
 
 
651
 
/* Get the current length of the major axis of an ellipse that describes the touch area
652
 
 * at the point of contact for the given pointer index. */
653
 
float AMotionEvent_getTouchMajor(const AInputEvent* motion_event, size_t pointer_index);
654
 
 
655
 
/* Get the current length of the minor axis of an ellipse that describes the touch area
656
 
 * at the point of contact for the given pointer index. */
657
 
float AMotionEvent_getTouchMinor(const AInputEvent* motion_event, size_t pointer_index);
658
 
 
659
 
/* Get the current length of the major axis of an ellipse that describes the size
660
 
 * of the approaching tool for the given pointer index.
661
 
 * The tool area represents the estimated size of the finger or pen that is
662
 
 * touching the device independent of its actual touch area at the point of contact. */
663
 
float AMotionEvent_getToolMajor(const AInputEvent* motion_event, size_t pointer_index);
664
 
 
665
 
/* Get the current length of the minor axis of an ellipse that describes the size
666
 
 * of the approaching tool for the given pointer index.
667
 
 * The tool area represents the estimated size of the finger or pen that is
668
 
 * touching the device independent of its actual touch area at the point of contact. */
669
 
float AMotionEvent_getToolMinor(const AInputEvent* motion_event, size_t pointer_index);
670
 
 
671
 
/* Get the current orientation of the touch area and tool area in radians clockwise from
672
 
 * vertical for the given pointer index.
673
 
 * An angle of 0 degrees indicates that the major axis of contact is oriented
674
 
 * upwards, is perfectly circular or is of unknown orientation.  A positive angle
675
 
 * indicates that the major axis of contact is oriented to the right.  A negative angle
676
 
 * indicates that the major axis of contact is oriented to the left.
677
 
 * The full range is from -PI/2 radians (finger pointing fully left) to PI/2 radians
678
 
 * (finger pointing fully right). */
679
 
float AMotionEvent_getOrientation(const AInputEvent* motion_event, size_t pointer_index);
680
 
 
681
 
/* Get the value of the request axis for the given pointer index. */
682
 
float AMotionEvent_getAxisValue(const AInputEvent* motion_event,
683
 
        int32_t axis, size_t pointer_index);
684
 
 
685
 
/* Get the number of historical points in this event.  These are movements that
686
 
 * have occurred between this event and the previous event.  This only applies
687
 
 * to AMOTION_EVENT_ACTION_MOVE events -- all other actions will have a size of 0.
688
 
 * Historical samples are indexed from oldest to newest. */
689
 
size_t AMotionEvent_getHistorySize(const AInputEvent* motion_event);
690
 
 
691
 
/* Get the time that a historical movement occurred between this event and
692
 
 * the previous event, in the java.lang.System.nanoTime() time base. */
693
 
int64_t AMotionEvent_getHistoricalEventTime(AInputEvent* motion_event,
694
 
        size_t history_index);
695
 
 
696
 
/* Get the historical raw X coordinate of this event for the given pointer index that
697
 
 * occurred between this event and the previous motion event.
698
 
 * For touch events on the screen, this is the original location of the event
699
 
 * on the screen, before it had been adjusted for the containing window
700
 
 * and views.
701
 
 * Whole numbers are pixels; the value may have a fraction for input devices
702
 
 * that are sub-pixel precise. */
703
 
float AMotionEvent_getHistoricalRawX(const AInputEvent* motion_event, size_t pointer_index,
704
 
        size_t history_index);
705
 
 
706
 
/* Get the historical raw Y coordinate of this event for the given pointer index that
707
 
 * occurred between this event and the previous motion event.
708
 
 * For touch events on the screen, this is the original location of the event
709
 
 * on the screen, before it had been adjusted for the containing window
710
 
 * and views.
711
 
 * Whole numbers are pixels; the value may have a fraction for input devices
712
 
 * that are sub-pixel precise. */
713
 
float AMotionEvent_getHistoricalRawY(const AInputEvent* motion_event, size_t pointer_index,
714
 
        size_t history_index);
715
 
 
716
 
/* Get the historical X coordinate of this event for the given pointer index that
717
 
 * occurred between this event and the previous motion event.
718
 
 * Whole numbers are pixels; the value may have a fraction for input devices
719
 
 * that are sub-pixel precise. */
720
 
float AMotionEvent_getHistoricalX(AInputEvent* motion_event, size_t pointer_index,
721
 
        size_t history_index);
722
 
 
723
 
/* Get the historical Y coordinate of this event for the given pointer index that
724
 
 * occurred between this event and the previous motion event.
725
 
 * Whole numbers are pixels; the value may have a fraction for input devices
726
 
 * that are sub-pixel precise. */
727
 
float AMotionEvent_getHistoricalY(AInputEvent* motion_event, size_t pointer_index,
728
 
        size_t history_index);
729
 
 
730
 
/* Get the historical pressure of this event for the given pointer index that
731
 
 * occurred between this event and the previous motion event.
732
 
 * The pressure generally ranges from 0 (no pressure at all) to 1 (normal pressure),
733
 
 * although values higher than 1 may be generated depending on the calibration of
734
 
 * the input device. */
735
 
float AMotionEvent_getHistoricalPressure(AInputEvent* motion_event, size_t pointer_index,
736
 
        size_t history_index);
737
 
 
738
 
/* Get the current scaled value of the approximate size for the given pointer index that
739
 
 * occurred between this event and the previous motion event.
740
 
 * This represents some approximation of the area of the screen being
741
 
 * pressed; the actual value in pixels corresponding to the
742
 
 * touch is normalized with the device specific range of values
743
 
 * and scaled to a value between 0 and 1.  The value of size can be used to
744
 
 * determine fat touch events. */
745
 
float AMotionEvent_getHistoricalSize(AInputEvent* motion_event, size_t pointer_index,
746
 
        size_t history_index);
747
 
 
748
 
/* Get the historical length of the major axis of an ellipse that describes the touch area
749
 
 * at the point of contact for the given pointer index that
750
 
 * occurred between this event and the previous motion event. */
751
 
float AMotionEvent_getHistoricalTouchMajor(const AInputEvent* motion_event, size_t pointer_index,
752
 
        size_t history_index);
753
 
 
754
 
/* Get the historical length of the minor axis of an ellipse that describes the touch area
755
 
 * at the point of contact for the given pointer index that
756
 
 * occurred between this event and the previous motion event. */
757
 
float AMotionEvent_getHistoricalTouchMinor(const AInputEvent* motion_event, size_t pointer_index,
758
 
        size_t history_index);
759
 
 
760
 
/* Get the historical length of the major axis of an ellipse that describes the size
761
 
 * of the approaching tool for the given pointer index that
762
 
 * occurred between this event and the previous motion event.
763
 
 * The tool area represents the estimated size of the finger or pen that is
764
 
 * touching the device independent of its actual touch area at the point of contact. */
765
 
float AMotionEvent_getHistoricalToolMajor(const AInputEvent* motion_event, size_t pointer_index,
766
 
        size_t history_index);
767
 
 
768
 
/* Get the historical length of the minor axis of an ellipse that describes the size
769
 
 * of the approaching tool for the given pointer index that
770
 
 * occurred between this event and the previous motion event.
771
 
 * The tool area represents the estimated size of the finger or pen that is
772
 
 * touching the device independent of its actual touch area at the point of contact. */
773
 
float AMotionEvent_getHistoricalToolMinor(const AInputEvent* motion_event, size_t pointer_index,
774
 
        size_t history_index);
775
 
 
776
 
/* Get the historical orientation of the touch area and tool area in radians clockwise from
777
 
 * vertical for the given pointer index that
778
 
 * occurred between this event and the previous motion event.
779
 
 * An angle of 0 degrees indicates that the major axis of contact is oriented
780
 
 * upwards, is perfectly circular or is of unknown orientation.  A positive angle
781
 
 * indicates that the major axis of contact is oriented to the right.  A negative angle
782
 
 * indicates that the major axis of contact is oriented to the left.
783
 
 * The full range is from -PI/2 radians (finger pointing fully left) to PI/2 radians
784
 
 * (finger pointing fully right). */
785
 
float AMotionEvent_getHistoricalOrientation(const AInputEvent* motion_event, size_t pointer_index,
786
 
        size_t history_index);
787
 
 
788
 
/* Get the historical value of the request axis for the given pointer index
789
 
 * that occurred between this event and the previous motion event. */
790
 
float AMotionEvent_getHistoricalAxisValue(const AInputEvent* motion_event,
791
 
        int32_t axis, size_t pointer_index, size_t history_index);
792
 
 
793
 
 
794
 
/*
795
 
 * Input queue
796
 
 *
797
 
 * An input queue is the facility through which you retrieve input
798
 
 * events.
799
 
 */
800
 
struct AInputQueue;
801
 
typedef struct AInputQueue AInputQueue;
802
 
 
803
 
/*
804
 
 * Add this input queue to a looper for processing.  See
805
 
 * ALooper_addFd() for information on the ident, callback, and data params.
806
 
 */
807
 
void AInputQueue_attachLooper(AInputQueue* queue, ALooper* looper,
808
 
        int ident, ALooper_callbackFunc callback, void* data);
809
 
 
810
 
/*
811
 
 * Remove the input queue from the looper it is currently attached to.
812
 
 */
813
 
void AInputQueue_detachLooper(AInputQueue* queue);
814
 
 
815
 
/*
816
 
 * Returns true if there are one or more events available in the
817
 
 * input queue.  Returns 1 if the queue has events; 0 if
818
 
 * it does not have events; and a negative value if there is an error.
819
 
 */
820
 
int32_t AInputQueue_hasEvents(AInputQueue* queue);
821
 
 
822
 
/*
823
 
 * Returns the next available event from the queue.  Returns a negative
824
 
 * value if no events are available or an error has occurred.
825
 
 */
826
 
int32_t AInputQueue_getEvent(AInputQueue* queue, AInputEvent** outEvent);
827
 
 
828
 
/*
829
 
 * Sends the key for standard pre-dispatching -- that is, possibly deliver
830
 
 * it to the current IME to be consumed before the app.  Returns 0 if it
831
 
 * was not pre-dispatched, meaning you can process it right now.  If non-zero
832
 
 * is returned, you must abandon the current event processing and allow the
833
 
 * event to appear again in the event queue (if it does not get consumed during
834
 
 * pre-dispatching).
835
 
 */
836
 
int32_t AInputQueue_preDispatchEvent(AInputQueue* queue, AInputEvent* event);
837
 
 
838
 
/*
839
 
 * Report that dispatching has finished with the given event.
840
 
 * This must be called after receiving an event with AInputQueue_get_event().
841
 
 */
842
 
void AInputQueue_finishEvent(AInputQueue* queue, AInputEvent* event, int handled);
843
 
 
844
 
#ifdef __cplusplus
845
 
}
846
 
#endif
847
 
 
848
 
#endif // _ANDROID_INPUT_H