File indexing completed on 2024-04-21 16:11:00

0001 /*
0002  *   SPDX-FileCopyrightText: 2022 Bart Ribbers <bribbers@disroot.org>
0003  *
0004  *   SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005  */
0006 
0007 #pragma once
0008 
0009 #include "device.h"
0010 #include <QHash>
0011 #include <QObject>
0012 #include <QDateTime>
0013 #include <QSet>
0014 #include <QTimer>
0015 #include "controllermanagerdbusinterface.h"
0016 
0017 class AbstractSystem;
0018 class KStatusNotifierItem;
0019 class QAction;
0020 class RemoteControllersSettings;
0021 
0022 namespace TaskManager
0023 {
0024     class TasksModel;
0025 }
0026 
0027 class ControllerManagerDBusInterface;
0028 class ControllerManager : public QObject
0029 {
0030     Q_OBJECT
0031 
0032 public:
0033     explicit ControllerManager(QObject *parent = nullptr);
0034     ~ControllerManager();
0035     static ControllerManager &instance();
0036     
0037     void newDevice(Device *device);
0038     void deviceRemoved(Device *device);
0039     bool isConnected(QString uniqueIdentifier);
0040     QVector<Device*> getDevicesByType(DeviceType deviceType);
0041 
0042     /** Have input not forward events to the OS */
0043     void noopInput();
0044 
0045     /** Have input forward events to the OS */
0046     void resetInputSystem();
0047 
0048 public slots:
0049     void emitKey(int key, bool pressed);
0050     void removeDevice(int deviceIndex);
0051     QVector<Device*> connectedDevices();
0052     void refreshApps();
0053 
0054 Q_SIGNALS:
0055     void deviceConnected(Device*);
0056     void deviceDisconnected(Device*);
0057 
0058 private:
0059     void simulateUserActivity();
0060     bool appInhibited(const QString &appId) const;
0061     ControllerManagerDBusInterface *m_dbusInterface = nullptr;
0062 
0063     bool m_enabled = true;
0064     QVector<Device*> m_connectedDevices;
0065     QScopedPointer<AbstractSystem> m_inputSystem;
0066     KStatusNotifierItem *m_sni = nullptr;
0067     TaskManager::TasksModel *m_appsModel = nullptr;
0068     QHash<QString, QAction *> m_appActions;
0069     QScopedPointer<RemoteControllersSettings> m_settings;
0070     QTimer m_lastUsed;
0071 
0072     QDateTime m_lastSimulated;
0073     QSet<int> m_usedKeys;
0074 };