AI 143331: am: CL 143181 am: CL 142924 Support DCM specific MMI network service.
  IExtendedNetworkService has 4 MMI service interface used by PhoneUtils to put DCM related nw service.
  void setMmiString(String number);
  CharSequence getMmiRunningText();
  CharSequence getUserMessage(CharSequence text);
  void clearMmiString();
  And the service is bind via "com.android.ussd.IExtendedNetworkService".
  Original author: johnwang
  Merged from: //branches/cupcake/...
  Original author: android-build
  Merged from: //branches/donutburger/...

Automated import of CL 143331
diff --git a/Android.mk b/Android.mk
index b214ddf..7b7ca3d 100644
--- a/Android.mk
+++ b/Android.mk
@@ -124,7 +124,8 @@
 	telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl \
 	telephony/java/com/android/internal/telephony/gsm/ISimPhoneBook.aidl \
 	telephony/java/com/android/internal/telephony/gsm/ISms.aidl \
-	wifi/java/android/net/wifi/IWifiManager.aidl
+	wifi/java/android/net/wifi/IWifiManager.aidl \
+	telephony/java/com/android/internal/telephony/IExtendedNetworkService.aidl
 
 # FRAMEWORKS_BASE_JAVA_SRC_DIRS comes from build/core/pathmap.mk
 LOCAL_AIDL_INCLUDES += $(FRAMEWORKS_BASE_JAVA_SRC_DIRS)
diff --git a/telephony/java/com/android/internal/telephony/IExtendedNetworkService.aidl b/telephony/java/com/android/internal/telephony/IExtendedNetworkService.aidl
new file mode 100644
index 0000000..6c1f4bb
--- /dev/null
+++ b/telephony/java/com/android/internal/telephony/IExtendedNetworkService.aidl
@@ -0,0 +1,31 @@
+package com.android.internal.telephony;
+
+/**
+ * Interface used to interact with extended MMI/USSD network service. 
+ */
+interface IExtendedNetworkService {
+    /**
+     * Set a MMI/USSD command to ExtendedNetworkService for further process. 
+     * This should be called when a MMI command is placed from panel.
+     * @param number the dialed MMI/USSD number.
+     */
+    void setMmiString(String number);
+
+    /**
+     * return the specific string which is used to prompt MMI/USSD is running
+     */
+    CharSequence getMmiRunningText();
+
+    /**
+     * Get specific message which should be displayed on pop-up dialog.
+     * @param text original MMI/USSD message response from framework
+     * @return specific user message correspond to text. null stands for no pop-up dialog need to show.
+     */
+    CharSequence getUserMessage(CharSequence text);
+
+    /**
+     * Clear pre-set MMI/USSD command.
+     * This should be called when user cancel a pre-dialed MMI command.
+     */
+    void clearMmiString();
+}
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmMmiCode.java b/telephony/java/com/android/internal/telephony/gsm/GsmMmiCode.java
index ce6c186..04f8332 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmMmiCode.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmMmiCode.java
@@ -1212,9 +1212,11 @@
                 } else if (sc.equals(SC_WAIT)) {
                     // Call Waiting includes additional data in the response.
                     sb.append(createQueryCallWaitingResultMessage(ints[1]));
-                } else if (isServiceCodeCallBarring(sc) || (ints[0] == 1)) {
+                } else if (isServiceCodeCallBarring(sc)) {
                     // ints[0] for Call Barring is a bit vector of services
-                    // for all other services, treat it as a boolean
+                    sb.append(createQueryCallBarringResultMessage(ints[0]));                    
+                } else if (ints[0] == 1) {
+                    // for all other services, treat it as a boolean                                    
                     sb.append(context.getText(com.android.internal.R.string.serviceEnabled));
                 } else {
                     sb.append(context.getText(com.android.internal.R.string.mmiError));
@@ -1245,7 +1247,23 @@
         }
         return sb;
     }
-    
+    private CharSequence
+    createQueryCallBarringResultMessage(int serviceClass)
+    {
+        StringBuilder sb = new StringBuilder(context.getText(com.android.internal.R.string.serviceEnabledFor));
+
+        for (int classMask = 1 
+                    ; classMask <= SERVICE_CLASS_MAX
+                    ; classMask <<= 1 
+        ) {
+            if ((classMask & serviceClass) != 0) {
+                sb.append("\n");
+                sb.append(serviceClassToCFString(classMask & serviceClass));
+            }
+        }
+        return sb;
+    }
+        
     /***
      * TODO: It would be nice to have a method here that can take in a dialstring and
      * figure out if there is an MMI code embedded within it.  This code would replace