summaryrefslogtreecommitdiffstats
path: root/core/jni/android_view_InputQueue.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/jni/android_view_InputQueue.cpp')
-rw-r--r--core/jni/android_view_InputQueue.cpp21
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 }
};