|
|
@@ -1,105 +0,0 @@
|
|
|
-package com.example.david.libretasker.Events;
|
|
|
-
|
|
|
-import android.content.ContentResolver;
|
|
|
-import android.content.Context;
|
|
|
-import android.content.Intent;
|
|
|
-import android.database.Cursor;
|
|
|
-import android.net.Uri;
|
|
|
-import android.os.Build;
|
|
|
-import android.os.Bundle;
|
|
|
-import android.provider.ContactsContract;
|
|
|
-import android.provider.Telephony;
|
|
|
-import android.telephony.SmsMessage;
|
|
|
-
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.regex.Pattern;
|
|
|
-import java.util.regex.PatternSyntaxException;
|
|
|
-
|
|
|
-import static com.example.david.libretasker.Helpers.getContactName;
|
|
|
-
|
|
|
-/**
|
|
|
- * 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("NameRegex") == null )
|
|
|
- hm.put("NameRegex", ".*");
|
|
|
-
|
|
|
- if ( hm.get("BodyRegex") == null )
|
|
|
- hm.put("BodyRegex", ".*");
|
|
|
-
|
|
|
- String bregex = (String)hm.get("BodyRegex");
|
|
|
- String nregex = (String)hm.get("NameRegex");
|
|
|
- Pattern b,n;
|
|
|
- try {
|
|
|
- b = Pattern.compile(bregex);
|
|
|
- n = Pattern.compile(nregex);
|
|
|
- } catch (PatternSyntaxException ex) {
|
|
|
- failureReason = "Failed to compile regex(es)";
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- for (SmsMessage s : messages) {
|
|
|
- String number = s.getOriginatingAddress();
|
|
|
-
|
|
|
- if ((String)hm.get("Sender") != null )
|
|
|
- if ( ! number.equals((String)hm.get("Sender")) )
|
|
|
- continue;
|
|
|
-
|
|
|
- if (!b.matcher(s.getMessageBody()).matches())
|
|
|
- continue;
|
|
|
-
|
|
|
- if (!n.matcher(getContactName(ctx, number)).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;
|
|
|
- }
|
|
|
-}
|