Loading services/inputflinger/InputFilter.cpp +8 −2 Original line number Diff line number Diff line Loading @@ -44,9 +44,11 @@ AidlKeyEvent notifyKeyArgsToKeyEvent(const NotifyKeyArgs& args) { return event; } InputFilter::InputFilter(InputListenerInterface& listener, IInputFlingerRust& rust) InputFilter::InputFilter(InputListenerInterface& listener, IInputFlingerRust& rust, InputFilterPolicyInterface& policy) : mNextListener(listener), mCallbacks(ndk::SharedRefBase::make<InputFilterCallbacks>(listener)) { mCallbacks(ndk::SharedRefBase::make<InputFilterCallbacks>(listener, policy)), mPolicy(policy) { LOG_ALWAYS_FATAL_IF(!rust.createInputFilter(mCallbacks, &mInputFilterRust).isOk()); LOG_ALWAYS_FATAL_IF(!mInputFilterRust); } Loading Loading @@ -122,6 +124,10 @@ void InputFilter::setAccessibilityStickyKeysEnabled(bool enabled) { if (mConfig.stickyKeysEnabled != enabled) { mConfig.stickyKeysEnabled = enabled; notifyConfigurationChangedLocked(); if (!enabled) { // When Sticky keys is disabled, send callback to clear any saved sticky state. mPolicy.notifyStickyModifierStateChanged(0, 0); } } } Loading services/inputflinger/InputFilter.h +4 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include <aidl/com/android/server/inputflinger/IInputFlingerRust.h> #include <utils/Mutex.h> #include "InputFilterCallbacks.h" #include "InputFilterPolicyInterface.h" #include "InputListener.h" #include "NotifyArgs.h" Loading Loading @@ -47,7 +48,8 @@ public: aidl::com::android::server::inputflinger::InputFilterConfiguration; using AidlDeviceInfo = aidl::com::android::server::inputflinger::DeviceInfo; explicit InputFilter(InputListenerInterface& listener, IInputFlingerRust&); explicit InputFilter(InputListenerInterface& listener, IInputFlingerRust& rust, InputFilterPolicyInterface& policy); ~InputFilter() override = default; void notifyInputDevicesChanged(const NotifyInputDevicesChangedArgs& args) override; void notifyConfigurationChanged(const NotifyConfigurationChangedArgs& args) override; Loading @@ -65,6 +67,7 @@ public: private: InputListenerInterface& mNextListener; std::shared_ptr<InputFilterCallbacks> mCallbacks; InputFilterPolicyInterface& mPolicy; std::shared_ptr<IInputFilter> mInputFilterRust; // Keep track of connected peripherals, so that if filters are enabled later, we can pass that // info to the filters Loading services/inputflinger/InputFilterCallbacks.cpp +4 −2 Original line number Diff line number Diff line Loading @@ -29,8 +29,9 @@ NotifyKeyArgs keyEventToNotifyKeyArgs(const AidlKeyEvent& event) { event.scanCode, event.metaState, event.downTime); } InputFilterCallbacks::InputFilterCallbacks(InputListenerInterface& listener) : mNextListener(listener) {} InputFilterCallbacks::InputFilterCallbacks(InputListenerInterface& listener, InputFilterPolicyInterface& policy) : mNextListener(listener), mPolicy(policy) {} ndk::ScopedAStatus InputFilterCallbacks::sendKeyEvent(const AidlKeyEvent& event) { mNextListener.notifyKey(keyEventToNotifyKeyArgs(event)); Loading @@ -42,6 +43,7 @@ ndk::ScopedAStatus InputFilterCallbacks::onModifierStateChanged(int32_t modifier std::scoped_lock _l(mLock); mStickyModifierState.modifierState = modifierState; mStickyModifierState.lockedModifierState = lockedModifierState; mPolicy.notifyStickyModifierStateChanged(modifierState, lockedModifierState); ALOGI("Sticky keys modifier state changed: modifierState=%d, lockedModifierState=%d", modifierState, lockedModifierState); return ndk::ScopedAStatus::ok(); Loading services/inputflinger/InputFilterCallbacks.h +4 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <android/binder_auto_utils.h> #include <utils/Mutex.h> #include <mutex> #include "InputFilterPolicyInterface.h" #include "InputListener.h" #include "NotifyArgs.h" Loading @@ -33,7 +34,8 @@ using AidlKeyEvent = aidl::com::android::server::inputflinger::KeyEvent; class InputFilterCallbacks : public IInputFilter::BnInputFilterCallbacks { public: explicit InputFilterCallbacks(InputListenerInterface& listener); explicit InputFilterCallbacks(InputListenerInterface& listener, InputFilterPolicyInterface& policy); ~InputFilterCallbacks() override = default; uint32_t getModifierState(); Loading @@ -41,6 +43,7 @@ public: private: InputListenerInterface& mNextListener; InputFilterPolicyInterface& mPolicy; mutable std::mutex mLock; struct StickyModifierState { uint32_t modifierState; Loading services/inputflinger/InputManager.cpp +4 −2 Original line number Diff line number Diff line Loading @@ -127,7 +127,8 @@ std::shared_ptr<IInputFlingerRust> createInputFlingerRust() { */ InputManager::InputManager(const sp<InputReaderPolicyInterface>& readerPolicy, InputDispatcherPolicyInterface& dispatcherPolicy, PointerChoreographerPolicyInterface& choreographerPolicy) { PointerChoreographerPolicyInterface& choreographerPolicy, InputFilterPolicyInterface& inputFilterPolicy) { mInputFlingerRust = createInputFlingerRust(); mDispatcher = createInputDispatcher(dispatcherPolicy); Loading @@ -135,7 +136,8 @@ InputManager::InputManager(const sp<InputReaderPolicyInterface>& readerPolicy, std::make_unique<TracedInputListener>("InputDispatcher", *mDispatcher)); if (ENABLE_INPUT_FILTER_RUST) { mInputFilter = std::make_unique<InputFilter>(*mTracingStages.back(), *mInputFlingerRust); mInputFilter = std::make_unique<InputFilter>(*mTracingStages.back(), *mInputFlingerRust, inputFilterPolicy); mTracingStages.emplace_back( std::make_unique<TracedInputListener>("InputFilter", *mInputFilter)); } Loading Loading
services/inputflinger/InputFilter.cpp +8 −2 Original line number Diff line number Diff line Loading @@ -44,9 +44,11 @@ AidlKeyEvent notifyKeyArgsToKeyEvent(const NotifyKeyArgs& args) { return event; } InputFilter::InputFilter(InputListenerInterface& listener, IInputFlingerRust& rust) InputFilter::InputFilter(InputListenerInterface& listener, IInputFlingerRust& rust, InputFilterPolicyInterface& policy) : mNextListener(listener), mCallbacks(ndk::SharedRefBase::make<InputFilterCallbacks>(listener)) { mCallbacks(ndk::SharedRefBase::make<InputFilterCallbacks>(listener, policy)), mPolicy(policy) { LOG_ALWAYS_FATAL_IF(!rust.createInputFilter(mCallbacks, &mInputFilterRust).isOk()); LOG_ALWAYS_FATAL_IF(!mInputFilterRust); } Loading Loading @@ -122,6 +124,10 @@ void InputFilter::setAccessibilityStickyKeysEnabled(bool enabled) { if (mConfig.stickyKeysEnabled != enabled) { mConfig.stickyKeysEnabled = enabled; notifyConfigurationChangedLocked(); if (!enabled) { // When Sticky keys is disabled, send callback to clear any saved sticky state. mPolicy.notifyStickyModifierStateChanged(0, 0); } } } Loading
services/inputflinger/InputFilter.h +4 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include <aidl/com/android/server/inputflinger/IInputFlingerRust.h> #include <utils/Mutex.h> #include "InputFilterCallbacks.h" #include "InputFilterPolicyInterface.h" #include "InputListener.h" #include "NotifyArgs.h" Loading Loading @@ -47,7 +48,8 @@ public: aidl::com::android::server::inputflinger::InputFilterConfiguration; using AidlDeviceInfo = aidl::com::android::server::inputflinger::DeviceInfo; explicit InputFilter(InputListenerInterface& listener, IInputFlingerRust&); explicit InputFilter(InputListenerInterface& listener, IInputFlingerRust& rust, InputFilterPolicyInterface& policy); ~InputFilter() override = default; void notifyInputDevicesChanged(const NotifyInputDevicesChangedArgs& args) override; void notifyConfigurationChanged(const NotifyConfigurationChangedArgs& args) override; Loading @@ -65,6 +67,7 @@ public: private: InputListenerInterface& mNextListener; std::shared_ptr<InputFilterCallbacks> mCallbacks; InputFilterPolicyInterface& mPolicy; std::shared_ptr<IInputFilter> mInputFilterRust; // Keep track of connected peripherals, so that if filters are enabled later, we can pass that // info to the filters Loading
services/inputflinger/InputFilterCallbacks.cpp +4 −2 Original line number Diff line number Diff line Loading @@ -29,8 +29,9 @@ NotifyKeyArgs keyEventToNotifyKeyArgs(const AidlKeyEvent& event) { event.scanCode, event.metaState, event.downTime); } InputFilterCallbacks::InputFilterCallbacks(InputListenerInterface& listener) : mNextListener(listener) {} InputFilterCallbacks::InputFilterCallbacks(InputListenerInterface& listener, InputFilterPolicyInterface& policy) : mNextListener(listener), mPolicy(policy) {} ndk::ScopedAStatus InputFilterCallbacks::sendKeyEvent(const AidlKeyEvent& event) { mNextListener.notifyKey(keyEventToNotifyKeyArgs(event)); Loading @@ -42,6 +43,7 @@ ndk::ScopedAStatus InputFilterCallbacks::onModifierStateChanged(int32_t modifier std::scoped_lock _l(mLock); mStickyModifierState.modifierState = modifierState; mStickyModifierState.lockedModifierState = lockedModifierState; mPolicy.notifyStickyModifierStateChanged(modifierState, lockedModifierState); ALOGI("Sticky keys modifier state changed: modifierState=%d, lockedModifierState=%d", modifierState, lockedModifierState); return ndk::ScopedAStatus::ok(); Loading
services/inputflinger/InputFilterCallbacks.h +4 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <android/binder_auto_utils.h> #include <utils/Mutex.h> #include <mutex> #include "InputFilterPolicyInterface.h" #include "InputListener.h" #include "NotifyArgs.h" Loading @@ -33,7 +34,8 @@ using AidlKeyEvent = aidl::com::android::server::inputflinger::KeyEvent; class InputFilterCallbacks : public IInputFilter::BnInputFilterCallbacks { public: explicit InputFilterCallbacks(InputListenerInterface& listener); explicit InputFilterCallbacks(InputListenerInterface& listener, InputFilterPolicyInterface& policy); ~InputFilterCallbacks() override = default; uint32_t getModifierState(); Loading @@ -41,6 +43,7 @@ public: private: InputListenerInterface& mNextListener; InputFilterPolicyInterface& mPolicy; mutable std::mutex mLock; struct StickyModifierState { uint32_t modifierState; Loading
services/inputflinger/InputManager.cpp +4 −2 Original line number Diff line number Diff line Loading @@ -127,7 +127,8 @@ std::shared_ptr<IInputFlingerRust> createInputFlingerRust() { */ InputManager::InputManager(const sp<InputReaderPolicyInterface>& readerPolicy, InputDispatcherPolicyInterface& dispatcherPolicy, PointerChoreographerPolicyInterface& choreographerPolicy) { PointerChoreographerPolicyInterface& choreographerPolicy, InputFilterPolicyInterface& inputFilterPolicy) { mInputFlingerRust = createInputFlingerRust(); mDispatcher = createInputDispatcher(dispatcherPolicy); Loading @@ -135,7 +136,8 @@ InputManager::InputManager(const sp<InputReaderPolicyInterface>& readerPolicy, std::make_unique<TracedInputListener>("InputDispatcher", *mDispatcher)); if (ENABLE_INPUT_FILTER_RUST) { mInputFilter = std::make_unique<InputFilter>(*mTracingStages.back(), *mInputFlingerRust); mInputFilter = std::make_unique<InputFilter>(*mTracingStages.back(), *mInputFlingerRust, inputFilterPolicy); mTracingStages.emplace_back( std::make_unique<TracedInputListener>("InputFilter", *mInputFilter)); } Loading