Skip to content

Commit

Permalink
listener增加过滤功能
Browse files Browse the repository at this point in the history
  • Loading branch information
dss886 committed Jan 31, 2018
1 parent 9a19032 commit 277ad18
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,20 @@
import android.content.Intent;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.text.TextUtils;

import com.dss886.transmis.R;
import com.dss886.transmis.base.App;
import com.dss886.transmis.nofity.DingDingSender;
import com.dss886.transmis.utils.Settings;
import com.dss886.transmis.nofity.MailSender;
import com.dss886.transmis.utils.Logger;
import com.dss886.transmis.utils.StringUtils;
import com.dss886.transmis.utils.Tags;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;

/**
Expand Down Expand Up @@ -53,8 +57,8 @@ public void onReceive(Context context, Intent intent) {
sReceived = true;
} else if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
if (sRing & !sReceived) {
Logger.d("Phone missed, try to send mail.");
sendMail();
Logger.d("Phone missed, try to notify.");
doNotify();
sRing = false;
sReceived = false;
sCallNumber = null;
Expand All @@ -65,7 +69,10 @@ public void onReceive(Context context, Intent intent) {
}
}

private void sendMail() {
private void doNotify() {
if (tryFilter()) {
return;
}
String ringTime = String.valueOf((System.currentTimeMillis() - sRingTime) / 1000);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
String titleRegex = App.sp.getString(Tags.SP_CALL_TITLE_REGEX, App.me().getString(R.string.call_title_default));
Expand All @@ -80,4 +87,16 @@ private void sendMail() {
}
}

private boolean tryFilter() {
String senderString = App.sp.getString(Tags.SP_FILTER_VALUE_CALL_SENDER, null);
List<String> senderList = StringUtils.parseToList(senderString);
for (String sender : senderList) {
if (TextUtils.equals(sender, sCallNumber)) {
Logger.d("Call has been filtered: " + sCallNumber);
return true;
}
}
return false;
}

}
46 changes: 43 additions & 3 deletions app/src/main/java/com/dss886/transmis/listen/sms/SmsListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,18 @@
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.text.TextUtils;

import com.dss886.transmis.R;
import com.dss886.transmis.base.App;
import com.dss886.transmis.nofity.DingDingSender;
import com.dss886.transmis.nofity.MailSender;
import com.dss886.transmis.utils.Logger;
import com.dss886.transmis.utils.Settings;
import com.dss886.transmis.utils.StringUtils;
import com.dss886.transmis.utils.Tags;

import java.util.List;
import java.util.Locale;

/**
Expand Down Expand Up @@ -40,7 +44,7 @@ public void onReceive(Context context, Intent intent) {
for (int i = 0; i < messages.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
}
Logger.d("Try To Send Mail.");
Logger.d("Try To Notify.");
doNotify(messages);
} catch (Exception e) {
Logger.e(e.getMessage());
Expand All @@ -62,18 +66,54 @@ private void doNotify(SmsMessage[] messages) {
for (SmsMessage message : messages) {
sb.append(message.getMessageBody());
}
content = String.format(Locale.CHINA, contentRegex, messages[0].getOriginatingAddress(), sb.toString());
String callNumber = messages[0].getOriginatingAddress();
String smsContent = sb.toString();
if (tryFilter(callNumber, smsContent)) {
return;
}
content = String.format(Locale.CHINA, contentRegex, callNumber, smsContent);
} else {
for (SmsMessage message : messages) {
sb.append(String.format(Locale.CHINA, contentRegex, message.getOriginatingAddress(), message.getMessageBody()));
String callNumber = message.getOriginatingAddress();
String smsContent = message.getMessageBody();
if (tryFilter(callNumber, smsContent)) {
continue;
}
sb.append(String.format(Locale.CHINA, contentRegex, callNumber, smsContent));
}
content = sb.toString();
}
if (TextUtils.isEmpty(content)) {
return;
}
if (Settings.is(Tags.SP_SMS_MAIL_ENABLE, false)) {
new MailSender().send(titleRegex, content);
}
if (Settings.is(Tags.SP_SMS_DING_ENABLE, false)) {
new DingDingSender().send(titleRegex, content);
}
}

private boolean tryFilter(String callNumber, String content) {
if (TextUtils.isEmpty(callNumber) || TextUtils.isEmpty(content)) {
return true;
}
String senderString = App.sp.getString(Tags.SP_FILTER_VALUE_SMS_SENDER, null);
String wordString = App.sp.getString(Tags.SP_FILTER_VALUE_SMS_KEYWORD, null);
List<String> senderList = StringUtils.parseToList(senderString);
List<String> wordList = StringUtils.parseToList(wordString);
for (String number : senderList) {
if (callNumber.contains(number)) {
Logger.d("SMS has been filtered by sender: " + callNumber + ", " + content);
return true;
}
}
for (String word : wordList) {
if (content.contains(word)) {
Logger.d("SMS has been filtered by content: " + callNumber + ", " + content);
return true;
}
}
return false;
}
}
15 changes: 9 additions & 6 deletions app/src/main/java/com/dss886/transmis/nofity/MailSender.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,18 @@
import com.dss886.transmis.utils.Tags;
import com.sun.mail.util.MailSSLSocketFactory;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.UnsupportedEncodingException;
import java.security.GeneralSecurityException;
import java.util.Properties;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
* Created by dss886 on 2017/6/28.
*/
Expand Down Expand Up @@ -65,8 +68,8 @@ public void send(String title, String content) {
transport.connect(host, email, password);
transport.sendMessage(msg, new Address[] { new InternetAddress(receiveAddress) });
transport.close();
} catch (MessagingException | UnsupportedEncodingException e) {
e.printStackTrace();
} catch (Throwable tr) {
tr.printStackTrace();
}
});
}
Expand Down

0 comments on commit 277ad18

Please sign in to comment.