diff options
| -rw-r--r-- | services/inputflinger/InputDispatcher.cpp | 18 | ||||
| -rw-r--r-- | services/inputflinger/InputDispatcher.h | 8 | ||||
| -rw-r--r-- | services/inputflinger/tests/InputDispatcher_test.cpp | 2 |
3 files changed, 17 insertions, 11 deletions
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<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(); } diff --git a/services/inputflinger/InputDispatcher.h b/services/inputflinger/InputDispatcher.h index 7e6de6a2d9..295b18f6df 100644 --- a/services/inputflinger/InputDispatcher.h +++ b/services/inputflinger/InputDispatcher.h @@ -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, diff --git a/services/inputflinger/tests/InputDispatcher_test.cpp b/services/inputflinger/tests/InputDispatcher_test.cpp index 26f01b7eb5..b385fe9fa1 100644 --- a/services/inputflinger/tests/InputDispatcher_test.cpp +++ b/services/inputflinger/tests/InputDispatcher_test.cpp @@ -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) { |