Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cfde2362 authored by arthurhung's avatar arthurhung
Browse files

Move drag event to InputDispatcher (2/n)

This CL adds the ability to receive a DRAG event through the
InputChannel, and adds the appropriate processing logic to
InputEventReceiver.

Bug: 158242495
Test: atest libinput_tests
Change-Id: I94d5fa545d920be52e03702d0d24712fd11c497c
parent 242cc497
Loading
Loading
Loading
Loading
+10 −0
Original line number Original line Diff line number Diff line
@@ -158,6 +158,16 @@ public abstract class InputEventReceiver {
    public void onPointerCaptureEvent(boolean pointerCaptureEnabled) {
    public void onPointerCaptureEvent(boolean pointerCaptureEnabled) {
    }
    }


    /**
     * Called when a drag event is received, from native code.
     *
     * @param isExiting if false, the window associated with this input channel has just received
     *                 drag
     *                 if true, the window associated with this input channel has just lost drag
     */
    public void onDragEvent(boolean isExiting, float x, float y) {
    }

    /**
    /**
     * Called when a batched input event is pending.
     * Called when a batched input event is pending.
     *
     *
+15 −0
Original line number Original line Diff line number Diff line
@@ -57,6 +57,7 @@ static struct {
    jmethodID dispatchInputEvent;
    jmethodID dispatchInputEvent;
    jmethodID onFocusEvent;
    jmethodID onFocusEvent;
    jmethodID onPointerCaptureEvent;
    jmethodID onPointerCaptureEvent;
    jmethodID onDragEvent;
    jmethodID onBatchedInputEventPending;
    jmethodID onBatchedInputEventPending;
} gInputEventReceiverClassInfo;
} gInputEventReceiverClassInfo;


@@ -400,6 +401,18 @@ status_t NativeInputEventReceiver::consumeEvents(JNIEnv* env,
                finishInputEvent(seq, true /* handled */);
                finishInputEvent(seq, true /* handled */);
                continue;
                continue;
            }
            }
            case AINPUT_EVENT_TYPE_DRAG: {
                const DragEvent* dragEvent = static_cast<DragEvent*>(inputEvent);
                if (kDebugDispatchCycle) {
                    ALOGD("channel '%s' ~ Received drag event: isExiting=%s",
                          getInputChannelName().c_str(), toString(dragEvent->isExiting()));
                }
                env->CallVoidMethod(receiverObj.get(), gInputEventReceiverClassInfo.onDragEvent,
                                    jboolean(dragEvent->isExiting()), dragEvent->getX(),
                                    dragEvent->getY());
                finishInputEvent(seq, true /* handled */);
                continue;
            }


            default:
            default:
                assert(false); // InputConsumer should prevent this from ever happening
                assert(false); // InputConsumer should prevent this from ever happening
@@ -547,6 +560,8 @@ int register_android_view_InputEventReceiver(JNIEnv* env) {
    gInputEventReceiverClassInfo.onPointerCaptureEvent =
    gInputEventReceiverClassInfo.onPointerCaptureEvent =
            GetMethodIDOrDie(env, gInputEventReceiverClassInfo.clazz, "onPointerCaptureEvent",
            GetMethodIDOrDie(env, gInputEventReceiverClassInfo.clazz, "onPointerCaptureEvent",
                             "(Z)V");
                             "(Z)V");
    gInputEventReceiverClassInfo.onDragEvent =
            GetMethodIDOrDie(env, gInputEventReceiverClassInfo.clazz, "onDragEvent", "(ZFF)V");
    gInputEventReceiverClassInfo.onBatchedInputEventPending =
    gInputEventReceiverClassInfo.onBatchedInputEventPending =
            GetMethodIDOrDie(env, gInputEventReceiverClassInfo.clazz, "onBatchedInputEventPending",
            GetMethodIDOrDie(env, gInputEventReceiverClassInfo.clazz, "onBatchedInputEventPending",
                             "(I)V");
                             "(I)V");