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

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

Merge "Bounce keys doesnt work for already connected keyboards" into main

parents f0c499a1 3c248d8c
Loading
Loading
Loading
Loading
+18 −11
Original line number Diff line number Diff line
@@ -52,15 +52,15 @@ InputFilter::InputFilter(InputListenerInterface& listener, IInputFlingerRust& ru
}

void InputFilter::notifyInputDevicesChanged(const NotifyInputDevicesChangedArgs& args) {
    if (isFilterEnabled()) {
        std::vector<AidlDeviceInfo> deviceInfos;
    mDeviceInfos.clear();
    mDeviceInfos.reserve(args.inputDeviceInfos.size());
    for (auto info : args.inputDeviceInfos) {
            AidlDeviceInfo aidlInfo;
        AidlDeviceInfo& aidlInfo = mDeviceInfos.emplace_back();
        aidlInfo.deviceId = info.getId();
        aidlInfo.external = info.isExternal();
            deviceInfos.push_back(aidlInfo);
    }
        LOG_ALWAYS_FATAL_IF(!mInputFilterRust->notifyInputDevicesChanged(deviceInfos).isOk());
    if (isFilterEnabled()) {
        LOG_ALWAYS_FATAL_IF(!mInputFilterRust->notifyInputDevicesChanged(mDeviceInfos).isOk());
    }
    mNextListener.notify(args);
}
@@ -74,7 +74,7 @@ void InputFilter::notifyKey(const NotifyKeyArgs& args) {
        LOG_ALWAYS_FATAL_IF(!mInputFilterRust->notifyKey(notifyKeyArgsToKeyEvent(args)).isOk());
        return;
    }
    mNextListener.notifyKey(args);
    mNextListener.notify(args);
}

void InputFilter::notifyMotion(const NotifyMotionArgs& args) {
@@ -112,7 +112,7 @@ void InputFilter::setAccessibilityBounceKeysThreshold(nsecs_t threshold) {

    if (mConfig.bounceKeysThresholdNs != threshold) {
        mConfig.bounceKeysThresholdNs = threshold;
        LOG_ALWAYS_FATAL_IF(!mInputFilterRust->notifyConfigurationChanged(mConfig).isOk());
        notifyConfigurationChangedLocked();
    }
}

@@ -121,7 +121,14 @@ void InputFilter::setAccessibilityStickyKeysEnabled(bool enabled) {

    if (mConfig.stickyKeysEnabled != enabled) {
        mConfig.stickyKeysEnabled = enabled;
        notifyConfigurationChangedLocked();
    }
}

void InputFilter::notifyConfigurationChangedLocked() {
    LOG_ALWAYS_FATAL_IF(!mInputFilterRust->notifyConfigurationChanged(mConfig).isOk());
    if (isFilterEnabled()) {
        LOG_ALWAYS_FATAL_IF(!mInputFilterRust->notifyInputDevicesChanged(mDeviceInfos).isOk());
    }
}

+5 −0
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ public:
            aidl::com::android::server::inputflinger::IInputFilter::IInputFilterCallbacks;
    using InputFilterConfiguration =
            aidl::com::android::server::inputflinger::InputFilterConfiguration;
    using AidlDeviceInfo = aidl::com::android::server::inputflinger::DeviceInfo;

    explicit InputFilter(InputListenerInterface& listener, IInputFlingerRust&);
    ~InputFilter() override = default;
@@ -65,10 +66,14 @@ private:
    InputListenerInterface& mNextListener;
    std::shared_ptr<InputFilterCallbacks> mCallbacks;
    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
    std::vector<AidlDeviceInfo> mDeviceInfos;
    mutable std::mutex mLock;
    InputFilterConfiguration mConfig GUARDED_BY(mLock);

    bool isFilterEnabled();
    void notifyConfigurationChangedLocked() REQUIRES(mLock);
};

} // namespace android