malsony 3 years ago
commit d6de5644f2

@ -87,8 +87,9 @@ public class RuleActivity extends AppCompatActivity {
listView.setOnItemClickListener((parent, view, position, id) -> {
RuleModel ruleModel = ruleModels.get(position);
Log.d(TAG, "onItemClick: " + ruleModel);
setRule(ruleModel);
setRule(ruleModel, false);
});
listView.setOnItemLongClickListener((parent, view, position, id) -> {
//定义AlertDialog.Builder对象当长按列表项的时候弹出确认删除对话框
AlertDialog.Builder builder = new AlertDialog.Builder(RuleActivity.this);
@ -103,6 +104,17 @@ public class RuleActivity extends AppCompatActivity {
Toast.makeText(getBaseContext(), R.string.delete_rule_toast, Toast.LENGTH_SHORT).show();
});
//添加AlertDialog.Builder对象的setNegativeButton()方法
builder.setNeutralButton(R.string.clone, (dialog, which) -> {
RuleModel ruleModel = ruleModels.get(position);
//TODO:直接复制
//RuleUtil.addRule(ruleModel);
//initRules();
//adapter.add(ruleModels);
//TODO:只复制到编辑对话框
setRule(ruleModel, true);
});
//添加AlertDialog.Builder对象的setNegativeButton()方法
builder.setNegativeButton(R.string.cancel, (dialog, which) -> {
@ -169,10 +181,10 @@ public class RuleActivity extends AppCompatActivity {
final RadioGroup radioGroupTypeCheck = findViewById(R.id.radioGroupTypeCheck);
radioGroupTypeCheck.check(typeCheckId);
setRule(null);
setRule(null, false);
}
private void setRule(final RuleModel ruleModel) {
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);
@ -260,7 +272,7 @@ public class RuleActivity extends AppCompatActivity {
int radioGroupRuleCheckId = Math.max(radioGroupRuleCheck.getCheckedRadioButtonId(), radioGroupRuleCheck2.getCheckedRadioButtonId());
Log.d(TAG, radioGroupRuleCheck.getCheckedRadioButtonId() + " " + radioGroupRuleCheck2.getCheckedRadioButtonId() + " " + radioGroupRuleCheckId);
if (ruleModel == null) {
if (isClone || ruleModel == null) {
RuleModel newRuleModel = new RuleModel();
newRuleModel.setType(currentType);
newRuleModel.setFiled(RuleModel.getRuleFiledFromCheckId(radioGroupRuleFiled.getCheckedRadioButtonId()));

@ -117,37 +117,37 @@ public class SenderActivity extends AppCompatActivity {
switch (senderModel.getType()) {
case TYPE_DINGDING:
setDingDing(senderModel);
setDingDing(senderModel, false);
break;
case TYPE_EMAIL:
setEmail(senderModel);
setEmail(senderModel, false);
break;
case TYPE_BARK:
setBark(senderModel);
setBark(senderModel, false);
break;
case TYPE_WEB_NOTIFY:
setWebNotify(senderModel);
setWebNotify(senderModel, false);
break;
case TYPE_QYWX_GROUP_ROBOT:
setQYWXGroupRobot(senderModel);
setQYWXGroupRobot(senderModel, false);
break;
case TYPE_QYWX_APP:
setQYWXApp(senderModel);
setQYWXApp(senderModel, false);
break;
case TYPE_SERVER_CHAN:
setServerChan(senderModel);
setServerChan(senderModel, false);
break;
case TYPE_TELEGRAM:
setTelegram(senderModel);
setTelegram(senderModel, false);
break;
case TYPE_SMS:
setSms(senderModel);
setSms(senderModel, false);
break;
case TYPE_FEISHU:
setFeiShu(senderModel);
setFeiShu(senderModel, false);
break;
case TYPE_PUSHPLUS:
setPushPlus(senderModel);
setPushPlus(senderModel, false);
break;
default:
Toast.makeText(SenderActivity.this, R.string.invalid_sender, Toast.LENGTH_LONG).show();
@ -173,6 +173,51 @@ public class SenderActivity extends AppCompatActivity {
Toast.makeText(getBaseContext(), R.string.delete_sender_toast, Toast.LENGTH_SHORT).show();
});
builder.setNeutralButton(R.string.clone, (dialog, which) -> {
SenderModel senderModel = senderModels.get(position);
switch (senderModel.getType()) {
case TYPE_DINGDING:
setDingDing(senderModel, true);
break;
case TYPE_EMAIL:
setEmail(senderModel, true);
break;
case TYPE_BARK:
setBark(senderModel, true);
break;
case TYPE_WEB_NOTIFY:
setWebNotify(senderModel, true);
break;
case TYPE_QYWX_GROUP_ROBOT:
setQYWXGroupRobot(senderModel, true);
break;
case TYPE_QYWX_APP:
setQYWXApp(senderModel, true);
break;
case TYPE_SERVER_CHAN:
setServerChan(senderModel, true);
break;
case TYPE_TELEGRAM:
setTelegram(senderModel, true);
break;
case TYPE_SMS:
setSms(senderModel, true);
break;
case TYPE_FEISHU:
setFeiShu(senderModel, true);
break;
case TYPE_PUSHPLUS:
setPushPlus(senderModel, true);
break;
default:
Toast.makeText(SenderActivity.this, R.string.invalid_sender, Toast.LENGTH_LONG).show();
SenderUtil.delSender(senderModel.getId());
initSenders();
adapter.del(senderModels);
break;
}
});
//添加AlertDialog.Builder对象的setNegativeButton()方法
builder.setNegativeButton(R.string.cancel, (dialog, which) -> {
@ -195,37 +240,37 @@ public class SenderActivity extends AppCompatActivity {
builder.setItems(R.array.add_sender_menu, (dialogInterface, which) -> {
switch (which) {
case TYPE_DINGDING:
setDingDing(null);
setDingDing(null, false);
break;
case TYPE_EMAIL:
setEmail(null);
setEmail(null, false);
break;
case TYPE_BARK:
setBark(null);
setBark(null, false);
break;
case TYPE_WEB_NOTIFY:
setWebNotify(null);
setWebNotify(null, false);
break;
case TYPE_QYWX_GROUP_ROBOT:
setQYWXGroupRobot(null);
setQYWXGroupRobot(null, false);
break;
case TYPE_QYWX_APP:
setQYWXApp(null);
setQYWXApp(null, false);
break;
case TYPE_SERVER_CHAN:
setServerChan(null);
setServerChan(null, false);
break;
case TYPE_TELEGRAM:
setTelegram(null);
setTelegram(null, false);
break;
case TYPE_SMS:
setSms(null);
setSms(null, false);
break;
case TYPE_FEISHU:
setFeiShu(null);
setFeiShu(null, false);
break;
case TYPE_PUSHPLUS:
setPushPlus(null);
setPushPlus(null, false);
break;
default:
Toast.makeText(SenderActivity.this, R.string.not_supported, Toast.LENGTH_LONG).show();
@ -238,7 +283,7 @@ public class SenderActivity extends AppCompatActivity {
//钉钉机器人
@SuppressLint("SimpleDateFormat")
private void setDingDing(final SenderModel senderModel) {
private void setDingDing(final SenderModel senderModel, final boolean isClone) {
DingDingSettingVo dingDingSettingVo = null;
//try phrase json setting
if (senderModel != null) {
@ -277,7 +322,7 @@ public class SenderActivity extends AppCompatActivity {
final AlertDialog show = alertDialog71.show();
buttonDingdingOk.setOnClickListener(view -> {
if (senderModel == null) {
if (isClone || senderModel == null) {
SenderModel newSenderModel = new SenderModel();
newSenderModel.setName(editTextDingdingName.getText().toString().trim());
newSenderModel.setType(TYPE_DINGDING);
@ -339,7 +384,7 @@ public class SenderActivity extends AppCompatActivity {
//邮箱
@SuppressLint("SimpleDateFormat")
private void setEmail(final SenderModel senderModel) {
private void setEmail(final SenderModel senderModel, final boolean isClone) {
EmailSettingVo emailSettingVo = null;
//try phrase json setting
if (senderModel != null) {
@ -407,7 +452,7 @@ public class SenderActivity extends AppCompatActivity {
EmailSettingVo emailSettingVoNew = new EmailSettingVo(protocol, host, port, ssl, fromEmail, nickname, pwd, toEmail, title);
if (senderModel == null) {
if (isClone || senderModel == null) {
SenderModel newSenderModel = new SenderModel();
newSenderModel.setName(editTextEmailName.getText().toString().trim());
newSenderModel.setType(TYPE_EMAIL);
@ -495,7 +540,7 @@ public class SenderActivity extends AppCompatActivity {
}
//Bark
private void setBark(final SenderModel senderModel) {
private void setBark(final SenderModel senderModel, final boolean isClone) {
BarkSettingVo barkSettingVo = null;
//try phrase json setting
if (senderModel != null) {
@ -527,7 +572,7 @@ public class SenderActivity extends AppCompatActivity {
buttonBarkOk.setOnClickListener(view -> {
if (senderModel == null) {
if (isClone || senderModel == null) {
SenderModel newSenderModel = new SenderModel();
newSenderModel.setName(editTextBarkName.getText().toString().trim());
newSenderModel.setType(TYPE_BARK);
@ -582,7 +627,7 @@ public class SenderActivity extends AppCompatActivity {
}
//Server酱·Turbo版
private void setServerChan(final SenderModel senderModel) {
private void setServerChan(final SenderModel senderModel, final boolean isClone) {
ServerChanSettingVo serverchanSettingVo = null;
//try phrase json setting
if (senderModel != null) {
@ -613,7 +658,7 @@ public class SenderActivity extends AppCompatActivity {
buttonServerChanOk.setOnClickListener(view -> {
if (senderModel == null) {
if (isClone || senderModel == null) {
SenderModel newSenderModel = new SenderModel();
newSenderModel.setName(editTextServerChanName.getText().toString().trim());
newSenderModel.setType(TYPE_SERVER_CHAN);
@ -666,7 +711,7 @@ public class SenderActivity extends AppCompatActivity {
//webhook
@SuppressLint("SimpleDateFormat")
private void setWebNotify(final SenderModel senderModel) {
private void setWebNotify(final SenderModel senderModel, final boolean isClone) {
WebNotifySettingVo webNotifySettingVo = null;
//try phrase json setting
if (senderModel != null) {
@ -707,7 +752,7 @@ public class SenderActivity extends AppCompatActivity {
(radioGroupWebNotifyMethod.getCheckedRadioButtonId() == R.id.radioWebNotifyMethodGet ? "GET" : "POST"),
editTextWebNotifyWebParams.getText().toString().trim()
);
if (senderModel == null) {
if (isClone || senderModel == null) {
SenderModel newSenderModel = new SenderModel();
newSenderModel.setName(editTextWebNotifyName.getText().toString().trim());
newSenderModel.setType(TYPE_WEB_NOTIFY);
@ -753,7 +798,7 @@ public class SenderActivity extends AppCompatActivity {
//企业微信群机器人
@SuppressLint("SimpleDateFormat")
private void setQYWXGroupRobot(final SenderModel senderModel) {
private void setQYWXGroupRobot(final SenderModel senderModel, final boolean isClone) {
QYWXGroupRobotSettingVo qywxGroupRobotSettingVo = null;
//try phrase json setting
if (senderModel != null) {
@ -784,7 +829,7 @@ public class SenderActivity extends AppCompatActivity {
buttonQyWxGroupRobotOk.setOnClickListener(view -> {
if (senderModel == null) {
if (isClone || senderModel == null) {
SenderModel newSenderModel = new SenderModel();
newSenderModel.setName(editTextQYWXGroupRobotName.getText().toString().trim());
newSenderModel.setType(TYPE_QYWX_GROUP_ROBOT);
@ -837,7 +882,7 @@ public class SenderActivity extends AppCompatActivity {
//企业微信应用
@SuppressLint({"SimpleDateFormat", "SetTextI18n"})
private void setQYWXApp(final SenderModel senderModel) {
private void setQYWXApp(final SenderModel senderModel, final boolean isClone) {
QYWXAppSettingVo QYWXAppSettingVo = null;
//try phrase json setting
if (senderModel != null) {
@ -895,7 +940,7 @@ public class SenderActivity extends AppCompatActivity {
return;
}
if (senderModel == null) {
if (isClone || senderModel == null) {
SenderModel newSenderModel = new SenderModel();
newSenderModel.setName(editTextQYWXAppName.getText().toString().trim());
newSenderModel.setType(TYPE_QYWX_APP);
@ -959,7 +1004,7 @@ public class SenderActivity extends AppCompatActivity {
}
//Telegram机器人
private void setTelegram(final SenderModel senderModel) {
private void setTelegram(final SenderModel senderModel, final boolean isClone) {
TelegramSettingVo telegramSettingVo = null;
//try phrase json setting
if (senderModel != null) {
@ -1044,7 +1089,7 @@ public class SenderActivity extends AppCompatActivity {
buttonTelegramOk.setOnClickListener(view -> {
if (senderModel == null) {
if (isClone || senderModel == null) {
SenderModel newSenderModel = new SenderModel();
newSenderModel.setName(editTextTelegramName.getText().toString().trim());
newSenderModel.setType(TYPE_TELEGRAM);
@ -1122,7 +1167,7 @@ public class SenderActivity extends AppCompatActivity {
}
//短信
private void setSms(final SenderModel senderModel) {
private void setSms(final SenderModel senderModel, final boolean isClone) {
SmsSettingVo smsSettingVo = null;
//try phrase json setting
if (senderModel != null) {
@ -1157,7 +1202,7 @@ public class SenderActivity extends AppCompatActivity {
buttonSmsOk.setOnClickListener(view -> {
if (senderModel == null) {
if (isClone || senderModel == null) {
SenderModel newSenderModel = new SenderModel();
newSenderModel.setName(editTextSmsName.getText().toString().trim());
newSenderModel.setType(TYPE_SMS);
@ -1219,7 +1264,7 @@ public class SenderActivity extends AppCompatActivity {
//飞书机器人
@SuppressLint("SimpleDateFormat")
private void setFeiShu(final SenderModel senderModel) {
private void setFeiShu(final SenderModel senderModel, final boolean isClone) {
FeiShuSettingVo feiShuSettingVo = null;
//try phrase json setting
if (senderModel != null) {
@ -1252,7 +1297,7 @@ public class SenderActivity extends AppCompatActivity {
final AlertDialog show = alertDialog71.show();
buttonFeishuOk.setOnClickListener(view -> {
if (senderModel == null) {
if (isClone || senderModel == null) {
SenderModel newSenderModel = new SenderModel();
newSenderModel.setName(editTextFeishuName.getText().toString().trim());
newSenderModel.setType(TYPE_FEISHU);
@ -1306,7 +1351,7 @@ public class SenderActivity extends AppCompatActivity {
//推送加
@SuppressLint("SimpleDateFormat")
private void setPushPlus(final SenderModel senderModel) {
private void setPushPlus(final SenderModel senderModel, final boolean isClone) {
PushPlusSettingVo pushPlusSettingVo = null;
//try phrase json setting
if (senderModel != null) {
@ -1349,7 +1394,7 @@ public class SenderActivity extends AppCompatActivity {
final AlertDialog show = alertDialog71.show();
buttonPushPlusOk.setOnClickListener(view -> {
if (senderModel == null) {
if (isClone || senderModel == null) {
SenderModel newSenderModel = new SenderModel();
newSenderModel.setName(editTextPushPlusName.getText().toString().trim());
newSenderModel.setType(TYPE_PUSHPLUS);

@ -1,6 +1,6 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="app_name">SmsForwarder</string>
<string name="notification_content">Forward SMS (and others!) to another app/device, a must-have for anyone's secondary smartphone. Free and open source, do NOT buy or sell this App.</string>
<string name="notification_content">Forward SMS (and others!) to another app/device, a must-have for anyones\' secondary smartphone. Free and open source, do NOT buy or sell this App.</string>
<!--Common-->
<string name="ok">OK</string>
<string name="cancel">Cancel</string>
@ -146,7 +146,7 @@
<string name="ServerChanSendKey">ServerChan\'s SendKey</string>
<string name="TelegramApiToken">ApiToken or Custom address</string>
<string name="TelegramChatId">ChatId</string>
<string name="WebNotifyMethod" formatted="false">Method</string>
<string name="WebNotifyMethod">Method</string>
<string name="WebNotifyWebServer">WebServer e.g. https://a.b.com/msg?token=xyz</string>
<string name="WebNotifyWebParams">WebParams e.g. payload=%7B%22text%22%3A%22[msg]%22%7D [msg] will be replaced with text message content. \nSupport Json format, for example: {"text":[MSG]}.\n Note: MSG is automatically utF-8 encoded in addition to JSON format</string>
<string name="WebNotifySecret">Secret (sign is not counted if left blank)</string>
@ -233,7 +233,7 @@
<string name="user_app">User App</string>
<string name="system_app">System App</string>
<string name="tips_battery_optimization">Please deactivate power optimization for SmsForwarder, in order to keep the App alive!</string>
<string name="tips_notification_listener">Please grant Notification reading permission to SmsForwarder, before other Apps' notification could be forwarded. Forwarding automatically canceled!</string>
<string name="tips_notification_listener">Please grant Notification reading permission to SmsForwarder, before other Apps\' notification could be forwarded. Forwarding automatically canceled!</string>
<string name="notification_listener_service_enabled">The notification service is enabled</string>
<string name="notification_listener_service_disabled">The notification service is disabled</string>
<string name="pushplus_token">Token</string>

@ -17,8 +17,8 @@
<string name="sender_setting">发送通道</string>
<string name="app_list">应用列表</string>
<string name="log_tips">提示:置顶下拉刷新,长按删除单条,选项卡切换日志类型</string>
<string name="rule_tips">提示:新建规则点击“添加”,长按删除/点击编辑已有</string>
<string name="sender_tips">提示:新建发送通道点击“添加”,长按删除/点击编辑已有</string>
<string name="rule_tips">提示:新建规则点击“添加”,长按删除/克隆,点击编辑已有</string>
<string name="sender_tips">提示:新建发送通道点击“添加”,长按删除/克隆,点击编辑已有</string>
<string name="app_tips">提示点击复制APP的包名长按则启动并跳转该APP</string>
<!--AboutActivity-->
<string name="version">当前版本</string>
@ -52,7 +52,7 @@
<string name="setrule">设置短信转发规则</string>
<string name="setrule_call">设置来电转发规则</string>
<string name="setrule_app">设置APP通知转发规则</string>
<string name="delete_rule_title">规则删除确认</string>
<string name="delete_rule_title">转发规则操作确认</string>
<string name="delete_rule_tips">确定删除该条规则?</string>
<string name="delete_rule_toast">该条规则已经删除!</string>
<string name="new_sender_first">请选择发送通道(若无,请先添加)</string>
@ -84,7 +84,7 @@
<string name="match_value">设置匹配的值</string>
<!--SenderActivity-->
<string name="invalid_sender">异常的发送通道类型,自动删除!</string>
<string name="delete_sender_title">发送通道删除确认</string>
<string name="delete_sender_title">发送通道操作确认</string>
<string name="delete_sender_tips">确定删除该条发送通道?</string>
<string name="delete_sender_toast">该条发送通道已经删除!</string>
<string name="add_sender_title">选择发送通道类型</string>
@ -146,7 +146,7 @@
<string name="ServerChanSendKey">设置Server酱·Turbo版的SendKey</string>
<string name="TelegramApiToken">设置Telegram机器人的ApiToken 或 自定义地址(http开头)</string>
<string name="TelegramChatId">设置被通知人(或群组)的ChatId</string>
<string name="WebNotifyMethod" formatted="false">请求方式</string>
<string name="WebNotifyMethod">请求方式</string>
<string name="WebNotifyWebServer">设置WebServer例如https://a.b.com/msg?token=xyz</string>
<string name="WebNotifyWebParams">设置WebParams例如payload=%7B%22text%22%3A%22[msg]%22%7D [msg]将被替换成短信内容。\n支持Json格式例如{"text":[msg]}。\n注意除JSON格式外msg会自动进行UTF-8编码</string>
<string name="WebNotifySecret">设置Secret:置空则不计算sign</string>

Loading…
Cancel
Save