diff options
Diffstat (limited to 'core/jni')
-rw-r--r-- | core/jni/android_view_InputChannel.cpp | 27 | ||||
-rw-r--r-- | core/jni/android_view_InputQueue.cpp | 15 |
2 files changed, 29 insertions, 13 deletions
diff --git a/core/jni/android_view_InputChannel.cpp b/core/jni/android_view_InputChannel.cpp index 0c2801c..5fcf8fa 100644 --- a/core/jni/android_view_InputChannel.cpp +++ b/core/jni/android_view_InputChannel.cpp @@ -111,7 +111,9 @@ static jobject android_view_InputChannel_createInputChannel(JNIEnv* env, NativeInputChannel* nativeInputChannel) { jobject inputChannelObj = env->NewObject(gInputChannelClassInfo.clazz, gInputChannelClassInfo.ctor); - android_view_InputChannel_setNativeInputChannel(env, inputChannelObj, nativeInputChannel); + if (inputChannelObj) { + android_view_InputChannel_setNativeInputChannel(env, inputChannelObj, nativeInputChannel); + } return inputChannelObj; } @@ -126,18 +128,29 @@ static jobjectArray android_view_InputChannel_nativeOpenInputChannelPair(JNIEnv* status_t result = InputChannel::openInputChannelPair(name, serverChannel, clientChannel); if (result) { - LOGE("Could not open input channel pair. status=%d", result); - jniThrowRuntimeException(env, "Could not open input channel pair."); + String8 message; + message.appendFormat("Could not open input channel pair. status=%d", result); + jniThrowRuntimeException(env, message.string()); + return NULL; + } + + jobjectArray channelPair = env->NewObjectArray(2, gInputChannelClassInfo.clazz, NULL); + if (env->ExceptionCheck()) { return NULL; } - // TODO more robust error checking jobject serverChannelObj = android_view_InputChannel_createInputChannel(env, new NativeInputChannel(serverChannel)); + if (env->ExceptionCheck()) { + return NULL; + } + jobject clientChannelObj = android_view_InputChannel_createInputChannel(env, new NativeInputChannel(clientChannel)); + if (env->ExceptionCheck()) { + return NULL; + } - jobjectArray channelPair = env->NewObjectArray(2, gInputChannelClassInfo.clazz, NULL); env->SetObjectArrayElement(channelPair, 0, serverChannelObj); env->SetObjectArrayElement(channelPair, 1, clientChannelObj); return channelPair; @@ -161,7 +174,7 @@ static void android_view_InputChannel_nativeDispose(JNIEnv* env, jobject obj, jb static void android_view_InputChannel_nativeTransferTo(JNIEnv* env, jobject obj, jobject otherObj) { - if (android_view_InputChannel_getInputChannel(env, otherObj) != NULL) { + if (android_view_InputChannel_getNativeInputChannel(env, otherObj) != NULL) { jniThrowException(env, "java/lang/IllegalStateException", "Other object already has a native input channel."); return; @@ -175,7 +188,7 @@ static void android_view_InputChannel_nativeTransferTo(JNIEnv* env, jobject obj, static void android_view_InputChannel_nativeReadFromParcel(JNIEnv* env, jobject obj, jobject parcelObj) { - if (android_view_InputChannel_getInputChannel(env, obj) != NULL) { + if (android_view_InputChannel_getNativeInputChannel(env, obj) != NULL) { jniThrowException(env, "java/lang/IllegalStateException", "This object already has a native input channel."); return; diff --git a/core/jni/android_view_InputQueue.cpp b/core/jni/android_view_InputQueue.cpp index 80c4871..300c04a 100644 --- a/core/jni/android_view_InputQueue.cpp +++ b/core/jni/android_view_InputQueue.cpp @@ -455,8 +455,9 @@ static void android_view_InputQueue_nativeRegisterInputChannel(JNIEnv* env, jcla env, inputChannelObj, inputHandlerObj, messageQueueObj); if (status) { - jniThrowRuntimeException(env, "Failed to register input channel. " - "Check logs for details."); + String8 message; + message.appendFormat("Failed to register input channel. status=%d", status); + jniThrowRuntimeException(env, message.string()); } } @@ -465,8 +466,9 @@ static void android_view_InputQueue_nativeUnregisterInputChannel(JNIEnv* env, jc status_t status = gNativeInputQueue.unregisterInputChannel(env, inputChannelObj); if (status) { - jniThrowRuntimeException(env, "Failed to unregister input channel. " - "Check logs for details."); + String8 message; + message.appendFormat("Failed to unregister input channel. status=%d", status); + jniThrowRuntimeException(env, message.string()); } } @@ -479,8 +481,9 @@ static void android_view_InputQueue_nativeFinished(JNIEnv* env, jclass clazz, // was no longer registered (DEAD_OBJECT) since it is a common race that can occur // during application shutdown. The input dispatcher recovers gracefully anyways. if (status != OK && status != DEAD_OBJECT) { - jniThrowRuntimeException(env, "Failed to finish input event. " - "Check logs for details."); + String8 message; + message.appendFormat("Failed to finish input event. status=%d", status); + jniThrowRuntimeException(env, message.string()); } } |