19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright 2006, The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project*/ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown#include <android_runtime/AndroidRuntime.h> 189f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 199d3b1a424c5c61e24e9659d15fb353026a00d925Jeff Brown#include <input/KeyCharacterMap.h> 209d3b1a424c5c61e24e9659d15fb353026a00d925Jeff Brown#include <input/Input.h> 219f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown#include <binder/Parcel.h> 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 236b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown#include <nativehelper/jni.h> 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <nativehelper/JNIHelp.h> 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 269f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown#include "android_os_Parcel.h" 276b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown#include "android_view_KeyEvent.h" 286b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 29987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe#include "core_jni_helpers.h" 30987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android { 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 336b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brownstatic struct { 346b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown jclass clazz; 359f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown jmethodID ctor; 369f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown} gKeyCharacterMapClassInfo; 379f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 389f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brownstatic struct { 399f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown jclass clazz; 406b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown} gKeyEventClassInfo; 416b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 4249ed71db425c5054e3ad9526496a7e116c89556bJeff Brownstatic struct { 4349ed71db425c5054e3ad9526496a7e116c89556bJeff Brown jfieldID keyCode; 4449ed71db425c5054e3ad9526496a7e116c89556bJeff Brown jfieldID metaState; 4549ed71db425c5054e3ad9526496a7e116c89556bJeff Brown} gFallbackActionClassInfo; 4649ed71db425c5054e3ad9526496a7e116c89556bJeff Brown 4749ed71db425c5054e3ad9526496a7e116c89556bJeff Brown 489f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brownclass NativeKeyCharacterMap { 499f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brownpublic: 509f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown NativeKeyCharacterMap(int32_t deviceId, const sp<KeyCharacterMap>& map) : 519f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mDeviceId(deviceId), mMap(map) { 526b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown } 531e08fe90df18930691b0c2ec22e5db25d7fcb4cfJeff Brown 549f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown ~NativeKeyCharacterMap() { 559f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 569f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 579f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown inline int32_t getDeviceId() const { 589f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return mDeviceId; 599f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 609f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 619f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown inline const sp<KeyCharacterMap>& getMap() const { 629f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return mMap; 639f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 649f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 659f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brownprivate: 669f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown int32_t mDeviceId; 679f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown sp<KeyCharacterMap> mMap; 689f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown}; 699f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 709f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 719f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brownjobject android_view_KeyCharacterMap_create(JNIEnv* env, int32_t deviceId, 729f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown const sp<KeyCharacterMap>& kcm) { 739f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown NativeKeyCharacterMap* map = new NativeKeyCharacterMap(deviceId, 749f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown kcm.get() ? kcm : KeyCharacterMap::empty()); 759f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown if (!map) { 769f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return NULL; 779f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 789f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 799f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return env->NewObject(gKeyCharacterMapClassInfo.clazz, gKeyCharacterMapClassInfo.ctor, 800c3f9210166a861fe568ac15994a0d7a42f7e28aAshok Bhat reinterpret_cast<jlong>(map)); 819f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown} 829f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 830c3f9210166a861fe568ac15994a0d7a42f7e28aAshok Bhatstatic jlong nativeReadFromParcel(JNIEnv *env, jobject clazz, jobject parcelObj) { 849f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown Parcel* parcel = parcelForJavaObject(env, parcelObj); 859f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown if (!parcel) { 869f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return 0; 879f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 889f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 899f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown int32_t deviceId = parcel->readInt32(); 909f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown if (parcel->errorCheck()) { 919f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return 0; 929f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 939f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 949f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown sp<KeyCharacterMap> kcm = KeyCharacterMap::readFromParcel(parcel); 959f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown if (!kcm.get()) { 969f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return 0; 979f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 989f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 999f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown NativeKeyCharacterMap* map = new NativeKeyCharacterMap(deviceId, kcm); 1000c3f9210166a861fe568ac15994a0d7a42f7e28aAshok Bhat return reinterpret_cast<jlong>(map); 1019f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown} 1029f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 1030c3f9210166a861fe568ac15994a0d7a42f7e28aAshok Bhatstatic void nativeWriteToParcel(JNIEnv* env, jobject clazz, jlong ptr, jobject parcelObj) { 1049f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown NativeKeyCharacterMap* map = reinterpret_cast<NativeKeyCharacterMap*>(ptr); 1059f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown Parcel* parcel = parcelForJavaObject(env, parcelObj); 1069f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown if (parcel) { 1079f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown parcel->writeInt32(map->getDeviceId()); 1089f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown map->getMap()->writeToParcel(parcel); 1099f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1120c3f9210166a861fe568ac15994a0d7a42f7e28aAshok Bhatstatic void nativeDispose(JNIEnv *env, jobject clazz, jlong ptr) { 1139f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown NativeKeyCharacterMap* map = reinterpret_cast<NativeKeyCharacterMap*>(ptr); 1146b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown delete map; 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1170c3f9210166a861fe568ac15994a0d7a42f7e28aAshok Bhatstatic jchar nativeGetCharacter(JNIEnv *env, jobject clazz, jlong ptr, 1186b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown jint keyCode, jint metaState) { 1199f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown NativeKeyCharacterMap* map = reinterpret_cast<NativeKeyCharacterMap*>(ptr); 1209f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return map->getMap()->getCharacter(keyCode, metaState); 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1230c3f9210166a861fe568ac15994a0d7a42f7e28aAshok Bhatstatic jboolean nativeGetFallbackAction(JNIEnv *env, jobject clazz, jlong ptr, jint keyCode, 12449ed71db425c5054e3ad9526496a7e116c89556bJeff Brown jint metaState, jobject fallbackActionObj) { 1259f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown NativeKeyCharacterMap* map = reinterpret_cast<NativeKeyCharacterMap*>(ptr); 12649ed71db425c5054e3ad9526496a7e116c89556bJeff Brown KeyCharacterMap::FallbackAction fallbackAction; 12749ed71db425c5054e3ad9526496a7e116c89556bJeff Brown 1289f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown bool result = map->getMap()->getFallbackAction(keyCode, metaState, &fallbackAction); 12949ed71db425c5054e3ad9526496a7e116c89556bJeff Brown if (result) { 13049ed71db425c5054e3ad9526496a7e116c89556bJeff Brown env->SetIntField(fallbackActionObj, gFallbackActionClassInfo.keyCode, 13149ed71db425c5054e3ad9526496a7e116c89556bJeff Brown fallbackAction.keyCode); 13249ed71db425c5054e3ad9526496a7e116c89556bJeff Brown env->SetIntField(fallbackActionObj, gFallbackActionClassInfo.metaState, 13349ed71db425c5054e3ad9526496a7e116c89556bJeff Brown fallbackAction.metaState); 13449ed71db425c5054e3ad9526496a7e116c89556bJeff Brown } 13549ed71db425c5054e3ad9526496a7e116c89556bJeff Brown return result; 13649ed71db425c5054e3ad9526496a7e116c89556bJeff Brown} 13749ed71db425c5054e3ad9526496a7e116c89556bJeff Brown 1380c3f9210166a861fe568ac15994a0d7a42f7e28aAshok Bhatstatic jchar nativeGetNumber(JNIEnv *env, jobject clazz, jlong ptr, jint keyCode) { 1399f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown NativeKeyCharacterMap* map = reinterpret_cast<NativeKeyCharacterMap*>(ptr); 1409f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return map->getMap()->getNumber(keyCode); 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1430c3f9210166a861fe568ac15994a0d7a42f7e28aAshok Bhatstatic jchar nativeGetMatch(JNIEnv *env, jobject clazz, jlong ptr, jint keyCode, 1446b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown jcharArray charsArray, jint metaState) { 1459f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown NativeKeyCharacterMap* map = reinterpret_cast<NativeKeyCharacterMap*>(ptr); 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1476b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown jsize numChars = env->GetArrayLength(charsArray); 1486b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown jchar* chars = static_cast<jchar*>(env->GetPrimitiveArrayCritical(charsArray, NULL)); 1496b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown if (!chars) { 1506b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown return 0; 1516b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown } 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1536698749dd4d4d6513b26aa9071af290b956b68a7Dan Albert char16_t result = map->getMap()->getMatch( 1546698749dd4d4d6513b26aa9071af290b956b68a7Dan Albert keyCode, reinterpret_cast<char16_t*>(chars), size_t(numChars), 1556698749dd4d4d6513b26aa9071af290b956b68a7Dan Albert metaState); 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1576b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown env->ReleasePrimitiveArrayCritical(charsArray, chars, JNI_ABORT); 1586b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown return result; 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1610c3f9210166a861fe568ac15994a0d7a42f7e28aAshok Bhatstatic jchar nativeGetDisplayLabel(JNIEnv *env, jobject clazz, jlong ptr, jint keyCode) { 1629f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown NativeKeyCharacterMap* map = reinterpret_cast<NativeKeyCharacterMap*>(ptr); 1639f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return map->getMap()->getDisplayLabel(keyCode); 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1660c3f9210166a861fe568ac15994a0d7a42f7e28aAshok Bhatstatic jint nativeGetKeyboardType(JNIEnv *env, jobject clazz, jlong ptr) { 1679f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown NativeKeyCharacterMap* map = reinterpret_cast<NativeKeyCharacterMap*>(ptr); 1689f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return map->getMap()->getKeyboardType(); 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1710c3f9210166a861fe568ac15994a0d7a42f7e28aAshok Bhatstatic jobjectArray nativeGetEvents(JNIEnv *env, jobject clazz, jlong ptr, 1726b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown jcharArray charsArray) { 1739f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown NativeKeyCharacterMap* map = reinterpret_cast<NativeKeyCharacterMap*>(ptr); 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1756b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown jchar* chars = env->GetCharArrayElements(charsArray, NULL); 1766b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown if (!chars) { 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NULL; 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1796b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown jsize numChars = env->GetArrayLength(charsArray); 1806b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 1816b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown Vector<KeyEvent> events; 1826b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown jobjectArray result = NULL; 1836698749dd4d4d6513b26aa9071af290b956b68a7Dan Albert if (map->getMap()->getEvents(map->getDeviceId(), 1846698749dd4d4d6513b26aa9071af290b956b68a7Dan Albert reinterpret_cast<char16_t*>(chars), 1856698749dd4d4d6513b26aa9071af290b956b68a7Dan Albert size_t(numChars), events)) { 1866b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown result = env->NewObjectArray(jsize(events.size()), gKeyEventClassInfo.clazz, NULL); 1876b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown if (result) { 1886b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown for (size_t i = 0; i < events.size(); i++) { 1896b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown jobject keyEventObj = android_view_KeyEvent_fromNative(env, &events.itemAt(i)); 1906b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown if (!keyEventObj) break; // threw OOM exception 1916b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown env->SetObjectArrayElement(result, jsize(i), keyEventObj); 1926b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown env->DeleteLocalRef(keyEventObj); 1936b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown } 1946b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown } 1956b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown } 1966b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 1976b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown env->ReleaseCharArrayElements(charsArray, chars, JNI_ABORT); 1986b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown return result; 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2016b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * JNI registration. 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 20676f6a86de25e1bf74717e047e55fd44b089673f3Daniel Micaystatic const JNINativeMethod g_methods[] = { 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* name, signature, funcPtr */ 2080c3f9210166a861fe568ac15994a0d7a42f7e28aAshok Bhat { "nativeReadFromParcel", "(Landroid/os/Parcel;)J", 2099f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown (void*)nativeReadFromParcel }, 2100c3f9210166a861fe568ac15994a0d7a42f7e28aAshok Bhat { "nativeWriteToParcel", "(JLandroid/os/Parcel;)V", 2119f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown (void*)nativeWriteToParcel }, 2120c3f9210166a861fe568ac15994a0d7a42f7e28aAshok Bhat { "nativeDispose", "(J)V", 2136b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown (void*)nativeDispose }, 2140c3f9210166a861fe568ac15994a0d7a42f7e28aAshok Bhat { "nativeGetCharacter", "(JII)C", 2156b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown (void*)nativeGetCharacter }, 2160c3f9210166a861fe568ac15994a0d7a42f7e28aAshok Bhat { "nativeGetFallbackAction", "(JIILandroid/view/KeyCharacterMap$FallbackAction;)Z", 21749ed71db425c5054e3ad9526496a7e116c89556bJeff Brown (void*)nativeGetFallbackAction }, 2180c3f9210166a861fe568ac15994a0d7a42f7e28aAshok Bhat { "nativeGetNumber", "(JI)C", 2196b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown (void*)nativeGetNumber }, 2200c3f9210166a861fe568ac15994a0d7a42f7e28aAshok Bhat { "nativeGetMatch", "(JI[CI)C", 2216b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown (void*)nativeGetMatch }, 2220c3f9210166a861fe568ac15994a0d7a42f7e28aAshok Bhat { "nativeGetDisplayLabel", "(JI)C", 2236b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown (void*)nativeGetDisplayLabel }, 2240c3f9210166a861fe568ac15994a0d7a42f7e28aAshok Bhat { "nativeGetKeyboardType", "(J)I", 2256b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown (void*)nativeGetKeyboardType }, 2260c3f9210166a861fe568ac15994a0d7a42f7e28aAshok Bhat { "nativeGetEvents", "(J[C)[Landroid/view/KeyEvent;", 2276b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown (void*)nativeGetEvents }, 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2309f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brownint register_android_view_KeyCharacterMap(JNIEnv* env) 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 232987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe gKeyCharacterMapClassInfo.clazz = FindClassOrDie(env, "android/view/KeyCharacterMap"); 233987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe gKeyCharacterMapClassInfo.clazz = MakeGlobalRefOrDie(env, gKeyCharacterMapClassInfo.clazz); 2349f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 235987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe gKeyCharacterMapClassInfo.ctor = GetMethodIDOrDie(env, gKeyCharacterMapClassInfo.clazz, 2360c3f9210166a861fe568ac15994a0d7a42f7e28aAshok Bhat "<init>", "(J)V"); 2379f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 238987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe gKeyEventClassInfo.clazz = FindClassOrDie(env, "android/view/KeyEvent"); 239987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe gKeyEventClassInfo.clazz = MakeGlobalRefOrDie(env, gKeyEventClassInfo.clazz); 24049ed71db425c5054e3ad9526496a7e116c89556bJeff Brown 241987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe jclass clazz = FindClassOrDie(env, "android/view/KeyCharacterMap$FallbackAction"); 24249ed71db425c5054e3ad9526496a7e116c89556bJeff Brown 243987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe gFallbackActionClassInfo.keyCode = GetFieldIDOrDie(env, clazz, "keyCode", "I"); 244987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe gFallbackActionClassInfo.metaState = GetFieldIDOrDie(env, clazz, "metaState", "I"); 24549ed71db425c5054e3ad9526496a7e116c89556bJeff Brown 246987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe return RegisterMethodsOrDie(env, "android/view/KeyCharacterMap", g_methods, NELEM(g_methods)); 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; // namespace android 250