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

Commit d20a62ad authored by Arpit Singh's avatar Arpit Singh
Browse files

Revert "[10/n Dispatcher refactor] Move obscuring related method..."

Revert submission 31063667

Reason for revert: b/389024840

Reverted changes: /q/submissionid:31063667

Change-Id: I4c6b6de4bc0ea4448873f1f18b71de7a3bcb7af4
parent eeec678a
Loading
Loading
Loading
Loading
+19 −18
Original line number Diff line number Diff line
@@ -2506,9 +2506,9 @@ InputDispatcher::findTouchedWindowTargetsLocked(nsecs_t currentTime, const Motio
            if (isSplit) {
                targetFlags |= InputTarget::Flags::SPLIT;
            }
            if (mWindowInfos.isWindowObscuredAtPoint(windowHandle, x, y)) {
            if (isWindowObscuredAtPointLocked(windowHandle, x, y)) {
                targetFlags |= InputTarget::Flags::WINDOW_IS_OBSCURED;
            } else if (mWindowInfos.isWindowObscured(windowHandle)) {
            } else if (isWindowObscuredLocked(windowHandle)) {
                targetFlags |= InputTarget::Flags::WINDOW_IS_PARTIALLY_OBSCURED;
            }

@@ -2539,8 +2539,7 @@ InputDispatcher::findTouchedWindowTargetsLocked(nsecs_t currentTime, const Motio
                if (isDownOrPointerDown && targetFlags.test(InputTarget::Flags::FOREGROUND) &&
                    windowHandle->getInfo()->inputConfig.test(
                            gui::WindowInfo::InputConfig::DUPLICATE_TOUCH_TO_WALLPAPER)) {
                    sp<WindowInfoHandle> wallpaper =
                            mWindowInfos.findWallpaperWindowBelow(windowHandle);
                    sp<WindowInfoHandle> wallpaper = findWallpaperWindowBelow(windowHandle);
                    if (wallpaper != nullptr) {
                        ftl::Flags<InputTarget::Flags> wallpaperFlags =
                                InputTarget::Flags::WINDOW_IS_OBSCURED |
@@ -2653,9 +2652,9 @@ InputDispatcher::findTouchedWindowTargetsLocked(nsecs_t currentTime, const Motio
                if (isSplit) {
                    targetFlags |= InputTarget::Flags::SPLIT;
                }
                if (mWindowInfos.isWindowObscuredAtPoint(newTouchedWindowHandle, x, y)) {
                if (isWindowObscuredAtPointLocked(newTouchedWindowHandle, x, y)) {
                    targetFlags |= InputTarget::Flags::WINDOW_IS_OBSCURED;
                } else if (mWindowInfos.isWindowObscured(newTouchedWindowHandle)) {
                } else if (isWindowObscuredLocked(newTouchedWindowHandle)) {
                    targetFlags |= InputTarget::Flags::WINDOW_IS_PARTIALLY_OBSCURED;
                }

@@ -3181,27 +3180,29 @@ bool InputDispatcher::isTouchTrustedLocked(
    return true;
}

bool InputDispatcher::DispatcherWindowInfo::isWindowObscuredAtPoint(
        const sp<WindowInfoHandle>& windowHandle, float x, float y) const {
bool InputDispatcher::isWindowObscuredAtPointLocked(const sp<WindowInfoHandle>& windowHandle,
                                                    float x, float y) const {
    ui::LogicalDisplayId displayId = windowHandle->getInfo()->displayId;
    const std::vector<sp<WindowInfoHandle>>& windowHandles = getWindowHandlesForDisplay(displayId);
    const std::vector<sp<WindowInfoHandle>>& windowHandles =
            mWindowInfos.getWindowHandlesForDisplay(displayId);
    for (const sp<WindowInfoHandle>& otherHandle : windowHandles) {
        if (windowHandle == otherHandle) {
            break; // All future windows are below us. Exit early.
        }
        const WindowInfo* otherInfo = otherHandle->getInfo();
        if (canBeObscuredBy(windowHandle, otherHandle) &&
            windowOccludesTouchAt(*otherInfo, displayId, x, y, getDisplayTransform(displayId))) {
            windowOccludesTouchAt(*otherInfo, displayId, x, y,
                                  mWindowInfos.getDisplayTransform(displayId))) {
            return true;
        }
    }
    return false;
}

bool InputDispatcher::DispatcherWindowInfo::isWindowObscured(
        const sp<WindowInfoHandle>& windowHandle) const {
bool InputDispatcher::isWindowObscuredLocked(const sp<WindowInfoHandle>& windowHandle) const {
    ui::LogicalDisplayId displayId = windowHandle->getInfo()->displayId;
    const std::vector<sp<WindowInfoHandle>>& windowHandles = getWindowHandlesForDisplay(displayId);
    const std::vector<sp<WindowInfoHandle>>& windowHandles =
            mWindowInfos.getWindowHandlesForDisplay(displayId);
    const WindowInfo* windowInfo = windowHandle->getInfo();
    for (const sp<WindowInfoHandle>& otherHandle : windowHandles) {
        if (windowHandle == otherHandle) {
@@ -7065,7 +7066,7 @@ bool InputDispatcher::shouldDropInput(
    if (windowHandle->getInfo()->inputConfig.test(WindowInfo::InputConfig::DROP_INPUT) ||
        (windowHandle->getInfo()->inputConfig.test(
                 WindowInfo::InputConfig::DROP_INPUT_IF_OBSCURED) &&
         mWindowInfos.isWindowObscured(windowHandle))) {
         isWindowObscuredLocked(windowHandle))) {
        ALOGW("Dropping %s event targeting %s as requested by the input configuration {%s} on "
              "display %s.",
              ftl::enum_string(entry.type).c_str(), windowHandle->getName().c_str(),
@@ -7118,7 +7119,7 @@ void InputDispatcher::slipWallpaperTouch(ftl::Flags<InputTarget::Flags> targetFl
    const sp<WindowInfoHandle> oldWallpaper =
            oldHasWallpaper ? state.getWallpaperWindow(deviceId) : nullptr;
    const sp<WindowInfoHandle> newWallpaper =
            newHasWallpaper ? mWindowInfos.findWallpaperWindowBelow(newWindowHandle) : nullptr;
            newHasWallpaper ? findWallpaperWindowBelow(newWindowHandle) : nullptr;
    if (oldWallpaper == newWallpaper) {
        return;
    }
@@ -7155,7 +7156,7 @@ void InputDispatcher::transferWallpaperTouch(
    const sp<WindowInfoHandle> oldWallpaper =
            oldHasWallpaper ? state.getWallpaperWindow(deviceId) : nullptr;
    const sp<WindowInfoHandle> newWallpaper =
            newHasWallpaper ? mWindowInfos.findWallpaperWindowBelow(toWindowHandle) : nullptr;
            newHasWallpaper ? findWallpaperWindowBelow(toWindowHandle) : nullptr;
    if (oldWallpaper == newWallpaper) {
        return;
    }
@@ -7187,10 +7188,10 @@ void InputDispatcher::transferWallpaperTouch(
    }
}

sp<WindowInfoHandle> InputDispatcher::DispatcherWindowInfo::findWallpaperWindowBelow(
sp<WindowInfoHandle> InputDispatcher::findWallpaperWindowBelow(
        const sp<WindowInfoHandle>& windowHandle) const {
    const std::vector<sp<WindowInfoHandle>>& windowHandles =
            getWindowHandlesForDisplay(windowHandle->getInfo()->displayId);
            mWindowInfos.getWindowHandlesForDisplay(windowHandle->getInfo()->displayId);
    bool foundWindow = false;
    for (const sp<WindowInfoHandle>& otherHandle : windowHandles) {
        if (!foundWindow && otherHandle != windowHandle) {
+7 −8
Original line number Diff line number Diff line
@@ -326,14 +326,6 @@ private:
        TouchOcclusionInfo computeTouchOcclusionInfo(
                const sp<android::gui::WindowInfoHandle>& windowHandle, float x, float y) const;

        bool isWindowObscured(const sp<android::gui::WindowInfoHandle>& windowHandle) const;

        bool isWindowObscuredAtPoint(const sp<android::gui::WindowInfoHandle>& windowHandle,
                                     float x, float y) const;

        sp<android::gui::WindowInfoHandle> findWallpaperWindowBelow(
                const sp<android::gui::WindowInfoHandle>& windowHandle) const;

        std::string dumpDisplayAndWindowInfo() const;

    private:
@@ -648,6 +640,10 @@ private:

    bool isTouchTrustedLocked(const DispatcherWindowInfo::TouchOcclusionInfo& occlusionInfo) const
            REQUIRES(mLock);
    bool isWindowObscuredAtPointLocked(const sp<android::gui::WindowInfoHandle>& windowHandle,
                                       float x, float y) const REQUIRES(mLock);
    bool isWindowObscuredLocked(const sp<android::gui::WindowInfoHandle>& windowHandle) const
            REQUIRES(mLock);
    std::string getApplicationWindowLabel(const InputApplicationHandle* applicationHandle,
                                          const sp<android::gui::WindowInfoHandle>& windowHandle);

@@ -800,6 +796,9 @@ private:
                                const std::unique_ptr<trace::EventTrackerInterface>& traceTracker)
            REQUIRES(mLock);

    sp<android::gui::WindowInfoHandle> findWallpaperWindowBelow(
            const sp<android::gui::WindowInfoHandle>& windowHandle) const REQUIRES(mLock);

    /** Stores the value of the input flag for per device input latency metrics. */
    const bool mPerDeviceInputLatencyMetricsFlag =
            com::android::input::flags::enable_per_device_input_latency_metrics();