Skip to content

Commit

Permalink
Merge branch 'jb51949' into 'master'
Browse files Browse the repository at this point in the history
Add default data sim when auto connecting multisim

See merge request mer-core/nemo-qml-plugin-connectivity!30
  • Loading branch information
rainemak committed Jan 14, 2021
2 parents 01cdc04 + e10e013 commit 891d345
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 22 deletions.
95 changes: 74 additions & 21 deletions src/nemo-connectivity/mobiledataconnection.cpp
Expand Up @@ -32,7 +32,7 @@
#include "mobiledataconnection.h"
#include "mobiledataconnection_p.h"

Q_LOGGING_CATEGORY(CONNECTIVITY, "qt.nemo.connectivity")
Q_LOGGING_CATEGORY(CONNECTIVITY, "qt.nemo.connectivity", QtWarningMsg)

namespace Nemo {

Expand Down Expand Up @@ -69,6 +69,10 @@ MobileDataConnectionPrivate::~MobileDataConnectionPrivate()

bool MobileDataConnectionPrivate::isValid() const
{
qCDebug(CONNECTIVITY) << "isValid:" << (networkService && networkService->isValid() && !networkService->path().isEmpty())
<< (connectionManager && connectionManager->isValid())
<< (connectionContext && connectionContext->isValid())
<< (networkService && networkService->available());
return networkService && networkService->isValid() && !networkService->path().isEmpty()
&& connectionManager && connectionManager->isValid()
&& connectionContext && connectionContext->isValid()
Expand Down Expand Up @@ -123,6 +127,10 @@ void MobileDataConnectionPrivate::updateStatus()
void MobileDataConnectionPrivate::updateNetworkServicePath()
{
bool simMgrValid = isSimManagerValid();
qCDebug(CONNECTIVITY()) << "MobileDataConnection update network service path:" << simManager.isValid() << simManager.present()
<< simManagerValid << "auto connect service:" << networkService->autoConnect()
<< "pending auto connect:" << autoConnectPending
<< "d_ptr->autoConnect: " << autoConnect;
if (simMgrValid != simManagerValid) {
simManagerValid = simMgrValid;
updateSubscriberIdentity();
Expand All @@ -136,6 +144,8 @@ void MobileDataConnectionPrivate::updateSubscriberIdentity()
QString newSubscriberIdentity = isSimManagerValid() ? simManager.subscriberIdentity() : QString();
if (subscriberIdentity != newSubscriberIdentity) {
subscriberIdentity = newSubscriberIdentity;
qCInfo(CONNECTIVITY) << "imsi:" << subscriberIdentity;
updateDefaultDataSim();
emit q->subscriberIdentityChanged();
}
}
Expand Down Expand Up @@ -219,6 +229,10 @@ void MobileDataConnectionPrivate::createDataContext(const QString &modemPath)
});

QObject::connect(connectionContext, &QOfonoConnectionContext::contextPathChanged, q, [=](const QString &contextPath) {
qCDebug(CONNECTIVITY) << "QOfonoConnectionContext contextPathChanged"
<< "auto connnect service:" << networkService->autoConnect()
<< "pending auto connect:" << autoConnectPending
<< "d_ptr autoConnect: " << autoConnect;;
if (contextPath.isEmpty()) {
networkService->setPath(QString());
} else {
Expand Down Expand Up @@ -280,6 +294,19 @@ void MobileDataConnectionPrivate::requestConnect()
}
}

void MobileDataConnectionPrivate::updateDefaultDataSim()
{
bool multiSimSupported = modemManager->ready() && modemManager->availableModems().count() > 1;
qCDebug(CONNECTIVITY) << "Multisim supported:" << multiSimSupported
<< "autoConnect:" << autoConnect << "pending auto connect:" << autoConnectPending
<< "mm ready:" << modemManager->ready()
<< "mm available modems" << modemManager->availableModems().count()
<< "imsi:" << subscriberIdentity;
if (autoConnect && autoConnectPending && !subscriberIdentity.isEmpty() && multiSimSupported) {
q->setDefaultDataSim(subscriberIdentity);
}
}

MobileDataConnection::MobileDataConnection()
: d_ptr(new MobileDataConnectionPrivate(this))
{
Expand Down Expand Up @@ -314,17 +341,22 @@ MobileDataConnection::MobileDataConnection()
});

QObject::connect(&d_ptr->networkManager, &NetworkManager::availabilityChanged, this, [=]() {
qCDebug(CONNECTIVITY) << "NetworkManager::availabilityChanged auto service:" << d_ptr->networkService->autoConnect()
<< "pending auto connect:" << d_ptr->autoConnectPending
<< "d_ptr auto connect: " << d_ptr->autoConnect;
d_ptr->networkService->setPath(d_ptr->servicePathForContext());
});

QObject::connect(&d_ptr->networkManager, &NetworkManager::cellularServicesChanged, this, [=]() {
qCDebug(CONNECTIVITY) << "NetworkManager::servicesChanged auto service:" << d_ptr->networkService->autoConnect()
<< "pending auto connect:" << d_ptr->autoConnectPending
<< "d_ptr auto connect: " << d_ptr->autoConnect;
d_ptr->networkService->setPath(d_ptr->servicePathForContext());
});

QObject::connect(&d_ptr->networkManager, &NetworkManager::offlineModeChanged,
this, &MobileDataConnection::offlineModeChanged);


QObject::connect(d_ptr->networkService, &NetworkService::errorChanged, this, [=](const QString &error) {
if (!error.isEmpty()) {
d_ptr->connectingService = false;
Expand All @@ -333,15 +365,17 @@ MobileDataConnection::MobileDataConnection()
});
QObject::connect(d_ptr->networkService, &NetworkService::stateChanged, this, [=]() {
// This and available should be clearly visible in the logs.
qCDebug(CONNECTIVITY, "####################### MobileDataConnection::stateChanged state: %s %s available: %d %s",
qPrintable(d_ptr->networkService->state()), qPrintable(modemPath()),
d_ptr->networkService->available(), qPrintable(objectName()));
qCDebug(CONNECTIVITY, "####################### MobileDataConnection::stateChanged state: %s %s available: %d %s"
, qPrintable(d_ptr->networkService->state()), qPrintable(modemPath())
, d_ptr->networkService->available(), qPrintable(objectName()));
d_ptr->updateStatus();
emit stateChanged();
});

QObject::connect(d_ptr->networkService, &NetworkService::validChanged, this, [=]() {
qCDebug(CONNECTIVITY, "NetworkService::validChanged mobile data valid old: %d new %d", d_ptr->valid, d_ptr->isValid());
qCDebug(CONNECTIVITY, "NetworkService::validChanged mobile data valid old: %d new %d auto connect %d pending auto %d, d_ptr->autoConnect: %d"
, d_ptr->valid , d_ptr->isValid()
, d_ptr->networkService->autoConnect(), d_ptr->autoConnectPending, d_ptr->autoConnect);
d_ptr->updateValid();
if (d_ptr->autoConnectPending) {
d_ptr->networkService->setAutoConnect(d_ptr->autoConnect);
Expand All @@ -350,28 +384,30 @@ MobileDataConnection::MobileDataConnection()
});

QObject::connect(d_ptr->networkService, &NetworkService::availableChanged, this, [=]() {
qCDebug(CONNECTIVITY, "####################### MobileDataConnection::availableChanged state: %s %s available: %d %s",
qPrintable(d_ptr->networkService->state()), qPrintable(modemPath()),
d_ptr->networkService->available(), qPrintable(objectName()));
qCDebug(CONNECTIVITY, "####################### MobileDataConnection::availableChanged state: %s %s available: %d %s"
, qPrintable(d_ptr->networkService->state()), qPrintable(modemPath())
, d_ptr->networkService->available(), qPrintable(objectName()));
d_ptr->updateValid();
d_ptr->updateStatus();
emit stateChanged();
});

QObject::connect(d_ptr->networkService, &NetworkService::connectedChanged, this, &MobileDataConnection::connectedChanged);
QObject::connect(d_ptr->networkService, &NetworkService::autoConnectChanged, this, [=]() {
qCDebug(CONNECTIVITY, "NetworkService::autoConnectChanged a: %d c: %d v: %d modem: %s s: %s available: %d",
d_ptr->networkService->autoConnect(), d_ptr->connectingService,
d_ptr->valid, qPrintable(d_ptr->modemManager->defaultDataModem()),
qPrintable(state()), d_ptr->networkService->available());
qCDebug(CONNECTIVITY, "NetworkService::autoConnectChanged a: %d c: %d v: %d modem: %s s: %s available: %d"
, d_ptr->networkService->autoConnect(), d_ptr->connectingService
, d_ptr->valid, qPrintable(d_ptr->modemManager->defaultDataModem())
, qPrintable(state()), d_ptr->networkService->available());
if (!d_ptr->autoConnectPending) {
emit autoConnectChanged();
}
});

QObject::connect(d_ptr->networkService, &NetworkService::pathChanged, this, [=]() {
qCDebug(CONNECTIVITY, "NetworkService::pathChanged %s modem: %s",
qPrintable(d_ptr->networkService->path()), qPrintable(d_ptr->modemManager->defaultDataModem()));
qCDebug(CONNECTIVITY, "MobileDataConnection %s NetworkService::pathChanged %s modem: %s"
, qPrintable(objectName())
, qPrintable(d_ptr->networkService->path())
, qPrintable(d_ptr->modemManager->defaultDataModem()));
d_ptr->updateValid();
emit identifierChanged();
});
Expand All @@ -383,8 +419,12 @@ MobileDataConnection::MobileDataConnection()

QObject::connect(d_ptr->modemManager.data(), &QOfonoExtModemManager::defaultDataSimChanged,
this, [=]() {
qCDebug(CONNECTIVITY, "QOfonoExtModemManager::defaultDataSimChanged: %s %s %s",
qPrintable(d_ptr->servicePathForContext()), qPrintable(modemPath()), qPrintable(objectName()));
qCDebug(CONNECTIVITY, "QOfonoExtModemManager::defaultDataSimChanged: %s %s %s auto connect: %d pending auto: %d, dptr: %d"
, qPrintable(d_ptr->servicePathForContext()), qPrintable(modemPath())
, qPrintable(objectName())
, d_ptr->networkService->autoConnect()
, d_ptr->autoConnectPending
, d_ptr->autoConnect);
d_ptr->networkService->setPath(d_ptr->servicePathForContext());
emit defaultDataSimChanged();
});
Expand All @@ -394,8 +434,8 @@ MobileDataConnection::MobileDataConnection()
this, &MobileDataConnection::slotCountChanged);
QObject::connect(d_ptr->modemManager.data(), &QOfonoExtModemManager::defaultDataModemChanged,
this, [=](QString modemPath) {
qCDebug(CONNECTIVITY, "QOfonoExtModemManager::defaultDataModemChanged: %s use default: %d",
qPrintable(modemPath), d_ptr->useDefaultModem);
qCDebug(CONNECTIVITY, "QOfonoExtModemManager::defaultDataModemChanged: %s use default: %d %p %s"
, qPrintable(modemPath), d_ptr->useDefaultModem, this, qPrintable(objectName()));
if (d_ptr->useDefaultModem) {
d_ptr->simManager.setModemPath(modemPath);
d_ptr->updateDataContext();
Expand Down Expand Up @@ -432,6 +472,11 @@ void MobileDataConnection::setAutoConnect(bool autoConnect)
d->autoConnect = autoConnect;
d->autoConnectPending = true;
}

if (autoConnect) {
qCInfo(CONNECTIVITY) << "auto connecting";
d->updateDefaultDataSim();
}
}

bool MobileDataConnection::connected() const
Expand Down Expand Up @@ -499,10 +544,18 @@ QString MobileDataConnection::defaultDataSim() const
return d->modemManager->defaultDataSim();
}

void MobileDataConnection::setDefaultDataSim(const QString &defaultDataSim)
void MobileDataConnection::setDefaultDataSim(const QString &subscriberIdentity)
{
Q_D(MobileDataConnection);
d->modemManager->setDefaultDataSim(defaultDataSim);

qCDebug(CONNECTIVITY) << subscriberIdentity << "mm valid:" << d->modemManager->valid()
<< "mm ready:" << d->modemManager->ready()
<< "mm presenti sim count:" << d->modemManager->presentSimCount()
<< "mm active sim count:" << d->modemManager->activeSimCount()
<< "mm available modems:" << d->modemManager->availableModems()
<< "mm enabled modems:" << d->modemManager->enabledModems();

d->modemManager->setDefaultDataSim(subscriberIdentity);
}

int MobileDataConnection::presentSimCount() const
Expand Down
2 changes: 1 addition & 1 deletion src/nemo-connectivity/mobiledataconnection.h
Expand Up @@ -110,7 +110,7 @@ class NEMO_CONNECTIVITY_EXPORT MobileDataConnection : public QObject
void setModemPath(const QString &modemPath);

QString defaultDataSim() const;
void setDefaultDataSim(const QString &defaultDataSim);
void setDefaultDataSim(const QString &subscriberIdentity);

int presentSimCount() const;

Expand Down
1 change: 1 addition & 0 deletions src/nemo-connectivity/mobiledataconnection_p.h
Expand Up @@ -70,6 +70,7 @@ class MobileDataConnectionPrivate
void createDataContext(const QString &modemPath);
void updateDataContext();
bool hasDataContext();
void updateDefaultDataSim();

void requestConnect();

Expand Down

0 comments on commit 891d345

Please sign in to comment.