diff --git a/components/mmplugin/signalindicator.cpp b/components/mmplugin/signalindicator.cpp index 14875b93..706f2827 100644 --- a/components/mmplugin/signalindicator.cpp +++ b/components/mmplugin/signalindicator.cpp @@ -4,14 +4,33 @@ #include #include +#include +#include #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(); + 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(); } diff --git a/components/mmplugin/signalindicator.h b/components/mmplugin/signalindicator.h index 355eb6af..833b8072 100644 --- a/components/mmplugin/signalindicator.h +++ b/components/mmplugin/signalindicator.h @@ -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(); }; diff --git a/components/mobileshell/qml/dataproviders/SignalStrengthProvider.qml b/components/mobileshell/qml/dataproviders/SignalStrengthProvider.qml index 2237cce2..3b2c08f3 100644 --- a/components/mobileshell/qml/dataproviders/SignalStrengthProvider.qml +++ b/components/mobileshell/qml/dataproviders/SignalStrengthProvider.qml @@ -17,5 +17,7 @@ QtObject { property string label: !SignalIndicator.available ? "" : SignalIndicator.simLocked ? i18n("SIM Locked") : SignalIndicator.name + + property bool showIndicator: SignalIndicator.modemAvailable } diff --git a/components/mobileshell/qml/statusbar/indicators/SignalStrengthIndicator.qml b/components/mobileshell/qml/statusbar/indicators/SignalStrengthIndicator.qml index bcd743dc..a21d5e0d 100644 --- a/components/mobileshell/qml/statusbar/indicators/SignalStrengthIndicator.qml +++ b/components/mobileshell/qml/statusbar/indicators/SignalStrengthIndicator.qml @@ -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 {