|
|
@@ -0,0 +1,89 @@
|
|
|
+package com.example.david.libretasker.Events;
|
|
|
+
|
|
|
+import android.content.Context;
|
|
|
+import android.content.Intent;
|
|
|
+import android.os.Build;
|
|
|
+import android.os.Bundle;
|
|
|
+import android.provider.Telephony;
|
|
|
+import android.telephony.SmsMessage;
|
|
|
+
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.regex.Pattern;
|
|
|
+import java.util.regex.PatternSyntaxException;
|
|
|
+
|
|
|
+/**
|
|
|
+ * Created by david on 03/01/17.
|
|
|
+ */
|
|
|
+
|
|
|
+public class SMSEvent implements Event {
|
|
|
+ private String failureReason = "";
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean trigger(Context ctx, HashMap<String, Object> hm) {
|
|
|
+ failureReason = "";
|
|
|
+ Intent intent = (Intent)hm.get("Intent");
|
|
|
+ SmsMessage[] messages = getIntentMessagesCompat(intent);
|
|
|
+
|
|
|
+ if ( messages == null ) {
|
|
|
+ failureReason = "Messages is null?";
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( hm.get("BodyRegex") == null )
|
|
|
+ hm.put("BodyRegex", ".*");
|
|
|
+
|
|
|
+ String regex = (String)hm.get("BodyRegex");
|
|
|
+ Pattern p;
|
|
|
+ try {
|
|
|
+ p = Pattern.compile(regex);
|
|
|
+ } catch (PatternSyntaxException ex) {
|
|
|
+ failureReason = "Failed to compile regex";
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ for (SmsMessage s : messages) {
|
|
|
+ if ((String)hm.get("Sender") != null )
|
|
|
+ if ( ! s.getOriginatingAddress().equals((String)hm.get("Sender")) )
|
|
|
+ continue;
|
|
|
+
|
|
|
+ if (!p.matcher(s.getMessageBody()).matches())
|
|
|
+ continue;
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ failureReason = "Couldn't match Sender nor body";
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String getFailureReason() {
|
|
|
+ return failureReason;
|
|
|
+ }
|
|
|
+
|
|
|
+ private SmsMessage[] getIntentMessagesCompat(Intent intent){
|
|
|
+ SmsMessage[] messages = null;
|
|
|
+
|
|
|
+ if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
|
|
+ messages = Telephony.Sms.Intents.getMessagesFromIntent(intent);
|
|
|
+ for (SmsMessage smsMessage : messages) {
|
|
|
+ String messageBody = smsMessage.getMessageBody();
|
|
|
+ }
|
|
|
+ } else { //FIXME: Never tested
|
|
|
+ Bundle bundle = intent.getExtras();
|
|
|
+ if (bundle != null) {
|
|
|
+ try {
|
|
|
+ Object[] pdus = (Object[]) bundle.get("pdus");
|
|
|
+ messages = new SmsMessage[pdus.length];
|
|
|
+ for (int i = 0; i < messages .length; i++) {
|
|
|
+ messages [i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
|
|
|
+ }
|
|
|
+ } catch (Exception ex) {
|
|
|
+ ex.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return messages;
|
|
|
+ }
|
|
|
+}
|