From 0c06c6ea505b165ca73d952f4cbe65eb312d6932 Mon Sep 17 00:00:00 2001 From: chaviw Date: Wed, 9 Jan 2019 13:27:07 -0800 Subject: Added last focused window to notifyFocusChanged callback Test: Builds and runs Bug: 121122996 Change-Id: I322eb7ae9b9e7489a621e7505719b748add01e2d --- services/inputflinger/InputDispatcher.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'services/inputflinger/InputDispatcher.cpp') diff --git a/services/inputflinger/InputDispatcher.cpp b/services/inputflinger/InputDispatcher.cpp index 6173452166..be5c214740 100644 --- a/services/inputflinger/InputDispatcher.cpp +++ b/services/inputflinger/InputDispatcher.cpp @@ -3174,7 +3174,7 @@ void InputDispatcher::setInputWindows(const Vector>& input } if (mFocusedDisplayId == displayId) { - onFocusChangedLocked(newFocusedWindowHandle); + onFocusChangedLocked(oldFocusedWindowHandle, newFocusedWindowHandle); } } @@ -3292,7 +3292,7 @@ void InputDispatcher::setFocusedDisplay(int32_t displayId) { // Sanity check sp 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& newFocus) { - sp token = newFocus != nullptr ? newFocus->getToken() : nullptr; +void InputDispatcher::onFocusChangedLocked(const sp& oldFocus, + const sp& newFocus) { + sp oldToken = oldFocus != nullptr ? oldFocus->getToken() : nullptr; + sp 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 token = commandEntry->token; + sp oldToken = commandEntry->oldToken; + sp newToken = commandEntry->newToken; mLock.unlock(); - mPolicy->notifyFocusChanged(token); + mPolicy->notifyFocusChanged(oldToken, newToken); mLock.lock(); } -- cgit v1.2.3-59-g8ed1b