Telecomm: Use Uri for handle

Change-Id: I7f3163da47159d68903ce45268429f5949203589
diff --git a/src/com/android/telecomm/Call.java b/src/com/android/telecomm/Call.java
index 0b60c4a..08a50ab 100644
--- a/src/com/android/telecomm/Call.java
+++ b/src/com/android/telecomm/Call.java
@@ -16,6 +16,7 @@
 
 package com.android.telecomm;
 
+import android.net.Uri;
 import android.telecomm.CallInfo;
 import android.telecomm.CallState;
 
@@ -52,7 +53,7 @@
     private CallState mState;
 
     /** The handle with which to establish this call. */
-    private String mHandle;
+    private Uri mHandle;
 
     /**
      * The call service which is attempted or already connecting this call.
@@ -87,7 +88,7 @@
      * @param handle The handle to dial.
      * @param contactInfo Information about the entity being called.
      */
-    Call(String handle, ContactInfo contactInfo) {
+    Call(Uri handle, ContactInfo contactInfo) {
         mId = UUID.randomUUID().toString();  // UUIDs should provide sufficient uniqueness.
         mState = CallState.NEW;
         mHandle = handle;
@@ -120,11 +121,11 @@
         clearCallInfo();
     }
 
-    String getHandle() {
+    Uri getHandle() {
         return mHandle;
     }
 
-    void setHandle(String handle) {
+    void setHandle(Uri handle) {
         mHandle = handle;
     }
 
diff --git a/src/com/android/telecomm/CallActivity.java b/src/com/android/telecomm/CallActivity.java
index 2418a0a..06d4267 100644
--- a/src/com/android/telecomm/CallActivity.java
+++ b/src/com/android/telecomm/CallActivity.java
@@ -89,17 +89,8 @@
      * @param intent Call intent containing data about the handle to call.
      */
     private void processOutgoingCallIntent(Intent intent) {
-        // TODO(santoscordon): Remove the toast.
-        String toastContent = "[" + intent.getAction() + "] " + intent.getDataString();
-        Toast.makeText(this, toastContent, Toast.LENGTH_LONG).show();
-
-        // TODO(gilad): Pull the scheme etc. from the data string as well as any relevant extras
-        // from the intent into structured data and invoke the corresponding CallsManager APIs
-        // based on that.  May want to add a static utility to perform that in case the logic is
-        // non-trivial/voluminous.
-        String handle = intent.getDataString();
         ContactInfo contactInfo = null;
-        mCallsManager.processOutgoingCallIntent(handle, contactInfo);
+        mCallsManager.processOutgoingCallIntent(intent.getData(), contactInfo);
     }
 
     /**
diff --git a/src/com/android/telecomm/CallLogManager.java b/src/com/android/telecomm/CallLogManager.java
index de9b301..718c685 100644
--- a/src/com/android/telecomm/CallLogManager.java
+++ b/src/com/android/telecomm/CallLogManager.java
@@ -97,7 +97,7 @@
      *     {@link android.provider.CallLog.Calls#MISSED_TYPE}
      */
     private void logCall(Call call, int callLogType) {
-        String number = call.getHandle();
+        Uri number = call.getHandle();
         final long creationTime = call.getCreationTimeInMilliseconds();
         final long age = call.getAgeInMilliseconds();
 
@@ -160,16 +160,18 @@
      * @return the phone number to be logged.
      */
     private String getLogNumber(Call call) {
-        String handle = call.getHandle();
+        Uri handle = call.getHandle();
 
         if (handle == null) {
             return null;
         }
 
-        if (!PhoneNumberUtils.isUriNumber(handle)) {
-            handle = PhoneNumberUtils.stripSeparators(handle);
+        // TODO: Add support for SIP numbers.
+        String handleString = handle.toString();
+        if (!PhoneNumberUtils.isUriNumber(handleString)) {
+            handleString = PhoneNumberUtils.stripSeparators(handleString);
         }
-        return handle;
+        return handleString;
     }
 
     /**
diff --git a/src/com/android/telecomm/CallsManager.java b/src/com/android/telecomm/CallsManager.java
index 4b4de71..556c770 100644
--- a/src/com/android/telecomm/CallsManager.java
+++ b/src/com/android/telecomm/CallsManager.java
@@ -20,6 +20,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.media.AudioManager;
+import android.net.Uri;
 import android.os.Bundle;
 import android.telecomm.CallService;
 import android.telecomm.CallServiceDescriptor;
@@ -130,7 +131,7 @@
         Log.d(this, "handleSuccessfulIncomingCall");
         Preconditions.checkState(call.getState() == CallState.RINGING);
 
-        String handle = call.getHandle();
+        Uri handle = call.getHandle();
         ContactInfo contactInfo = call.getContactInfo();
         for (IncomingCallValidator validator : mIncomingCallValidators) {
             if (!validator.isValid(handle, contactInfo)) {
@@ -160,7 +161,7 @@
      * @param handle The handle to dial.
      * @param contactInfo Information about the entity being called.
      */
-    void processOutgoingCallIntent(String handle, ContactInfo contactInfo) {
+    void processOutgoingCallIntent(Uri handle, ContactInfo contactInfo) {
         for (OutgoingCallValidator validator : mOutgoingCallValidators) {
             if (!validator.isValid(handle, contactInfo)) {
                 // TODO(gilad): Display an error message.
diff --git a/src/com/android/telecomm/IncomingCallValidator.java b/src/com/android/telecomm/IncomingCallValidator.java
index 75ad10b..769eae7 100644
--- a/src/com/android/telecomm/IncomingCallValidator.java
+++ b/src/com/android/telecomm/IncomingCallValidator.java
@@ -16,6 +16,8 @@
 
 package com.android.telecomm;
 
+import android.net.Uri;
+
 /**
  * Implementations can be used to reject incoming calls based on arbitrary restrictions across call
  * services (e.g. suppressing calls from certain phone numbers regardless if they are received over
@@ -23,5 +25,5 @@
  */
 public interface IncomingCallValidator {
 
-    boolean isValid(String handle, ContactInfo contactInfo);
+    boolean isValid(Uri handle, ContactInfo contactInfo);
 }
diff --git a/src/com/android/telecomm/OutgoingCallValidator.java b/src/com/android/telecomm/OutgoingCallValidator.java
index 0553b58..288d37e 100644
--- a/src/com/android/telecomm/OutgoingCallValidator.java
+++ b/src/com/android/telecomm/OutgoingCallValidator.java
@@ -16,6 +16,8 @@
 
 package com.android.telecomm;
 
+import android.net.Uri;
+
 /**
  * Implementations can be used to suppress certain classes of outgoing calls based on arbitrary
  * restrictions across call services (e.g. black-listing some phone numbers regardless if these
@@ -27,5 +29,5 @@
  */
 public interface OutgoingCallValidator {
 
-    boolean isValid(String handle, ContactInfo contactInfo);
+    boolean isValid(Uri handle, ContactInfo contactInfo);
 }