Input.cpp revision c5ed5910c9ef066cec6a13bbb404ec57b1e92637
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 1046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown#include <ui/Input.h> 1146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 1246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownnamespace android { 1346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 1446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown// class InputEvent 1546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 16c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brownvoid InputEvent::initialize(int32_t deviceId, int32_t source) { 1746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mDeviceId = deviceId; 18c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mSource = source; 1946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown} 2046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 2146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown// class KeyEvent 2246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 233c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackbornbool KeyEvent::hasDefaultAction(int32_t keyCode) { 243c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn switch (keyCode) { 25fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_HOME: 26fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_BACK: 27fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_CALL: 28fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_ENDCALL: 29fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_VOLUME_UP: 30fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_VOLUME_DOWN: 31fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_POWER: 32fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_CAMERA: 33fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_HEADSETHOOK: 34fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MENU: 35fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_NOTIFICATION: 36fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_FOCUS: 37fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_SEARCH: 38fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MEDIA_PLAY_PAUSE: 39fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MEDIA_STOP: 40fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MEDIA_NEXT: 41fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MEDIA_PREVIOUS: 42fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MEDIA_REWIND: 43fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MEDIA_FAST_FORWARD: 44fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MUTE: 453c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn return true; 463c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn } 473c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn 483c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn return false; 493c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn} 503c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn 513c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackbornbool KeyEvent::hasDefaultAction() const { 523c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn return hasDefaultAction(getKeyCode()); 533c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn} 543c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn 553c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackbornbool KeyEvent::isSystemKey(int32_t keyCode) { 563c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn switch (keyCode) { 57fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MENU: 58fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_SOFT_RIGHT: 59fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_HOME: 60fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_BACK: 61fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_CALL: 62fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_ENDCALL: 63fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_VOLUME_UP: 64fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_VOLUME_DOWN: 65fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MUTE: 66fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_POWER: 67fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_HEADSETHOOK: 68fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MEDIA_PLAY_PAUSE: 69fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MEDIA_STOP: 70fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MEDIA_NEXT: 71fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MEDIA_PREVIOUS: 72fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MEDIA_REWIND: 73fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_MEDIA_FAST_FORWARD: 74fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_CAMERA: 75fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_FOCUS: 76fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown case AKEYCODE_SEARCH: 773c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn return true; 783c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn } 793c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn 803c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn return false; 813c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn} 823c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn 833c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackbornbool KeyEvent::isSystemKey() const { 843c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn return isSystemKey(getKeyCode()); 853c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn} 863c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn 8746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownvoid KeyEvent::initialize( 8846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown int32_t deviceId, 89c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown int32_t source, 9046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown int32_t action, 9146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown int32_t flags, 9246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown int32_t keyCode, 9346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown int32_t scanCode, 9446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown int32_t metaState, 9546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown int32_t repeatCount, 9646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown nsecs_t downTime, 9746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown nsecs_t eventTime) { 98c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown InputEvent::initialize(deviceId, source); 9946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mAction = action; 10046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mFlags = flags; 10146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mKeyCode = keyCode; 10246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mScanCode = scanCode; 10346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mMetaState = metaState; 10446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mRepeatCount = repeatCount; 10546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mDownTime = downTime; 10646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mEventTime = eventTime; 10746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown} 10846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 10946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown// class MotionEvent 11046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 11146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownvoid MotionEvent::initialize( 11246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown int32_t deviceId, 113c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown int32_t source, 11446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown int32_t action, 11546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown int32_t edgeFlags, 11646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown int32_t metaState, 1175c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown float xOffset, 1185c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown float yOffset, 11946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown float xPrecision, 12046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown float yPrecision, 12146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown nsecs_t downTime, 12246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown nsecs_t eventTime, 12346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown size_t pointerCount, 12446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown const int32_t* pointerIds, 12546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown const PointerCoords* pointerCoords) { 126c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown InputEvent::initialize(deviceId, source); 12746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mAction = action; 12846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mEdgeFlags = edgeFlags; 12946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mMetaState = metaState; 1305c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mXOffset = xOffset; 1315c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mYOffset = yOffset; 13246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mXPrecision = xPrecision; 13346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mYPrecision = yPrecision; 13446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mDownTime = downTime; 13546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mPointerIds.clear(); 13646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mPointerIds.appendArray(pointerIds, pointerCount); 13746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mSampleEventTimes.clear(); 13846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mSamplePointerCoords.clear(); 13946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown addSample(eventTime, pointerCoords); 14046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown} 14146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 14246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownvoid MotionEvent::addSample( 14346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown int64_t eventTime, 14446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown const PointerCoords* pointerCoords) { 14546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mSampleEventTimes.push(eventTime); 14646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mSamplePointerCoords.appendArray(pointerCoords, getPointerCount()); 14746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown} 14846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 14946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownvoid MotionEvent::offsetLocation(float xOffset, float yOffset) { 1505c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mXOffset += xOffset; 1515c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mYOffset += yOffset; 15246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown} 15346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 15446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown} // namespace android 155