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

Commit 78a8dbe5 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 11545716 from 64f893df to 24Q3-release

Change-Id: I87fa0dd24ee79943210f2908005fb0f0e0f0d666
parents b776f4c3 64f893df
Loading
Loading
Loading
Loading
+0 −7
Original line number Diff line number Diff line
@@ -670,13 +670,6 @@ private:
    status_t sendUnchainedFinishedSignal(uint32_t seq, bool handled);

    static void rewriteMessage(TouchState& state, InputMessage& msg);
    static void initializeKeyEvent(KeyEvent* event, const InputMessage* msg);
    static void initializeMotionEvent(MotionEvent* event, const InputMessage* msg);
    static void initializeFocusEvent(FocusEvent* event, const InputMessage* msg);
    static void initializeCaptureEvent(CaptureEvent* event, const InputMessage* msg);
    static void initializeDragEvent(DragEvent* event, const InputMessage* msg);
    static void initializeTouchModeEvent(TouchModeEvent* event, const InputMessage* msg);
    static void addSample(MotionEvent* event, const InputMessage* msg);
    static bool canAddSample(const Batch& batch, const InputMessage* msg);
    static ssize_t findSampleNoLaterThan(const Batch& batch, nsecs_t time);

+72 −73
Original line number Diff line number Diff line
@@ -30,6 +30,8 @@

namespace input_flags = com::android::input::flags;

namespace android {

namespace {

/**
@@ -110,13 +112,73 @@ android::base::unique_fd dupChannelFd(int fd) {
    return newFd;
}

void initializeKeyEvent(KeyEvent& event, const InputMessage& msg) {
    event.initialize(msg.body.key.eventId, msg.body.key.deviceId, msg.body.key.source,
                     msg.body.key.displayId, msg.body.key.hmac, msg.body.key.action,
                     msg.body.key.flags, msg.body.key.keyCode, msg.body.key.scanCode,
                     msg.body.key.metaState, msg.body.key.repeatCount, msg.body.key.downTime,
                     msg.body.key.eventTime);
}

void initializeFocusEvent(FocusEvent& event, const InputMessage& msg) {
    event.initialize(msg.body.focus.eventId, msg.body.focus.hasFocus);
}

void initializeCaptureEvent(CaptureEvent& event, const InputMessage& msg) {
    event.initialize(msg.body.capture.eventId, msg.body.capture.pointerCaptureEnabled);
}

void initializeDragEvent(DragEvent& event, const InputMessage& msg) {
    event.initialize(msg.body.drag.eventId, msg.body.drag.x, msg.body.drag.y,
                     msg.body.drag.isExiting);
}

void initializeMotionEvent(MotionEvent& event, const InputMessage& msg) {
    uint32_t pointerCount = msg.body.motion.pointerCount;
    PointerProperties pointerProperties[pointerCount];
    PointerCoords pointerCoords[pointerCount];
    for (uint32_t i = 0; i < pointerCount; i++) {
        pointerProperties[i] = msg.body.motion.pointers[i].properties;
        pointerCoords[i] = msg.body.motion.pointers[i].coords;
    }

    ui::Transform transform;
    transform.set({msg.body.motion.dsdx, msg.body.motion.dtdx, msg.body.motion.tx,
                   msg.body.motion.dtdy, msg.body.motion.dsdy, msg.body.motion.ty, 0, 0, 1});
    ui::Transform displayTransform;
    displayTransform.set({msg.body.motion.dsdxRaw, msg.body.motion.dtdxRaw, msg.body.motion.txRaw,
                          msg.body.motion.dtdyRaw, msg.body.motion.dsdyRaw, msg.body.motion.tyRaw,
                          0, 0, 1});
    event.initialize(msg.body.motion.eventId, msg.body.motion.deviceId, msg.body.motion.source,
                     msg.body.motion.displayId, msg.body.motion.hmac, msg.body.motion.action,
                     msg.body.motion.actionButton, msg.body.motion.flags, msg.body.motion.edgeFlags,
                     msg.body.motion.metaState, msg.body.motion.buttonState,
                     msg.body.motion.classification, transform, msg.body.motion.xPrecision,
                     msg.body.motion.yPrecision, msg.body.motion.xCursorPosition,
                     msg.body.motion.yCursorPosition, displayTransform, msg.body.motion.downTime,
                     msg.body.motion.eventTime, pointerCount, pointerProperties, pointerCoords);
}

void addSample(MotionEvent& event, const InputMessage& msg) {
    uint32_t pointerCount = msg.body.motion.pointerCount;
    PointerCoords pointerCoords[pointerCount];
    for (uint32_t i = 0; i < pointerCount; i++) {
        pointerCoords[i] = msg.body.motion.pointers[i].coords;
    }

    event.setMetaState(event.getMetaState() | msg.body.motion.metaState);
    event.addSample(msg.body.motion.eventTime, pointerCoords);
}

void initializeTouchModeEvent(TouchModeEvent& event, const InputMessage& msg) {
    event.initialize(msg.body.touchMode.eventId, msg.body.touchMode.isInTouchMode);
}

} // namespace

using android::base::Result;
using android::base::StringPrintf;

namespace android {

// Socket buffer size.  The default is typically about 128KB, which is much larger than
// we really need.  So we make it smaller.  It just needs to be big enough to hold
// a few dozen large multi-finger motion events in the case where an application gets
@@ -902,7 +964,7 @@ status_t InputConsumer::consume(InputEventFactoryInterface* factory, bool consum
                KeyEvent* keyEvent = factory->createKeyEvent();
                if (!keyEvent) return NO_MEMORY;

                initializeKeyEvent(keyEvent, &mMsg);
                initializeKeyEvent(*keyEvent, mMsg);
                *outSeq = mMsg.header.seq;
                *outEvent = keyEvent;
                ALOGD_IF(DEBUG_TRANSPORT_CONSUMER,
@@ -965,7 +1027,7 @@ status_t InputConsumer::consume(InputEventFactoryInterface* factory, bool consum
                if (!motionEvent) return NO_MEMORY;

                updateTouchState(mMsg);
                initializeMotionEvent(motionEvent, &mMsg);
                initializeMotionEvent(*motionEvent, mMsg);
                *outSeq = mMsg.header.seq;
                *outEvent = motionEvent;

@@ -987,7 +1049,7 @@ status_t InputConsumer::consume(InputEventFactoryInterface* factory, bool consum
                FocusEvent* focusEvent = factory->createFocusEvent();
                if (!focusEvent) return NO_MEMORY;

                initializeFocusEvent(focusEvent, &mMsg);
                initializeFocusEvent(*focusEvent, mMsg);
                *outSeq = mMsg.header.seq;
                *outEvent = focusEvent;
                break;
@@ -997,7 +1059,7 @@ status_t InputConsumer::consume(InputEventFactoryInterface* factory, bool consum
                CaptureEvent* captureEvent = factory->createCaptureEvent();
                if (!captureEvent) return NO_MEMORY;

                initializeCaptureEvent(captureEvent, &mMsg);
                initializeCaptureEvent(*captureEvent, mMsg);
                *outSeq = mMsg.header.seq;
                *outEvent = captureEvent;
                break;
@@ -1007,7 +1069,7 @@ status_t InputConsumer::consume(InputEventFactoryInterface* factory, bool consum
                DragEvent* dragEvent = factory->createDragEvent();
                if (!dragEvent) return NO_MEMORY;

                initializeDragEvent(dragEvent, &mMsg);
                initializeDragEvent(*dragEvent, mMsg);
                *outSeq = mMsg.header.seq;
                *outEvent = dragEvent;
                break;
@@ -1017,7 +1079,7 @@ status_t InputConsumer::consume(InputEventFactoryInterface* factory, bool consum
                TouchModeEvent* touchModeEvent = factory->createTouchModeEvent();
                if (!touchModeEvent) return NO_MEMORY;

                initializeTouchModeEvent(touchModeEvent, &mMsg);
                initializeTouchModeEvent(*touchModeEvent, mMsg);
                *outSeq = mMsg.header.seq;
                *outEvent = touchModeEvent;
                break;
@@ -1079,9 +1141,9 @@ status_t InputConsumer::consumeSamples(InputEventFactoryInterface* factory,
            seqChain.seq = msg.header.seq;
            seqChain.chain = chain;
            mSeqChains.push_back(seqChain);
            addSample(motionEvent, &msg);
            addSample(*motionEvent, msg);
        } else {
            initializeMotionEvent(motionEvent, &msg);
            initializeMotionEvent(*motionEvent, msg);
        }
        chain = msg.header.seq;
    }
@@ -1465,69 +1527,6 @@ ssize_t InputConsumer::findTouchState(int32_t deviceId, int32_t source) const {
    return -1;
}

void InputConsumer::initializeKeyEvent(KeyEvent* event, const InputMessage* msg) {
    event->initialize(msg->body.key.eventId, msg->body.key.deviceId, msg->body.key.source,
                      msg->body.key.displayId, msg->body.key.hmac, msg->body.key.action,
                      msg->body.key.flags, msg->body.key.keyCode, msg->body.key.scanCode,
                      msg->body.key.metaState, msg->body.key.repeatCount, msg->body.key.downTime,
                      msg->body.key.eventTime);
}

void InputConsumer::initializeFocusEvent(FocusEvent* event, const InputMessage* msg) {
    event->initialize(msg->body.focus.eventId, msg->body.focus.hasFocus);
}

void InputConsumer::initializeCaptureEvent(CaptureEvent* event, const InputMessage* msg) {
    event->initialize(msg->body.capture.eventId, msg->body.capture.pointerCaptureEnabled);
}

void InputConsumer::initializeDragEvent(DragEvent* event, const InputMessage* msg) {
    event->initialize(msg->body.drag.eventId, msg->body.drag.x, msg->body.drag.y,
                      msg->body.drag.isExiting);
}

void InputConsumer::initializeMotionEvent(MotionEvent* event, const InputMessage* msg) {
    uint32_t pointerCount = msg->body.motion.pointerCount;
    PointerProperties pointerProperties[pointerCount];
    PointerCoords pointerCoords[pointerCount];
    for (uint32_t i = 0; i < pointerCount; i++) {
        pointerProperties[i] = msg->body.motion.pointers[i].properties;
        pointerCoords[i] = msg->body.motion.pointers[i].coords;
    }

    ui::Transform transform;
    transform.set({msg->body.motion.dsdx, msg->body.motion.dtdx, msg->body.motion.tx,
                   msg->body.motion.dtdy, msg->body.motion.dsdy, msg->body.motion.ty, 0, 0, 1});
    ui::Transform displayTransform;
    displayTransform.set({msg->body.motion.dsdxRaw, msg->body.motion.dtdxRaw,
                          msg->body.motion.txRaw, msg->body.motion.dtdyRaw,
                          msg->body.motion.dsdyRaw, msg->body.motion.tyRaw, 0, 0, 1});
    event->initialize(msg->body.motion.eventId, msg->body.motion.deviceId, msg->body.motion.source,
                      msg->body.motion.displayId, msg->body.motion.hmac, msg->body.motion.action,
                      msg->body.motion.actionButton, msg->body.motion.flags,
                      msg->body.motion.edgeFlags, msg->body.motion.metaState,
                      msg->body.motion.buttonState, msg->body.motion.classification, transform,
                      msg->body.motion.xPrecision, msg->body.motion.yPrecision,
                      msg->body.motion.xCursorPosition, msg->body.motion.yCursorPosition,
                      displayTransform, msg->body.motion.downTime, msg->body.motion.eventTime,
                      pointerCount, pointerProperties, pointerCoords);
}

void InputConsumer::initializeTouchModeEvent(TouchModeEvent* event, const InputMessage* msg) {
    event->initialize(msg->body.touchMode.eventId, msg->body.touchMode.isInTouchMode);
}

void InputConsumer::addSample(MotionEvent* event, const InputMessage* msg) {
    uint32_t pointerCount = msg->body.motion.pointerCount;
    PointerCoords pointerCoords[pointerCount];
    for (uint32_t i = 0; i < pointerCount; i++) {
        pointerCoords[i] = msg->body.motion.pointers[i].coords;
    }

    event->setMetaState(event->getMetaState() | msg->body.motion.metaState);
    event->addSample(msg->body.motion.eventTime, pointerCoords);
}

bool InputConsumer::canAddSample(const Batch& batch, const InputMessage *msg) {
    const InputMessage& head = batch.samples[0];
    uint32_t pointerCount = msg->body.motion.pointerCount;
+0 −2
Original line number Diff line number Diff line
@@ -16,8 +16,6 @@

#include <array>

#include "TestHelpers.h"

#include <unistd.h>
#include <time.h>
#include <errno.h>
+0 −2
Original line number Diff line number Diff line
@@ -14,8 +14,6 @@
 * limitations under the License.
 */

#include "TestHelpers.h"

#include <attestation/HmacKeyManager.h>
#include <gtest/gtest.h>
#include <gui/constants.h>

libs/input/tests/TestHelpers.h

deleted100644 → 0
+0 −81
Original line number Diff line number Diff line
/*
 * Copyright (C) 2010 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef TESTHELPERS_H
#define TESTHELPERS_H

#include <unistd.h>

#include <utils/threads.h>

namespace android {

class Pipe {
public:
    int sendFd;
    int receiveFd;

    Pipe() {
        int fds[2];
        ::pipe(fds);

        receiveFd = fds[0];
        sendFd = fds[1];
    }

    ~Pipe() {
        if (sendFd != -1) {
            ::close(sendFd);
        }

        if (receiveFd != -1) {
            ::close(receiveFd);
        }
    }

    status_t writeSignal() {
        ssize_t nWritten = ::write(sendFd, "*", 1);
        return nWritten == 1 ? 0 : -errno;
    }

    status_t readSignal() {
        char buf[1];
        ssize_t nRead = ::read(receiveFd, buf, 1);
        return nRead == 1 ? 0 : nRead == 0 ? -EPIPE : -errno;
    }
};

class DelayedTask : public Thread {
    int mDelayMillis;

public:
    explicit DelayedTask(int delayMillis) : mDelayMillis(delayMillis) { }

protected:
    virtual ~DelayedTask() { }

    virtual void doTask() = 0;

    virtual bool threadLoop() {
        usleep(mDelayMillis * 1000);
        doTask();
        return false;
    }
};

} // namespace android

#endif // TESTHELPERS_H
Loading