Add error dialogs to Telecomm

* Add error dialog popups for DisconnectCause.INVALID_NUMBER and
VOICEMAIL_NUMBER_MISSING
* Move ErrorDialogActivity from Telephony to Telecomm
* NewOutgoingCallBroadcaster.processIntent now returns an error code
rather than a boolean

Bug: 17209051
Bug: 17196776
Change-Id: Ifc8b23472510fefc0c2763d28f9c990b4598cadd
diff --git a/src/com/android/telecomm/CallActivity.java b/src/com/android/telecomm/CallActivity.java
index 95dee18..0d36c8a 100644
--- a/src/com/android/telecomm/CallActivity.java
+++ b/src/com/android/telecomm/CallActivity.java
@@ -26,6 +26,7 @@
 import android.os.UserManager;
 import android.telecomm.PhoneAccountHandle;
 import android.telecomm.TelecommManager;
+import android.telephony.DisconnectCause;
 import android.telephony.PhoneNumberUtils;
 import android.text.TextUtils;
 import android.widget.Toast;
@@ -47,6 +48,7 @@
  * non-emergency numbers just like it did pre-L.
  */
 public class CallActivity extends Activity {
+
     private CallsManager mCallsManager = CallsManager.getInstance();
     private boolean mIsVoiceCapable;
 
@@ -149,9 +151,11 @@
 
         NewOutgoingCallIntentBroadcaster broadcaster = new NewOutgoingCallIntentBroadcaster(
                 mCallsManager, call, intent, isDefaultDialer());
-        final boolean success = broadcaster.processIntent();
+        final int result = broadcaster.processIntent();
+        final boolean success = result == DisconnectCause.NOT_DISCONNECTED;
+
         if (!success && call != null) {
-            call.disconnect();
+            disconnectCallAndShowErrorDialog(call, result);
         }
         setResult(success ? RESULT_OK : RESULT_CANCELED);
     }
@@ -209,4 +213,23 @@
         return getApplicationContext().getResources().getBoolean(
                 com.android.internal.R.bool.config_voice_capable);
     }
+
+    private void disconnectCallAndShowErrorDialog(Call call, int errorCode) {
+        call.disconnect();
+        final Intent errorIntent = new Intent(this, ErrorDialogActivity.class);
+        int errorMessageId = -1;
+        switch (errorCode) {
+            case DisconnectCause.INVALID_NUMBER:
+                errorMessageId = R.string.outgoing_call_error_no_phone_number_supplied;
+                break;
+            case DisconnectCause.VOICEMAIL_NUMBER_MISSING:
+                errorIntent.putExtra(ErrorDialogActivity.SHOW_MISSING_VOICEMAIL_NO_DIALOG_EXTRA,
+                        true);
+                break;
+        }
+        if (errorMessageId != -1) {
+            errorIntent.putExtra(ErrorDialogActivity.ERROR_MESSAGE_ID_EXTRA, errorMessageId);
+        }
+        startActivity(errorIntent);
+    }
 }