From 0bdd39b247661c1a0406d450d578d4ff3fd171b0 Mon Sep 17 00:00:00 2001 From: Jan-Simon Moeller Date: Fri, 8 Nov 2019 11:08:35 +0000 Subject: [PATCH] Revert "Add push to talk support to homescreen" It turned out the homescreen won't show. So we need to revisit this patch. https://gerrit.automotivelinux.org/gerrit/#/c/apps/homescreen/+/21182/ This reverts commit f3de2f5cad06a772ee55f58694d559a7cb012c02. Change-Id: Ic8829e5009e9fb74b49ad1dd79125b45a872a838 --- homescreen/homescreen.pro | 12 +- homescreen/qml/MediaArea.qml | 4 +- homescreen/qml/MediaAreaBlank.qml | 18 +- homescreen/qml/SpeechChrome.qml | 120 -------- homescreen/qml/images/SpeechChrome/bar.png | Bin 23826 -> 0 bytes .../qml/images/SpeechChrome/push_to_talk.svg | 322 --------------------- .../qml/images/SpeechChrome/speechchrome.qrc | 6 - homescreen/qml/main.qml | 2 +- homescreen/qml/qml.qrc | 1 - homescreen/src/aglsocketwrapper.cpp | 90 ------ homescreen/src/aglsocketwrapper.h | 35 --- homescreen/src/chromecontroller.cpp | 159 ---------- homescreen/src/chromecontroller.h | 42 --- homescreen/src/constants.h | 42 --- homescreen/src/main.cpp | 4 - package/config.xml | 1 - 16 files changed, 10 insertions(+), 848 deletions(-) delete mode 100644 homescreen/qml/SpeechChrome.qml delete mode 100644 homescreen/qml/images/SpeechChrome/bar.png delete mode 100644 homescreen/qml/images/SpeechChrome/push_to_talk.svg delete mode 100644 homescreen/qml/images/SpeechChrome/speechchrome.qrc delete mode 100644 homescreen/src/aglsocketwrapper.cpp delete mode 100644 homescreen/src/aglsocketwrapper.h delete mode 100644 homescreen/src/chromecontroller.cpp delete mode 100644 homescreen/src/chromecontroller.h delete mode 100644 homescreen/src/constants.h diff --git a/homescreen/homescreen.pro b/homescreen/homescreen.pro index 773271e..8baa90d 100644 --- a/homescreen/homescreen.pro +++ b/homescreen/homescreen.pro @@ -30,19 +30,14 @@ SOURCES += \ src/statusbarserver.cpp \ src/applicationlauncher.cpp \ src/mastervolume.cpp \ - src/homescreenhandler.cpp \ - src/aglsocketwrapper.cpp \ - src/chromecontroller.cpp + src/homescreenhandler.cpp HEADERS += \ src/statusbarmodel.h \ src/statusbarserver.h \ src/applicationlauncher.h \ src/mastervolume.h \ - src/homescreenhandler.h \ - src/aglsocketwrapper.h \ - src/chromecontroller.h \ - src/constants.h + src/homescreenhandler.h OTHER_FILES += \ README.md @@ -54,5 +49,4 @@ RESOURCES += \ qml/images/Shortcut/shortcut.qrc \ qml/images/Status/status.qrc \ qml/images/images.qrc \ - qml/qml.qrc \ - qml/images/SpeechChrome/speechchrome.qrc \ No newline at end of file + qml/qml.qrc diff --git a/homescreen/qml/MediaArea.qml b/homescreen/qml/MediaArea.qml index 3b6d18a..0447589 100644 --- a/homescreen/qml/MediaArea.qml +++ b/homescreen/qml/MediaArea.qml @@ -20,8 +20,8 @@ import QtQuick.Controls 2.0 StackView { id: root - width: parent.width - height: parent.height + width: 1080 + height: 215 initialItem: blank diff --git a/homescreen/qml/MediaAreaBlank.qml b/homescreen/qml/MediaAreaBlank.qml index 60d0c92..ebddb0c 100644 --- a/homescreen/qml/MediaAreaBlank.qml +++ b/homescreen/qml/MediaAreaBlank.qml @@ -22,8 +22,8 @@ import AGL.Demo.Controls 1.0 import MasterVolume 1.0 Image { - width: parent.width - height: parent.height + width: 1080 + height: 215 source: './images/Utility_Logo_Background-01.svg' property bool displayVolume: false; @@ -40,14 +40,14 @@ Image { } Image { - id: logo_image + id: logo_image anchors.centerIn: parent source: './images/Utility_Logo_Grey-01.svg' } Timer { id: volume_timer - interval: 3000; running: false; repeat: false + interval: 5000; running: false; repeat: false onTriggered: displayVolume = false } @@ -56,13 +56,11 @@ Image { PropertyChanges { target: master_volume; opacity: 1.0 } PropertyChanges { target: slider; enabled: true } PropertyChanges { target: logo_image; opacity: 0.0 } - PropertyChanges { target: speech_chrome; visible: false } }, State { when: !displayVolume; PropertyChanges { target: master_volume; opacity: 0.0 } PropertyChanges { target: slider; enabled: false } PropertyChanges { target: logo_image; opacity: 1.0 } - PropertyChanges { target: speech_chrome; visible: speech_chrome.agentPresent } } ] @@ -123,12 +121,4 @@ Image { } } } - - SpeechChrome { - id: speech_chrome - anchors.left: parent.left - anchors.right: parent.right - anchors.bottom: parent.bottom - height: parent.height - } } diff --git a/homescreen/qml/SpeechChrome.qml b/homescreen/qml/SpeechChrome.qml deleted file mode 100644 index 911d481..0000000 --- a/homescreen/qml/SpeechChrome.qml +++ /dev/null @@ -1,120 +0,0 @@ -import QtQuick 2.0 -import SpeechChrome 1.0 - -Item { - id: root - - clip: true - - property bool agentPresent: speechChromeController.agentPresent - - visible: agentPresent - - Image { - id: chromeBarImage - - anchors.top: parent.top - source: "./images/SpeechChrome/bar.png" - - Behavior on x { - NumberAnimation { duration: 250 } - } - Behavior on opacity { - NumberAnimation { duration: 250 } - } - } - - Image { - id: pushToTalk - - height: parent.height * 0.80 - width: height - - anchors.left: parent.left - anchors.leftMargin: parent.width / 128 - anchors.verticalCenter: parent.verticalCenter - source: "./images/SpeechChrome/push_to_talk.svg" - - MouseArea { - anchors.fill: parent - onPressed: speechChromeController.pushToTalk() - } - - Behavior on opacity { - NumberAnimation { duration: 250 } - } - } - - states: [ - State { - name: "Idle" - when: speechChromeController.chromeState == SpeechChromeController.Idle - PropertyChanges { - target: chromeBarImage - opacity: 0.0 - x: 0 - } - PropertyChanges { - target: pushToTalk - opacity: 1.0 - enabled: true - } - }, - State { - name: "Listening" - when: speechChromeController.chromeState == SpeechChromeController.Listening - PropertyChanges { - target: chromeBarImage - opacity: 1.0 - x: 0 - } - PropertyChanges { - target: pushToTalk - opacity: 0.0 - enabled: false - } - }, - State { - name: "Thinking" - when: speechChromeController.chromeState == SpeechChromeController.Thinking - PropertyChanges { - target: chromeBarImage - opacity: 1.0 - x: root.width - chromeBarImage.width - } - PropertyChanges { - target: pushToTalk - opacity: 0.0 - enabled: false - } - }, - State { - name: "Speaking" - when: speechChromeController.chromeState == SpeechChromeController.Speaking - PropertyChanges { - target: chromeBarImage - opacity: 1.0 - x: (root.width - chromeBarImage.width) * 0.5 - } - PropertyChanges { - target: pushToTalk - opacity: 0.0 - enabled: false - } - }, - State { - name: "MicrophoneOff" - when: speechChromeController.chromeState == SpeechChromeController.MicrophoneOff - PropertyChanges { - target: chromeBarImage - opacity: 0.0 - x: 0 - } - PropertyChanges { - target: pushToTalk - opacity: 1.0 - enabled: true - } - } - ] -} diff --git a/homescreen/qml/images/SpeechChrome/bar.png b/homescreen/qml/images/SpeechChrome/bar.png deleted file mode 100644 index caabde1ccc3a5f330f09dd8c9a0fc10680073270..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23826 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 Z{|Cx^m{K`%v9ACC002ovPDHLkV1oSXZ - - -image/svg+xml \ No newline at end of file diff --git a/homescreen/qml/images/SpeechChrome/speechchrome.qrc b/homescreen/qml/images/SpeechChrome/speechchrome.qrc deleted file mode 100644 index 42357f1..0000000 --- a/homescreen/qml/images/SpeechChrome/speechchrome.qrc +++ /dev/null @@ -1,6 +0,0 @@ - - - bar.png - push_to_talk.svg - - diff --git a/homescreen/qml/main.qml b/homescreen/qml/main.qml index 233ee4f..7d40276 100644 --- a/homescreen/qml/main.qml +++ b/homescreen/qml/main.qml @@ -99,7 +99,7 @@ Window { } } - Timer { + Timer { id:notificationTimer interval: 3000 running: false diff --git a/homescreen/qml/qml.qrc b/homescreen/qml/qml.qrc index d901481..e60ea63 100644 --- a/homescreen/qml/qml.qrc +++ b/homescreen/qml/qml.qrc @@ -10,6 +10,5 @@ StatusArea.qml TopArea.qml IconItem.qml - SpeechChrome.qml diff --git a/homescreen/src/aglsocketwrapper.cpp b/homescreen/src/aglsocketwrapper.cpp deleted file mode 100644 index 8352660..0000000 --- a/homescreen/src/aglsocketwrapper.cpp +++ /dev/null @@ -1,90 +0,0 @@ -#include "aglsocketwrapper.h" -#include "constants.h" - -#include -#include -#include -#include -#include - -#include - -namespace { -enum MessageTypes { - Call = 2, - Success = 3, - Error = 4, - Event = 5 -}; -} - -AglSocketWrapper::AglSocketWrapper(QObject *parent) : - QObject(parent) - , m_socket(new QWebSocket(QString(), QWebSocketProtocol::VersionLatest, this)) -{ - connect(m_socket, &QWebSocket::connected, this, &AglSocketWrapper::connected); - connect(m_socket, &QWebSocket::disconnected, this, &AglSocketWrapper::disconnected); - connect(m_socket, QOverload::of(&QWebSocket::error), - [](QAbstractSocket::SocketError error) -> void { - qWarning() << "AglSocketWrapper internal socket error" << error; - }); - connect(m_socket, &QWebSocket::textMessageReceived, - this, [this](const QString &msg) -> void { - const QJsonDocument doc = QJsonDocument::fromJson(msg.toUtf8()); - if (doc.isArray()) { - const QJsonArray msgArray = doc.array(); - if (msgArray.count() >= 3) { - const int msgType = msgArray.at(0).toInt(); - switch (msgType) { - case Success: - case Error: { - auto callbackIt = m_callbacks.find( msgArray.at(1).toString()); - if (callbackIt != m_callbacks.constEnd()) { - (*callbackIt)(msgType == Success, msgArray.at(2)); - m_callbacks.erase(callbackIt); - } - } - break; - case Event: { - const QJsonObject eventObj = msgArray.at(2).toObject(); - emit eventReceived(msgArray.at(1).toString(), eventObj.value(vshl::DATA_TAG)); - } - break; - default: - break; - } - return; - } - } - qWarning() << "Unsupported message format:" << msg; - }); -} - -void AglSocketWrapper::open(const QUrl &url) -{ - m_socket->open(url); -} - -void AglSocketWrapper::close() -{ - m_socket->close(); -} - -void AglSocketWrapper::apiCall(const QString &api, const QString &verb, const QJsonValue &args, - AglSocketWrapper::ApiCallback callback) -{ - const QString id = QUuid::createUuid().toString(); - if (callback) - m_callbacks.insert(id, callback); - - QJsonArray callData; - callData.append(Call); - callData.append(id); - callData.append(api + QLatin1String("/") + verb); - callData.append(args); - - const QString msg = QLatin1String(QJsonDocument(callData).toJson(QJsonDocument::Compact)); - m_socket->sendTextMessage(msg); - - qDebug() << Q_FUNC_INFO << "Data sent:" << msg; -} diff --git a/homescreen/src/aglsocketwrapper.h b/homescreen/src/aglsocketwrapper.h deleted file mode 100644 index 4807cd5..0000000 --- a/homescreen/src/aglsocketwrapper.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef AGLSOCKETWRAPPER_H -#define AGLSOCKETWRAPPER_H - -#include -#include -#include -#include - -#include - -class QWebSocket; -class AglSocketWrapper : public QObject -{ - Q_OBJECT -public: - explicit AglSocketWrapper(QObject *parent = nullptr); - - void open(const QUrl &url); - void close(); - - using ApiCallback = std::function; - void apiCall(const QString &api, const QString &verb, const QJsonValue &args = QJsonValue(), - ApiCallback callback = nullptr); - -signals: - void connected(); - void disconnected(); - void eventReceived(const QString &eventName, const QJsonValue &data); - -private: - QWebSocket *m_socket; - QMap m_callbacks; -}; - -#endif // AGLSOCKETWRAPPER_H diff --git a/homescreen/src/chromecontroller.cpp b/homescreen/src/chromecontroller.cpp deleted file mode 100644 index b604dae..0000000 --- a/homescreen/src/chromecontroller.cpp +++ /dev/null @@ -1,159 +0,0 @@ -#include "chromecontroller.h" -#include "aglsocketwrapper.h" -#include "constants.h" - -#include -#include -#include - -ChromeController::ChromeController(const QUrl &bindingUrl, QObject *parent) : - QObject(parent) - , m_aglSocket(new AglSocketWrapper(this)) -{ - //Alexa voice agent subscription---------------------------------------------------------------- - { - connect(m_aglSocket, &AglSocketWrapper::connected, - this, [this]() -> void { - m_aglSocket->apiCall(vshl::API, vshl::VOICE_AGENT_ENUMERATION_VERB, QJsonValue(), - [this](bool result, const QJsonValue &data) -> void { - qDebug() << (vshl::API + QLatin1String(":") + vshl::VOICE_AGENT_ENUMERATION_VERB) - << "result: " << result << " val: " << data; - if (!result) { - qWarning() << "Failed to enumerate voice agents"; - return; - } - - QJsonObject dataObj = data.toObject(); - auto objIt = dataObj.find(vshl::RESPONSE_TAG); - if (objIt == dataObj.constEnd()) { - qWarning() << "Voice agent enumeration response tag missing." - << dataObj; - return; - } - - // Get default voice agent - dataObj = objIt.value().toObject(); - QJsonObject responseObj = dataObj; - objIt = dataObj.find(vshl::DEFAULT_TAG); - if (objIt == dataObj.constEnd()) { - qWarning() << "Voice agent enumeration default agent tag missing." - << dataObj; - return; - } - QString agentId = objIt.value().toString(); - if (agentId.isEmpty()) { - qWarning() << "Default voice agent not found"; - return; - } - qDebug() << (vshl::API + QLatin1String(":") + vshl::VOICE_AGENT_ENUMERATION_VERB) << "default: " << agentId; - - objIt = dataObj.find(vshl::AGENTS_TAG); - if (objIt == dataObj.constEnd()) { - qWarning() << "Voice agent enumeration agents tag missing." - << dataObj; - return; - } - - // Sanity check that the default agent is actually listed - bool agentFound = false; - const QJsonArray agents = objIt.value().toArray(); - for (const QJsonValue &agent : agents) { - const QJsonObject agentObj = agent.toObject(); - auto agentIt = agentObj.find(vshl::ID_TAG); - if (agentIt == agentObj.constEnd()) - continue; - if (agentId.compare(agentIt.value().toString()) == 0) { - agentFound = true; - break; - } - } - if (!agentFound) { - qWarning() << "Default voice agent configuration not found"; - return; - } - m_agentPresent = true; - emit agentPresentChanged(); - - //Voice agent subscription------------------------------------------------------ - { - m_voiceAgentId = agentId; - const QJsonObject args { - { vshl::VOICE_AGENT_ID_ARG, agentId }, - { vshl::VOICE_AGENT_EVENTS_ARG, vshl::VOICE_AGENT_EVENTS_ARRAY } - }; - m_aglSocket->apiCall(vshl::API, vshl::SUBSCRIBE_VERB, args, - [](bool result, const QJsonValue &data) -> void { - qDebug() << (vshl::API + QLatin1String(":") + vshl::SUBSCRIBE_VERB) - << "result: " << result << " val: " << data; - }); - } - //------------------------------------------------------------------------------ - }); - }); - } - //----------------------------------------------------------------------------------------------< - - //Socket connection management------------------------------------------------------------------ - { - auto connectToBinding = [bindingUrl, this]() -> void { - m_aglSocket->open(bindingUrl); - qDebug() << "Connecting to:" << bindingUrl; - }; - connect(m_aglSocket, &AglSocketWrapper::disconnected, this, [connectToBinding]() -> void { - QTimer::singleShot(2500, connectToBinding); - }); - connectToBinding(); - } - //---------------------------------------------------------------------------------------------- - - //Speech chrome state change event handling----------------------------------------------------- - { - connect(m_aglSocket, &AglSocketWrapper::eventReceived, - this, [this](const QString &eventName, const QJsonValue &data) -> void { - if (eventName.compare(vshl::VOICE_DIALOG_STATE_EVENT + m_voiceAgentId) == 0) { - const QJsonObject dataObj = QJsonDocument::fromJson(data.toString().toUtf8()).object(); - auto objIt = dataObj.find(vshl::STATE_TAG); - if (objIt == dataObj.constEnd()) { - qWarning() << "Voice dialog state event state missing."; - return; - } - const QString stateStr = objIt.value().toString(); - if (stateStr.compare(vshl::VOICE_DIALOG_IDLE) == 0) { - setChromeState(Idle); - } else if (stateStr.compare(vshl::VOICE_DIALOG_LISTENING) == 0) { - setChromeState(Listening); - } else if (stateStr.compare(vshl::VOICE_DIALOG_THINKING) == 0) { - setChromeState(Thinking); - } else if (stateStr.compare(vshl::VOICE_DIALOG_SPEAKING) == 0) { - setChromeState(Speaking); - } else if (stateStr.compare(vshl::VOICE_DIALOG_MICROPHONEOFF) == 0) { - setChromeState(MicrophoneOff); - } - } - }); - } - //---------------------------------------------------------------------------------------------- -} - -void ChromeController::pushToTalk() -{ - m_aglSocket->apiCall(vshl::API, vshl::TAP_TO_TALK_VERB, QJsonValue(), - [](bool result, const QJsonValue &data) -> void { - qDebug() << (vshl::API + QLatin1String(":") + vshl::TAP_TO_TALK_VERB) - << "result: " << result << " val: " << data; - }); -} - -void ChromeController::setChromeState(ChromeController::ChromeState state) -{ - const char* ChromeStateNames[MicrophoneOff + 1] = { "Idle", "Listening", "Thinking", "Speaking", "MicrophoneOff" }; - - if (m_chromeState != state) { - m_chromeState = state; - emit chromeStateChanged(); - if(state <= MicrophoneOff) - qDebug() << "new state = " << ChromeStateNames[state]; - else - qDebug() << "new state = " << state; - } -} diff --git a/homescreen/src/chromecontroller.h b/homescreen/src/chromecontroller.h deleted file mode 100644 index 2a76002..0000000 --- a/homescreen/src/chromecontroller.h +++ /dev/null @@ -1,42 +0,0 @@ -#pragma once - -#include -#include - -class AglSocketWrapper; -class ChromeController : public QObject -{ - Q_OBJECT - - Q_PROPERTY(bool agentPresent READ agentPresent NOTIFY agentPresentChanged) - Q_PROPERTY(int chromeState READ chromeState NOTIFY chromeStateChanged) - -public: - enum ChromeState { - Idle = 0, - Listening, - Thinking, - Speaking, - MicrophoneOff - }; - Q_ENUM(ChromeState) - - explicit ChromeController(const QUrl &bindingUrl, QObject *parent = nullptr); - bool agentPresent() const { return m_agentPresent; } - int chromeState() const { return m_chromeState; } - -public slots: - void pushToTalk(); - -signals: - void agentPresentChanged(); - void chromeStateChanged(); - -private: - void setChromeState(ChromeState state); - - AglSocketWrapper *m_aglSocket; - QString m_voiceAgentId; - bool m_agentPresent = false; - ChromeState m_chromeState = Idle; -}; diff --git a/homescreen/src/constants.h b/homescreen/src/constants.h deleted file mode 100644 index a43bf6d..0000000 --- a/homescreen/src/constants.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef CONSTANTS_H -#define CONSTANTS_H - -#include -#include -#include - -namespace vshl { -const QString API = QLatin1String("vshl-core"); -const QString VOICE_AGENT_ENUMERATION_VERB = QLatin1String("enumerateVoiceAgents"); -const QString SUBSCRIBE_VERB = QLatin1String("subscribe"); -const QString TAP_TO_TALK_VERB = QLatin1String("startListening"); - -const QString ALEXA_AGENT_NAME = QLatin1String("Alexa"); - -const QString DATA_TAG = QLatin1String("data"); -const QString RESPONSE_TAG = QLatin1String("response"); -const QString AGENTS_TAG = QLatin1String("agents"); -const QString DEFAULT_TAG = QLatin1String("default"); -const QString NAME_TAG = QLatin1String("name"); -const QString ID_TAG = QLatin1String("id"); -const QString STATE_TAG = QLatin1String("state"); - -const QString VOICE_AGENT_ID_ARG = QLatin1String("va_id"); -const QString VOICE_AGENT_EVENTS_ARG = QLatin1String("events"); -const QString VOICE_AGENT_ACTIONS_ARG = QLatin1String("actions"); - -const QJsonArray VOICE_AGENT_EVENTS_ARRAY = { - QLatin1String("voice_authstate_event"), - QLatin1String("voice_dialogstate_event"), - QLatin1String("voice_connectionstate_event") -}; - -const QString VOICE_DIALOG_STATE_EVENT = QLatin1String("vshl-core/voice_dialogstate_event#"); -const QString VOICE_DIALOG_IDLE = QLatin1String("IDLE"); -const QString VOICE_DIALOG_LISTENING = QLatin1String("LISTENING"); -const QString VOICE_DIALOG_THINKING = QLatin1String("THINKING"); -const QString VOICE_DIALOG_SPEAKING = QLatin1String("SPEAKING"); -const QString VOICE_DIALOG_MICROPHONEOFF = QLatin1String("MICROPHONEOFF"); -} - -#endif // CONSTANTS_H diff --git a/homescreen/src/main.cpp b/homescreen/src/main.cpp index 5c819f9..5f283fb 100644 --- a/homescreen/src/main.cpp +++ b/homescreen/src/main.cpp @@ -32,7 +32,6 @@ #include "mastervolume.h" #include "homescreenhandler.h" #include "hmi-debug.h" -#include "chromecontroller.h" // XXX: We want this DBus connection to be shared across the different // QML objects, is there another way to do this, a nice way, perhaps? @@ -92,8 +91,6 @@ int main(int argc, char *argv[]) // qmlRegisterType("HomeScreen", 1, 0, "ApplicationLauncher"); qmlRegisterType("HomeScreen", 1, 0, "StatusBarModel"); qmlRegisterType("MasterVolume", 1, 0, "MasterVolume"); - qmlRegisterUncreatableType("SpeechChrome", 1, 0, "SpeechChromeController", - QLatin1String("SpeechChromeController is uncreatable.")); ApplicationLauncher *launcher = new ApplicationLauncher(); QLibWindowmanager* layoutHandler = new QLibWindowmanager(); @@ -143,7 +140,6 @@ int main(int argc, char *argv[]) engine.rootContext()->setContextProperty("launcher", launcher); engine.rootContext()->setContextProperty("weather", new Weather(bindingAddress)); engine.rootContext()->setContextProperty("bluetooth", new Bluetooth(bindingAddress, engine.rootContext())); - engine.rootContext()->setContextProperty("speechChromeController", new ChromeController(bindingAddress, &engine)); engine.rootContext()->setContextProperty("screenInfo", &screenInfo); engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); diff --git a/package/config.xml b/package/config.xml index 441cc8d..3ebe39b 100644 --- a/package/config.xml +++ b/package/config.xml @@ -13,7 +13,6 @@ - -- 2.16.6