shill: cellular: Improve cellular service name generation.
Changes include:
- Don't override the serving operator name with the one from the
database if a name is provided by the network.
- Prefer presenting the serving operator name as the UI service name
since that one can be controlled by carriers OTA.
- Include both the home provider and the serving operator in the
service name per 3GPP rules.
BUG=chromium-os:21522,chromium-os:33584
TEST=Tested on device with different SIM cards and operators, unit tests.
Change-Id: I33513ad437b0c0fe0d6de40dda2360dfdbc45e34
Reviewed-on: https://gerrit.chromium.org/gerrit/30695
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 4445de9..d045269 100644
--- a/cellular_capability_gsm.cc
+++ b/cellular_capability_gsm.cc
@@ -439,19 +439,28 @@
}
string CellularCapabilityGSM::CreateFriendlyServiceName() {
- SLOG(Cellular, 2) << __func__;
- if (registration_state_ == MM_MODEM_GSM_NETWORK_REG_STATUS_HOME &&
- !cellular()->home_provider().GetName().empty()) {
- return cellular()->home_provider().GetName();
+ SLOG(Cellular, 2) << __func__ << ": " << GetRoamingStateString();
+ string name = serving_operator_.GetName();
+ string home_provider_name = cellular()->home_provider().GetName();
+ if (!name.empty()) {
+ // If roaming, try to show "<home-provider> | <serving-operator>", per 3GPP
+ // rules (TS 31.102 and annex A of 122.101).
+ if (registration_state_ == MM_MODEM_GSM_NETWORK_REG_STATUS_ROAMING &&
+ !home_provider_name.empty()) {
+ return home_provider_name + " | " + name;
+ }
+ return name;
}
- if (!serving_operator_.GetName().empty()) {
- return serving_operator_.GetName();
+ if (registration_state_ == MM_MODEM_GSM_NETWORK_REG_STATUS_HOME &&
+ !home_provider_name.empty()) {
+ return home_provider_name;
}
if (!carrier_.empty()) {
return carrier_;
}
- if (!serving_operator_.GetCode().empty()) {
- return "cellular_" + serving_operator_.GetCode();
+ string serving_operator_code = serving_operator_.GetCode();
+ if (!serving_operator_code.empty()) {
+ return "cellular_" + serving_operator_code;
}
return base::StringPrintf("GSMNetwork%u", friendly_service_name_id_++);
}
@@ -488,6 +497,8 @@
oper.SetName(spn_);
}
cellular()->set_home_provider(oper);
+ SLOG(Cellular, 2) << "Home provider: " << oper.GetCode() << ", "
+ << oper.GetName() << ", " << oper.GetCountry();
InitAPNList();
}
@@ -500,15 +511,17 @@
mobile_provider_lookup_by_network(cellular()->provider_db(),
network_id.c_str());
if (provider) {
- const char *provider_name = mobile_provider_get_name(provider);
- if (provider_name && *provider_name) {
- serving_operator_.SetName(provider_name);
- if (provider->country) {
- serving_operator_.SetCountry(provider->country);
+ if (serving_operator_.GetName().empty()) {
+ const char *provider_name = mobile_provider_get_name(provider);
+ if (provider_name && *provider_name) {
+ serving_operator_.SetName(provider_name);
}
- SLOG(Cellular, 2) << "Operator name: " << serving_operator_.GetName()
- << ", country: " << serving_operator_.GetCountry();
}
+ if (provider->country && *provider->country) {
+ serving_operator_.SetCountry(provider->country);
+ }
+ SLOG(Cellular, 2) << "Operator name: " << serving_operator_.GetName()
+ << ", country: " << serving_operator_.GetCountry();
} else {
SLOG(Cellular, 2) << "GSM provider not found.";
}