More small changes from code inspection
[zxing.git] / core / src / com / google / zxing / client / result / SMSMMSResultParser.java
index a4ad3d4..88bcfa3 100644 (file)
@@ -29,7 +29,7 @@ import java.util.Hashtable;
  * "MMSTO:", and treats them all the same way, and effectively converts them to an "sms:" URI
  * for purposes of forwarding to the platform.</p>
  *
- * @author srowen@google.com (Sean Owen)
+ * @author Sean Owen
  */
 final class SMSMMSResultParser extends ResultParser {
 
@@ -42,7 +42,8 @@ final class SMSMMSResultParser extends ResultParser {
       return null;
     }
     int prefixLength;
-    if (rawText.startsWith("sms:") || rawText.startsWith("mms:")) {
+    if (rawText.startsWith("sms:") || rawText.startsWith("SMS:") ||
+        rawText.startsWith("mms:") || rawText.startsWith("MMS:")) {
       prefixLength = 4;
     } else if (rawText.startsWith("smsto:") || rawText.startsWith("SMSTO:") ||
                rawText.startsWith("mmsto:") || rawText.startsWith("MMSTO:")) {
@@ -50,10 +51,23 @@ final class SMSMMSResultParser extends ResultParser {
     } else {
       return null;
     }
+
+    // Check up front if this is a URI syntax string with query arguments
+    Hashtable nameValuePairs = parseNameValuePairs(rawText);
+    String subject = null;
+    String body = null;
+    boolean querySyntax = false;
+    if (nameValuePairs != null && !nameValuePairs.isEmpty()) {
+      subject = (String) nameValuePairs.get("subject");
+      body = (String) nameValuePairs.get("body");
+      querySyntax = true;
+    }
+
     // Drop sms, query portion
     int queryStart = rawText.indexOf('?', prefixLength);
     String smsURIWithoutQuery;
-    if (queryStart < 0) {
+    // If it's not query syntax, the question mark is part of the subject or message
+    if (queryStart < 0 || !querySyntax) {
       smsURIWithoutQuery = rawText.substring(prefixLength);
     } else {
       smsURIWithoutQuery = rawText.substring(prefixLength, queryStart);
@@ -73,12 +87,15 @@ final class SMSMMSResultParser extends ResultParser {
         via = null;
       }
     }
-    Hashtable nameValuePairs = parseNameValuePairs(rawText);
-    String subject = null;
-    String body = null;
-    if (nameValuePairs != null) {
-      subject = (String) nameValuePairs.get("subject");
-      body = (String) nameValuePairs.get("body");
+
+    // Thanks to dominik.wild for suggesting this enhancement to support
+    // smsto:number:body URIs
+    if (body == null) {
+      int bodyStart = number.indexOf(':');
+      if (bodyStart >= 0) {
+        body = number.substring(bodyStart + 1);
+        number = number.substring(0, bodyStart);
+      }
     }
     return new SMSParsedResult("sms:" + number, number, via, subject, body, null);
   }