diff options
-rw-r--r-- | homescreen/qml/StatusArea.qml | 2 | ||||
-rw-r--r-- | homescreen/src/main.cpp | 4 | ||||
-rw-r--r-- | homescreen/src/statusbarmodel.cpp | 46 | ||||
-rw-r--r-- | homescreen/src/statusbarmodel.h | 7 | ||||
-rw-r--r-- | package/config.xml | 1 |
5 files changed, 59 insertions, 1 deletions
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<QQuickWindow *>(root); QObject::connect(window, SIGNAL(frameSwapped()), layoutHandler, SLOT(slotActivateSurface())); + QList<QObject *> sobjs = engine.rootObjects(); + StatusBarModel *statusBar = sobjs.first()->findChild<StatusBarModel *>("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 <QtDBus/QDBusConnection> +#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<int, QByteArray> 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 diff --git a/package/config.xml b/package/config.xml index 036b9ba..f6a040f 100644 --- a/package/config.xml +++ b/package/config.xml @@ -8,6 +8,7 @@ <license>APL 2.0</license> <feature name="urn:AGL:widget:required-api"> <param name="homescreen" value="ws" /> + <param name="network-manager" value="ws" /> <param name="weather" value="ws" /> <param name="windowmanager" value="ws" /> </feature> |