* "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 {
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:")) {
} 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);
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);
}