From 448ea6ca52833a0df67df13d7a4c31be77fb5a28 Mon Sep 17 00:00:00 2001 From: MT Date: Wed, 22 Nov 2017 13:56:40 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E8=BD=AC=E5=8F=91=E8=A7=84=E5=88=99?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=AD=A3=E5=88=99=E8=A1=A8=E8=BE=BE=E5=BC=8F?= =?UTF-8?q?=E7=AD=9B=E9=80=89=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 8 +- .../activity/RegexActivity.java | 156 ++++++++++++++++++ .../messagerelayer/activity/RuleActivity.java | 8 +- .../whf/messagerelayer/confing/Constant.java | 4 + .../messagerelayer/service/SmsService.java | 37 +++-- .../utils/NativeDataManager.java | 8 + app/src/main/res/layout/activity_regex.xml | 14 ++ app/src/main/res/layout/activity_rule.xml | 26 +++ 8 files changed, 243 insertions(+), 18 deletions(-) create mode 100644 app/src/main/java/com/whf/messagerelayer/activity/RegexActivity.java create mode 100644 app/src/main/res/layout/activity_regex.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 657ef77..eefa0de 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -62,13 +62,19 @@ android:name=".activity.AboutActivity" android:label="关于"> - + + + \ 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..f1b1e1d 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 { @@ -38,32 +35,42 @@ protected void onHandleIntent(Intent intent) { 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) { + if (keySet.size() == 0 && contactList.size() == 0 && regexSet.size() == 0) { relayMessage(content); - } else if (keySet.size() != 0 && contactList.size() == 0) {//仅有关键字规则 + } else if (keySet.size() != 0 && contactList.size() == 0 && regexSet.size() == 0) {//仅有关键字规则 for (String key : keySet) { if (content.contains(key)) { relayMessage(content); break; } } - } else if (keySet.size() == 0 && contactList.size() != 0) {//仅有手机号规则 + } else if (keySet.size() == 0 && contactList.size() != 0 && regexSet.size() == 0) {//仅有手机号规则 for (Contact contact : contactList) { if (contact.getContactNum().equals(mobile)) { relayMessage(content); break; } } - } else {//两种规则共存 + } else if (keySet.size() == 0 && contactList.size() == 0 && regexSet.size() != 0) { // 仅有正则表达式规则 + for (String regex : regexSet){ + if (Pattern.matches(regex,content)){ + relayMessage(content); + break; + } + } + } else {//三种规则共存 out: for (Contact contact : contactList) { if (contact.getContactNum().equals(mobile)) { for (String key : keySet) { - if (content.contains(key)) { - relayMessage(content); - break out; + for (String regex : regexSet) { + if (content.contains(key) && Pattern.matches(regex,content)) { + relayMessage(content); + break out; + } } } } @@ -74,11 +81,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"/> + + + + + + Date: Wed, 10 Jan 2018 15:26:25 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E5=8D=87=E7=BA=A7=20gradle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index cd901b3..e9274a8 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.2.2' + classpath 'com.android.tools.build:gradle:3.0.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 04e285f..c46d3f9 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Dec 28 10:00:20 PST 2015 +#Mon Dec 18 15:53:09 CST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip From 08fc5ac538d6bc633e16c383044f88ab6b5d8f4f Mon Sep 17 00:00:00 2001 From: MT Date: Wed, 10 Jan 2018 15:27:09 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E8=81=94=E7=BD=91?= =?UTF-8?q?=E6=9D=83=E9=99=90=E5=8F=8A=20=E5=8E=BB=E6=8E=89OKHTTP=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 1 - app/src/main/AndroidManifest.xml | 1 - 2 files changed, 2 deletions(-) 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 eefa0de..28f9c52 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,7 +6,6 @@ - Date: Wed, 10 Jan 2018 15:27:54 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=9F=AD=E4=BF=A1?= =?UTF-8?q?=E8=BD=AC=E5=8F=91=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../messagerelayer/service/SmsService.java | 39 +++++++------------ 1 file changed, 13 insertions(+), 26 deletions(-) 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 f1b1e1d..0564437 100644 --- a/app/src/main/java/com/whf/messagerelayer/service/SmsService.java +++ b/app/src/main/java/com/whf/messagerelayer/service/SmsService.java @@ -31,48 +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 && regexSet.size() == 0) { - relayMessage(content); - } else if (keySet.size() != 0 && contactList.size() == 0 && regexSet.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 && regexSet.size() == 0) {//仅有手机号规则 + } + + if (contactList.size() != 0) {// 手机号规则 for (Contact contact : contactList) { if (contact.getContactNum().equals(mobile)) { relayMessage(content); - break; + return; } } - } else if (keySet.size() == 0 && contactList.size() == 0 && regexSet.size() != 0) { // 仅有正则表达式规则 - for (String regex : regexSet){ - if (Pattern.matches(regex,content)){ + } + + if (regexSet.size() != 0) { // 正则表达式规则 + for (String regex : regexSet) { + if (Pattern.matches(regex, content)) { relayMessage(content); - break; - } - } - } else {//三种规则共存 - out: - for (Contact contact : contactList) { - if (contact.getContactNum().equals(mobile)) { - for (String key : keySet) { - for (String regex : regexSet) { - if (content.contains(key) && Pattern.matches(regex,content)) { - relayMessage(content); - break out; - } - } - } + return; } } }