From 0c4d8bf4e0af08563c907148216ffdb485dd1922 Mon Sep 17 00:00:00 2001
From: Matt Porter <mporter@konsulko.com>
Date: Fri, 27 Jul 2018 11:54:56 -0400
Subject: network: add wifiStrength property

Add a wifiStrength property which exposes the signal strength
of the currently connected network. This is intended to be
used by global status indicators, such as a status bar WiFi
strength indicator.

Bug-AGL: SPEC-1626

Change-Id: I7285b04095bc67278c862fc363a2dfbfff57d44d
Signed-off-by: Matt Porter <mporter@konsulko.com>
---
 network/network.cpp          | 13 ++++++++++++-
 network/network.h            |  5 +++++
 network/wifinetworkmodel.cpp |  3 +++
 network/wifinetworkmodel.h   |  3 +++
 4 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/network/network.cpp b/network/network.cpp
index d2a00ff..7bcf6d0 100644
--- a/network/network.cpp
+++ b/network/network.cpp
@@ -31,7 +31,8 @@ Network::Network (QUrl &url, QQmlContext *context, QObject * parent) :
     m_mloop(nullptr),
     m_wifi(nullptr),
     m_wifiConnected(false),
-    m_wifiEnabled(false)
+    m_wifiEnabled(false),
+    m_wifiStrength(0)
 {
     m_mloop = new MessageEngine(url);
     m_wifi = new WifiNetworkModel();
@@ -41,6 +42,7 @@ Network::Network (QUrl &url, QQmlContext *context, QObject * parent) :
     QObject::connect(m_mloop, &MessageEngine::connected, this, &Network::onConnected);
     QObject::connect(m_mloop, &MessageEngine::disconnected, this, &Network::onDisconnected);
     QObject::connect(m_mloop, &MessageEngine::messageReceived, this, &Network::onMessageReceived);
+    QObject::connect(m_wifi, &WifiNetworkModel::strengthChanged, this, &Network::updateWifiStrength);
 }
 
 Network::~Network()
@@ -159,6 +161,9 @@ bool Network::addService(QJsonObject service)
         WifiNetwork *network = new WifiNetwork(address, security, id, ssid, state, strength);
         m_wifi->addNetwork(network);
 
+        if ((state == "ready") || (state == "online"))
+            updateWifiStrength(strength);
+
         return true;
 }
 
@@ -202,6 +207,12 @@ void Network::updateWifiStatus(QJsonObject properties)
     }
 }
 
+void Network::updateWifiStrength(int strength)
+{
+    m_wifiStrength = strength;
+    emit wifiStrengthChanged(m_wifiStrength);
+}
+
 void Network::parseTechnologies(QJsonArray technologies)
 {
     for (auto value : technologies) {
diff --git a/network/network.h b/network/network.h
index dc52dd2..499f612 100644
--- a/network/network.h
+++ b/network/network.h
@@ -43,9 +43,11 @@ class Network : public QObject
 
         Q_PROPERTY(bool wifiConnected READ wifiConnected NOTIFY wifiConnectedChanged)
         Q_PROPERTY(bool wifiEnabled READ wifiEnabled NOTIFY wifiEnabledChanged)
+        Q_PROPERTY(bool wifiStrength READ wifiStrength NOTIFY wifiStrengthChanged)
 
         bool wifiConnected() const { return m_wifiConnected; }
         bool wifiEnabled() const { return m_wifiEnabled; }
+        bool wifiStrength() const { return m_wifiStrength; }
 
     signals:
         void inputRequest(int id);
@@ -53,6 +55,7 @@ class Network : public QObject
         void statusChanged(bool connected);
         void wifiConnectedChanged(bool connected);
         void wifiEnabledChanged(bool enabled);
+        void wifiStrengthChanged(int strength);
 
     private:
         MessageEngine *m_mloop;
@@ -60,6 +63,7 @@ class Network : public QObject
         WifiNetworkModel *m_wifi;
         bool m_wifiConnected;
         bool m_wifiEnabled;
+        int m_wifiStrength;
 
         void updateWifiStatus(QJsonObject properties);
         void updateServiceProperties(QJsonObject data);
@@ -79,6 +83,7 @@ class Network : public QObject
         void onConnected();
         void onDisconnected();
         void onMessageReceived(MessageType, Message*);
+        void updateWifiStrength(int);
 
         const QStringList events {
             "agent",
diff --git a/network/wifinetworkmodel.cpp b/network/wifinetworkmodel.cpp
index 8a83919..3cfd7dd 100644
--- a/network/wifinetworkmodel.cpp
+++ b/network/wifinetworkmodel.cpp
@@ -163,6 +163,9 @@ void WifiNetworkModel::updateProperties(QString service, QJsonObject properties)
         if (properties.contains("strength")) {
             network->setStrength(properties.value("strength").toInt());
             emit dataChanged(indexOf(network), indexOf(network));
+        if ((network->state() == "ready") ||
+            (network->state() == "online"))
+                emit strengthChanged(network->strength());
         }
     }
 }
diff --git a/network/wifinetworkmodel.h b/network/wifinetworkmodel.h
index 27e635a..0df4459 100644
--- a/network/wifinetworkmodel.h
+++ b/network/wifinetworkmodel.h
@@ -58,6 +58,9 @@ class WifiNetworkModel : public QAbstractListModel
         QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
         void updateProperties(QString service, QJsonObject properties);
 
+    signals:
+        void strengthChanged(int strength);
+
     protected:
         QHash<int, QByteArray> roleNames() const;
 
-- 
cgit