96
96
Private(Manager& parent) :
99
m_settings = std::make_shared<ConnectivityServiceSettings>();
101
m_simManager = make_shared<wwan::SimManager>(m_settings);
102
m_sims = m_simManager->knownSims();
103
connect(m_simManager.get(), &wwan::SimManager::simAdded, this, &Private::simAdded);
105
QVariant ret = m_settings->mobileDataEnabled();
108
/* This is the first time we are running on a system.
110
* We need to figure out the status of mobile data from looking
111
* at the individual modems.
113
m_mobileDataEnabledPending = true;
114
m_settings->setMobileDataEnabled(false);
118
m_mobileDataEnabled = ret.toBool();
121
ret = m_settings->simForMobileData();
124
/* This is the first time we are running on a system.
126
* We need to figure out the SIM used for mobile data
127
* from the individual modems.
129
m_simForMobileDataPending = true;
130
m_settings->setSimForMobileData(QString());
134
QString imsi = ret.toString();
136
for(auto i = m_sims.begin(); i != m_sims.end(); i++)
138
if ((*i)->imsi() == imsi) {
143
m_simForMobileData = sim;
148
101
void matchModemsAndSims()
150
for (wwan::Modem::Ptr modem: m_modems)
103
for (wwan::Modem::Ptr modem: m_ofonoLinks)
152
105
bool match = false;
153
106
for(wwan::Sim::Ptr sim : m_sims)
169
122
void simAdded(wwan::Sim::Ptr sim)
171
124
m_sims.append(sim);
172
matchModemsAndSims();
125
connect(sim.get(), &wwan::Sim::presentChanged, this, &Private::matchModemsAndSims);
173
126
Q_EMIT p.simsChanged();
127
matchModemsAndSims();
130
void initialDataOnSet()
132
wwan::Sim *sim_raw = qobject_cast<wwan::Sim*>(sender());
138
wwan::Sim::Ptr sim = sim_raw->shared_from_this();
140
if (!m_mobileDataEnabledPending && !m_simForMobileDataPending)
145
if (sim->initialDataOn())
147
setMobileDataEnabled(true);
148
setSimForMobileData(sim);
176
152
void modemReady()
184
m_modems.append(m_ofonoLinks[modem_raw->name()]);
185
matchModemsAndSims();
160
auto modem = m_ofonoLinks[modem_raw->name()];
163
matchModemsAndSims();
166
if (m_mobileDataEnabledPending || m_simForMobileDataPending)
168
connect(modem->sim().get(), &wwan::Sim::initialDataOnSet, this, &Private::initialDataOnSet);
169
if (modem->sim()->initialDataOn())
171
modem->sim()->initialDataOnSet();
174
m_modems.append(modem);
186
175
Q_EMIT p.modemsChanged();
197
186
Q_EMIT p.unstoppableOperationHappeningUpdated(m_unstoppableOperationHappening);
191
QVariant ret = m_settings->mobileDataEnabled();
194
/* This is the first time we are running on a system.
196
* We need to figure out the status of mobile data from looking
197
* at the individual modems.
199
m_mobileDataEnabledPending = true;
200
m_settings->setMobileDataEnabled(false);
204
setMobileDataEnabled(ret.toBool());
207
ret = m_settings->simForMobileData();
210
/* This is the first time we are running on a system.
212
* We need to figure out the SIM used for mobile data
213
* from the individual modems.
215
m_simForMobileDataPending = true;
216
m_settings->setSimForMobileData(QString());
220
QString iccid = ret.toString();
222
for(auto i = m_sims.begin(); i != m_sims.end(); i++)
224
if ((*i)->iccid() == iccid) {
229
setSimForMobileData(sim);
201
234
void updateHasWifi()
316
349
m_ofonoLinks[path] = modem;
317
350
connect(modem.get(), &wwan::Modem::readyToUnlock, this, &Private::modemReadyToUnlock);
318
351
connect(modem.get(), &wwan::Modem::ready, this, &Private::modemReady);
319
matchModemsAndSims();
322
354
Q_EMIT p.linksUpdated();
328
360
void setMobileDataEnabled(bool value) {
329
if (m_mobileDataEnabled == value)
361
if (m_mobileDataEnabled == value && !m_mobileDataEnabledPending)
365
m_mobileDataEnabledPending = false;
334
367
m_settings->setMobileDataEnabled(value);
335
368
m_mobileDataEnabled = value;
359
392
void setSimForMobileData(wwan::Sim::Ptr sim) {
360
if (m_simForMobileData == sim)
393
if (m_simForMobileData == sim && !m_simForMobileDataPending)
397
if (m_simForMobileDataPending) {
398
m_simForMobileDataPending = false;
399
setMobileDataEnabled(m_mobileDataEnabled);
365
402
if (m_simForMobileData)
376
m_settings->setSimForMobileData(sim->imsi());
413
m_settings->setSimForMobileData(sim->iccid());
380
417
m_simForMobileData = sim;
381
418
if (m_simForMobileData)
383
m_simForMobileData->setMobileDataEnabled(p.mobileDataEnabled());
420
m_simForMobileData->setMobileDataEnabled(m_mobileDataEnabled);
386
423
Q_EMIT p.simForMobileDataChanged();
428
465
connect(d->m_unlockDialog.get(), &SimUnlockDialog::ready, d.get(), &Private::sim_unlock_ready);
430
467
d->m_ofono = make_shared<QOfonoManager>();
469
// Load the SIM manager before we connect to the signals
470
d->m_settings = make_shared<ConnectivityServiceSettings>();
471
d->m_simManager = make_shared<wwan::SimManager>(d->m_ofono, d->m_settings);
472
connect(d->m_simManager.get(), &wwan::SimManager::simAdded, d.get(), &Private::simAdded);
473
d->m_sims = d->m_simManager->knownSims();
474
for (auto sim : d->m_sims)
476
connect(sim.get(), &wwan::Sim::presentChanged, d.get(), &Private::matchModemsAndSims);
431
479
connect(d->m_ofono.get(), &QOfonoManager::modemsChanged, d.get(), &Private::modems_changed);
432
480
d->modems_changed(d->m_ofono->modems());