shill: cellular: Support Cellular.ProviderRequiresRoaming property.
BUG=chromium-os:32872
TEST=unit test, tested on device through list-devices and different SIMs.
CQ-DEPEND=I0df0b718bdecc7225fff7e67589ac5d31d593d1b
Change-Id: Idc957e3deb94ad8fcd511c933cc2bb0fbe4f31d1
Reviewed-on: https://gerrit.chromium.org/gerrit/33774
Tested-by: Darin Petkov <petkov@chromium.org>
Reviewed-by: Ben Chan <benchan@chromium.org>
Commit-Ready: Darin Petkov <petkov@chromium.org>
diff --git a/cellular_capability_gsm.cc b/cellular_capability_gsm.cc
index d045269..e7b887b 100644
--- a/cellular_capability_gsm.cc
+++ b/cellular_capability_gsm.cc
@@ -57,6 +57,7 @@
registration_state_(MM_MODEM_GSM_NETWORK_REG_STATUS_UNKNOWN),
access_technology_(MM_MODEM_GSM_ACCESS_TECH_UNKNOWN),
home_provider_(NULL),
+ provider_requires_roaming_(false),
get_imsi_retries_(0),
get_imsi_retry_delay_milliseconds_(kGetIMSIRetryDelayMilliseconds),
scanning_(false),
@@ -67,6 +68,8 @@
&selected_network_);
store->RegisterConstStringmaps(flimflam::kFoundNetworksProperty,
&found_networks_);
+ store->RegisterConstBool(shill::kProviderRequiresRoamingProperty,
+ &provider_requires_roaming_);
store->RegisterConstBool(flimflam::kScanningProperty, &scanning_);
store->RegisterUint16(flimflam::kScanIntervalProperty, &scan_interval_);
HelpRegisterDerivedKeyValueStore(
@@ -330,9 +333,7 @@
}
bool CellularCapabilityGSM::AllowRoaming() {
- bool requires_roaming =
- home_provider_ ? home_provider_->requires_roaming : false;
- return requires_roaming || allow_roaming_property();
+ return provider_requires_roaming_ || allow_roaming_property();
}
// always called from an async context
@@ -481,6 +482,7 @@
return;
}
home_provider_ = provider;
+ provider_requires_roaming_ = home_provider_->requires_roaming;
Cellular::Operator oper;
if (provider->networks && provider->networks[0]) {
oper.SetCode(provider->networks[0]);
@@ -498,7 +500,8 @@
}
cellular()->set_home_provider(oper);
SLOG(Cellular, 2) << "Home provider: " << oper.GetCode() << ", "
- << oper.GetName() << ", " << oper.GetCountry();
+ << oper.GetName() << ", " << oper.GetCountry()
+ << (provider_requires_roaming_ ? ", roaming required" : "");
InitAPNList();
}