STK Call Control feature implementation.

Support to display the exact call failure reason
for STK cc.

Bug: 22928843
Change-Id: Ib37fa59d75d036da6c51cfd022d2f3cae07199ef
diff --git a/src/com/android/phone/TimeConsumingPreferenceActivity.java b/src/com/android/phone/TimeConsumingPreferenceActivity.java
index 08a5a95..05b86a5 100644
--- a/src/com/android/phone/TimeConsumingPreferenceActivity.java
+++ b/src/com/android/phone/TimeConsumingPreferenceActivity.java
@@ -50,6 +50,9 @@
     static final int RESPONSE_ERROR = 400;
     static final int RADIO_OFF_ERROR = 500;
     static final int FDN_CHECK_FAILURE = 600;
+    static final int STK_CC_SS_TO_DIAL_ERROR = 700;
+    static final int STK_CC_SS_TO_USSD_ERROR = 800;
+    static final int STK_CC_SS_TO_SS_ERROR = 900;
 
     private final ArrayList<String> mBusyList = new ArrayList<String>();
 
@@ -77,7 +80,8 @@
         }
 
         if (id == RESPONSE_ERROR || id == RADIO_OFF_ERROR || id == EXCEPTION_ERROR
-                || id == FDN_CHECK_FAILURE) {
+                || id == FDN_CHECK_FAILURE || id == STK_CC_SS_TO_DIAL_ERROR
+                || id == STK_CC_SS_TO_USSD_ERROR || id == STK_CC_SS_TO_SS_ERROR) {
             AlertDialog.Builder builder = new AlertDialog.Builder(this);
 
             int msgId;
@@ -97,6 +101,18 @@
                     msgId = R.string.fdn_check_failure;
                     builder.setPositiveButton(R.string.close_dialog, mDismiss);
                     break;
+                case STK_CC_SS_TO_DIAL_ERROR:
+                    msgId = R.string.stk_cc_ss_to_dial_error;
+                    builder.setPositiveButton(R.string.close_dialog, mDismiss);
+                    break;
+                case STK_CC_SS_TO_USSD_ERROR:
+                    msgId = R.string.stk_cc_ss_to_ussd_error;
+                    builder.setPositiveButton(R.string.close_dialog, mDismiss);
+                    break;
+                case STK_CC_SS_TO_SS_ERROR:
+                    msgId = R.string.stk_cc_ss_to_ss_error;
+                    builder.setPositiveButton(R.string.close_dialog, mDismiss);
+                    break;
                 case EXCEPTION_ERROR:
                 default:
                     msgId = R.string.exception_error;
diff --git a/src/com/android/services/telephony/DisconnectCauseUtil.java b/src/com/android/services/telephony/DisconnectCauseUtil.java
index 4a92847..81fc7aa 100644
--- a/src/com/android/services/telephony/DisconnectCauseUtil.java
+++ b/src/com/android/services/telephony/DisconnectCauseUtil.java
@@ -120,6 +120,9 @@
             case android.telephony.DisconnectCause.TIMED_OUT:
             case android.telephony.DisconnectCause.UNOBTAINABLE_NUMBER:
             case android.telephony.DisconnectCause.VOICEMAIL_NUMBER_MISSING:
+            case android.telephony.DisconnectCause.DIAL_MODIFIED_TO_USSD:
+            case android.telephony.DisconnectCause.DIAL_MODIFIED_TO_SS:
+            case android.telephony.DisconnectCause.DIAL_MODIFIED_TO_DIAL:
             case android.telephony.DisconnectCause.ERROR_UNSPECIFIED:
                 return DisconnectCause.ERROR;
 
@@ -251,6 +254,18 @@
                 resourceId = R.string.callFailed_dsac_restricted_normal;
                 break;
 
+            case android.telephony.DisconnectCause.DIAL_MODIFIED_TO_USSD:
+                resourceId = R.string.callFailed_dialToUssd;
+                break;
+
+            case android.telephony.DisconnectCause.DIAL_MODIFIED_TO_SS:
+                resourceId = R.string.callFailed_dialToSs;
+                break;
+
+            case android.telephony.DisconnectCause.DIAL_MODIFIED_TO_DIAL:
+                resourceId = R.string.callFailed_dialToDial;
+                break;
+
             case android.telephony.DisconnectCause.OUTGOING_FAILURE:
                 // We couldn't successfully place the call; there was some
                 // failure in the telephony layer.