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

Commit bacfa36f authored by Arpit Singh's avatar Arpit Singh Committed by Android (Google) Code Review
Browse files

Merge "Simplify CancelationOptions in Inputdispatcher" into main

parents 5dba6a43 79b62517
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@

#include "trace/EventTrackerInterface.h"

#include <gui/WindowInfo.h>
#include <input/Input.h>
#include <bitset>
#include <optional>
@@ -42,6 +43,9 @@ struct CancelationOptions {
    // Descriptive reason for the cancelation.
    const char* reason;

    // Target window for the cancelation if set.
    sp<gui::WindowInfoHandle> windowHandle = nullptr;

    // The specific keycode of the key event to cancel, or nullopt to cancel any key event.
    std::optional<int32_t> keyCode = std::nullopt;

@@ -59,6 +63,31 @@ struct CancelationOptions {
    explicit CancelationOptions(Mode mode, const char* reason,
                                const std::unique_ptr<trace::EventTrackerInterface>& traceTracker)
          : mode(mode), reason(reason), traceTracker(traceTracker) {}
    explicit CancelationOptions(Mode mode, const char* reason,
                                const sp<gui::WindowInfoHandle>& windowHandle,
                                const std::unique_ptr<trace::EventTrackerInterface>& traceTracker)
          : mode(mode), reason(reason), windowHandle(windowHandle), traceTracker(traceTracker) {}
    explicit CancelationOptions(Mode mode, const char* reason,
                                const sp<gui::WindowInfoHandle>& windowHandle, int32_t deviceId,
                                const std::unique_ptr<trace::EventTrackerInterface>& traceTracker)
          : mode(mode),
            reason(reason),
            windowHandle(windowHandle),
            deviceId(deviceId),
            traceTracker(traceTracker) {}
    explicit CancelationOptions(Mode mode, const char* reason,
                                const sp<gui::WindowInfoHandle>& windowHandle, int32_t deviceId,
                                ui::LogicalDisplayId displayId,
                                std::bitset<MAX_POINTER_ID + 1> pointerIds,
                                const std::unique_ptr<trace::EventTrackerInterface>& traceTracker)
          : mode(mode),
            reason(reason),
            windowHandle(windowHandle),
            deviceId(deviceId),
            displayId(displayId),
            pointerIds(pointerIds),
            traceTracker(traceTracker) {}

    CancelationOptions(const CancelationOptions&) = delete;
    CancelationOptions operator=(const CancelationOptions&) = delete;
};
+107 −115

File changed.

Preview size limit exceeded, changes collapsed.

+21 −23
Original line number Diff line number Diff line
@@ -383,14 +383,6 @@ private:

    class DispatcherTouchState {
    public:
        struct CancellationArgs {
            const sp<gui::WindowInfoHandle> windowHandle;
            CancelationOptions::Mode mode;
            std::optional<DeviceId> deviceId{std::nullopt};
            ui::LogicalDisplayId displayId{ui::LogicalDisplayId::INVALID};
            std::bitset<MAX_POINTER_ID + 1> pointerIds{};
        };

        struct PointerDownArgs {
            const nsecs_t downTimeInTarget;
            const std::shared_ptr<Connection> connection;
@@ -436,8 +428,10 @@ private:
        std::string dump() const;

        // Updates the touchState for display from WindowInfo,
        // returns list of CancellationArgs for every cancelled touch
        std::list<CancellationArgs> updateFromWindowInfo(ui::LogicalDisplayId displayId);
        // returns list of CancelationOptions for every cancelled touch
        std::list<CancelationOptions> updateFromWindowInfo(
                ui::LogicalDisplayId displayId,
                const std::unique_ptr<trace::EventTrackerInterface>& traceTracker);

        void removeAllPointersForDevice(DeviceId deviceId);

@@ -445,12 +439,14 @@ private:
        // pointers, list of cancelled windows and pointers on successful transfer.
        std::optional<
                std::tuple<sp<gui::WindowInfoHandle>, DeviceId, std::vector<PointerProperties>,
                           std::list<CancellationArgs>, std::list<PointerDownArgs>>>
                           std::list<CancelationOptions>, std::list<PointerDownArgs>>>
        transferTouchGesture(const sp<IBinder>& fromToken, const sp<IBinder>& toToken,
                             bool transferEntireGesture);
                             bool transferEntireGesture,
                             const std::unique_ptr<trace::EventTrackerInterface>& traceTracker);

        base::Result<std::list<CancellationArgs>, status_t> pilferPointers(
                const sp<IBinder>& token, const Connection& requestingConnection);
        base::Result<std::list<CancelationOptions>, status_t> pilferPointers(
                const sp<IBinder>& token, const Connection& requestingConnection,
                const std::unique_ptr<trace::EventTrackerInterface>& traceTracker);

        void clear();

@@ -483,12 +479,13 @@ private:
        std::optional<std::tuple<TouchState&, TouchedWindow&, ui::LogicalDisplayId>>
        findTouchStateWindowAndDisplay(const sp<IBinder>& token);

        std::pair<std::list<CancellationArgs>, std::list<PointerDownArgs>> transferWallpaperTouch(
        std::pair<std::list<CancelationOptions>, std::list<PointerDownArgs>> transferWallpaperTouch(
                const sp<gui::WindowInfoHandle> fromWindowHandle,
                const sp<gui::WindowInfoHandle> toWindowHandle, TouchState& state,
                DeviceId deviceId, const std::vector<PointerProperties>& pointers,
                ftl::Flags<InputTarget::Flags> oldTargetFlags,
                ftl::Flags<InputTarget::Flags> newTargetFlags);
                ftl::Flags<InputTarget::Flags> newTargetFlags,
                const std::unique_ptr<trace::EventTrackerInterface>& traceTracker);

        void saveTouchStateForMotionEntry(const MotionEntry& entry, TouchState&& touchState);

@@ -504,11 +501,13 @@ private:
        // and false otherwise.
        bool isStylusActiveInDisplay(ui::LogicalDisplayId displayId) const;

        std::list<CancellationArgs> eraseRemovedWindowsFromWindowInfo(
                TouchState& state, ui::LogicalDisplayId displayId);
        std::list<CancelationOptions> eraseRemovedWindowsFromWindowInfo(
                TouchState& state, ui::LogicalDisplayId displayId,
                const std::unique_ptr<trace::EventTrackerInterface>& traceTracker);

        std::list<CancellationArgs> updateHoveringStateFromWindowInfo(
                TouchState& state, ui::LogicalDisplayId displayId);
        std::list<CancelationOptions> updateHoveringStateFromWindowInfo(
                TouchState& state, ui::LogicalDisplayId displayId,
                const std::unique_ptr<trace::EventTrackerInterface>& traceTracker);

        std::vector<InputTarget> findOutsideTargets(ui::LogicalDisplayId displayId,
                                                    const sp<gui::WindowInfoHandle>& touchedWindow,
@@ -864,12 +863,11 @@ private:
    void dispatchPointerDownOutsideFocus(uint32_t source, int32_t action,
                                         const sp<IBinder>& newToken) REQUIRES(mLock);

    void synthesizeCancelationEventsForAllConnectionsLocked(const CancelationOptions& options)
    void synthesizeCancelationEventsForAllConnectionsLocked(CancelationOptions&& options)
            REQUIRES(mLock);
    void synthesizeCancelationEventsForMonitorsLocked(const CancelationOptions& options)
            REQUIRES(mLock);
    void synthesizeCancelationEventsForWindowLocked(const sp<gui::WindowInfoHandle>&,
                                                    const CancelationOptions&,
    void synthesizeCancelationEventsForWindowLocked(const CancelationOptions&,
                                                    const std::shared_ptr<Connection>& = nullptr)
            REQUIRES(mLock);
    // This is a convenience function used to generate cancellation for a connection without having