diff options
author | Jeff Brown <jeffbrown@google.com> | 2010-07-14 18:48:53 -0700 |
---|---|---|
committer | Jeff Brown <jeffbrown@google.com> | 2010-07-15 18:32:33 -0700 |
commit | c5ed5910c9ef066cec6a13bbb404ec57b1e92637 (patch) | |
tree | b06dfdac2d807dae78a2634007b6e627eefd0804 /core/jni/android_view_KeyEvent.cpp | |
parent | d9452ecd0ce6c8e0518055929ba1fd0712146405 (diff) | |
download | frameworks_base-c5ed5910c9ef066cec6a13bbb404ec57b1e92637.zip frameworks_base-c5ed5910c9ef066cec6a13bbb404ec57b1e92637.tar.gz frameworks_base-c5ed5910c9ef066cec6a13bbb404ec57b1e92637.tar.bz2 |
Add support for new input sources.
Added several new coordinate values to MotionEvents to capture
touch major/minor area, tool major/minor area and orientation.
Renamed NDK input constants per convention.
Added InputDevice class in Java which will eventually provide
useful information about available input devices.
Added APIs for manufacturing new MotionEvent objects with multiple
pointers and all necessary coordinate data.
Fixed a bug in the input dispatcher where it could get stuck with
a pointer down forever.
Fixed a bug in the WindowManager where the input window list could
end up containing stale removed windows.
Fixed a bug in the WindowManager where the input channel was being
removed only after the final animation transition had taken place
which caused spurious WINDOW DIED log messages to be printed.
Change-Id: Ie55084da319b20aad29b28a0499b8dd98bb5da68
Diffstat (limited to 'core/jni/android_view_KeyEvent.cpp')
-rw-r--r-- | core/jni/android_view_KeyEvent.cpp | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/core/jni/android_view_KeyEvent.cpp b/core/jni/android_view_KeyEvent.cpp index 8f648f4..7e7583c 100644 --- a/core/jni/android_view_KeyEvent.cpp +++ b/core/jni/android_view_KeyEvent.cpp @@ -32,12 +32,13 @@ static struct { jmethodID ctor; + jfieldID mDeviceId; + jfieldID mSource; jfieldID mMetaState; jfieldID mAction; jfieldID mKeyCode; jfieldID mScanCode; jfieldID mRepeatCount; - jfieldID mDeviceId; jfieldID mFlags; jfieldID mDownTime; jfieldID mEventTime; @@ -56,22 +57,24 @@ jobject android_view_KeyEvent_fromNative(JNIEnv* env, const KeyEvent* event) { event->getMetaState(), event->getDeviceId(), event->getScanCode(), - event->getFlags()); + event->getFlags(), + event->getSource()); } -void android_view_KeyEvent_toNative(JNIEnv* env, jobject eventObj, int32_t nature, +void android_view_KeyEvent_toNative(JNIEnv* env, jobject eventObj, KeyEvent* event) { + jint deviceId = env->GetIntField(eventObj, gKeyEventClassInfo.mDeviceId); + jint source = env->GetIntField(eventObj, gKeyEventClassInfo.mSource); jint metaState = env->GetIntField(eventObj, gKeyEventClassInfo.mMetaState); jint action = env->GetIntField(eventObj, gKeyEventClassInfo.mAction); jint keyCode = env->GetIntField(eventObj, gKeyEventClassInfo.mKeyCode); jint scanCode = env->GetIntField(eventObj, gKeyEventClassInfo.mScanCode); jint repeatCount = env->GetIntField(eventObj, gKeyEventClassInfo.mRepeatCount); - jint deviceId = env->GetIntField(eventObj, gKeyEventClassInfo.mDeviceId); jint flags = env->GetIntField(eventObj, gKeyEventClassInfo.mFlags); jlong downTime = env->GetLongField(eventObj, gKeyEventClassInfo.mDownTime); jlong eventTime = env->GetLongField(eventObj, gKeyEventClassInfo.mEventTime); - event->initialize(deviceId, nature, action, flags, keyCode, scanCode, metaState, repeatCount, + event->initialize(deviceId, source, action, flags, keyCode, scanCode, metaState, repeatCount, milliseconds_to_nanoseconds(downTime), milliseconds_to_nanoseconds(eventTime)); } @@ -91,8 +94,6 @@ static const JNINativeMethod g_methods[] = { { "native_hasDefaultAction", "(I)Z", (void*)native_hasDefaultAction }, }; -static const char* const kKeyEventPathName = "android/view/KeyEvent"; - #define FIND_CLASS(var, className) \ var = env->FindClass(className); \ LOG_FATAL_IF(! var, "Unable to find class " className); \ @@ -107,11 +108,15 @@ static const char* const kKeyEventPathName = "android/view/KeyEvent"; LOG_FATAL_IF(! var, "Unable to find field " fieldName); int register_android_view_KeyEvent(JNIEnv* env) { - FIND_CLASS(gKeyEventClassInfo.clazz, kKeyEventPathName); + FIND_CLASS(gKeyEventClassInfo.clazz, "android/view/KeyEvent"); GET_METHOD_ID(gKeyEventClassInfo.ctor, gKeyEventClassInfo.clazz, - "<init>", "(JJIIIIIII)V"); + "<init>", "(JJIIIIIIII)V"); + GET_FIELD_ID(gKeyEventClassInfo.mDeviceId, gKeyEventClassInfo.clazz, + "mDeviceId", "I"); + GET_FIELD_ID(gKeyEventClassInfo.mSource, gKeyEventClassInfo.clazz, + "mSource", "I"); GET_FIELD_ID(gKeyEventClassInfo.mMetaState, gKeyEventClassInfo.clazz, "mMetaState", "I"); GET_FIELD_ID(gKeyEventClassInfo.mAction, gKeyEventClassInfo.clazz, @@ -122,8 +127,6 @@ int register_android_view_KeyEvent(JNIEnv* env) { "mScanCode", "I"); GET_FIELD_ID(gKeyEventClassInfo.mRepeatCount, gKeyEventClassInfo.clazz, "mRepeatCount", "I"); - GET_FIELD_ID(gKeyEventClassInfo.mDeviceId, gKeyEventClassInfo.clazz, - "mDeviceId", "I"); GET_FIELD_ID(gKeyEventClassInfo.mFlags, gKeyEventClassInfo.clazz, "mFlags", "I"); GET_FIELD_ID(gKeyEventClassInfo.mDownTime, gKeyEventClassInfo.clazz, @@ -134,8 +137,7 @@ int register_android_view_KeyEvent(JNIEnv* env) { "mCharacters", "Ljava/lang/String;"); return AndroidRuntime::registerNativeMethods( - env, kKeyEventPathName, - g_methods, NELEM(g_methods)); + env, "android/view/KeyEvent", g_methods, NELEM(g_methods)); } } // namespace android |