diff --git a/app/build.gradle b/app/build.gradle
index e328ce8..c1d3738 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -28,7 +28,6 @@ dependencies {
testCompile 'junit:junit:4.12'
compile 'com.sun.mail:android-mail:1.5.5'
compile 'com.sun.mail:android-activation:1.5.5'
- compile 'com.squareup.okhttp3:okhttp:3.6.0'
compile 'com.android.support:recyclerview-v7:25.2.0'
compile 'com.google.android:flexbox:0.1.2'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 657ef77..28f9c52 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -6,7 +6,6 @@
-
-
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/whf/messagerelayer/activity/RegexActivity.java b/app/src/main/java/com/whf/messagerelayer/activity/RegexActivity.java
new file mode 100644
index 0000000..f514b95
--- /dev/null
+++ b/app/src/main/java/com/whf/messagerelayer/activity/RegexActivity.java
@@ -0,0 +1,156 @@
+package com.whf.messagerelayer.activity;
+
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.support.v7.app.ActionBar;
+import android.support.v7.app.AlertDialog;
+import android.support.v7.app.AppCompatActivity;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.google.android.flexbox.FlexboxLayout;
+import com.whf.messagerelayer.R;
+import com.whf.messagerelayer.utils.NativeDataManager;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Created by MTAndroidDev on 2017/11/22.
+ * Github: https://github.com/MTAndroidDev
+ * Email: ytumaotong@gmail.com
+ */
+public class RegexActivity extends AppCompatActivity {
+
+ private FlexboxLayout mFlexboxLayout;
+ private HashSet mTextSet;
+ private NativeDataManager mNativeDataManager;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_regex);
+ initActionbar();
+
+ mNativeDataManager = new NativeDataManager(this);
+ mTextSet = (HashSet) mNativeDataManager.getRegexSet();
+
+ this.mFlexboxLayout = (FlexboxLayout) findViewById(R.id.layout_flexbox);
+ initFlexboxLayout();
+
+ }
+ private void initActionbar(){
+ ActionBar actionBar = getSupportActionBar();
+ actionBar.setDisplayHomeAsUpEnabled(true);
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ menu.add("添加").setIcon(R.mipmap.ic_add)
+ .setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
+ @Override
+ public boolean onMenuItemClick(MenuItem item) {
+ showAddDialog();
+ return true;
+ }
+ }).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
+ return super.onCreateOptionsMenu(menu);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if(item.getItemId() == android.R.id.home){
+ finish();
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ private static final String TAG = "RegexActivity";
+ private void showAddDialog() {
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ View view = LayoutInflater.from(this).inflate(R.layout.dialog_edit,null,false);
+ TextView textView = (TextView) view.findViewById(R.id.dialog_title);
+ final EditText editText = (EditText) view.findViewById(R.id.dialog_edit);
+
+ textView.setText("请输入关键字");
+ builder.setView(view);
+ builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ String regex = ".*" + editText.getText().toString() + ".*";
+ if(regex.length()!=0){
+ Set set = new HashSet<>(mNativeDataManager.getRegexSet());
+ mFlexboxLayout.addView(createItemView(regex,set.size()));
+ set.add(regex);
+ mNativeDataManager.setRegexSet(set);
+ Log.e(TAG, "onClick: " + regex);
+ }else{
+ Toast.makeText(RegexActivity.this,"请输入有效字符",Toast.LENGTH_LONG).show();
+ }
+ }
+ });
+
+ builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+
+ }
+ });
+ builder.show();
+ }
+
+ private void initFlexboxLayout() {
+ int i = 0;
+ for (String keyword:mTextSet) {
+ mFlexboxLayout.addView(createItemView(keyword,i++));
+ }
+ }
+
+ private View createItemView(String text, int index) {
+ View view = LayoutInflater.from(this).inflate(R.layout.item_keyword,null,false);
+ TextView textView = (TextView) view.findViewById(R.id.text_keyword);
+ textView.setText(text);
+ initBackground(textView, index);
+ textView.setCompoundDrawablesWithIntrinsicBounds(null, null
+ , getResources().getDrawable(R.mipmap.ic_del), null);
+
+ return view;
+ }
+
+ private void initBackground(TextView textView, int index) {
+ switch (index % 4) {
+ case 0:
+ textView.setBackgroundResource(R.drawable.bg_keyword_one);
+ break;
+ case 1:
+ textView.setBackgroundResource(R.drawable.bg_keyword_two);
+ break;
+ case 2:
+ textView.setBackgroundResource(R.drawable.bg_keyword_three);
+ break;
+ case 3:
+ textView.setBackgroundResource(R.drawable.bg_keyword_four);
+ break;
+ }
+ }
+
+ /**
+ * 点击删除其View
+ * @param view
+ */
+ public void removeClick(View view){
+ TextView textView = (TextView) view;
+ String keyword = textView.getText().toString();
+ Set set = new HashSet<>(mNativeDataManager.getRegexSet());
+ set.remove(keyword);
+ mNativeDataManager.setRegexSet(set);
+
+ mFlexboxLayout.removeView((View) view.getParent());
+ }
+}
diff --git a/app/src/main/java/com/whf/messagerelayer/activity/RuleActivity.java b/app/src/main/java/com/whf/messagerelayer/activity/RuleActivity.java
index 584913e..81655cc 100644
--- a/app/src/main/java/com/whf/messagerelayer/activity/RuleActivity.java
+++ b/app/src/main/java/com/whf/messagerelayer/activity/RuleActivity.java
@@ -19,7 +19,7 @@
public class RuleActivity extends AppCompatActivity implements View.OnClickListener {
- private RelativeLayout mMoblieRuleLayout, mKeywordRuleLayout, mPrefixRuleLayout, mSuffixRuleLayout;
+ private RelativeLayout mMoblieRuleLayout, mKeywordRuleLayout,mRegexRuleLayout, mPrefixRuleLayout, mSuffixRuleLayout;
private NativeDataManager mNativeDataManager;
private TextView mPrefixText, mSuffixText;
@@ -43,7 +43,7 @@ private void initActionbar() {
private void initView() {
mMoblieRuleLayout = (RelativeLayout) findViewById(R.id.layout_rule_mobile);
mKeywordRuleLayout = (RelativeLayout) findViewById(R.id.layout_rule_keyword);
-
+ mRegexRuleLayout = (RelativeLayout) findViewById(R.id.layout_rule_regex);
mPrefixRuleLayout = (RelativeLayout) findViewById(R.id.layout_rule_prefix);
mSuffixRuleLayout = (RelativeLayout) findViewById(R.id.layout_rule_suffix);
@@ -54,6 +54,7 @@ private void initView() {
private void initListener() {
mMoblieRuleLayout.setOnClickListener(this);
mKeywordRuleLayout.setOnClickListener(this);
+ mRegexRuleLayout.setOnClickListener(this);
mPrefixRuleLayout.setOnClickListener(this);
mSuffixRuleLayout.setOnClickListener(this);
@@ -87,6 +88,9 @@ public void onClick(View v) {
case R.id.layout_rule_keyword:
startActivity(new Intent(this, KeywordActivity.class));
break;
+ case R.id.layout_rule_regex:
+ startActivity(new Intent(this, RegexActivity.class));
+ break;
case R.id.layout_rule_prefix:
showEditDialog("请输入要附加的内容前缀", Constant.KEY_CONTENT_PREFIX);
break;
diff --git a/app/src/main/java/com/whf/messagerelayer/confing/Constant.java b/app/src/main/java/com/whf/messagerelayer/confing/Constant.java
index 39a6b7d..045113a 100644
--- a/app/src/main/java/com/whf/messagerelayer/confing/Constant.java
+++ b/app/src/main/java/com/whf/messagerelayer/confing/Constant.java
@@ -56,6 +56,10 @@ public class Constant {
//关键字的列表
public static final String KEY_KEYWORD_LIST = "keyword";
+ // 正则表达式的列表
+ public static final String KEY_REGEX_LIST = "regex";
+
+
//前缀和后缀
public static final String KEY_CONTENT_PREFIX = "prefix";
public static final String KEY_CONTENT_SUFFIX = "suffix";
diff --git a/app/src/main/java/com/whf/messagerelayer/service/SmsService.java b/app/src/main/java/com/whf/messagerelayer/service/SmsService.java
index e6b0cab..0564437 100644
--- a/app/src/main/java/com/whf/messagerelayer/service/SmsService.java
+++ b/app/src/main/java/com/whf/messagerelayer/service/SmsService.java
@@ -2,10 +2,6 @@
import android.app.IntentService;
import android.content.Intent;
-import android.os.IBinder;
-import android.provider.Telephony;
-import android.util.Log;
-import android.widget.Toast;
import com.whf.messagerelayer.bean.Contact;
import com.whf.messagerelayer.confing.Constant;
@@ -16,6 +12,7 @@
import java.util.ArrayList;
import java.util.Set;
+import java.util.regex.Pattern;
public class SmsService extends IntentService {
@@ -34,38 +31,35 @@ public SmsService(String name) {
protected void onHandleIntent(Intent intent) {
mNativeDataManager = new NativeDataManager(this);
mDataBaseManager = new DataBaseManager(this);
-
String mobile = intent.getStringExtra(Constant.EXTRA_MESSAGE_MOBILE);
String content = intent.getStringExtra(Constant.EXTRA_MESSAGE_CONTENT);
Set keySet = mNativeDataManager.getKeywordSet();
+ Set regexSet = mNativeDataManager.getRegexSet();
ArrayList contactList = mDataBaseManager.getAllContact();
- //无转发规则
- if (keySet.size() == 0 && contactList.size() == 0) {
- relayMessage(content);
- } else if (keySet.size() != 0 && contactList.size() == 0) {//仅有关键字规则
+
+ if (keySet.size() != 0) {// 关键字规则
for (String key : keySet) {
if (content.contains(key)) {
relayMessage(content);
- break;
+ return;
}
}
- } else if (keySet.size() == 0 && contactList.size() != 0) {//仅有手机号规则
+ }
+
+ if (contactList.size() != 0) {// 手机号规则
for (Contact contact : contactList) {
if (contact.getContactNum().equals(mobile)) {
relayMessage(content);
- break;
+ return;
}
}
- } else {//两种规则共存
- out:
- for (Contact contact : contactList) {
- if (contact.getContactNum().equals(mobile)) {
- for (String key : keySet) {
- if (content.contains(key)) {
- relayMessage(content);
- break out;
- }
- }
+ }
+
+ if (regexSet.size() != 0) { // 正则表达式规则
+ for (String regex : regexSet) {
+ if (Pattern.matches(regex, content)) {
+ relayMessage(content);
+ return;
}
}
}
@@ -74,11 +68,11 @@ protected void onHandleIntent(Intent intent) {
private void relayMessage(String content) {
String suffix = mNativeDataManager.getContentSuffix();
String prefix = mNativeDataManager.getContentPrefix();
- if(suffix!=null){
- content = content+suffix;
+ if (suffix != null) {
+ content = content + suffix;
}
- if(prefix!=null){
- content = prefix+content;
+ if (prefix != null) {
+ content = prefix + content;
}
if (mNativeDataManager.getSmsRelay()) {
SmsRelayerManager.relaySms(mNativeDataManager, content);
diff --git a/app/src/main/java/com/whf/messagerelayer/utils/NativeDataManager.java b/app/src/main/java/com/whf/messagerelayer/utils/NativeDataManager.java
index 9bbe832..afcfecd 100644
--- a/app/src/main/java/com/whf/messagerelayer/utils/NativeDataManager.java
+++ b/app/src/main/java/com/whf/messagerelayer/utils/NativeDataManager.java
@@ -132,6 +132,14 @@ public Set getKeywordSet(){
return mPreference.getStringSet(Constant.KEY_KEYWORD_LIST,new HashSet());
}
+ public void setRegexSet(Set values){
+ mPreference.edit().putStringSet(Constant.KEY_REGEX_LIST,values).apply();
+ }
+
+ public Set getRegexSet(){
+ return mPreference.getStringSet(Constant.KEY_REGEX_LIST,new HashSet());
+ }
+
public void setContentPrefix(String prefix){
mPreference.edit().putString(Constant.KEY_CONTENT_PREFIX,prefix).apply();
}
diff --git a/app/src/main/res/layout/activity_regex.xml b/app/src/main/res/layout/activity_regex.xml
new file mode 100644
index 0000000..230c897
--- /dev/null
+++ b/app/src/main/res/layout/activity_regex.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_rule.xml b/app/src/main/res/layout/activity_rule.xml
index 5452131..5825696 100644
--- a/app/src/main/res/layout/activity_rule.xml
+++ b/app/src/main/res/layout/activity_rule.xml
@@ -62,6 +62,32 @@
android:src="@mipmap/ic_skip"/>
+
+
+
+
+
+