From c950ad6c591264130756ee7f1e514cc13c707a79 Mon Sep 17 00:00:00 2001 From: pppscn <35696959@qq.com> Date: Thu, 18 Nov 2021 17:49:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E7=9B=91=E5=90=AC?= =?UTF-8?q?=E5=85=B6=E4=BB=96APP=E9=80=9A=E7=9F=A5=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E7=9A=84=E8=A7=84=E5=88=99=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 11 +- app/src/main/AndroidManifest.xml | 2 +- .../idormy/sms/forwarder/MyApplication.java | 8 +- .../idormy/sms/forwarder/RuleActivity.java | 95 ++-- .../idormy/sms/forwarder/SenderActivity.java | 5 +- .../idormy/sms/forwarder/model/RuleModel.java | 14 +- .../idormy/sms/forwarder/model/vo/SmsVo.java | 4 +- ...eceiver.java => SmsBroadcastReceiver.java} | 4 +- .../idormy/sms/forwarder/utils/RuleLine.java | 6 + .../sms/forwarder/utils/RuleLineUtils.java | 2 - .../res/layout/alert_dialog_setview_rule.xml | 37 ++ .../layout/alert_dialog_setview_rule_app.xml | 440 +++++++++++++++++ .../layout/alert_dialog_setview_rule_call.xml | 442 ++++++++++++++++++ app/src/main/res/values-en/strings.xml | 9 +- app/src/main/res/values/strings.xml | 13 +- 15 files changed, 1039 insertions(+), 53 deletions(-) rename app/src/main/java/com/idormy/sms/forwarder/receiver/{SmsForwarderBroadcastReceiver.java => SmsBroadcastReceiver.java} (96%) create mode 100644 app/src/main/res/layout/alert_dialog_setview_rule_app.xml create mode 100644 app/src/main/res/layout/alert_dialog_setview_rule_call.xml diff --git a/app/build.gradle b/app/build.gradle index 71dc9329..3a9de6f8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -116,7 +116,7 @@ void cmdExecute(String cmd) { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'androidx.appcompat:appcompat:1.3.1' - implementation 'androidx.constraintlayout:constraintlayout:2.1.1' + implementation 'androidx.constraintlayout:constraintlayout:2.1.2' testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' @@ -129,9 +129,9 @@ dependencies { implementation "com.alibaba:fastjson:1.2.78" //友盟统计SDK -// implementation 'com.umeng.umsdk:common:9.4.4'// 必选 -// implementation 'com.umeng.umsdk:asms:1.4.1'// 必选 -// implementation 'com.umeng.umsdk:apm:1.4.2' // 错误分析升级为独立SDK,看crash数据请一定集成,可选 + implementation 'com.umeng.umsdk:common:9.4.4'// 必选 + implementation 'com.umeng.umsdk:asms:1.4.1'// 必选 + //implementation 'com.umeng.umsdk:apm:1.4.2' // 错误分析升级为独立SDK,看crash数据请一定集成,可选 //XUpdate implementation 'com.github.xuexiangjys:XUpdate:2.1.0' @@ -152,7 +152,4 @@ dependencies { //AndroidAsync implementation 'com.koushikdutta.async:androidasync:3.1.0' - //Bind Android views and callbacks to fields and methods. - //implementation 'com.jakewharton:butterknife-gradle-plugin:10.2.3' - //annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 98dd45fa..b7b46fda 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -106,7 +106,7 @@ diff --git a/app/src/main/java/com/idormy/sms/forwarder/MyApplication.java b/app/src/main/java/com/idormy/sms/forwarder/MyApplication.java index 4727904e..72b05bee 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/MyApplication.java +++ b/app/src/main/java/com/idormy/sms/forwarder/MyApplication.java @@ -16,6 +16,8 @@ import com.idormy.sms.forwarder.utils.Define; import com.idormy.sms.forwarder.utils.PhoneUtils; import com.idormy.sms.forwarder.utils.SettingUtil; import com.smailnet.emailkit.EmailKit; +import com.umeng.analytics.MobclickAgent; +import com.umeng.commonsdk.UMConfigure; import java.util.ArrayList; import java.util.List; @@ -75,11 +77,11 @@ public class MyApplication extends Application { super.onCreate(); //初始化组件化基础库, 所有友盟业务SDK都必须调用此初始化接口。 //建议在宿主App的Application.onCreate函数中调用基础组件库初始化函数。 - //UMConfigure.init(this, "60254fc7425ec25f10f4293e", getChannelName(this), UMConfigure.DEVICE_TYPE_PHONE, ""); + UMConfigure.init(this, "60254fc7425ec25f10f4293e", getChannelName(this), UMConfigure.DEVICE_TYPE_PHONE, ""); // 选用LEGACY_AUTO页面采集模式 - //MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.LEGACY_MANUAL); + MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.LEGACY_MANUAL); //pro close log - //UMConfigure.setLogEnabled(true); + UMConfigure.setLogEnabled(true); Intent intent = new Intent(this, FrontService.class); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { diff --git a/app/src/main/java/com/idormy/sms/forwarder/RuleActivity.java b/app/src/main/java/com/idormy/sms/forwarder/RuleActivity.java index 2324b1ce..669fdac7 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/RuleActivity.java +++ b/app/src/main/java/com/idormy/sms/forwarder/RuleActivity.java @@ -29,6 +29,7 @@ import com.idormy.sms.forwarder.sender.SendUtil; import com.idormy.sms.forwarder.sender.SenderUtil; import com.idormy.sms.forwarder.utils.RuleUtil; import com.idormy.sms.forwarder.utils.SettingUtil; +import com.umeng.analytics.MobclickAgent; import java.util.ArrayList; import java.util.Date; @@ -134,6 +135,28 @@ public class RuleActivity extends AppCompatActivity { } } + private int getDialogView(String currentType) { + switch (currentType) { + case "call": + return R.layout.alert_dialog_setview_rule_call; + case "app": + return R.layout.alert_dialog_setview_rule_app; + default: + return R.layout.alert_dialog_setview_rule; + } + } + + private int getDialogTitle(String currentType) { + switch (currentType) { + case "call": + return R.string.setrule_call; + case "app": + return R.string.setrule_app; + default: + return R.string.setrule; + } + } + // 初始化数据 private void initRules() { ruleModels = RuleUtil.getRule(null, null, currentType); @@ -145,7 +168,7 @@ public class RuleActivity extends AppCompatActivity { private void setRule(final RuleModel ruleModel) { final AlertDialog.Builder alertDialog71 = new AlertDialog.Builder(RuleActivity.this); - final View view1 = View.inflate(RuleActivity.this, R.layout.alert_dialog_setview_rule, null); + final View view1 = View.inflate(RuleActivity.this, getDialogView(currentType), null); final RadioGroup radioGroupRuleFiled = view1.findViewById(R.id.radioGroupRuleFiled); if (ruleModel != null) radioGroupRuleFiled.check(ruleModel.getRuleFiledCheckId()); @@ -202,13 +225,16 @@ public class RuleActivity extends AppCompatActivity { Button buttonRuleDel = view1.findViewById(R.id.buttonRuleDel); Button buttonRuleTest = view1.findViewById(R.id.buttonRuleTest); alertDialog71 - .setTitle(R.string.setrule) - //.setIcon(R.drawable.ic_sms_forwarder) + .setTitle(getDialogTitle(currentType)) .setView(view1) .create(); final AlertDialog show = alertDialog71.show(); buttonRuleOk.setOnClickListener(view -> { Object senderId = ruleSenderTv.getTag(); + if (senderId == null) { + Toast.makeText(RuleActivity.this, R.string.new_sender_first, Toast.LENGTH_LONG).show(); + return; + } int radioGroupRuleCheckId = Math.max(radioGroupRuleCheck.getCheckedRadioButtonId(), radioGroupRuleCheck2.getCheckedRadioButtonId()); Log.d(TAG, radioGroupRuleCheck.getCheckedRadioButtonId() + " " + radioGroupRuleCheck2.getCheckedRadioButtonId() + " " + radioGroupRuleCheckId); if (ruleModel == null) { @@ -220,9 +246,7 @@ public class RuleActivity extends AppCompatActivity { newRuleModel.setValue(editTextRuleValue.getText().toString()); newRuleModel.setSwitchSmsTemplate(switchSmsTemplate.isChecked()); newRuleModel.setSmsTemplate(textSmsTemplate.getText().toString()); - if (senderId != null) { - newRuleModel.setSenderId(Long.valueOf(senderId.toString())); - } + newRuleModel.setSenderId(Long.valueOf(senderId.toString())); RuleUtil.addRule(newRuleModel); initRules(); adapter.add(ruleModels); @@ -233,9 +257,7 @@ public class RuleActivity extends AppCompatActivity { ruleModel.setValue(editTextRuleValue.getText().toString()); ruleModel.setSwitchSmsTemplate(switchSmsTemplate.isChecked()); ruleModel.setSmsTemplate(textSmsTemplate.getText().toString()); - if (senderId != null) { - ruleModel.setSenderId(Long.valueOf(senderId.toString())); - } + ruleModel.setSenderId(Long.valueOf(senderId.toString())); RuleUtil.updateRule(ruleModel); initRules(); adapter.update(ruleModels); @@ -257,26 +279,27 @@ public class RuleActivity extends AppCompatActivity { Object senderId = ruleSenderTv.getTag(); if (senderId == null) { Toast.makeText(RuleActivity.this, R.string.new_sender_first, Toast.LENGTH_LONG).show(); + return; + } + + int radioGroupRuleCheckId = Math.max(radioGroupRuleCheck.getCheckedRadioButtonId(), radioGroupRuleCheck2.getCheckedRadioButtonId()); + if (ruleModel == null) { + RuleModel newRuleModel = new RuleModel(); + newRuleModel.setFiled(RuleModel.getRuleFiledFromCheckId(radioGroupRuleFiled.getCheckedRadioButtonId())); + newRuleModel.setCheck(RuleModel.getRuleCheckFromCheckId(radioGroupRuleCheckId)); + newRuleModel.setSimSlot(RuleModel.getRuleSimSlotFromCheckId(radioGroupSimSlot.getCheckedRadioButtonId())); + newRuleModel.setValue(editTextRuleValue.getText().toString()); + newRuleModel.setSenderId(Long.valueOf(senderId.toString())); + + testRule(newRuleModel, Long.valueOf(senderId.toString())); } else { - int radioGroupRuleCheckId = Math.max(radioGroupRuleCheck.getCheckedRadioButtonId(), radioGroupRuleCheck2.getCheckedRadioButtonId()); - if (ruleModel == null) { - RuleModel newRuleModel = new RuleModel(); - newRuleModel.setFiled(RuleModel.getRuleFiledFromCheckId(radioGroupRuleFiled.getCheckedRadioButtonId())); - newRuleModel.setCheck(RuleModel.getRuleCheckFromCheckId(radioGroupRuleCheckId)); - newRuleModel.setSimSlot(RuleModel.getRuleSimSlotFromCheckId(radioGroupSimSlot.getCheckedRadioButtonId())); - newRuleModel.setValue(editTextRuleValue.getText().toString()); - newRuleModel.setSenderId(Long.valueOf(senderId.toString())); - - testRule(newRuleModel, Long.valueOf(senderId.toString())); - } else { - ruleModel.setFiled(RuleModel.getRuleFiledFromCheckId(radioGroupRuleFiled.getCheckedRadioButtonId())); - ruleModel.setCheck(RuleModel.getRuleCheckFromCheckId(radioGroupRuleCheckId)); - ruleModel.setSimSlot(RuleModel.getRuleSimSlotFromCheckId(radioGroupSimSlot.getCheckedRadioButtonId())); - ruleModel.setValue(editTextRuleValue.getText().toString()); - ruleModel.setSenderId(Long.valueOf(senderId.toString())); + ruleModel.setFiled(RuleModel.getRuleFiledFromCheckId(radioGroupRuleFiled.getCheckedRadioButtonId())); + ruleModel.setCheck(RuleModel.getRuleCheckFromCheckId(radioGroupRuleCheckId)); + ruleModel.setSimSlot(RuleModel.getRuleSimSlotFromCheckId(radioGroupSimSlot.getCheckedRadioButtonId())); + ruleModel.setValue(editTextRuleValue.getText().toString()); + ruleModel.setSenderId(Long.valueOf(senderId.toString())); - testRule(ruleModel, Long.valueOf(senderId.toString())); - } + testRule(ruleModel, Long.valueOf(senderId.toString())); } }); @@ -306,6 +329,20 @@ public class RuleActivity extends AppCompatActivity { textSmsTemplate.append("{{短信内容}}"); }); + Button buttonInsertSenderApp = view1.findViewById(R.id.bt_insert_sender_app); + buttonInsertSenderApp.setOnClickListener(view -> { + textSmsTemplate.setFocusable(true); + textSmsTemplate.requestFocus(); + textSmsTemplate.append("{{APP包名}}"); + }); + + Button buttonInsertContentApp = view1.findViewById(R.id.bt_insert_content_app); + buttonInsertContentApp.setOnClickListener(view -> { + textSmsTemplate.setFocusable(true); + textSmsTemplate.requestFocus(); + textSmsTemplate.append("{{通知内容}}"); + }); + Button buttonInsertExtra = view1.findViewById(R.id.bt_insert_extra); buttonInsertExtra.setOnClickListener(view -> { textSmsTemplate.setFocusable(true); @@ -474,13 +511,13 @@ public class RuleActivity extends AppCompatActivity { @Override protected void onResume() { super.onResume(); - //MobclickAgent.onResume(this); + MobclickAgent.onResume(this); } @Override protected void onPause() { super.onPause(); - //MobclickAgent.onPause(this); + MobclickAgent.onPause(this); } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/SenderActivity.java b/app/src/main/java/com/idormy/sms/forwarder/SenderActivity.java index 62c679ed..f3b2e127 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/SenderActivity.java +++ b/app/src/main/java/com/idormy/sms/forwarder/SenderActivity.java @@ -54,6 +54,7 @@ import com.idormy.sms.forwarder.sender.SenderSmsMsg; import com.idormy.sms.forwarder.sender.SenderTelegramMsg; import com.idormy.sms.forwarder.sender.SenderUtil; import com.idormy.sms.forwarder.sender.SenderWebNotifyMsg; +import com.umeng.analytics.MobclickAgent; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -1188,13 +1189,13 @@ public class SenderActivity extends AppCompatActivity { @Override protected void onResume() { super.onResume(); - //MobclickAgent.onResume(this); + MobclickAgent.onResume(this); } @Override protected void onPause() { super.onPause(); - //MobclickAgent.onPause(this); + MobclickAgent.onPause(this); } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/model/RuleModel.java b/app/src/main/java/com/idormy/sms/forwarder/model/RuleModel.java index e9b3bf40..a868bec5 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/model/RuleModel.java +++ b/app/src/main/java/com/idormy/sms/forwarder/model/RuleModel.java @@ -22,7 +22,9 @@ import lombok.Data; public class RuleModel { public static final String FILED_TRANSPOND_ALL = "transpond_all"; public static final String FILED_PHONE_NUM = "phone_num"; + public static final String FILED_PACKAGE_NAME = "package_name"; public static final String FILED_MSG_CONTENT = "msg_content"; + public static final String FILED_INFORM_CONTENT = "inform_content"; public static final String FILED_MULTI_MATCH = "multi_match"; public static final Map FILED_MAP = new HashMap<>(); public static final String CHECK_IS = "is"; @@ -50,6 +52,8 @@ public class RuleModel { FILED_MAP.put("phone_num", "手机号"); FILED_MAP.put("msg_content", "内容"); FILED_MAP.put("multi_match", "多重匹配"); + FILED_MAP.put("package_name", "APP包名"); + FILED_MAP.put("inform_content", "通知内容"); } static { @@ -96,6 +100,10 @@ public class RuleModel { return FILED_MSG_CONTENT; case R.id.btnPhone: return FILED_PHONE_NUM; + case R.id.btnPackageName: + return FILED_PACKAGE_NAME; + case R.id.btnInformContent: + return FILED_INFORM_CONTENT; case R.id.btnMultiMatch: return FILED_MULTI_MATCH; default: @@ -228,7 +236,7 @@ public class RuleModel { } public String getRuleMatch() { - String SimStr = SIM_SLOT_MAP.get(simSlot) + "卡 "; + String SimStr = "app".equals(type) ? "" : SIM_SLOT_MAP.get(simSlot) + "卡 "; if (filed == null || filed.equals(FILED_TRANSPOND_ALL)) { return SimStr + "全部 转发到 "; } else { @@ -246,6 +254,10 @@ public class RuleModel { return R.id.btnContent; case FILED_PHONE_NUM: return R.id.btnPhone; + case FILED_PACKAGE_NAME: + return R.id.btnPackageName; + case FILED_INFORM_CONTENT: + return R.id.btnInformContent; case FILED_MULTI_MATCH: return R.id.btnMultiMatch; default: diff --git a/app/src/main/java/com/idormy/sms/forwarder/model/vo/SmsVo.java b/app/src/main/java/com/idormy/sms/forwarder/model/vo/SmsVo.java index c4bad62e..2c1fb1b8 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/model/vo/SmsVo.java +++ b/app/src/main/java/com/idormy/sms/forwarder/model/vo/SmsVo.java @@ -45,8 +45,8 @@ public class SmsVo implements Serializable { } } - return customSmsTemplate.replace("{{来源号码}}", mobile) - .replace("{{短信内容}}", content) + return customSmsTemplate.replace("{{来源号码}}", mobile).replace("{{APP包名}}", mobile) + .replace("{{短信内容}}", content).replace("{{通知内容}}", content) .replace("{{卡槽信息}}", simInfo) .replace("{{接收时间}}", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date)) .replace("{{设备名称}}", deviceMark) diff --git a/app/src/main/java/com/idormy/sms/forwarder/receiver/SmsForwarderBroadcastReceiver.java b/app/src/main/java/com/idormy/sms/forwarder/receiver/SmsBroadcastReceiver.java similarity index 96% rename from app/src/main/java/com/idormy/sms/forwarder/receiver/SmsForwarderBroadcastReceiver.java rename to app/src/main/java/com/idormy/sms/forwarder/receiver/SmsBroadcastReceiver.java index c1c4d601..3f3cec73 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/receiver/SmsForwarderBroadcastReceiver.java +++ b/app/src/main/java/com/idormy/sms/forwarder/receiver/SmsBroadcastReceiver.java @@ -19,13 +19,13 @@ import java.util.List; import java.util.Map; import java.util.Objects; -public class SmsForwarderBroadcastReceiver extends BroadcastReceiver { +public class SmsBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String receiveAction = intent.getAction(); - String TAG = "SmsForwarderBroadcastReceiver"; + String TAG = "SmsBroadcastReceiver"; Log.d(TAG, "onReceive intent " + receiveAction); if ("android.provider.Telephony.SMS_RECEIVED".equals(receiveAction)) { try { diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/RuleLine.java b/app/src/main/java/com/idormy/sms/forwarder/utils/RuleLine.java index f777f3b2..d7a3d286 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/RuleLine.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/RuleLine.java @@ -17,7 +17,9 @@ class RuleLine { public static final String CONJUNCTION_AND = "并且"; public static final String CONJUNCTION_OR = "或者"; public static final String FILED_PHONE_NUM = "手机号"; + public static final String FILED_PACKAGE_NAME = "APP包名"; public static final String FILED_MSG_CONTENT = "短信内容"; + public static final String FILED_INFORM_CONTENT = "通知内容"; public static final String SURE_YES = "是"; public static final String SURE_NOT = "不是"; public static final String CHECK_EQUALS = "相等"; @@ -43,6 +45,8 @@ class RuleLine { static { FILED_LIST.add("手机号"); FILED_LIST.add("短信内容"); + FILED_LIST.add("APP包名"); + FILED_LIST.add("通知内容"); } static { @@ -269,9 +273,11 @@ class RuleLine { //先检查规则是否命中 switch (this.field) { case FILED_PHONE_NUM: + case FILED_PACKAGE_NAME: mixChecked = checkValue(msg.getMobile()); break; case FILED_MSG_CONTENT: + case FILED_INFORM_CONTENT: mixChecked = checkValue(msg.getContent()); break; default: diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/RuleLineUtils.java b/app/src/main/java/com/idormy/sms/forwarder/utils/RuleLineUtils.java index d972b8e1..9f296818 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/RuleLineUtils.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/RuleLineUtils.java @@ -80,7 +80,6 @@ public class RuleLineUtils { * Rule节点是否命中取决于:该节点是否命中、该节点子结点(如果有的话)是否命中、该节点下节点(如果有的话)是否命中 * 递归检查 */ - public static boolean checkRuleTree(SmsVo msg, RuleLine currentRuleLine) throws Exception { //该节点是否命中 boolean currentAll = currentRuleLine.checkMsg(msg); @@ -126,7 +125,6 @@ public class RuleLineUtils { * 生成规则树 * 一行代表一个规则 */ - public static RuleLine generateRuleTree(String line, int lineNum, RuleLine parentRuleLine) throws Exception { String[] words = line.split(" "); diff --git a/app/src/main/res/layout/alert_dialog_setview_rule.xml b/app/src/main/res/layout/alert_dialog_setview_rule.xml index 0f18a273..d420de52 100644 --- a/app/src/main/res/layout/alert_dialog_setview_rule.xml +++ b/app/src/main/res/layout/alert_dialog_setview_rule.xml @@ -82,6 +82,18 @@ style="@style/rg_rb_style" android:text="@string/sms_content" /> + + + + +