shill: Decouple Cellular's IsRegistered from the network technology string.

Also, broadcast changes in the cellular service network technology and roaming
state properties.

BUG=chromium-os:23327
TEST=unit tests, tested on device

Change-Id: Ia4c297586dbc9b8a32d297c126c4d791310b5abd
Reviewed-on: https://gerrit.chromium.org/gerrit/12028
Tested-by: Darin Petkov <petkov@chromium.org>
Reviewed-by: Eric Shienbrood <ers@chromium.org>
diff --git a/cellular_capability_gsm.cc b/cellular_capability_gsm.cc
index c33cf14..ac8c1a9 100644
--- a/cellular_capability_gsm.cc
+++ b/cellular_capability_gsm.cc
@@ -135,9 +135,13 @@
     }
   }
   if (cellular()->mdn().empty()) {
-    // TODO(petkov): Switch to asynchronous calls (crosbug.com/17583).
-    cellular()->set_mdn(card_proxy_->GetMSISDN());
-    VLOG(2) << "MSISDN/MDN: " << cellular()->mdn();
+    try {
+      // TODO(petkov): Switch to asynchronous calls (crosbug.com/17583).
+      cellular()->set_mdn(card_proxy_->GetMSISDN());
+      VLOG(2) << "MSISDN/MDN: " << cellular()->mdn();
+    } catch (const DBus::Error e) {
+      LOG(WARNING) << "Unable to obtain MSISDN/MDN: " << e.what();
+    }
   }
   SetHomeProvider();
 }
@@ -300,6 +304,11 @@
           network_id));
 }
 
+bool CellularCapabilityGSM::IsRegistered() {
+  return (registration_state_ == MM_MODEM_GSM_NETWORK_REG_STATUS_HOME ||
+          registration_state_ == MM_MODEM_GSM_NETWORK_REG_STATUS_ROAMING);
+}
+
 void CellularCapabilityGSM::RegisterOnNetworkTask(const string &network_id) {
   LOG(INFO) << __func__ << "(" << network_id << ")";
   // TODO(petkov): Switch to asynchronous calls (crosbug.com/17583).
@@ -463,32 +472,29 @@
 void CellularCapabilityGSM::SetAccessTechnology(uint32 access_technology) {
   access_technology_ = access_technology;
   if (cellular()->service().get()) {
-    cellular()->service()->set_network_tech(GetNetworkTechnologyString());
+    cellular()->service()->SetNetworkTechnology(GetNetworkTechnologyString());
   }
 }
 
 string CellularCapabilityGSM::GetNetworkTechnologyString() const {
-  if (registration_state_ == MM_MODEM_GSM_NETWORK_REG_STATUS_HOME ||
-      registration_state_ == MM_MODEM_GSM_NETWORK_REG_STATUS_ROAMING) {
-    switch (access_technology_) {
-      case MM_MODEM_GSM_ACCESS_TECH_GSM:
-      case MM_MODEM_GSM_ACCESS_TECH_GSM_COMPACT:
-        return flimflam::kNetworkTechnologyGsm;
-      case MM_MODEM_GSM_ACCESS_TECH_GPRS:
-        return flimflam::kNetworkTechnologyGprs;
-      case MM_MODEM_GSM_ACCESS_TECH_EDGE:
-        return flimflam::kNetworkTechnologyEdge;
-      case MM_MODEM_GSM_ACCESS_TECH_UMTS:
-        return flimflam::kNetworkTechnologyUmts;
-      case MM_MODEM_GSM_ACCESS_TECH_HSDPA:
-      case MM_MODEM_GSM_ACCESS_TECH_HSUPA:
-      case MM_MODEM_GSM_ACCESS_TECH_HSPA:
-        return flimflam::kNetworkTechnologyHspa;
-      case MM_MODEM_GSM_ACCESS_TECH_HSPA_PLUS:
-        return flimflam::kNetworkTechnologyHspaPlus;
-      default:
-        NOTREACHED();
-    }
+  switch (access_technology_) {
+    case MM_MODEM_GSM_ACCESS_TECH_GSM:
+    case MM_MODEM_GSM_ACCESS_TECH_GSM_COMPACT:
+      return flimflam::kNetworkTechnologyGsm;
+    case MM_MODEM_GSM_ACCESS_TECH_GPRS:
+      return flimflam::kNetworkTechnologyGprs;
+    case MM_MODEM_GSM_ACCESS_TECH_EDGE:
+      return flimflam::kNetworkTechnologyEdge;
+    case MM_MODEM_GSM_ACCESS_TECH_UMTS:
+      return flimflam::kNetworkTechnologyUmts;
+    case MM_MODEM_GSM_ACCESS_TECH_HSDPA:
+    case MM_MODEM_GSM_ACCESS_TECH_HSUPA:
+    case MM_MODEM_GSM_ACCESS_TECH_HSPA:
+      return flimflam::kNetworkTechnologyHspa;
+    case MM_MODEM_GSM_ACCESS_TECH_HSPA_PLUS:
+      return flimflam::kNetworkTechnologyHspaPlus;
+    default:
+      break;
   }
   return "";
 }