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/GsmSetting>
#include <NetworkManagerQt/Manager> #include <NetworkManagerQt/Manager>
#include <NetworkManagerQt/Settings>
#include <NetworkManagerQt/Utils>
#include "signalindicator.h" #include "signalindicator.h"
SignalIndicator::SignalIndicator() SignalIndicator::SignalIndicator()
{ {
connect(ModemManager::notifier(), &ModemManager::Notifier::modemAdded, this, &SignalIndicator::updateModem); connect(ModemManager::notifier(), &ModemManager::Notifier::modemAdded, this, &SignalIndicator::updateModemManagerModem);
connect(ModemManager::notifier(), &ModemManager::Notifier::modemRemoved, this, &SignalIndicator::updateModem); connect(ModemManager::notifier(), &ModemManager::Notifier::modemRemoved, this, &SignalIndicator::updateModemManagerModem);
updateModem();
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 int SignalIndicator::strength() const
@ -27,6 +46,11 @@ QString SignalIndicator::name() const
return m_3gppModem ? m_3gppModem->operatorName() : QString(); return m_3gppModem ? m_3gppModem->operatorName() : QString();
} }
bool SignalIndicator::modemAvailable() const
{
return m_modem;
}
bool SignalIndicator::simLocked() const bool SignalIndicator::simLocked() const
{ {
if (!m_modem) { if (!m_modem) {
@ -43,14 +67,9 @@ bool SignalIndicator::simEmpty() const
return m_modemDevice && m_modemDevice->sim() && m_modemDevice->sim()->uni() == QStringLiteral("/"); return m_modemDevice && m_modemDevice->sim() && m_modemDevice->sim()->uni() == QStringLiteral("/");
} }
bool SignalIndicator::available() const
{
return !ModemManager::modemDevices().isEmpty();
}
bool SignalIndicator::mobileDataSupported() const bool SignalIndicator::mobileDataSupported() const
{ {
return m_nmModem && m_modemDevice->sim() && !simEmpty(); return m_nmModem && !simEmpty();
} }
bool SignalIndicator::mobileDataEnabled() const bool SignalIndicator::mobileDataEnabled() const
@ -98,7 +117,7 @@ void SignalIndicator::setMobileDataEnabled(bool enabled)
con->settings()->setAutoconnect(false); con->settings()->setAutoconnect(false);
con->update(con->settings()->toMap()); con->update(con->settings()->toMap());
} }
m_nmModem->disconnectInterface().waitForFinished(); m_nmModem->disconnectInterface();
} else { } else {
m_nmModem->setAutoconnect(true); m_nmModem->setAutoconnect(true);
// activate the connection that was last used // 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"; qWarning() << "No modems available";
return; 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_modemDevice = ModemManager::modemDevices()[0];
m_modem = m_modemDevice->modemInterface(); m_modem = m_modemDevice->modemInterface();
m_3gppModem = m_modemDevice->interface(ModemManager::ModemDevice::GsmInterface).objectCast<ModemManager::Modem3gpp>(); 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 // find networkmanager modem
for (NetworkManager::Device::Ptr nmDevice : NetworkManager::networkInterfaces()) { for (NetworkManager::Device::Ptr nmDevice : NetworkManager::networkInterfaces()) {
if (nmDevice->udi() == m_modemDevice->uni()) { if (nmDevice->udi() == m_modemDevice->uni()) {
@ -151,17 +193,6 @@ 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 mobileDataSupportedChanged();
Q_EMIT nameChanged(); Q_EMIT mobileDataEnabledChanged();
Q_EMIT availableChanged();
} }

View file

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

View file

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

View file

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