|
|
package com.idormy.sms.forwarder;
|
|
|
|
|
|
import static com.idormy.sms.forwarder.SenderActivity.NOTIFY;
|
|
|
import static com.idormy.sms.forwarder.model.RuleModel.STATUS_OFF;
|
|
|
import static com.idormy.sms.forwarder.model.RuleModel.STATUS_ON;
|
|
|
|
|
|
import android.annotation.SuppressLint;
|
|
|
import android.os.Bundle;
|
|
|
import android.os.Handler;
|
|
|
import android.os.Message;
|
|
|
import android.util.Log;
|
|
|
import android.view.View;
|
|
|
import android.widget.Button;
|
|
|
import android.widget.EditText;
|
|
|
import android.widget.LinearLayout;
|
|
|
import android.widget.ListView;
|
|
|
import android.widget.RadioButton;
|
|
|
import android.widget.RadioGroup;
|
|
|
import android.widget.Switch;
|
|
|
import android.widget.TextView;
|
|
|
|
|
|
import androidx.appcompat.app.AlertDialog;
|
|
|
|
|
|
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
|
|
import com.hjq.toast.ToastUtils;
|
|
|
import com.idormy.sms.forwarder.adapter.RuleAdapter;
|
|
|
import com.idormy.sms.forwarder.model.RuleModel;
|
|
|
import com.idormy.sms.forwarder.model.SenderModel;
|
|
|
import com.idormy.sms.forwarder.model.vo.SmsVo;
|
|
|
import com.idormy.sms.forwarder.sender.SendUtil;
|
|
|
import com.idormy.sms.forwarder.sender.SenderUtil;
|
|
|
import com.idormy.sms.forwarder.utils.CommonUtils;
|
|
|
import com.idormy.sms.forwarder.utils.LogUtils;
|
|
|
import com.idormy.sms.forwarder.utils.RuleUtils;
|
|
|
import com.idormy.sms.forwarder.utils.SettingUtils;
|
|
|
import com.idormy.sms.forwarder.view.StepBar;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
|
|
|
@SuppressWarnings("deprecation")
|
|
|
public class RuleActivity extends BaseActivity {
|
|
|
|
|
|
private final String TAG = "RuleActivity";
|
|
|
// 用于存储数据
|
|
|
private List<RuleModel> ruleModels = new ArrayList<>();
|
|
|
private RuleAdapter adapter;
|
|
|
private String currentType = "sms";
|
|
|
private ListView listView;
|
|
|
|
|
|
//消息处理者,创建一个Handler的子类对象,目的是重写Handler的处理消息的方法(handleMessage())
|
|
|
@SuppressLint("HandlerLeak")
|
|
|
private final Handler handler = new Handler() {
|
|
|
@Override
|
|
|
public void handleMessage(Message msg) {
|
|
|
if (msg.what == NOTIFY) {
|
|
|
ToastUtils.delayedShow(msg.getData().getString("DATA"), 3000);
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
|
|
|
@Override
|
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
|
Log.d(TAG, "onCreate");
|
|
|
super.onCreate(savedInstanceState);
|
|
|
setContentView(R.layout.activity_rule);
|
|
|
|
|
|
LogUtils.init(this);
|
|
|
RuleUtils.init(this);
|
|
|
SenderUtil.init(this);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
protected void onStart() {
|
|
|
super.onStart();
|
|
|
Log.d(TAG, "onStart");
|
|
|
|
|
|
// 先拿到数据并放在适配器上
|
|
|
initRules(); //初始化数据
|
|
|
adapter = new RuleAdapter(RuleActivity.this, R.layout.item_rule, ruleModels);
|
|
|
|
|
|
// 将适配器上的数据传递给listView
|
|
|
listView = findViewById(R.id.list_view_rule);
|
|
|
listView.setAdapter(adapter);
|
|
|
|
|
|
// 为ListView注册一个监听器,当用户点击了ListView中的任何一个子项时,就会回调onItemClick()方法
|
|
|
// 在这个方法中可以通过position参数判断出用户点击的是那一个子项
|
|
|
listView.setOnItemClickListener((parent, view, position, id) -> {
|
|
|
RuleModel ruleModel = ruleModels.get(position);
|
|
|
Log.d(TAG, "onItemClick: " + ruleModel);
|
|
|
setRule(ruleModel, false);
|
|
|
});
|
|
|
|
|
|
listView.setOnItemLongClickListener((parent, view, position, id) -> {
|
|
|
//定义AlertDialog.Builder对象,当长按列表项的时候弹出确认删除对话框
|
|
|
AlertDialog.Builder builder = new AlertDialog.Builder(RuleActivity.this);
|
|
|
builder.setTitle(R.string.delete_rule_title);
|
|
|
builder.setMessage(R.string.delete_rule_tips);
|
|
|
|
|
|
builder.setPositiveButton(R.string.confirm, (dialog, which) -> {
|
|
|
RuleUtils.delRule(ruleModels.get(position).getId());
|
|
|
initRules();
|
|
|
adapter.del(ruleModels);
|
|
|
ToastUtils.show(R.string.delete_rule_toast);
|
|
|
});
|
|
|
|
|
|
builder.setNeutralButton(R.string.clone, (dialog, which) -> {
|
|
|
RuleModel ruleModel = ruleModels.get(position);
|
|
|
setRule(ruleModel, true);
|
|
|
});
|
|
|
|
|
|
builder.setNegativeButton(R.string.cancel, (dialog, which) -> {
|
|
|
|
|
|
});
|
|
|
|
|
|
builder.create().show();
|
|
|
return true;
|
|
|
});
|
|
|
|
|
|
//切换日志类别
|
|
|
int typeCheckId = getTypeCheckId(currentType);
|
|
|
final RadioGroup radioGroupTypeCheck = findViewById(R.id.radioGroupTypeCheck);
|
|
|
radioGroupTypeCheck.check(typeCheckId);
|
|
|
radioGroupTypeCheck.setOnCheckedChangeListener((group, checkedId) -> {
|
|
|
RadioButton rb = findViewById(checkedId);
|
|
|
currentType = (String) rb.getTag();
|
|
|
initRules(); //初始化数据
|
|
|
adapter = new RuleAdapter(RuleActivity.this, R.layout.item_rule, ruleModels);
|
|
|
listView.setAdapter(adapter);
|
|
|
});
|
|
|
|
|
|
|
|
|
//计算浮动按钮位置
|
|
|
FloatingActionButton btnAddRule = findViewById(R.id.btnAddRule);
|
|
|
CommonUtils.calcMarginBottom(this, btnAddRule, listView, null);
|
|
|
|
|
|
//添加规则
|
|
|
btnAddRule.setOnClickListener(v -> setRule(null, false));
|
|
|
|
|
|
//步骤完成状态校验
|
|
|
StepBar stepBar = findViewById(R.id.stepBar);
|
|
|
stepBar.setHighlight();
|
|
|
}
|
|
|
|
|
|
private int getTypeCheckId(String curType) {
|
|
|
switch (curType) {
|
|
|
case "call":
|
|
|
return R.id.btnTypeCall;
|
|
|
case "app":
|
|
|
return R.id.btnTypeApp;
|
|
|
default:
|
|
|
return R.id.btnTypeSms;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private int getDialogView(String curType) {
|
|
|
switch (curType) {
|
|
|
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 curType) {
|
|
|
switch (curType) {
|
|
|
case "call":
|
|
|
return R.string.setrule_call;
|
|
|
case "app":
|
|
|
return R.string.setrule_app;
|
|
|
default:
|
|
|
return R.string.setrule;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 初始化数据
|
|
|
private void initRules() {
|
|
|
ruleModels = RuleUtils.getRule(null, null, currentType);
|
|
|
}
|
|
|
|
|
|
private void setRule(final RuleModel ruleModel, final boolean isClone) {
|
|
|
final AlertDialog.Builder alertDialog71 = new AlertDialog.Builder(RuleActivity.this);
|
|
|
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());
|
|
|
|
|
|
final RadioGroup radioGroupRuleCheck = view1.findViewById(R.id.radioGroupRuleCheck);
|
|
|
final RadioGroup radioGroupRuleCheck2 = view1.findViewById(R.id.radioGroupRuleCheck2);
|
|
|
if (ruleModel != null) {
|
|
|
int ruleCheckCheckId = ruleModel.getRuleCheckCheckId();
|
|
|
if (ruleCheckCheckId == R.id.btnIs || ruleCheckCheckId == R.id.btnNotContain || ruleCheckCheckId == R.id.btnContain) {
|
|
|
radioGroupRuleCheck.check(ruleCheckCheckId);
|
|
|
} else {
|
|
|
radioGroupRuleCheck2.check(ruleCheckCheckId);
|
|
|
}
|
|
|
} else {
|
|
|
radioGroupRuleCheck.check(R.id.btnIs);
|
|
|
}
|
|
|
|
|
|
final RadioGroup radioGroupSimSlot = view1.findViewById(R.id.radioGroupSimSlot);
|
|
|
if (ruleModel != null) radioGroupSimSlot.check(ruleModel.getRuleSimSlotCheckId());
|
|
|
|
|
|
final TextView tv_mu_rule_tips = view1.findViewById(R.id.tv_mu_rule_tips);
|
|
|
final TextView ruleSenderTv = view1.findViewById(R.id.ruleSenderTv);
|
|
|
if (ruleModel != null && ruleModel.getSenderId() != null) {
|
|
|
List<SenderModel> getSenders = SenderUtil.getSender(ruleModel.getSenderId(), null);
|
|
|
if (!getSenders.isEmpty()) {
|
|
|
ruleSenderTv.setText(getSenders.get(0).getName());
|
|
|
ruleSenderTv.setTag(getSenders.get(0).getId());
|
|
|
}
|
|
|
}
|
|
|
final Button btSetRuleSender = view1.findViewById(R.id.btSetRuleSender);
|
|
|
btSetRuleSender.setOnClickListener(view -> {
|
|
|
//ToastUtils.show("selectSender", 3000);
|
|
|
selectSender(ruleSenderTv);
|
|
|
});
|
|
|
|
|
|
final EditText editTextRuleValue = view1.findViewById(R.id.editTextRuleValue);
|
|
|
if (ruleModel != null)
|
|
|
editTextRuleValue.setText(ruleModel.getValue());
|
|
|
|
|
|
//当更新选择的字段的时候,更新之下各个选项的状态
|
|
|
final LinearLayout matchTypeLayout = view1.findViewById(R.id.matchTypeLayout);
|
|
|
final LinearLayout matchValueLayout = view1.findViewById(R.id.matchValueLayout);
|
|
|
refreshSelectRadioGroupRuleFiled(radioGroupRuleFiled, radioGroupRuleCheck, radioGroupRuleCheck2, editTextRuleValue, tv_mu_rule_tips, matchTypeLayout, matchValueLayout);
|
|
|
|
|
|
//是否启用该规则
|
|
|
@SuppressLint("UseSwitchCompatOrMaterialCode") Switch switchRuleStatus = view1.findViewById(R.id.switch_rule_status);
|
|
|
if (ruleModel != null) {
|
|
|
switchRuleStatus.setChecked(ruleModel.getStatusChecked());
|
|
|
}
|
|
|
//自定义模板
|
|
|
@SuppressLint("UseSwitchCompatOrMaterialCode") Switch switchSmsTemplate = view1.findViewById(R.id.switch_sms_template);
|
|
|
EditText textSmsTemplate = view1.findViewById(R.id.text_sms_template);
|
|
|
if (ruleModel != null) {
|
|
|
switchSmsTemplate.setChecked(ruleModel.getSwitchSmsTemplate());
|
|
|
textSmsTemplate.setText(ruleModel.getSmsTemplate());
|
|
|
}
|
|
|
|
|
|
//正则替换
|
|
|
@SuppressLint("UseSwitchCompatOrMaterialCode") Switch switchRegexReplace = view1.findViewById(R.id.switch_regex_replace);
|
|
|
EditText textRegexReplace = view1.findViewById(R.id.text_regex_replace);
|
|
|
if (ruleModel != null) {
|
|
|
switchRegexReplace.setChecked(ruleModel.getSwitchRegexReplace());
|
|
|
textRegexReplace.setText(ruleModel.getRegexReplace());
|
|
|
}
|
|
|
|
|
|
Button buttonRuleOk = view1.findViewById(R.id.buttonRuleOk);
|
|
|
Button buttonRuleDel = view1.findViewById(R.id.buttonRuleDel);
|
|
|
buttonRuleDel.setText(ruleModel != null ? R.string.del : R.string.cancel);
|
|
|
Button buttonRuleTest = view1.findViewById(R.id.buttonRuleTest);
|
|
|
alertDialog71
|
|
|
.setTitle(getDialogTitle(currentType))
|
|
|
.setView(view1)
|
|
|
.create();
|
|
|
final AlertDialog show = alertDialog71.show();
|
|
|
buttonRuleOk.setOnClickListener(view -> {
|
|
|
Object senderId = ruleSenderTv.getTag();
|
|
|
if (senderId == null) {
|
|
|
ToastUtils.delayedShow(R.string.new_sender_first, 3000);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
//检查正则替换填写是否正确
|
|
|
String regexReplace = textRegexReplace.getText().toString().trim();
|
|
|
int lineNum = checkRegexReplace(regexReplace);
|
|
|
if (lineNum > 0) {
|
|
|
ToastUtils.show("lineNum=" + lineNum);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
int radioGroupRuleCheckId = Math.max(radioGroupRuleCheck.getCheckedRadioButtonId(), radioGroupRuleCheck2.getCheckedRadioButtonId());
|
|
|
Log.d(TAG, radioGroupRuleCheck.getCheckedRadioButtonId() + " " + radioGroupRuleCheck2.getCheckedRadioButtonId() + " " + radioGroupRuleCheckId);
|
|
|
if (isClone || ruleModel == null) {
|
|
|
RuleModel newRuleModel = new RuleModel();
|
|
|
newRuleModel.setType(currentType);
|
|
|
newRuleModel.setFiled(RuleModel.getRuleFiledFromCheckId(radioGroupRuleFiled.getCheckedRadioButtonId()));
|
|
|
newRuleModel.setCheck(RuleModel.getRuleCheckFromCheckId(radioGroupRuleCheckId));
|
|
|
newRuleModel.setSimSlot(RuleModel.getRuleSimSlotFromCheckId(radioGroupSimSlot.getCheckedRadioButtonId()));
|
|
|
newRuleModel.setValue(editTextRuleValue.getText().toString().trim());
|
|
|
newRuleModel.setSwitchSmsTemplate(switchSmsTemplate.isChecked());
|
|
|
newRuleModel.setSmsTemplate(textSmsTemplate.getText().toString().trim());
|
|
|
newRuleModel.setSwitchRegexReplace(switchRegexReplace.isChecked());
|
|
|
newRuleModel.setRegexReplace(regexReplace);
|
|
|
newRuleModel.setSenderId(Long.valueOf(senderId.toString()));
|
|
|
newRuleModel.setStatus(switchRuleStatus.isChecked() ? STATUS_ON : STATUS_OFF);
|
|
|
RuleUtils.addRule(newRuleModel);
|
|
|
initRules();
|
|
|
adapter.add(ruleModels);
|
|
|
} else {
|
|
|
ruleModel.setFiled(RuleModel.getRuleFiledFromCheckId(radioGroupRuleFiled.getCheckedRadioButtonId()));
|
|
|
ruleModel.setCheck(RuleModel.getRuleCheckFromCheckId(radioGroupRuleCheckId));
|
|
|
ruleModel.setSimSlot(RuleModel.getRuleSimSlotFromCheckId(radioGroupSimSlot.getCheckedRadioButtonId()));
|
|
|
ruleModel.setValue(editTextRuleValue.getText().toString().trim());
|
|
|
ruleModel.setSwitchSmsTemplate(switchSmsTemplate.isChecked());
|
|
|
ruleModel.setSmsTemplate(textSmsTemplate.getText().toString().trim());
|
|
|
ruleModel.setSwitchRegexReplace(switchRegexReplace.isChecked());
|
|
|
ruleModel.setRegexReplace(regexReplace);
|
|
|
ruleModel.setSenderId(Long.valueOf(senderId.toString()));
|
|
|
ruleModel.setStatus(switchRuleStatus.isChecked() ? STATUS_ON : STATUS_OFF);
|
|
|
RuleUtils.updateRule(ruleModel);
|
|
|
initRules();
|
|
|
adapter.update(ruleModels);
|
|
|
}
|
|
|
show.dismiss();
|
|
|
});
|
|
|
|
|
|
buttonRuleDel.setOnClickListener(view -> {
|
|
|
if (ruleModel != null) {
|
|
|
RuleUtils.delRule(ruleModel.getId());
|
|
|
initRules();
|
|
|
adapter.del(ruleModels);
|
|
|
}
|
|
|
show.dismiss();
|
|
|
});
|
|
|
|
|
|
buttonRuleTest.setOnClickListener(view -> {
|
|
|
Object senderId = ruleSenderTv.getTag();
|
|
|
if (senderId == null) {
|
|
|
ToastUtils.delayedShow(R.string.new_sender_first, 3000);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
//检查正则替换填写是否正确
|
|
|
String regexReplace = textRegexReplace.getText().toString().trim();
|
|
|
int lineNum = checkRegexReplace(regexReplace);
|
|
|
if (lineNum > 0) {
|
|
|
ToastUtils.show("lineNum=" + lineNum);
|
|
|
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().trim());
|
|
|
newRuleModel.setSenderId(Long.valueOf(senderId.toString()));
|
|
|
newRuleModel.setSwitchSmsTemplate(switchSmsTemplate.isChecked());
|
|
|
newRuleModel.setSmsTemplate(textSmsTemplate.getText().toString().trim());
|
|
|
newRuleModel.setSwitchRegexReplace(switchRegexReplace.isChecked());
|
|
|
newRuleModel.setRegexReplace(regexReplace);
|
|
|
newRuleModel.setStatus(switchRuleStatus.isChecked() ? STATUS_ON : STATUS_OFF);
|
|
|
|
|
|
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().trim());
|
|
|
ruleModel.setSenderId(Long.valueOf(senderId.toString()));
|
|
|
ruleModel.setSwitchSmsTemplate(switchSmsTemplate.isChecked());
|
|
|
ruleModel.setSmsTemplate(textSmsTemplate.getText().toString().trim());
|
|
|
ruleModel.setSwitchRegexReplace(switchRegexReplace.isChecked());
|
|
|
ruleModel.setRegexReplace(regexReplace);
|
|
|
ruleModel.setStatus(switchRuleStatus.isChecked() ? STATUS_ON : STATUS_OFF);
|
|
|
|
|
|
testRule(ruleModel, Long.valueOf(senderId.toString()));
|
|
|
}
|
|
|
});
|
|
|
|
|
|
//自定义模板
|
|
|
final LinearLayout layout_sms_template = view1.findViewById(R.id.layout_sms_template);
|
|
|
if (ruleModel != null) {
|
|
|
layout_sms_template.setVisibility(ruleModel.getSwitchSmsTemplate() ? View.VISIBLE : View.GONE);
|
|
|
}
|
|
|
switchSmsTemplate.setOnCheckedChangeListener((buttonView, isChecked) -> {
|
|
|
layout_sms_template.setVisibility(isChecked ? View.VISIBLE : View.GONE);
|
|
|
if (!isChecked) {
|
|
|
textSmsTemplate.setText("");
|
|
|
}
|
|
|
});
|
|
|
|
|
|
Button buttonInsertSender = view1.findViewById(R.id.bt_insert_sender);
|
|
|
buttonInsertSender.setOnClickListener(view -> {
|
|
|
textSmsTemplate.setFocusable(true);
|
|
|
textSmsTemplate.requestFocus();
|
|
|
CommonUtils.insertOrReplaceText2Cursor(textSmsTemplate, getString(R.string.tag_from));
|
|
|
});
|
|
|
|
|
|
Button buttonInsertContent = view1.findViewById(R.id.bt_insert_content);
|
|
|
buttonInsertContent.setOnClickListener(view -> {
|
|
|
textSmsTemplate.setFocusable(true);
|
|
|
textSmsTemplate.requestFocus();
|
|
|
CommonUtils.insertOrReplaceText2Cursor(textSmsTemplate, getString(R.string.tag_sms));
|
|
|
});
|
|
|
|
|
|
Button buttonInsertSenderApp = view1.findViewById(R.id.bt_insert_sender_app);
|
|
|
buttonInsertSenderApp.setOnClickListener(view -> {
|
|
|
textSmsTemplate.setFocusable(true);
|
|
|
textSmsTemplate.requestFocus();
|
|
|
CommonUtils.insertOrReplaceText2Cursor(textSmsTemplate, getString(R.string.tag_package_name));
|
|
|
});
|
|
|
|
|
|
Button buttonInsertContentApp = view1.findViewById(R.id.bt_insert_content_app);
|
|
|
buttonInsertContentApp.setOnClickListener(view -> {
|
|
|
textSmsTemplate.setFocusable(true);
|
|
|
textSmsTemplate.requestFocus();
|
|
|
CommonUtils.insertOrReplaceText2Cursor(textSmsTemplate, getString(R.string.tag_msg));
|
|
|
});
|
|
|
|
|
|
Button buttonInsertExtra = view1.findViewById(R.id.bt_insert_extra);
|
|
|
buttonInsertExtra.setOnClickListener(view -> {
|
|
|
textSmsTemplate.setFocusable(true);
|
|
|
textSmsTemplate.requestFocus();
|
|
|
CommonUtils.insertOrReplaceText2Cursor(textSmsTemplate, getString(R.string.tag_card_slot));
|
|
|
});
|
|
|
|
|
|
Button buttonInsertTime = view1.findViewById(R.id.bt_insert_time);
|
|
|
buttonInsertTime.setOnClickListener(view -> {
|
|
|
textSmsTemplate.setFocusable(true);
|
|
|
textSmsTemplate.requestFocus();
|
|
|
CommonUtils.insertOrReplaceText2Cursor(textSmsTemplate, getString(R.string.tag_receive_time));
|
|
|
});
|
|
|
|
|
|
Button buttonInsertDeviceName = view1.findViewById(R.id.bt_insert_device_name);
|
|
|
buttonInsertDeviceName.setOnClickListener(view -> {
|
|
|
textSmsTemplate.setFocusable(true);
|
|
|
textSmsTemplate.requestFocus();
|
|
|
CommonUtils.insertOrReplaceText2Cursor(textSmsTemplate, getString(R.string.tag_device_name));
|
|
|
});
|
|
|
|
|
|
//正则替换
|
|
|
final LinearLayout layout_regex_replace = view1.findViewById(R.id.layout_regex_replace);
|
|
|
if (ruleModel != null) {
|
|
|
layout_regex_replace.setVisibility(ruleModel.getSwitchRegexReplace() ? View.VISIBLE : View.GONE);
|
|
|
}
|
|
|
switchRegexReplace.setOnCheckedChangeListener((buttonView, isChecked) -> {
|
|
|
layout_regex_replace.setVisibility(isChecked ? View.VISIBLE : View.GONE);
|
|
|
if (!isChecked) {
|
|
|
textRegexReplace.setText("");
|
|
|
}
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
//当更新选择的字段的时候,更新之下各个选项的状态
|
|
|
// 如果设置了转发全部,禁用选择模式和匹配值输入
|
|
|
// 如果设置了多重规则,选择模式置为是
|
|
|
private void refreshSelectRadioGroupRuleFiled(RadioGroup radioGroupRuleFiled, final RadioGroup radioGroupRuleCheck, final RadioGroup radioGroupRuleCheck2, final EditText editTextRuleValue, final TextView tv_mu_rule_tips, final LinearLayout matchTypeLayout, final LinearLayout matchValueLayout) {
|
|
|
refreshSelectRadioGroupRuleFiledAction(radioGroupRuleFiled.getCheckedRadioButtonId(), radioGroupRuleCheck, radioGroupRuleCheck2, editTextRuleValue, tv_mu_rule_tips, matchTypeLayout, matchValueLayout);
|
|
|
|
|
|
radioGroupRuleCheck.setOnCheckedChangeListener((group, checkedId) -> {
|
|
|
Log.d(TAG, String.valueOf(group));
|
|
|
Log.d(TAG, String.valueOf(checkedId));
|
|
|
if (group != null && checkedId > 0) {
|
|
|
if (group == radioGroupRuleCheck) {
|
|
|
radioGroupRuleCheck2.clearCheck();
|
|
|
} else if (group == radioGroupRuleCheck2) {
|
|
|
radioGroupRuleCheck.clearCheck();
|
|
|
}
|
|
|
group.check(checkedId);
|
|
|
}
|
|
|
});
|
|
|
radioGroupRuleCheck2.setOnCheckedChangeListener((group, checkedId) -> {
|
|
|
Log.d(TAG, String.valueOf(group));
|
|
|
Log.d(TAG, String.valueOf(checkedId));
|
|
|
if (group != null && checkedId > 0) {
|
|
|
if (group == radioGroupRuleCheck) {
|
|
|
radioGroupRuleCheck2.clearCheck();
|
|
|
} else if (group == radioGroupRuleCheck2) {
|
|
|
radioGroupRuleCheck.clearCheck();
|
|
|
}
|
|
|
group.check(checkedId);
|
|
|
}
|
|
|
});
|
|
|
radioGroupRuleFiled.setOnCheckedChangeListener((group, checkedId) -> {
|
|
|
Log.d(TAG, String.valueOf(group));
|
|
|
Log.d(TAG, String.valueOf(checkedId));
|
|
|
if (group == radioGroupRuleCheck) {
|
|
|
radioGroupRuleCheck2.clearCheck();
|
|
|
} else if (group == radioGroupRuleCheck2) {
|
|
|
radioGroupRuleCheck.clearCheck();
|
|
|
}
|
|
|
refreshSelectRadioGroupRuleFiledAction(checkedId, radioGroupRuleCheck, radioGroupRuleCheck2, editTextRuleValue, tv_mu_rule_tips, matchTypeLayout, matchValueLayout);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
@SuppressLint("NonConstantResourceId")
|
|
|
private void refreshSelectRadioGroupRuleFiledAction(int checkedRuleFiledId, final RadioGroup radioGroupRuleCheck, final RadioGroup radioGroupRuleCheck2, final EditText editTextRuleValue, final TextView tv_mu_rule_tips, final LinearLayout matchTypeLayout, final LinearLayout matchValueLayout) {
|
|
|
tv_mu_rule_tips.setVisibility(View.GONE);
|
|
|
matchTypeLayout.setVisibility(View.VISIBLE);
|
|
|
matchValueLayout.setVisibility(View.VISIBLE);
|
|
|
|
|
|
switch (checkedRuleFiledId) {
|
|
|
case R.id.btnTranspondAll:
|
|
|
for (int i = 0; i < radioGroupRuleCheck.getChildCount(); i++) {
|
|
|
radioGroupRuleCheck.getChildAt(i).setEnabled(false);
|
|
|
}
|
|
|
for (int i = 0; i < radioGroupRuleCheck2.getChildCount(); i++) {
|
|
|
radioGroupRuleCheck2.getChildAt(i).setEnabled(false);
|
|
|
}
|
|
|
editTextRuleValue.setEnabled(false);
|
|
|
matchTypeLayout.setVisibility(View.GONE);
|
|
|
matchValueLayout.setVisibility(View.GONE);
|
|
|
break;
|
|
|
case R.id.btnMultiMatch:
|
|
|
for (int i = 0; i < radioGroupRuleCheck.getChildCount(); i++) {
|
|
|
radioGroupRuleCheck.getChildAt(i).setEnabled(false);
|
|
|
}
|
|
|
for (int i = 0; i < radioGroupRuleCheck2.getChildCount(); i++) {
|
|
|
radioGroupRuleCheck2.getChildAt(i).setEnabled(false);
|
|
|
}
|
|
|
editTextRuleValue.setEnabled(true);
|
|
|
matchTypeLayout.setVisibility(View.GONE);
|
|
|
tv_mu_rule_tips.setVisibility(MyApplication.showHelpTip ? View.VISIBLE : View.GONE);
|
|
|
break;
|
|
|
default:
|
|
|
for (int i = 0; i < radioGroupRuleCheck.getChildCount(); i++) {
|
|
|
radioGroupRuleCheck.getChildAt(i).setEnabled(true);
|
|
|
}
|
|
|
for (int i = 0; i < radioGroupRuleCheck2.getChildCount(); i++) {
|
|
|
radioGroupRuleCheck2.getChildAt(i).setEnabled(true);
|
|
|
}
|
|
|
editTextRuleValue.setEnabled(true);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public void selectSender(final TextView showTv) {
|
|
|
final List<SenderModel> senderModels = SenderUtil.getSender(null, null);
|
|
|
if (senderModels.isEmpty()) {
|
|
|
ToastUtils.show(R.string.add_sender_first);
|
|
|
return;
|
|
|
}
|
|
|
final CharSequence[] senderNames = new CharSequence[senderModels.size()];
|
|
|
for (int i = 0; i < senderModels.size(); i++) {
|
|
|
senderNames[i] = senderModels.get(i).getName();
|
|
|
}
|
|
|
AlertDialog.Builder builder = new AlertDialog.Builder(RuleActivity.this);
|
|
|
builder.setTitle(R.string.select_sender);
|
|
|
//添加列表
|
|
|
builder.setItems(senderNames, (dialogInterface, which) -> {
|
|
|
//ToastUtils.delayedShow(senderNames[which], 3000);
|
|
|
showTv.setText(senderNames[which]);
|
|
|
showTv.setTag(senderModels.get(which).getId());
|
|
|
});
|
|
|
builder.show();
|
|
|
}
|
|
|
|
|
|
public void testRule(final RuleModel ruleModel, final Long senderId) {
|
|
|
final View view = View.inflate(RuleActivity.this, R.layout.alert_dialog_setview_rule_test, null);
|
|
|
final TextView textTestSimSlot = view.findViewById(R.id.textTestSimSlot);
|
|
|
final TextView textTestPhone = view.findViewById(R.id.textTestPhone);
|
|
|
final TextView textTestContent = view.findViewById(R.id.textTestContent);
|
|
|
final RadioGroup radioGroupTestSimSlot = view.findViewById(R.id.radioGroupTestSimSlot);
|
|
|
final EditText editTextTestPhone = view.findViewById(R.id.editTextTestPhone);
|
|
|
final EditText editTextTestMsgContent = view.findViewById(R.id.editTextTestMsgContent);
|
|
|
|
|
|
if ("app".equals(currentType)) {
|
|
|
textTestSimSlot.setVisibility(View.GONE);
|
|
|
radioGroupTestSimSlot.setVisibility(View.GONE);
|
|
|
textTestPhone.setText(R.string.test_package_name);
|
|
|
textTestContent.setText(R.string.test_inform_content);
|
|
|
} else if ("call".equals(currentType)) {
|
|
|
textTestContent.setVisibility(View.GONE);
|
|
|
editTextTestMsgContent.setVisibility(View.GONE);
|
|
|
}
|
|
|
|
|
|
Button buttonRuleTest = view.findViewById(R.id.buttonRuleTest);
|
|
|
AlertDialog.Builder ad1 = new AlertDialog.Builder(RuleActivity.this);
|
|
|
ad1.setTitle(R.string.rule_tester);
|
|
|
ad1.setIcon(android.R.drawable.ic_dialog_email);
|
|
|
ad1.setView(view);
|
|
|
buttonRuleTest.setOnClickListener(v -> {
|
|
|
|
|
|
Log.i("editTextTestPhone", editTextTestPhone.getText().toString().trim());
|
|
|
Log.i("editTextTestMsgContent", editTextTestMsgContent.getText().toString().trim());
|
|
|
|
|
|
try {
|
|
|
String simSlot = RuleModel.getRuleSimSlotFromCheckId(radioGroupTestSimSlot.getCheckedRadioButtonId());
|
|
|
String simInfo;
|
|
|
if (simSlot.equals("SIM2")) {
|
|
|
simInfo = simSlot + "_" + SettingUtils.getAddExtraSim2();
|
|
|
} else {
|
|
|
simInfo = simSlot + "_" + SettingUtils.getAddExtraSim1();
|
|
|
}
|
|
|
SmsVo testSmsVo = new SmsVo(editTextTestPhone.getText().toString().trim(), editTextTestMsgContent.getText().toString().trim(), new Date(), simInfo);
|
|
|
SendUtil.sendMsgByRuleModelSenderId(handler, ruleModel, testSmsVo, senderId);
|
|
|
} catch (Exception e) {
|
|
|
ToastUtils.delayedShow(e.getMessage(), 3000);
|
|
|
}
|
|
|
});
|
|
|
ad1.show();// 显示对话框
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
protected void onDestroy() {
|
|
|
Log.d(TAG, "onDestroy");
|
|
|
super.onDestroy();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
protected void onPause() {
|
|
|
overridePendingTransition(0, 0);
|
|
|
super.onPause();
|
|
|
}
|
|
|
|
|
|
private int checkRegexReplace(String regexReplace) {
|
|
|
if (regexReplace == null || regexReplace.isEmpty()) return 0;
|
|
|
|
|
|
int lineNum = 1;
|
|
|
String[] lineArray = regexReplace.split("\\n");
|
|
|
for (String line : lineArray) {
|
|
|
int position = line.indexOf("===");
|
|
|
if (position < 1) return lineNum;
|
|
|
lineNum++;
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
}
|