X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=core%2Fsrc%2Fcom%2Fgoogle%2Fzxing%2Fclient%2Fresult%2FSMSMMSResultParser.java;h=dfa5da084cdc3a608ba7dbac28cd8ba4266c3f39;hb=c4c6e602140cee090e8ee0ed8299d15d8a8ebde6;hp=a4ad3d456502474db51c15137cbbbf498fa7c3e6;hpb=4166bfcc94c0aa6365be15b73aa7dda767ef240a;p=zxing.git diff --git a/core/src/com/google/zxing/client/result/SMSMMSResultParser.java b/core/src/com/google/zxing/client/result/SMSMMSResultParser.java index a4ad3d45..dfa5da08 100644 --- a/core/src/com/google/zxing/client/result/SMSMMSResultParser.java +++ b/core/src/com/google/zxing/client/result/SMSMMSResultParser.java @@ -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.

* - * @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.size() > 0) { + 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); }