// Copyright (C) 2021 The Qt Company Ltd. // Copyright (C) 2019 Luxoft Sweden AB // Copyright (C) 2018 Pelagicore AG // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #ifndef INTENTCLIENT_H #define INTENTCLIENT_H #include #include #include #include #include #include #include #include QT_BEGIN_NAMESPACE_AM class AbstractIntentHandler; class IntentClientRequest; class IntentClientSystemInterface; /* internal interface used by IntentRequest and IntentHandler */ class IntentClient : public QObject { Q_OBJECT Q_PROPERTY(QString systemUiId READ systemUiId CONSTANT REVISION(2, 1) FINAL) public: ~IntentClient() override; static IntentClient *createInstance(IntentClientSystemInterface *systemInterface); static IntentClient *instance(); QString systemUiId() const; int replyFromSystemTimeout() const; void setReplyFromSystemTimeout(int timeout); void setReplyFromApplicationTimeout(int timeout); IntentClientRequest *requestToSystem(const QString &requestingApplicationId, const QString &intentId, const QString &applicationId, const QVariantMap ¶meters); void replyFromApplication(IntentClientRequest *icr, const QVariantMap &result); void errorReplyFromApplication(IntentClientRequest *icr, const QString &errorMessage); void registerHandler(AbstractIntentHandler *handler); void unregisterHandler(AbstractIntentHandler *handler); Q_INVOKABLE QtAM::IntentClientRequest *sendIntentRequest(const QString &intentId, const QVariantMap ¶meters); Q_INVOKABLE QtAM::IntentClientRequest *sendIntentRequest(const QString &intentId, const QString &applicationId, const QVariantMap ¶meters); Q_REVISION(2, 1) Q_INVOKABLE bool broadcastIntentRequest(const QString &intentId, const QVariantMap ¶meters); bool isSystemUI() const; // for IntentHandler private: void requestToSystemFinished(IntentClientRequest *icr, const QUuid &newRequestId, bool error, const QString &errorMessage); void replyFromSystem(const QUuid &requestId, bool error, const QVariantMap &result); void requestToApplication(const QUuid &requestId, const QString &intentId, const QString &requestingApplicationId, const QString &applicationId, const QVariantMap ¶meters); private: IntentClient(IntentClientSystemInterface *systemInterface, QObject *parent = nullptr); Q_DISABLE_COPY_MOVE(IntentClient) static IntentClient *s_instance; QList> m_waiting; QElapsedTimer m_lastWaitingCleanup; QMap, AbstractIntentHandler *> m_handlers; // intentId + appId -> handler // no timeouts by default -- these have to be set at runtime int m_replyFromSystemTimeout = 0; int m_replyFromApplicationTimeout = 0; IntentClientSystemInterface *m_systemInterface; friend class IntentClientSystemInterface; }; QT_END_NAMESPACE_AM #endif // INTENTCLIENT_H