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

Commit 0c06c6ea authored by chaviw's avatar chaviw
Browse files

Added last focused window to notifyFocusChanged callback

Test: Builds and runs
Bug: 121122996
Change-Id: I322eb7ae9b9e7489a621e7505719b748add01e2d
parent 4db5fa02
Loading
Loading
Loading
Loading
+11 −7
Original line number Diff line number Diff line
@@ -3174,7 +3174,7 @@ void InputDispatcher::setInputWindows(const Vector<sp<InputWindowHandle>>& input
            }

            if (mFocusedDisplayId == displayId) {
                onFocusChangedLocked(newFocusedWindowHandle);
                onFocusChangedLocked(oldFocusedWindowHandle, newFocusedWindowHandle);
            }

        }
@@ -3292,7 +3292,7 @@ void InputDispatcher::setFocusedDisplay(int32_t displayId) {
            // Sanity check
            sp<InputWindowHandle> newFocusedWindowHandle =
                    getValueByKey(mFocusedWindowHandlesByDisplay, displayId);
            onFocusChangedLocked(newFocusedWindowHandle);
            onFocusChangedLocked(oldFocusedWindowHandle, newFocusedWindowHandle);

            if (newFocusedWindowHandle == nullptr) {
                ALOGW("Focused display #%" PRId32 " does not have a focused window.", displayId);
@@ -3853,11 +3853,14 @@ void InputDispatcher::onDispatchCycleBrokenLocked(
    commandEntry->connection = connection;
}

void InputDispatcher::onFocusChangedLocked(const sp<InputWindowHandle>& newFocus) {
    sp<IBinder> token = newFocus != nullptr ? newFocus->getToken() : nullptr;
void InputDispatcher::onFocusChangedLocked(const sp<InputWindowHandle>& oldFocus,
        const sp<InputWindowHandle>& newFocus) {
    sp<IBinder> oldToken = oldFocus != nullptr ? oldFocus->getToken() : nullptr;
    sp<IBinder> newToken = newFocus != nullptr ? newFocus->getToken() : nullptr;
    CommandEntry* commandEntry = postCommandLocked(
            & InputDispatcher::doNotifyFocusChangedLockedInterruptible);
    commandEntry->token = token;
    commandEntry->oldToken = oldToken;
    commandEntry->newToken = newToken;
}

void InputDispatcher::onANRLocked(
@@ -3919,9 +3922,10 @@ void InputDispatcher::doNotifyInputChannelBrokenLockedInterruptible(

void InputDispatcher::doNotifyFocusChangedLockedInterruptible(
        CommandEntry* commandEntry) {
    sp<IBinder> token = commandEntry->token;
    sp<IBinder> oldToken = commandEntry->oldToken;
    sp<IBinder> newToken = commandEntry->newToken;
    mLock.unlock();
    mPolicy->notifyFocusChanged(token);
    mPolicy->notifyFocusChanged(oldToken, newToken);
    mLock.lock();
}

+5 −3
Original line number Diff line number Diff line
@@ -217,7 +217,7 @@ public:

    /* Notifies the system that an input channel is unrecoverably broken. */
    virtual void notifyInputChannelBroken(const sp<IBinder>& token) = 0;
    virtual void notifyFocusChanged(const sp<IBinder>& token) = 0;
    virtual void notifyFocusChanged(const sp<IBinder>& oldToken, const sp<IBinder>& newToken) = 0;

    /* Gets the input dispatcher configuration. */
    virtual void getDispatcherConfiguration(InputDispatcherConfiguration* outConfig) = 0;
@@ -631,7 +631,8 @@ private:
        uint32_t seq;
        bool handled;
        sp<InputChannel> inputChannel;
        sp<IBinder> token;
        sp<IBinder> oldToken;
        sp<IBinder> newToken;
    };

    // Generic queue implementation.
@@ -1161,7 +1162,8 @@ private:
            nsecs_t currentTime, const sp<Connection>& connection, uint32_t seq, bool handled);
    void onDispatchCycleBrokenLocked(
            nsecs_t currentTime, const sp<Connection>& connection);
    void onFocusChangedLocked(const sp<InputWindowHandle>& newFocus);
    void onFocusChangedLocked(const sp<InputWindowHandle>& oldFocus,
            const sp<InputWindowHandle>& newFocus);
    void onANRLocked(
            nsecs_t currentTime, const sp<InputApplicationHandle>& applicationHandle,
            const sp<InputWindowHandle>& windowHandle,
+1 −1
Original line number Diff line number Diff line
@@ -63,7 +63,7 @@ private:
    virtual void notifyInputChannelBroken(const sp<IBinder>&) {
    }

    virtual void notifyFocusChanged(const sp<IBinder>&) {
    virtual void notifyFocusChanged(const sp<IBinder>&, const sp<IBinder>&) {
    }

    virtual void getDispatcherConfiguration(InputDispatcherConfiguration* outConfig) {