diff options
Diffstat (limited to 'core/jni/android_view_InputQueue.cpp')
-rw-r--r-- | core/jni/android_view_InputQueue.cpp | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/core/jni/android_view_InputQueue.cpp b/core/jni/android_view_InputQueue.cpp index 282e9ed..b5a5d2e 100644 --- a/core/jni/android_view_InputQueue.cpp +++ b/core/jni/android_view_InputQueue.cpp @@ -61,7 +61,7 @@ public: status_t unregisterInputChannel(JNIEnv* env, jobject inputChannelObj); - status_t finished(JNIEnv* env, jlong finishedToken, bool ignoreSpuriousFinish); + status_t finished(JNIEnv* env, jlong finishedToken, bool handled, bool ignoreSpuriousFinish); private: class Connection : public RefBase { @@ -211,7 +211,7 @@ status_t NativeInputQueue::unregisterInputChannel(JNIEnv* env, jobject inputChan "while an input message is still in progress.", connection->getInputChannelName()); connection->messageInProgress = false; - connection->inputConsumer.sendFinishedSignal(); // ignoring result + connection->inputConsumer.sendFinishedSignal(false); // ignoring result } } // release lock @@ -231,7 +231,8 @@ ssize_t NativeInputQueue::getConnectionIndex(const sp<InputChannel>& inputChanne return -1; } -status_t NativeInputQueue::finished(JNIEnv* env, jlong finishedToken, bool ignoreSpuriousFinish) { +status_t NativeInputQueue::finished(JNIEnv* env, jlong finishedToken, + bool handled, bool ignoreSpuriousFinish) { int32_t receiveFd; uint16_t connectionId; uint16_t messageSeqNum; @@ -268,7 +269,7 @@ status_t NativeInputQueue::finished(JNIEnv* env, jlong finishedToken, bool ignor connection->messageInProgress = false; - status_t status = connection->inputConsumer.sendFinishedSignal(); + status_t status = connection->inputConsumer.sendFinishedSignal(handled); if (status) { LOGW("Failed to send finished signal on channel '%s'. status=%d", connection->getInputChannelName(), status); @@ -341,7 +342,7 @@ int NativeInputQueue::handleReceiveCallback(int receiveFd, int events, void* dat if (status) { LOGW("channel '%s' ~ Failed to consume input event. status=%d", connection->getInputChannelName(), status); - connection->inputConsumer.sendFinishedSignal(); + connection->inputConsumer.sendFinishedSignal(false); return 1; } @@ -393,7 +394,7 @@ int NativeInputQueue::handleReceiveCallback(int receiveFd, int events, void* dat LOGW("channel '%s' ~ Failed to obtain DVM event object.", connection->getInputChannelName()); env->DeleteLocalRef(inputHandlerObjLocal); - q->finished(env, finishedToken, false); + q->finished(env, finishedToken, false, false); return 1; } @@ -412,7 +413,7 @@ int NativeInputQueue::handleReceiveCallback(int receiveFd, int events, void* dat LOGE_EX(env); env->ExceptionClear(); - q->finished(env, finishedToken, true /*ignoreSpuriousFinish*/); + q->finished(env, finishedToken, false, true /*ignoreSpuriousFinish*/); } env->DeleteLocalRef(inputEventObj); @@ -470,9 +471,9 @@ static void android_view_InputQueue_nativeUnregisterInputChannel(JNIEnv* env, jc } static void android_view_InputQueue_nativeFinished(JNIEnv* env, jclass clazz, - jlong finishedToken) { + jlong finishedToken, bool handled) { status_t status = gNativeInputQueue.finished( - env, finishedToken, false /*ignoreSpuriousFinish*/); + env, finishedToken, handled, false /*ignoreSpuriousFinish*/); // We ignore the case where an event could not be finished because the input channel // was no longer registered (DEAD_OBJECT) since it is a common race that can occur @@ -493,7 +494,7 @@ static JNINativeMethod gInputQueueMethods[] = { { "nativeUnregisterInputChannel", "(Landroid/view/InputChannel;)V", (void*)android_view_InputQueue_nativeUnregisterInputChannel }, - { "nativeFinished", "(J)V", + { "nativeFinished", "(JZ)V", (void*)android_view_InputQueue_nativeFinished } }; |