mmplugin: Flesh out update signals and behaviour

This commit is contained in:
Devin Lin 2022-10-23 12:12:40 -04:00
parent e2bfa2212f
commit 867dc32df2
4 changed files with 64 additions and 30 deletions

View file

@ -4,14 +4,33 @@
#include <NetworkManagerQt/GsmSetting>
#include <NetworkManagerQt/Manager>
#include <NetworkManagerQt/Settings>
#include <NetworkManagerQt/Utils>
#include "signalindicator.h"
SignalIndicator::SignalIndicator()
{
connect(ModemManager::notifier(), &ModemManager::Notifier::modemAdded, this, &SignalIndicator::updateModem);
connect(ModemManager::notifier(), &ModemManager::Notifier::modemRemoved, this, &SignalIndicator::updateModem);
updateModem();
connect(ModemManager::notifier(), &ModemManager::Notifier::modemAdded, this, &SignalIndicator::updateModemManagerModem);
connect(ModemManager::notifier(), &ModemManager::Notifier::modemRemoved, this, &SignalIndicator::updateModemManagerModem);
connect(NetworkManager::settingsNotifier(), &NetworkManager::SettingsNotifier::connectionAdded, this, [this]() {
Q_EMIT mobileDataEnabledChanged();
});
connect(NetworkManager::settingsNotifier(), &NetworkManager::SettingsNotifier::connectionRemoved, this, [this]() {
Q_EMIT mobileDataEnabledChanged();
});
connect(NetworkManager::notifier(), &NetworkManager::Notifier::activeConnectionAdded, this, [this]() {
Q_EMIT mobileDataEnabledChanged();
});
connect(NetworkManager::notifier(), &NetworkManager::Notifier::activeConnectionRemoved, this, [this]() {
Q_EMIT mobileDataEnabledChanged();
});
connect(NetworkManager::notifier(), &NetworkManager::Notifier::deviceAdded, this, &SignalIndicator::updateNetworkManagerModem);
connect(NetworkManager::notifier(), &NetworkManager::Notifier::deviceRemoved, this, &SignalIndicator::updateNetworkManagerModem);
updateModemManagerModem();
}
int SignalIndicator::strength() const
@ -27,6 +46,11 @@ QString SignalIndicator::name() const
return m_3gppModem ? m_3gppModem->operatorName() : QString();
}
bool SignalIndicator::modemAvailable() const
{
return m_modem;
}
bool SignalIndicator::simLocked() const
{
if (!m_modem) {
@ -43,14 +67,9 @@ bool SignalIndicator::simEmpty() const
return m_modemDevice && m_modemDevice->sim() && m_modemDevice->sim()->uni() == QStringLiteral("/");
}
bool SignalIndicator::available() const
{
return !ModemManager::modemDevices().isEmpty();
}
bool SignalIndicator::mobileDataSupported() const
{
return m_nmModem && m_modemDevice->sim() && !simEmpty();
return m_nmModem && !simEmpty();
}
bool SignalIndicator::mobileDataEnabled() const
@ -98,7 +117,7 @@ void SignalIndicator::setMobileDataEnabled(bool enabled)
con->settings()->setAutoconnect(false);
con->update(con->settings()->toMap());
}
m_nmModem->disconnectInterface().waitForFinished();
m_nmModem->disconnectInterface();
} else {
m_nmModem->setAutoconnect(true);
// activate the connection that was last used
@ -125,18 +144,41 @@ void SignalIndicator::setMobileDataEnabled(bool enabled)
}
}
void SignalIndicator::updateModem()
void SignalIndicator::updateModemManagerModem()
{
if (!available()) {
if (ModemManager::modemDevices().isEmpty()) {
qWarning() << "No modems available";
return;
}
// we assume that there is a single modem
// TODO: we assume that there is a single modem for the time being
m_modemDevice = ModemManager::modemDevices()[0];
m_modem = m_modemDevice->modemInterface();
m_3gppModem = m_modemDevice->interface(ModemManager::ModemDevice::GsmInterface).objectCast<ModemManager::Modem3gpp>();
connect(m_modemDevice->sim().get(), &ModemManager::Sim::simIdentifierChanged, this, &SignalIndicator::simEmptyChanged);
if (m_modem) {
connect(m_modem.get(), &ModemManager::Modem::signalQualityChanged, this, &SignalIndicator::strengthChanged);
connect(m_modem.get(), &ModemManager::Modem::unlockRequiredChanged, this, &SignalIndicator::simLockedChanged);
}
if (m_3gppModem) {
connect(m_3gppModem.get(), &ModemManager::Modem3gpp::operatorNameChanged, this, &SignalIndicator::nameChanged);
}
updateNetworkManagerModem();
Q_EMIT nameChanged();
Q_EMIT strengthChanged();
Q_EMIT modemAvailableChanged();
}
void SignalIndicator::updateNetworkManagerModem()
{
if (!m_modemDevice) {
return;
}
// find networkmanager modem
for (NetworkManager::Device::Ptr nmDevice : NetworkManager::networkInterfaces()) {
if (nmDevice->udi() == m_modemDevice->uni()) {
@ -150,18 +192,7 @@ void SignalIndicator::updateModem()
});
}
}
connect(m_modemDevice->sim().get(), &ModemManager::Sim::simIdentifierChanged, this, &SignalIndicator::simEmptyChanged);
if (m_modem) {
connect(m_modem.get(), &ModemManager::Modem::signalQualityChanged, this, &SignalIndicator::strengthChanged);
connect(m_modem.get(), &ModemManager::Modem::unlockRequiredChanged, this, &SignalIndicator::simLockedChanged);
}
if (m_3gppModem) {
connect(m_3gppModem.get(), &ModemManager::Modem3gpp::operatorNameChanged, this, &SignalIndicator::nameChanged);
}
Q_EMIT mobileDataSupportedChanged();
Q_EMIT nameChanged();
Q_EMIT availableChanged();
Q_EMIT mobileDataEnabledChanged();
}

View file

@ -19,9 +19,9 @@ class SignalIndicator : public QObject
Q_PROPERTY(int strength READ strength NOTIFY strengthChanged)
Q_PROPERTY(QString name READ name NOTIFY nameChanged)
Q_PROPERTY(bool modemAvailable READ modemAvailable NOTIFY modemAvailableChanged)
Q_PROPERTY(bool simLocked READ simLocked NOTIFY simLockedChanged)
Q_PROPERTY(bool simEmpty READ simEmpty NOTIFY simEmptyChanged)
Q_PROPERTY(bool available READ available NOTIFY availableChanged)
Q_PROPERTY(bool mobileDataSupported READ mobileDataSupported NOTIFY mobileDataSupportedChanged)
Q_PROPERTY(bool mobileDataEnabled READ mobileDataEnabled WRITE setMobileDataEnabled NOTIFY mobileDataEnabledChanged)
Q_PROPERTY(bool needsAPNAdded READ needsAPNAdded NOTIFY mobileDataEnabledChanged)
@ -31,9 +31,9 @@ public:
int strength() const;
QString name() const;
bool modemAvailable() const;
bool simLocked() const;
bool simEmpty() const;
bool available() const;
bool mobileDataSupported() const;
bool mobileDataEnabled() const;
bool needsAPNAdded() const;
@ -43,9 +43,9 @@ public:
Q_SIGNALS:
void strengthChanged();
void nameChanged();
void modemAvailableChanged();
void simLockedChanged();
void simEmptyChanged();
void availableChanged();
void mobileDataSupportedChanged();
void mobileDataEnabledChanged();
@ -55,5 +55,6 @@ private:
ModemManager::Modem::Ptr m_modem;
ModemManager::Modem3gpp::Ptr m_3gppModem;
void updateModem();
void updateModemManagerModem();
void updateNetworkManagerModem();
};

View file

@ -17,5 +17,7 @@ QtObject {
property string label: !SignalIndicator.available ? ""
: SignalIndicator.simLocked ? i18n("SIM Locked") : SignalIndicator.name
property bool showIndicator: SignalIndicator.modemAvailable
}

View file

@ -37,7 +37,7 @@ Item {
source: provider.icon
// don't show mobile indicator icon if the networkmanager one is already showing
visible: !isInternetIndicatorMobileData
visible: !isInternetIndicatorMobileData && provider.showIndicator
}
PlasmaComponents.Label {