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

Commit 896de2bd authored by Vaibhav Devmurari's avatar Vaibhav Devmurari Committed by Android (Google) Code Review
Browse files

Merge "Add callbacks and policy to listen to sticky modifier state" into main

parents ac9a2fa2 e948d4b1
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -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);
}
@@ -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);
        }
    }
}

+4 −1
Original line number Diff line number Diff line
@@ -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"

@@ -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;
@@ -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
+4 −2
Original line number Diff line number Diff line
@@ -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));
@@ -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();
+4 −1
Original line number Diff line number Diff line
@@ -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"

@@ -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();
@@ -41,6 +43,7 @@ public:

private:
    InputListenerInterface& mNextListener;
    InputFilterPolicyInterface& mPolicy;
    mutable std::mutex mLock;
    struct StickyModifierState {
        uint32_t modifierState;
+4 −2
Original line number Diff line number Diff line
@@ -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);
@@ -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