Show the operator or wifi ssid in the status bar panel.

Change-Id: Ia2983bce35c5f2ab706995777c80e96cc9a4c2ae
diff --git a/packages/SystemUI/res/values-xlarge/strings.xml b/packages/SystemUI/res/values-xlarge/strings.xml
index e3e5148..279a135 100644
--- a/packages/SystemUI/res/values-xlarge/strings.xml
+++ b/packages/SystemUI/res/values-xlarge/strings.xml
@@ -26,44 +26,16 @@
     <!-- Text to display underneath the graphical signal strength meter when
          no connection is available. [CHAR LIMIT=20] -->
     <string name="status_bar_settings_signal_meter_disconnected">
-        no internet connection
-    </string>
-
-    <!-- Text to display underneath the graphical signal strength meter when
-         it is displaying information about a connected, named Wi-Fi network.
-         [CHAR LIMIT=20] -->
-    <string name="status_bar_settings_signal_meter_wifi_ssid_format">
-        <xliff:g id="ssid">%s</xliff:g>
+        No Internet connection
     </string>
 
     <!-- Text to display underneath the graphical signal strength meter when
          it is displaying Wi-Fi status and Wi-Fi is connected to a network
          whose SSID is not available.
          [CHAR LIMIT=20] -->
-    <string name="status_bar_settings_signal_meter_wifi_nossid">
-        Wi-Fi: connected
-    </string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid">Wi-Fi connected</string>
 
-    <!-- Text to display underneath the graphical signal strength meter when
-         it is displaying Wi-Fi status and Wi-Fi is in the process of
-         connecting to a network.  [CHAR LIMIT=20] -->
-    <string name="status_bar_settings_signal_meter_wifi_connecting">
-        Wi-Fi: connecting…
-    </string>
- 
-    <!-- Text to display underneath the graphical signal strength meter when
-         it is displaying mobile data (3G) status and a network connection is
-         available.
-         [CHAR LIMIT=20] -->
-    <string name="status_bar_settings_signal_meter_data_connected">
-        Mobile data: connected
-    </string>
+    <!-- Separator for PLMN and SPN in network name. -->
+    <string name="status_bar_network_name_separator" translatable="false">" – "</string>
 
-    <!-- Text to display underneath the graphical signal strength meter when
-         it is displaying mobile data (3G) status and a network connection is
-         unavailable.
-         [CHAR LIMIT=20] -->
-    <string name="status_bar_settings_signal_meter_data_connecting">
-        Mobile data: connecting…
-    </string>
 </resources>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index ed31a34..f3ad9ff 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -88,6 +88,9 @@
         <xliff:g id="number">%d</xliff:g><xliff:g id="percent">%%</xliff:g>
     </string>
 
+    <!-- Separator for PLMN and SPN in network name. -->
+    <string name="status_bar_network_name_separator" translatable="false">"\n"</string>
+
     <!-- Recent Tasks dialog: title [CHAR LIMIT=30] -->
     <string name="recent_tasks_title">Recent</string>
     <!-- Recent Tasks dialog: message when there are no recent applications [CHAR LIMIT=NONE]-->
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
index ec23a3d..1090463 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
@@ -32,6 +32,7 @@
 import android.os.Binder;
 import android.os.RemoteException;
 import android.provider.Settings;
+import android.provider.Telephony;
 import android.telephony.PhoneStateListener;
 import android.telephony.ServiceState;
 import android.telephony.SignalStrength;
@@ -65,6 +66,9 @@
     ServiceState mServiceState;
     SignalStrength mSignalStrength;
     int[] mDataIconList = TelephonyIcons.DATA_G[0];
+    String mNetworkName;
+    String mNetworkNameDefault;
+    String mNetworkNameSeparator;
     int mPhoneSignalIconId;
     int mDataDirectionIconId;
     int mDataSignalIconId;
@@ -116,7 +120,10 @@
                         | PhoneStateListener.LISTEN_DATA_ACTIVITY);
         mHspaDataDistinguishable = mContext.getResources().getBoolean(
                 R.bool.config_hspa_data_distinguishable);
-        
+        mNetworkNameSeparator = mContext.getString(R.string.status_bar_network_name_separator);
+        mNetworkNameDefault = mContext.getString(
+                com.android.internal.R.string.lockscreen_carrier_default);
+        mNetworkName = mNetworkNameDefault;
 
         // wifi
         mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
@@ -127,6 +134,9 @@
         filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
         filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
         filter.addAction(TelephonyIntents.ACTION_SIM_STATE_CHANGED);
+        filter.addAction(Telephony.Intents.SPN_STRINGS_UPDATED_ACTION);
+        filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
+        filter.addAction(ConnectivityManager.INET_CONDITION_ACTION);
         context.registerReceiver(this, filter);
 
         // yuck
@@ -168,6 +178,12 @@
             updateSimState(intent);
             updateDataIcon();
             refreshViews();
+        } else if (action.equals(Telephony.Intents.SPN_STRINGS_UPDATED_ACTION)) {
+            updateNetworkName(intent.getBooleanExtra(Telephony.Intents.EXTRA_SHOW_SPN, false),
+                        intent.getStringExtra(Telephony.Intents.EXTRA_SPN),
+                        intent.getBooleanExtra(Telephony.Intents.EXTRA_SHOW_PLMN, false),
+                        intent.getStringExtra(Telephony.Intents.EXTRA_PLMN));
+            refreshViews();
         } else if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION) ||
                  action.equals(ConnectivityManager.INET_CONDITION_ACTION)) {
             updateConnectivity(intent);
@@ -516,6 +532,31 @@
         mDataConnected = visible;
     }
 
+    void updateNetworkName(boolean showSpn, String spn, boolean showPlmn, String plmn) {
+        if (false) {
+            Slog.d("CarrierLabel", "updateNetworkName showSpn=" + showSpn + " spn=" + spn
+                    + " showPlmn=" + showPlmn + " plmn=" + plmn);
+        }
+        StringBuilder str = new StringBuilder();
+        boolean something = false;
+        if (showPlmn && plmn != null) {
+            str.append(plmn);
+            something = true;
+        }
+        if (showSpn && spn != null) {
+            if (something) {
+                str.append(mNetworkNameSeparator);
+            }
+            str.append(spn);
+            something = true;
+        }
+        if (something) {
+            mNetworkName = str.toString();
+        } else {
+            mNetworkName = mNetworkNameDefault;
+        }
+    }
+
     // ===== Wifi ===================================================================
 
     private void updateWifiState(Intent intent) {
@@ -618,14 +659,13 @@
             if (mWifiSsid == null) {
                 label = context.getString(R.string.status_bar_settings_signal_meter_wifi_nossid);
             } else {
-                label = context.getString(R.string.status_bar_settings_signal_meter_wifi_ssid_format,
-                                      mWifiSsid);
+                label = mWifiSsid;
             }
             combinedSignalIconId = mWifiIconId;
             dataTypeIconId = 0;
         } else {
             if (mDataConnected) {
-                label = context.getString(R.string.status_bar_settings_signal_meter_data_connected);
+                label = mNetworkName;
             } else {
                 label = context.getString(R.string.status_bar_settings_signal_meter_disconnected);
             }