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

Commit 8f6c0753 authored by Siarhei Vishniakou's avatar Siarhei Vishniakou
Browse files

Return WindowInfosUpdate when registering infos listener

In this CL, we refactor WindowInfosListener to return a Result-wrapped
WindowInfosUpdate. This makes it more user-friendly.

As an alternative, we could further refactor this by never returning an
invalid WindowInfosUpdate - since failure to listen to windows would
mean that the device is not usable. To ensure that the initial info is
consumed, we could add a "no-discard" annotation to that function.

Bug: 404661556
Flag: EXEMPT refactor
Test: none
Change-Id: I16d13919e92aa4b3ee0ac5f6024c7552ebb0da49
parent c1ae85bc
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -3442,12 +3442,11 @@ int SurfaceComposerClient::getGpuContextPriority() {
    return priority;
}

status_t SurfaceComposerClient::addWindowInfosListener(
        const sp<WindowInfosListener>& windowInfosListener,
        gui::WindowInfosUpdate* outInitialUpdate) {
android::base::Result<gui::WindowInfosUpdate> SurfaceComposerClient::addWindowInfosListener(
        sp<WindowInfosListener> windowInfosListener) {
    return WindowInfosListenerReporter::getInstance()
            ->addWindowInfosListener(windowInfosListener, ComposerServiceAIDL::getComposerService(),
                                     outInitialUpdate);
            ->addWindowInfosListener(std::move(windowInfosListener),
                                     ComposerServiceAIDL::getComposerService());
}

status_t SurfaceComposerClient::removeWindowInfosListener(
+6 −9
Original line number Diff line number Diff line
@@ -32,10 +32,9 @@ sp<WindowInfosListenerReporter> WindowInfosListenerReporter::getInstance() {
    return sInstance;
}

status_t WindowInfosListenerReporter::addWindowInfosListener(
        const sp<WindowInfosListener>& windowInfosListener,
        const sp<gui::ISurfaceComposer>& surfaceComposer,
        gui::WindowInfosUpdate* outInitialUpdate) {
android::base::Result<gui::WindowInfosUpdate> WindowInfosListenerReporter::addWindowInfosListener(
        sp<WindowInfosListener> windowInfosListener,
        const sp<gui::ISurfaceComposer>& surfaceComposer) {
    status_t status = OK;
    {
        std::scoped_lock lock(mListenersMutex);
@@ -50,15 +49,13 @@ status_t WindowInfosListenerReporter::addWindowInfosListener(
        }

        if (status == OK) {
            mWindowInfosListeners.insert(windowInfosListener);
            mWindowInfosListeners.emplace(std::move(windowInfosListener));
        }

        if (outInitialUpdate != nullptr) {
            *outInitialUpdate = mLastUpdate;
        }
        return mLastUpdate;
    }

    return status;
    return android::base::Error(status);
}

status_t WindowInfosListenerReporter::removeWindowInfosListener(
+3 −2
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@
#include <unordered_map>
#include <unordered_set>

#include <android-base/result.h>
#include <binder/IBinder.h>

#include <utils/Errors.h>
@@ -911,8 +912,8 @@ public:
    static status_t removeTunnelModeEnabledListener(
            const sp<gui::ITunnelModeEnabledListener>& listener);

    status_t addWindowInfosListener(const sp<gui::WindowInfosListener>& windowInfosListener,
                                    gui::WindowInfosUpdate* outInitialUpdate);
    android::base::Result<gui::WindowInfosUpdate> addWindowInfosListener(
            sp<gui::WindowInfosListener> windowInfosListener);
    status_t removeWindowInfosListener(const sp<gui::WindowInfosListener>& windowInfosListener);

    static void notifyShutdown();
+3 −3
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

#pragma once

#include <android-base/result.h>
#include <android/gui/BnWindowInfosListener.h>
#include <android/gui/ISurfaceComposer.h>
#include <android/gui/IWindowInfosPublisher.h>
@@ -31,9 +32,8 @@ class WindowInfosListenerReporter : public gui::BnWindowInfosListener {
public:
    static sp<WindowInfosListenerReporter> getInstance();
    binder::Status onWindowInfosChanged(const gui::WindowInfosUpdate& update) override;
    status_t addWindowInfosListener(const sp<gui::WindowInfosListener>& windowInfosListener,
                                    const sp<gui::ISurfaceComposer>&,
                                    gui::WindowInfosUpdate* outInitialUpdate);
    android::base::Result<gui::WindowInfosUpdate> addWindowInfosListener(
            sp<gui::WindowInfosListener> windowInfosListener, const sp<gui::ISurfaceComposer>&);
    status_t removeWindowInfosListener(const sp<gui::WindowInfosListener>& windowInfosListener,
                                       const sp<gui::ISurfaceComposer>& surfaceComposer);
    void reconnect(const sp<gui::ISurfaceComposer>&);
+7 −4
Original line number Diff line number Diff line
@@ -107,12 +107,15 @@ PointerChoreographer::PointerChoreographer(InputListenerInterface& inputListener
      : PointerChoreographer(
                inputListener, policy,
                [](const sp<android::gui::WindowInfosListener>& listener) {
                    gui::WindowInfosUpdate initialInfo;
#if defined(__ANDROID__)
                    SurfaceComposerClient::getDefault()->addWindowInfosListener(listener,
                                                                                &initialInfo);
                    android::base::Result<android::gui::WindowInfosUpdate> result =
                            SurfaceComposerClient::getDefault()->addWindowInfosListener(listener);
                    LOG_IF(FATAL, !result.ok()) << "Can't add window listener, pointers won't work";
                    return result->windowInfos;
#else
                    gui::WindowInfosUpdate emptyUpdate;
                    return emptyUpdate.windowInfos;
#endif
                    return initialInfo.windowInfos;
                },
                [](const sp<android::gui::WindowInfosListener>& listener) {
#if defined(__ANDROID__)
Loading