Loading services/inputflinger/InputFilter.cpp +9 −0 Original line number Diff line number Diff line Loading @@ -118,6 +118,15 @@ void InputFilter::setAccessibilityBounceKeysThreshold(nsecs_t threshold) { } } void InputFilter::setAccessibilitySlowKeysThreshold(nsecs_t threshold) { std::scoped_lock _l(mLock); if (mConfig.slowKeysThresholdNs != threshold) { mConfig.slowKeysThresholdNs = threshold; notifyConfigurationChangedLocked(); } } void InputFilter::setAccessibilityStickyKeysEnabled(bool enabled) { std::scoped_lock _l(mLock); Loading services/inputflinger/InputFilter.h +2 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ public: */ virtual void dump(std::string& dump) = 0; virtual void setAccessibilityBounceKeysThreshold(nsecs_t threshold) = 0; virtual void setAccessibilitySlowKeysThreshold(nsecs_t threshold) = 0; virtual void setAccessibilityStickyKeysEnabled(bool enabled) = 0; }; Loading @@ -61,6 +62,7 @@ public: void notifyDeviceReset(const NotifyDeviceResetArgs& args) override; void notifyPointerCaptureChanged(const NotifyPointerCaptureChangedArgs& args) override; void setAccessibilityBounceKeysThreshold(nsecs_t threshold) override; void setAccessibilitySlowKeysThreshold(nsecs_t threshold) override; void setAccessibilityStickyKeysEnabled(bool enabled) override; void dump(std::string& dump) override; Loading services/inputflinger/InputFilterCallbacks.cpp +53 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,11 @@ #define LOG_TAG "InputFilterCallbacks" #include "InputFilterCallbacks.h" #include <aidl/com/android/server/inputflinger/BnInputThread.h> #include <android/binder_auto_utils.h> #include <utils/StrongPointer.h> #include <utils/Thread.h> #include <functional> namespace android { Loading @@ -29,6 +34,47 @@ NotifyKeyArgs keyEventToNotifyKeyArgs(const AidlKeyEvent& event) { event.scanCode, event.metaState, event.downTime); } namespace { using namespace aidl::com::android::server::inputflinger; class InputFilterThreadImpl : public Thread { public: explicit InputFilterThreadImpl(std::function<void()> loop) : Thread(/*canCallJava=*/true), mThreadLoop(loop) {} ~InputFilterThreadImpl() {} private: std::function<void()> mThreadLoop; bool threadLoop() override { mThreadLoop(); return true; } }; class InputFilterThread : public BnInputThread { public: InputFilterThread(std::shared_ptr<IInputThreadCallback> callback) : mCallback(callback) { mThread = sp<InputFilterThreadImpl>::make([this]() { loopOnce(); }); mThread->run("InputFilterThread", ANDROID_PRIORITY_URGENT_DISPLAY); } ndk::ScopedAStatus finish() override { mThread->requestExit(); return ndk::ScopedAStatus::ok(); } private: sp<Thread> mThread; std::shared_ptr<IInputThreadCallback> mCallback; void loopOnce() { LOG_ALWAYS_FATAL_IF(!mCallback->loopOnce().isOk()); } }; } // namespace InputFilterCallbacks::InputFilterCallbacks(InputListenerInterface& listener, InputFilterPolicyInterface& policy) : mNextListener(listener), mPolicy(policy) {} Loading @@ -49,6 +95,13 @@ ndk::ScopedAStatus InputFilterCallbacks::onModifierStateChanged(int32_t modifier return ndk::ScopedAStatus::ok(); } ndk::ScopedAStatus InputFilterCallbacks::createInputFilterThread( const std::shared_ptr<IInputThreadCallback>& callback, std::shared_ptr<IInputThread>* aidl_return) { *aidl_return = ndk::SharedRefBase::make<InputFilterThread>(callback); return ndk::ScopedAStatus::ok(); } uint32_t InputFilterCallbacks::getModifierState() { std::scoped_lock _l(mLock); return mStickyModifierState.modifierState; Loading services/inputflinger/InputFilterCallbacks.h +7 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include <aidl/com/android/server/inputflinger/IInputFlingerRust.h> #include <android/binder_auto_utils.h> #include <utils/Mutex.h> #include <memory> #include <mutex> #include "InputFilterPolicyInterface.h" #include "InputListener.h" Loading @@ -31,6 +32,9 @@ namespace android { using IInputFilter = aidl::com::android::server::inputflinger::IInputFilter; using AidlKeyEvent = aidl::com::android::server::inputflinger::KeyEvent; using aidl::com::android::server::inputflinger::IInputThread; using IInputThreadCallback = aidl::com::android::server::inputflinger::IInputThread::IInputThreadCallback; class InputFilterCallbacks : public IInputFilter::BnInputFilterCallbacks { public: Loading @@ -53,6 +57,9 @@ private: ndk::ScopedAStatus sendKeyEvent(const AidlKeyEvent& event) override; ndk::ScopedAStatus onModifierStateChanged(int32_t modifierState, int32_t lockedModifierState) override; ndk::ScopedAStatus createInputFilterThread( const std::shared_ptr<IInputThreadCallback>& callback, std::shared_ptr<IInputThread>* aidl_return) override; }; } // namespace android No newline at end of file services/inputflinger/aidl/com/android/server/inputflinger/IInputFilter.aidl +5 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package com.android.server.inputflinger; import com.android.server.inputflinger.DeviceInfo; import com.android.server.inputflinger.IInputThread; import com.android.server.inputflinger.IInputThread.IInputThreadCallback; import com.android.server.inputflinger.InputFilterConfiguration; import com.android.server.inputflinger.KeyEvent; Loading @@ -36,6 +38,9 @@ interface IInputFilter { /** Sends back modifier state */ void onModifierStateChanged(int modifierState, int lockedModifierState); /** Creates an Input filter thread */ IInputThread createInputFilterThread(in IInputThreadCallback callback); } /** Returns if InputFilter is enabled */ Loading Loading
services/inputflinger/InputFilter.cpp +9 −0 Original line number Diff line number Diff line Loading @@ -118,6 +118,15 @@ void InputFilter::setAccessibilityBounceKeysThreshold(nsecs_t threshold) { } } void InputFilter::setAccessibilitySlowKeysThreshold(nsecs_t threshold) { std::scoped_lock _l(mLock); if (mConfig.slowKeysThresholdNs != threshold) { mConfig.slowKeysThresholdNs = threshold; notifyConfigurationChangedLocked(); } } void InputFilter::setAccessibilityStickyKeysEnabled(bool enabled) { std::scoped_lock _l(mLock); Loading
services/inputflinger/InputFilter.h +2 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ public: */ virtual void dump(std::string& dump) = 0; virtual void setAccessibilityBounceKeysThreshold(nsecs_t threshold) = 0; virtual void setAccessibilitySlowKeysThreshold(nsecs_t threshold) = 0; virtual void setAccessibilityStickyKeysEnabled(bool enabled) = 0; }; Loading @@ -61,6 +62,7 @@ public: void notifyDeviceReset(const NotifyDeviceResetArgs& args) override; void notifyPointerCaptureChanged(const NotifyPointerCaptureChangedArgs& args) override; void setAccessibilityBounceKeysThreshold(nsecs_t threshold) override; void setAccessibilitySlowKeysThreshold(nsecs_t threshold) override; void setAccessibilityStickyKeysEnabled(bool enabled) override; void dump(std::string& dump) override; Loading
services/inputflinger/InputFilterCallbacks.cpp +53 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,11 @@ #define LOG_TAG "InputFilterCallbacks" #include "InputFilterCallbacks.h" #include <aidl/com/android/server/inputflinger/BnInputThread.h> #include <android/binder_auto_utils.h> #include <utils/StrongPointer.h> #include <utils/Thread.h> #include <functional> namespace android { Loading @@ -29,6 +34,47 @@ NotifyKeyArgs keyEventToNotifyKeyArgs(const AidlKeyEvent& event) { event.scanCode, event.metaState, event.downTime); } namespace { using namespace aidl::com::android::server::inputflinger; class InputFilterThreadImpl : public Thread { public: explicit InputFilterThreadImpl(std::function<void()> loop) : Thread(/*canCallJava=*/true), mThreadLoop(loop) {} ~InputFilterThreadImpl() {} private: std::function<void()> mThreadLoop; bool threadLoop() override { mThreadLoop(); return true; } }; class InputFilterThread : public BnInputThread { public: InputFilterThread(std::shared_ptr<IInputThreadCallback> callback) : mCallback(callback) { mThread = sp<InputFilterThreadImpl>::make([this]() { loopOnce(); }); mThread->run("InputFilterThread", ANDROID_PRIORITY_URGENT_DISPLAY); } ndk::ScopedAStatus finish() override { mThread->requestExit(); return ndk::ScopedAStatus::ok(); } private: sp<Thread> mThread; std::shared_ptr<IInputThreadCallback> mCallback; void loopOnce() { LOG_ALWAYS_FATAL_IF(!mCallback->loopOnce().isOk()); } }; } // namespace InputFilterCallbacks::InputFilterCallbacks(InputListenerInterface& listener, InputFilterPolicyInterface& policy) : mNextListener(listener), mPolicy(policy) {} Loading @@ -49,6 +95,13 @@ ndk::ScopedAStatus InputFilterCallbacks::onModifierStateChanged(int32_t modifier return ndk::ScopedAStatus::ok(); } ndk::ScopedAStatus InputFilterCallbacks::createInputFilterThread( const std::shared_ptr<IInputThreadCallback>& callback, std::shared_ptr<IInputThread>* aidl_return) { *aidl_return = ndk::SharedRefBase::make<InputFilterThread>(callback); return ndk::ScopedAStatus::ok(); } uint32_t InputFilterCallbacks::getModifierState() { std::scoped_lock _l(mLock); return mStickyModifierState.modifierState; Loading
services/inputflinger/InputFilterCallbacks.h +7 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include <aidl/com/android/server/inputflinger/IInputFlingerRust.h> #include <android/binder_auto_utils.h> #include <utils/Mutex.h> #include <memory> #include <mutex> #include "InputFilterPolicyInterface.h" #include "InputListener.h" Loading @@ -31,6 +32,9 @@ namespace android { using IInputFilter = aidl::com::android::server::inputflinger::IInputFilter; using AidlKeyEvent = aidl::com::android::server::inputflinger::KeyEvent; using aidl::com::android::server::inputflinger::IInputThread; using IInputThreadCallback = aidl::com::android::server::inputflinger::IInputThread::IInputThreadCallback; class InputFilterCallbacks : public IInputFilter::BnInputFilterCallbacks { public: Loading @@ -53,6 +57,9 @@ private: ndk::ScopedAStatus sendKeyEvent(const AidlKeyEvent& event) override; ndk::ScopedAStatus onModifierStateChanged(int32_t modifierState, int32_t lockedModifierState) override; ndk::ScopedAStatus createInputFilterThread( const std::shared_ptr<IInputThreadCallback>& callback, std::shared_ptr<IInputThread>* aidl_return) override; }; } // namespace android No newline at end of file
services/inputflinger/aidl/com/android/server/inputflinger/IInputFilter.aidl +5 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package com.android.server.inputflinger; import com.android.server.inputflinger.DeviceInfo; import com.android.server.inputflinger.IInputThread; import com.android.server.inputflinger.IInputThread.IInputThreadCallback; import com.android.server.inputflinger.InputFilterConfiguration; import com.android.server.inputflinger.KeyEvent; Loading @@ -36,6 +38,9 @@ interface IInputFilter { /** Sends back modifier state */ void onModifierStateChanged(int modifierState, int lockedModifierState); /** Creates an Input filter thread */ IInputThread createInputFilterThread(in IInputThreadCallback callback); } /** Returns if InputFilter is enabled */ Loading