Parse recipients from RESPOND_VIA_MESSAGE correctly

UriUtil#parseRecipientsFromSmsMmsUri() will returns a comma-separated
recipients for common use so that InsertNewMessageAction#createMessage()
can create or get a conversation correctly for RESPOND_VIA_MESSAGE.
In addition, mms/mmsto schemes are added. And it includes small cleanup
intent-filters for LaunchConversationActivity.

Test: adb shell am startservice
-a android.intent.action.RESPOND_VIA_MESSAGE -d "sms:12345678,87654321"
-e android.intent.extra.TEXT "Text"

Change-Id: I291dc765a46846982d059016d44f90873c687867
Signed-off-by: Taesu Lee <taesu82.lee@samsung.com>
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 9793846..b25ff16 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -100,12 +100,6 @@
                 <category android:name="android.intent.category.BROWSABLE" />
                 <data android:scheme="sms" />
                 <data android:scheme="smsto" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="android.intent.action.VIEW" />
-                <action android:name="android.intent.action.SENDTO" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <category android:name="android.intent.category.BROWSABLE" />
                 <data android:scheme="mms" />
                 <data android:scheme="mmsto" />
             </intent-filter>
@@ -423,6 +417,8 @@
                 <category android:name="android.intent.category.DEFAULT" />
                 <data android:scheme="sms" />
                 <data android:scheme="smsto" />
+                <data android:scheme="mms" />
+                <data android:scheme="mmsto" />
             </intent-filter>
         </service>
 
diff --git a/src/com/android/messaging/datamodel/NoConfirmationSmsSendService.java b/src/com/android/messaging/datamodel/NoConfirmationSmsSendService.java
index b5d2185..bea4961 100644
--- a/src/com/android/messaging/datamodel/NoConfirmationSmsSendService.java
+++ b/src/com/android/messaging/datamodel/NoConfirmationSmsSendService.java
@@ -28,10 +28,10 @@
 import com.android.messaging.datamodel.action.UpdateMessageNotificationAction;
 import com.android.messaging.datamodel.data.MessageData;
 import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.sms.MmsUtils;
 import com.android.messaging.ui.UIIntents;
 import com.android.messaging.ui.conversationlist.ConversationListActivity;
 import com.android.messaging.util.LogUtil;
+import com.android.messaging.util.UriUtil;
 
 /**
  * Respond to a special intent and send an SMS message without the user's intervention, unless
@@ -83,8 +83,8 @@
         final String subject = getText(intent, Intent.EXTRA_SUBJECT);
         final int subId = extras.getInt(EXTRA_SUBSCRIPTION, ParticipantData.DEFAULT_SELF_SUB_ID);
 
-        final Uri intentUri = intent.getData();
-        final String recipients = intentUri != null ? MmsUtils.getSmsRecipients(intentUri) : null;
+        // Get a comma-separated list of recipients
+        final String recipients = UriUtil.parseRecipientsFromSmsMmsUri(intent.getData());
 
         if (TextUtils.isEmpty(recipients) && TextUtils.isEmpty(conversationId)) {
             if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
diff --git a/src/com/android/messaging/sms/MmsUtils.java b/src/com/android/messaging/sms/MmsUtils.java
index a519972..a469af3 100644
--- a/src/com/android/messaging/sms/MmsUtils.java
+++ b/src/com/android/messaging/sms/MmsUtils.java
@@ -1111,37 +1111,6 @@
         return subject;
     }
 
-    // return a semicolon separated list of phone numbers from a smsto: uri.
-    public static String getSmsRecipients(final Uri uri) {
-        String recipients = uri.getSchemeSpecificPart();
-        final int pos = recipients.indexOf('?');
-        if (pos != -1) {
-            recipients = recipients.substring(0, pos);
-        }
-        recipients = replaceUnicodeDigits(recipients).replace(',', ';');
-        return recipients;
-    }
-
-    // This function was lifted from Telephony.PhoneNumberUtils because it was @hide
-    /**
-     * Replace arabic/unicode digits with decimal digits.
-     * @param number
-     *            the number to be normalized.
-     * @return the replaced number.
-     */
-    private static String replaceUnicodeDigits(final String number) {
-        final StringBuilder normalizedDigits = new StringBuilder(number.length());
-        for (final char c : number.toCharArray()) {
-            final int digit = Character.digit(c, 10);
-            if (digit != -1) {
-                normalizedDigits.append(digit);
-            } else {
-                normalizedDigits.append(c);
-            }
-        }
-        return normalizedDigits.toString();
-    }
-
     /**
      * @return Whether the data roaming is enabled
      */
diff --git a/src/com/android/messaging/ui/conversation/LaunchConversationActivity.java b/src/com/android/messaging/ui/conversation/LaunchConversationActivity.java
index 8af9f75..5500ae8 100644
--- a/src/com/android/messaging/ui/conversation/LaunchConversationActivity.java
+++ b/src/com/android/messaging/ui/conversation/LaunchConversationActivity.java
@@ -61,7 +61,12 @@
         final Intent intent = getIntent();
         final String action = intent.getAction();
         if (Intent.ACTION_SENDTO.equals(action) || Intent.ACTION_VIEW.equals(action)) {
-            String[] recipients = UriUtil.parseRecipientsFromSmsMmsUri(intent.getData());
+            String[] recipients = null;
+            final String commaSeparatedRecipients =
+                    UriUtil.parseRecipientsFromSmsMmsUri(intent.getData());
+            if (commaSeparatedRecipients != null) {
+                recipients = commaSeparatedRecipients.split(",");
+            }
             final boolean haveAddress = !TextUtils.isEmpty(intent.getStringExtra(ADDRESS));
             final boolean haveEmail = !TextUtils.isEmpty(intent.getStringExtra(Intent.EXTRA_EMAIL));
             if (recipients == null && (haveAddress || haveEmail)) {
diff --git a/src/com/android/messaging/util/UriUtil.java b/src/com/android/messaging/util/UriUtil.java
index ceff50c..d336167 100644
--- a/src/com/android/messaging/util/UriUtil.java
+++ b/src/com/android/messaging/util/UriUtil.java
@@ -324,14 +324,13 @@
     }
 
     /**
-     * Extract recipient destinations from Uri of form
-     *     SCHEME:destionation[,destination]?otherstuff
+     * Extract recipient destinations from Uri of form SCHEME:destination[,destination]?otherstuff
      * where SCHEME is one of the supported sms/mms schemes.
      *
      * @param uri sms/mms uri
-     * @return recipient destinations or null
+     * @return a comma-separated list of recipient destinations or null.
      */
-    public static String[] parseRecipientsFromSmsMmsUri(final Uri uri) {
+    public static String parseRecipientsFromSmsMmsUri(final Uri uri) {
         if (!isSmsMmsUri(uri)) {
             return null;
         }
@@ -341,7 +340,7 @@
         }
         // replaceUnicodeDigits will replace digits typed in other languages (i.e. Egyptian) with
         // the usual ascii equivalents.
-        return TextUtil.replaceUnicodeDigits(parts[0]).replace(';', ',').split(",");
+        return TextUtil.replaceUnicodeDigits(parts[0]).replace(';', ',');
     }
 
     /**