Input.cpp revision 47e6b1b5eef8ee99872f278f66bc498c4fcca0d8
146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown// 246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown// Copyright 2010 The Android Open Source Project 346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown// 446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown// Provides a pipe-based transport for native events in the NDK. 546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown// 646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown#define LOG_TAG "Input" 746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown//#define LOG_NDEBUG 0 946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 1047e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown#define DEBUG_PROBE 0 1147e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown 1247e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown#include <stdlib.h> 1347e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown#include <unistd.h> 1447e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown 1546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown#include <ui/Input.h> 1646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 1746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownnamespace android { 1846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 1947e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brownstatic const char* CONFIGURATION_FILE_DIR[] = { 2047e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown "idc/", 2147e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown "keylayout/", 2247e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown "keychars/", 2347e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown}; 2447e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown 2547e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brownstatic const char* CONFIGURATION_FILE_EXTENSION[] = { 2647e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown ".idc", 2747e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown ".kl", 2847e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown ".kcm", 2947e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown}; 3047e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown 3147e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brownstatic void appendInputDeviceConfigurationFileRelativePath(String8& path, 3247e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown const String8& name, InputDeviceConfigurationFileType type) { 3347e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown path.append(CONFIGURATION_FILE_DIR[type]); 3447e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown for (size_t i = 0; i < name.length(); i++) { 3547e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown char ch = name[i]; 3647e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown if (ch == ' ') { 3747e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown ch = '_'; 3847e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown } 3947e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown path.append(&ch, 1); 4047e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown } 4147e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown path.append(CONFIGURATION_FILE_EXTENSION[type]); 4247e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown} 4347e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown 4447e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brownextern String8 getInputDeviceConfigurationFilePath( 4547e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown const String8& name, InputDeviceConfigurationFileType type) { 4647e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown // Search system repository. 4747e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown String8 path; 4847e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown path.setTo(getenv("ANDROID_ROOT")); 4947e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown path.append("/usr/"); 5047e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown appendInputDeviceConfigurationFileRelativePath(path, name, type); 5147e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown#if DEBUG_PROBE 5247e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown LOGD("Probing for system provided input device configuration file: path='%s'", path.string()); 5347e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown#endif 5447e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown if (!access(path.string(), R_OK)) { 5547e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown#if DEBUG_PROBE 5647e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown LOGD("Found"); 5747e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown#endif 5847e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown return path; 5947e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown } 6047e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown 6147e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown // Search user repository. 6247e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown // TODO Should only look here if not in safe mode. 6347e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown path.setTo(getenv("ANDROID_DATA")); 6447e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown path.append("/system/devices/"); 6547e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown appendInputDeviceConfigurationFileRelativePath(path, name, type); 6647e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown#if DEBUG_PROBE 6747e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown LOGD("Probing for system user input device configuration file: path='%s'", path.string()); 6847e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown#endif 6947e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown if (!access(path.string(), R_OK)) { 7047e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown#if DEBUG_PROBE 7147e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown LOGD("Found"); 7247e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown#endif 7347e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown return path; 7447e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown } 7547e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown 7647e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown // Not found. 7747e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown#if DEBUG_PROBE 7847e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown LOGD("Probe failed to find input device configuration file: name='%s', type=%d", 7947e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown name.string(), type); 8047e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown#endif 8147e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown return String8(); 8247e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown} 8347e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown 8447e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown 8547e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown// --- InputEvent --- 8646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 87c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brownvoid InputEvent::initialize(int32_t deviceId, int32_t source) { 8846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mDeviceId = deviceId; 89c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mSource = source; 9046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown} 9146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 922c6081ce3593712f30dacd990a97209c791d6cedDianne Hackbornvoid InputEvent::initialize(const InputEvent& from) { 932c6081ce3593712f30dacd990a97209c791d6cedDianne Hackborn mDeviceId = from.mDeviceId; 942c6081ce3593712f30dacd990a97209c791d6cedDianne Hackborn mSource = from.mSource; 952c6081ce3593712f30dacd990a97209c791d6cedDianne Hackborn} 962c6081ce3593712f30dacd990a97209c791d6cedDianne Hackborn 9747e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown// --- KeyEvent --- 9846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 993c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackbornbool KeyEvent::hasDefaultAction(int32_t keyCode) { 1003c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn switch (keyCode) { 101fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_HOME: 102fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_BACK: 103fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_CALL: 104fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_ENDCALL: 105fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_VOLUME_UP: 106fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_VOLUME_DOWN: 107b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown case AKEYCODE_VOLUME_MUTE: 108fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_POWER: 109fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_CAMERA: 110fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_HEADSETHOOK: 111fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MENU: 112fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_NOTIFICATION: 113fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_FOCUS: 114fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_SEARCH: 115b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown case AKEYCODE_MEDIA_PLAY: 116b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown case AKEYCODE_MEDIA_PAUSE: 117fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MEDIA_PLAY_PAUSE: 118fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MEDIA_STOP: 119fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MEDIA_NEXT: 120fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MEDIA_PREVIOUS: 121fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MEDIA_REWIND: 122b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown case AKEYCODE_MEDIA_RECORD: 123fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MEDIA_FAST_FORWARD: 124fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MUTE: 1253c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn return true; 1263c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn } 1273c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn 1283c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn return false; 1293c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn} 1303c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn 1313c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackbornbool KeyEvent::hasDefaultAction() const { 1323c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn return hasDefaultAction(getKeyCode()); 1333c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn} 1343c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn 1353c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackbornbool KeyEvent::isSystemKey(int32_t keyCode) { 1363c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn switch (keyCode) { 137fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MENU: 138fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_SOFT_RIGHT: 139fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_HOME: 140fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_BACK: 141fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_CALL: 142fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_ENDCALL: 143fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_VOLUME_UP: 144fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_VOLUME_DOWN: 145b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown case AKEYCODE_VOLUME_MUTE: 146fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MUTE: 147fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_POWER: 148fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_HEADSETHOOK: 149b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown case AKEYCODE_MEDIA_PLAY: 150b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown case AKEYCODE_MEDIA_PAUSE: 151fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MEDIA_PLAY_PAUSE: 152fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MEDIA_STOP: 153fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MEDIA_NEXT: 154fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MEDIA_PREVIOUS: 155fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MEDIA_REWIND: 156b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown case AKEYCODE_MEDIA_RECORD: 157fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MEDIA_FAST_FORWARD: 158fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_CAMERA: 159fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_FOCUS: 160fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_SEARCH: 1613c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn return true; 1623c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn } 1633c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn 1643c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn return false; 1653c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn} 1663c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn 1673c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackbornbool KeyEvent::isSystemKey() const { 1683c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn return isSystemKey(getKeyCode()); 1693c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn} 1703c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn 17146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownvoid KeyEvent::initialize( 17246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown int32_t deviceId, 173c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown int32_t source, 17446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown int32_t action, 17546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown int32_t flags, 17646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown int32_t keyCode, 17746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown int32_t scanCode, 17846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown int32_t metaState, 17946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown int32_t repeatCount, 18046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown nsecs_t downTime, 18146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown nsecs_t eventTime) { 182c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown InputEvent::initialize(deviceId, source); 18346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mAction = action; 18446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mFlags = flags; 18546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mKeyCode = keyCode; 18646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mScanCode = scanCode; 18746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mMetaState = metaState; 18846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mRepeatCount = repeatCount; 18946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mDownTime = downTime; 19046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mEventTime = eventTime; 19146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown} 19246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 1932c6081ce3593712f30dacd990a97209c791d6cedDianne Hackbornvoid KeyEvent::initialize(const KeyEvent& from) { 1942c6081ce3593712f30dacd990a97209c791d6cedDianne Hackborn InputEvent::initialize(from); 1952c6081ce3593712f30dacd990a97209c791d6cedDianne Hackborn mAction = from.mAction; 1962c6081ce3593712f30dacd990a97209c791d6cedDianne Hackborn mFlags = from.mFlags; 1972c6081ce3593712f30dacd990a97209c791d6cedDianne Hackborn mKeyCode = from.mKeyCode; 1982c6081ce3593712f30dacd990a97209c791d6cedDianne Hackborn mScanCode = from.mScanCode; 1992c6081ce3593712f30dacd990a97209c791d6cedDianne Hackborn mMetaState = from.mMetaState; 2002c6081ce3593712f30dacd990a97209c791d6cedDianne Hackborn mRepeatCount = from.mRepeatCount; 2012c6081ce3593712f30dacd990a97209c791d6cedDianne Hackborn mDownTime = from.mDownTime; 2022c6081ce3593712f30dacd990a97209c791d6cedDianne Hackborn mEventTime = from.mEventTime; 2032c6081ce3593712f30dacd990a97209c791d6cedDianne Hackborn} 2042c6081ce3593712f30dacd990a97209c791d6cedDianne Hackborn 20547e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown// --- MotionEvent --- 20646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 20746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownvoid MotionEvent::initialize( 20846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown int32_t deviceId, 209c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown int32_t source, 21046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown int32_t action, 21185a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown int32_t flags, 21246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown int32_t edgeFlags, 21346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown int32_t metaState, 2145c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown float xOffset, 2155c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown float yOffset, 21646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown float xPrecision, 21746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown float yPrecision, 21846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown nsecs_t downTime, 21946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown nsecs_t eventTime, 22046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown size_t pointerCount, 22146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown const int32_t* pointerIds, 22246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown const PointerCoords* pointerCoords) { 223c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown InputEvent::initialize(deviceId, source); 22446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mAction = action; 22585a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown mFlags = flags; 22646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mEdgeFlags = edgeFlags; 22746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mMetaState = metaState; 2285c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mXOffset = xOffset; 2295c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mYOffset = yOffset; 23046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mXPrecision = xPrecision; 23146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mYPrecision = yPrecision; 23246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mDownTime = downTime; 23346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mPointerIds.clear(); 23446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mPointerIds.appendArray(pointerIds, pointerCount); 23546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mSampleEventTimes.clear(); 23646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mSamplePointerCoords.clear(); 23746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown addSample(eventTime, pointerCoords); 23846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown} 23946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 24046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownvoid MotionEvent::addSample( 24146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown int64_t eventTime, 24246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown const PointerCoords* pointerCoords) { 24346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mSampleEventTimes.push(eventTime); 24446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mSamplePointerCoords.appendArray(pointerCoords, getPointerCount()); 24546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown} 24646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 24746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownvoid MotionEvent::offsetLocation(float xOffset, float yOffset) { 2485c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mXOffset += xOffset; 2495c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mYOffset += yOffset; 25046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown} 25146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 25247e6b1b5eef8ee99872f278f66bc498c4fcca0d8Jeff Brown// --- InputDeviceInfo --- 2536d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown 2546d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff BrownInputDeviceInfo::InputDeviceInfo() { 2556d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown initialize(-1, String8("uninitialized device info")); 2566d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown} 2576d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown 2586d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff BrownInputDeviceInfo::InputDeviceInfo(const InputDeviceInfo& other) : 2596d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown mId(other.mId), mName(other.mName), mSources(other.mSources), 2606d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown mKeyboardType(other.mKeyboardType), 2616d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown mMotionRanges(other.mMotionRanges) { 2626d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown} 2636d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown 2646d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff BrownInputDeviceInfo::~InputDeviceInfo() { 2656d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown} 2666d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown 2676d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brownvoid InputDeviceInfo::initialize(int32_t id, const String8& name) { 2686d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown mId = id; 2696d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown mName = name; 2706d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown mSources = 0; 2716d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown mKeyboardType = AINPUT_KEYBOARD_TYPE_NONE; 2726d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown mMotionRanges.clear(); 2736d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown} 2746d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown 2756d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brownconst InputDeviceInfo::MotionRange* InputDeviceInfo::getMotionRange(int32_t rangeType) const { 2766d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown ssize_t index = mMotionRanges.indexOfKey(rangeType); 2776d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown return index >= 0 ? & mMotionRanges.valueAt(index) : NULL; 2786d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown} 2796d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown 2806d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brownvoid InputDeviceInfo::addSource(uint32_t source) { 2816d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown mSources |= source; 2826d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown} 2836d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown 2846d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brownvoid InputDeviceInfo::addMotionRange(int32_t rangeType, float min, float max, 2856d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown float flat, float fuzz) { 2866d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown MotionRange range = { min, max, flat, fuzz }; 2876d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown addMotionRange(rangeType, range); 2886d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown} 2896d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown 2906d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brownvoid InputDeviceInfo::addMotionRange(int32_t rangeType, const MotionRange& range) { 2916d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown mMotionRanges.add(rangeType, range); 2926d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown} 2936d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown 29446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown} // namespace android 295