Loading core/java/android/view/InputDevice.java +9 −1 Original line number Diff line number Diff line Loading @@ -19,7 +19,6 @@ package android.view; import android.os.Parcel; import android.os.Parcelable; import android.os.RemoteException; import android.os.ServiceManager; import java.util.ArrayList; import java.util.List; Loading @@ -44,6 +43,7 @@ public final class InputDevice implements Parcelable { private String mName; private int mSources; private int mKeyboardType; private String mKeyCharacterMapFile; private final ArrayList<MotionRange> mMotionRanges = new ArrayList<MotionRange>(); Loading Loading @@ -360,6 +360,10 @@ public final class InputDevice implements Parcelable { return KeyCharacterMap.load(mId); } String getKeyCharacterMapFile() { return mKeyCharacterMapFile; } /** * Gets information about the range of values for a particular {@link MotionEvent} axis. * If the device supports multiple sources, the same axis may have different meanings Loading Loading @@ -532,6 +536,7 @@ public final class InputDevice implements Parcelable { mName = in.readString(); mSources = in.readInt(); mKeyboardType = in.readInt(); mKeyCharacterMapFile = in.readString(); for (;;) { int axis = in.readInt(); Loading @@ -549,6 +554,7 @@ public final class InputDevice implements Parcelable { out.writeString(mName); out.writeInt(mSources); out.writeInt(mKeyboardType); out.writeString(mKeyCharacterMapFile); final int numRanges = mMotionRanges.size(); for (int i = 0; i < numRanges; i++) { Loading Loading @@ -587,6 +593,8 @@ public final class InputDevice implements Parcelable { } description.append("\n"); description.append(" Key Character Map: ").append(mKeyCharacterMapFile).append("\n"); description.append(" Sources: 0x").append(Integer.toHexString(mSources)).append(" ("); appendSourceDescriptionIfApplicable(description, SOURCE_KEYBOARD, "keyboard"); appendSourceDescriptionIfApplicable(description, SOURCE_DPAD, "dpad"); Loading core/java/android/view/KeyCharacterMap.java +12 −3 Original line number Diff line number Diff line Loading @@ -20,7 +20,6 @@ import android.text.method.MetaKeyKeyListener; import android.util.AndroidRuntimeException; import android.util.SparseIntArray; import android.os.RemoteException; import android.os.ServiceManager; import android.util.SparseArray; import java.lang.Character; Loading Loading @@ -140,7 +139,7 @@ public class KeyCharacterMap { private final int mDeviceId; private int mPtr; private static native int nativeLoad(int id); private static native int nativeLoad(String file); private static native void nativeDispose(int ptr); private static native char nativeGetCharacter(int ptr, int keyCode, int metaState); Loading Loading @@ -178,7 +177,17 @@ public class KeyCharacterMap { synchronized (sInstances) { KeyCharacterMap map = sInstances.get(deviceId); if (map == null) { int ptr = nativeLoad(deviceId); // might throw String kcm = null; if (deviceId != VIRTUAL_KEYBOARD) { InputDevice device = InputDevice.getDevice(deviceId); if (device != null) { kcm = device.getKeyCharacterMapFile(); } } if (kcm == null || kcm.length() == 0) { kcm = "/system/usr/keychars/Virtual.kcm"; } int ptr = nativeLoad(kcm); // might throw map = new KeyCharacterMap(deviceId, ptr); sInstances.put(deviceId, map); } Loading core/jni/android_view_KeyCharacterMap.cpp +14 −7 Original line number Diff line number Diff line Loading @@ -35,18 +35,25 @@ static struct { } gFallbackActionClassInfo; static jint nativeLoad(JNIEnv *env, jobject clazz, jint deviceId) { static jint nativeLoad(JNIEnv *env, jobject clazz, jstring fileStr) { const char* file = env->GetStringUTFChars(fileStr, NULL); KeyCharacterMap* map; status_t status = KeyCharacterMap::loadByDeviceId(deviceId, &map); status_t status = KeyCharacterMap::load(String8(file), &map); jint result; if (status) { String8 msg; msg.appendFormat("Could not load key character map for device %d due to error %d. " "Refer to the log for details.", deviceId, status); msg.appendFormat("Could not load key character map '%s' due to error %d. " "Refer to the log for details.", file, status); jniThrowException(env, "android/view/KeyCharacterMap$KeyCharacterMapUnavailableException", msg.string()); return 0; result = 0; } else { result = reinterpret_cast<jint>(map); } return reinterpret_cast<jint>(map); env->ReleaseStringUTFChars(fileStr, file); return result; } static void nativeDispose(JNIEnv *env, jobject clazz, jint ptr) { Loading Loading @@ -141,7 +148,7 @@ static jobjectArray nativeGetEvents(JNIEnv *env, jobject clazz, jint ptr, jint d static JNINativeMethod g_methods[] = { /* name, signature, funcPtr */ { "nativeLoad", "(I)I", { "nativeLoad", "(Ljava/lang/String;)I", (void*)nativeLoad }, { "nativeDispose", "(I)V", (void*)nativeDispose }, Loading include/ui/Input.h +4 −0 Original line number Diff line number Diff line Loading @@ -826,6 +826,9 @@ public: inline void setKeyboardType(int32_t keyboardType) { mKeyboardType = keyboardType; } inline int32_t getKeyboardType() const { return mKeyboardType; } inline void setKeyCharacterMapFile(const String8& value) { mKeyCharacterMapFile = value; } inline const String8& getKeyCharacterMapFile() const { return mKeyCharacterMapFile; } inline const Vector<MotionRange>& getMotionRanges() const { return mMotionRanges; } Loading @@ -835,6 +838,7 @@ private: String8 mName; uint32_t mSources; int32_t mKeyboardType; String8 mKeyCharacterMapFile; Vector<MotionRange> mMotionRanges; }; Loading include/ui/KeyCharacterMap.h +0 −1 Original line number Diff line number Diff line Loading @@ -53,7 +53,6 @@ public: ~KeyCharacterMap(); static status_t load(const String8& filename, KeyCharacterMap** outMap); static status_t loadByDeviceId(int32_t deviceId, KeyCharacterMap** outMap); /* Gets the keyboard type. */ int32_t getKeyboardType() const; Loading Loading
core/java/android/view/InputDevice.java +9 −1 Original line number Diff line number Diff line Loading @@ -19,7 +19,6 @@ package android.view; import android.os.Parcel; import android.os.Parcelable; import android.os.RemoteException; import android.os.ServiceManager; import java.util.ArrayList; import java.util.List; Loading @@ -44,6 +43,7 @@ public final class InputDevice implements Parcelable { private String mName; private int mSources; private int mKeyboardType; private String mKeyCharacterMapFile; private final ArrayList<MotionRange> mMotionRanges = new ArrayList<MotionRange>(); Loading Loading @@ -360,6 +360,10 @@ public final class InputDevice implements Parcelable { return KeyCharacterMap.load(mId); } String getKeyCharacterMapFile() { return mKeyCharacterMapFile; } /** * Gets information about the range of values for a particular {@link MotionEvent} axis. * If the device supports multiple sources, the same axis may have different meanings Loading Loading @@ -532,6 +536,7 @@ public final class InputDevice implements Parcelable { mName = in.readString(); mSources = in.readInt(); mKeyboardType = in.readInt(); mKeyCharacterMapFile = in.readString(); for (;;) { int axis = in.readInt(); Loading @@ -549,6 +554,7 @@ public final class InputDevice implements Parcelable { out.writeString(mName); out.writeInt(mSources); out.writeInt(mKeyboardType); out.writeString(mKeyCharacterMapFile); final int numRanges = mMotionRanges.size(); for (int i = 0; i < numRanges; i++) { Loading Loading @@ -587,6 +593,8 @@ public final class InputDevice implements Parcelable { } description.append("\n"); description.append(" Key Character Map: ").append(mKeyCharacterMapFile).append("\n"); description.append(" Sources: 0x").append(Integer.toHexString(mSources)).append(" ("); appendSourceDescriptionIfApplicable(description, SOURCE_KEYBOARD, "keyboard"); appendSourceDescriptionIfApplicable(description, SOURCE_DPAD, "dpad"); Loading
core/java/android/view/KeyCharacterMap.java +12 −3 Original line number Diff line number Diff line Loading @@ -20,7 +20,6 @@ import android.text.method.MetaKeyKeyListener; import android.util.AndroidRuntimeException; import android.util.SparseIntArray; import android.os.RemoteException; import android.os.ServiceManager; import android.util.SparseArray; import java.lang.Character; Loading Loading @@ -140,7 +139,7 @@ public class KeyCharacterMap { private final int mDeviceId; private int mPtr; private static native int nativeLoad(int id); private static native int nativeLoad(String file); private static native void nativeDispose(int ptr); private static native char nativeGetCharacter(int ptr, int keyCode, int metaState); Loading Loading @@ -178,7 +177,17 @@ public class KeyCharacterMap { synchronized (sInstances) { KeyCharacterMap map = sInstances.get(deviceId); if (map == null) { int ptr = nativeLoad(deviceId); // might throw String kcm = null; if (deviceId != VIRTUAL_KEYBOARD) { InputDevice device = InputDevice.getDevice(deviceId); if (device != null) { kcm = device.getKeyCharacterMapFile(); } } if (kcm == null || kcm.length() == 0) { kcm = "/system/usr/keychars/Virtual.kcm"; } int ptr = nativeLoad(kcm); // might throw map = new KeyCharacterMap(deviceId, ptr); sInstances.put(deviceId, map); } Loading
core/jni/android_view_KeyCharacterMap.cpp +14 −7 Original line number Diff line number Diff line Loading @@ -35,18 +35,25 @@ static struct { } gFallbackActionClassInfo; static jint nativeLoad(JNIEnv *env, jobject clazz, jint deviceId) { static jint nativeLoad(JNIEnv *env, jobject clazz, jstring fileStr) { const char* file = env->GetStringUTFChars(fileStr, NULL); KeyCharacterMap* map; status_t status = KeyCharacterMap::loadByDeviceId(deviceId, &map); status_t status = KeyCharacterMap::load(String8(file), &map); jint result; if (status) { String8 msg; msg.appendFormat("Could not load key character map for device %d due to error %d. " "Refer to the log for details.", deviceId, status); msg.appendFormat("Could not load key character map '%s' due to error %d. " "Refer to the log for details.", file, status); jniThrowException(env, "android/view/KeyCharacterMap$KeyCharacterMapUnavailableException", msg.string()); return 0; result = 0; } else { result = reinterpret_cast<jint>(map); } return reinterpret_cast<jint>(map); env->ReleaseStringUTFChars(fileStr, file); return result; } static void nativeDispose(JNIEnv *env, jobject clazz, jint ptr) { Loading Loading @@ -141,7 +148,7 @@ static jobjectArray nativeGetEvents(JNIEnv *env, jobject clazz, jint ptr, jint d static JNINativeMethod g_methods[] = { /* name, signature, funcPtr */ { "nativeLoad", "(I)I", { "nativeLoad", "(Ljava/lang/String;)I", (void*)nativeLoad }, { "nativeDispose", "(I)V", (void*)nativeDispose }, Loading
include/ui/Input.h +4 −0 Original line number Diff line number Diff line Loading @@ -826,6 +826,9 @@ public: inline void setKeyboardType(int32_t keyboardType) { mKeyboardType = keyboardType; } inline int32_t getKeyboardType() const { return mKeyboardType; } inline void setKeyCharacterMapFile(const String8& value) { mKeyCharacterMapFile = value; } inline const String8& getKeyCharacterMapFile() const { return mKeyCharacterMapFile; } inline const Vector<MotionRange>& getMotionRanges() const { return mMotionRanges; } Loading @@ -835,6 +838,7 @@ private: String8 mName; uint32_t mSources; int32_t mKeyboardType; String8 mKeyCharacterMapFile; Vector<MotionRange> mMotionRanges; }; Loading
include/ui/KeyCharacterMap.h +0 −1 Original line number Diff line number Diff line Loading @@ -53,7 +53,6 @@ public: ~KeyCharacterMap(); static status_t load(const String8& filename, KeyCharacterMap** outMap); static status_t loadByDeviceId(int32_t deviceId, KeyCharacterMap** outMap); /* Gets the keyboard type. */ int32_t getKeyboardType() const; Loading