From db717523a6f9797312c94e756bac1b7b542e40ed Mon Sep 17 00:00:00 2001 From: Matt Porter Date: Fri, 27 Jul 2018 13:07:56 -0400 Subject: Convert StatusBarModel to get WiFi status info from network binding The StatusBarModel updates icons using an exposed DBus API that avoids the appfw. The new networking binding does not support the out of band StatusBar DBus API. Use events from the network binding (exposed as Qt properties) to update the WiFi status indicator. Bug-AGL: SPEC-1628 Change-Id: Ie91f69c1d5d54d4fb225e4e99a1d5a94a0dc83e7 Signed-off-by: Matt Porter --- homescreen/qml/StatusArea.qml | 2 +- homescreen/src/main.cpp | 4 ++++ homescreen/src/statusbarmodel.cpp | 46 +++++++++++++++++++++++++++++++++++++++ homescreen/src/statusbarmodel.h | 7 ++++++ 4 files changed, 58 insertions(+), 1 deletion(-) (limited to 'homescreen') diff --git a/homescreen/qml/StatusArea.qml b/homescreen/qml/StatusArea.qml index ab14a23..1a86a57 100644 --- a/homescreen/qml/StatusArea.qml +++ b/homescreen/qml/StatusArea.qml @@ -117,7 +117,7 @@ Item { Layout.preferredWidth: 76 spacing: -10 Repeater { - model: StatusBarModel {} + model: StatusBarModel { objectName: "statusBar" } delegate: Image { Layout.preferredWidth: 77 Layout.preferredHeight: 73 diff --git a/homescreen/src/main.cpp b/homescreen/src/main.cpp index 19bb0d3..71dc782 100644 --- a/homescreen/src/main.cpp +++ b/homescreen/src/main.cpp @@ -140,5 +140,9 @@ int main(int argc, char *argv[]) QQuickWindow *window = qobject_cast(root); QObject::connect(window, SIGNAL(frameSwapped()), layoutHandler, SLOT(slotActivateSurface())); + QList sobjs = engine.rootObjects(); + StatusBarModel *statusBar = sobjs.first()->findChild("statusBar"); + statusBar->init(bindingAddress, engine.rootContext()); + return a.exec(); } diff --git a/homescreen/src/statusbarmodel.cpp b/homescreen/src/statusbarmodel.cpp index 5438e89..19767a9 100644 --- a/homescreen/src/statusbarmodel.cpp +++ b/homescreen/src/statusbarmodel.cpp @@ -19,6 +19,8 @@ #include +#include "network.h" + class StatusBarModel::Private { public: @@ -29,6 +31,7 @@ private: public: StatusBarServer server; QString iconList[StatusBarServer::SupportedCount]; + Network *network; }; StatusBarModel::Private::Private(StatusBarModel *parent) @@ -59,6 +62,49 @@ StatusBarModel::~StatusBarModel() delete d; } +void StatusBarModel::init(QUrl &url, QQmlContext *context) +{ + d->network = new Network(url, context); + context->setContextProperty("network", d->network); + + QObject::connect(d->network, &Network::wifiConnectedChanged, this, &StatusBarModel::onWifiConnectedChanged); + QObject::connect(d->network, &Network::wifiEnabledChanged, this, &StatusBarModel::onWifiEnabledChanged); + QObject::connect(d->network, &Network::wifiStrengthChanged, this, &StatusBarModel::onWifiStrengthChanged); + + setWifiStatus(d->network->wifiConnected(), d->network->wifiEnabled(), d->network->wifiStrength()); +} + +void StatusBarModel::setWifiStatus(bool connected, bool enabled, int strength) +{ + if (enabled && connected) + if (strength < 30) + d->server.setStatusIcon(0, QStringLiteral("qrc:/images/Status/HMI_Status_Wifi_1Bar-01.png")); + else if (strength < 50) + d->server.setStatusIcon(0, QStringLiteral("qrc:/images/Status/HMI_Status_Wifi_2Bars-01.png")); + else if (strength < 70) + d->server.setStatusIcon(0, QStringLiteral("qrc:/images/Status/HMI_Status_Wifi_3Bars-01.png")); + else + d->server.setStatusIcon(0, QStringLiteral("qrc:/images/Status/HMI_Status_Wifi_Full-01.png")); + else + d->server.setStatusIcon(0, QStringLiteral("qrc:/images/Status/HMI_Status_Wifi_NoBars-01.png")); +} + +void StatusBarModel::onWifiConnectedChanged(bool connected) +{ + setWifiStatus(connected, d->network->wifiEnabled(), d->network->wifiStrength()); +} + +void StatusBarModel::onWifiEnabledChanged(bool enabled) +{ + setWifiStatus(d->network->wifiConnected(), enabled, d->network->wifiStrength()); +} + +void StatusBarModel::onWifiStrengthChanged(int strength) +{ + qInfo() << "Strength changed: " << strength; + setWifiStatus(d->network->wifiConnected(), d->network->wifiEnabled(), strength); +} + int StatusBarModel::rowCount(const QModelIndex &parent) const { if (parent.isValid()) diff --git a/homescreen/src/statusbarmodel.h b/homescreen/src/statusbarmodel.h index 8d6a70b..39fe148 100644 --- a/homescreen/src/statusbarmodel.h +++ b/homescreen/src/statusbarmodel.h @@ -26,14 +26,21 @@ public: explicit StatusBarModel(QObject *parent = NULL); ~StatusBarModel(); + void init(QUrl &url, QQmlContext *context); int rowCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QHash roleNames() const override; + // slots + void onWifiConnectedChanged(bool connected); + void onWifiEnabledChanged(bool enabled); + void onWifiStrengthChanged(int strength); + private: class Private; Private *d; + void setWifiStatus(bool connected, bool enabled, int strength); }; #endif // STATUSBARMODEL_H -- cgit 1.2.3-korg