You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
SmsForwarder/app/src/main/java/com/idormy/sms/forwarder/SenderActivity.java

2213 lines
107 KiB
Java

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.idormy.sms.forwarder;
import static com.idormy.sms.forwarder.model.SenderModel.STATUS_OFF;
import static com.idormy.sms.forwarder.model.SenderModel.STATUS_ON;
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_BARK;
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_DINGDING;
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_EMAIL;
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_FEISHU;
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_GOTIFY;
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_PUSHPLUS;
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_QYWX_APP;
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_QYWX_GROUP_ROBOT;
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_SERVER_CHAN;
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_SMS;
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_TELEGRAM;
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_WEB_NOTIFY;
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.SpannedString;
import android.text.TextUtils;
import android.text.style.AbsoluteSizeSpan;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RadioGroup;
import android.widget.SimpleAdapter;
import android.widget.Spinner;
import android.widget.Switch;
import androidx.appcompat.app.AlertDialog;
import com.alibaba.fastjson.JSON;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.hjq.permissions.OnPermissionCallback;
import com.hjq.permissions.Permission;
import com.hjq.permissions.XXPermissions;
import com.hjq.toast.ToastUtils;
import com.idormy.sms.forwarder.adapter.SenderAdapter;
import com.idormy.sms.forwarder.model.SenderModel;
import com.idormy.sms.forwarder.model.vo.BarkSettingVo;
import com.idormy.sms.forwarder.model.vo.DingDingSettingVo;
import com.idormy.sms.forwarder.model.vo.EmailSettingVo;
import com.idormy.sms.forwarder.model.vo.FeiShuSettingVo;
import com.idormy.sms.forwarder.model.vo.GotifySettingVo;
import com.idormy.sms.forwarder.model.vo.PushPlusSettingVo;
import com.idormy.sms.forwarder.model.vo.QYWXAppSettingVo;
import com.idormy.sms.forwarder.model.vo.QYWXGroupRobotSettingVo;
import com.idormy.sms.forwarder.model.vo.ServerChanSettingVo;
import com.idormy.sms.forwarder.model.vo.SmsSettingVo;
import com.idormy.sms.forwarder.model.vo.SmsVo;
import com.idormy.sms.forwarder.model.vo.TelegramSettingVo;
import com.idormy.sms.forwarder.model.vo.WebNotifySettingVo;
import com.idormy.sms.forwarder.sender.SenderBarkMsg;
import com.idormy.sms.forwarder.sender.SenderDingdingMsg;
import com.idormy.sms.forwarder.sender.SenderFeishuMsg;
import com.idormy.sms.forwarder.sender.SenderGotifyMsg;
import com.idormy.sms.forwarder.sender.SenderMailMsg;
import com.idormy.sms.forwarder.sender.SenderPushPlusMsg;
import com.idormy.sms.forwarder.sender.SenderQyWxAppMsg;
import com.idormy.sms.forwarder.sender.SenderQyWxGroupRobotMsg;
import com.idormy.sms.forwarder.sender.SenderServerChanMsg;
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.idormy.sms.forwarder.utils.CommonUtils;
import com.idormy.sms.forwarder.utils.LogUtils;
import com.idormy.sms.forwarder.utils.RuleUtils;
import com.idormy.sms.forwarder.view.ClearEditText;
import com.idormy.sms.forwarder.view.StepBar;
import java.net.Proxy;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@SuppressWarnings("deprecation")
public class SenderActivity extends BaseActivity {
public static final int NOTIFY = 0x9731993;
private final String TAG = "SenderActivity";
//消息处理者,创建一个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);
}
}
};
// 用于存储数据
private List<SenderModel> senderModels = new ArrayList<>();
private SenderAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "onCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sender);
LogUtils.init(this);
RuleUtils.init(this);
SenderUtil.init(this);
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "onStart");
// 先拿到数据并放在适配器上
initSenders(); //初始化数据
adapter = new SenderAdapter(SenderActivity.this, R.layout.item_sender, senderModels);
// 将适配器上的数据传递给listView
ListView listView = findViewById(R.id.list_view_sender);
listView.setAdapter(adapter);
// 为ListView注册一个监听器当用户点击了ListView中的任何一个子项时就会回调onItemClick()方法
// 在这个方法中可以通过position参数判断出用户点击的是那一个子项
listView.setOnItemClickListener((parent, view, position, id) -> {
SenderModel senderModel = senderModels.get(position);
Log.d(TAG, "onItemClick: " + senderModel);
switch (senderModel.getType()) {
case TYPE_DINGDING:
setDingDing(senderModel, false);
break;
case TYPE_EMAIL:
setEmail(senderModel, false);
break;
case TYPE_BARK:
setBark(senderModel, false);
break;
case TYPE_WEB_NOTIFY:
setWebNotify(senderModel, false);
break;
case TYPE_QYWX_GROUP_ROBOT:
setQYWXGroupRobot(senderModel, false);
break;
case TYPE_QYWX_APP:
setQYWXApp(senderModel, false);
break;
case TYPE_SERVER_CHAN:
setServerChan(senderModel, false);
break;
case TYPE_TELEGRAM:
setTelegram(senderModel, false);
break;
case TYPE_SMS:
setSms(senderModel, false);
break;
case TYPE_FEISHU:
setFeiShu(senderModel, false);
break;
case TYPE_PUSHPLUS:
setPushPlus(senderModel, false);
break;
case TYPE_GOTIFY:
setGotify(senderModel, false);
break;
default:
ToastUtils.delayedShow(R.string.invalid_sender, 3000);
SenderUtil.delSender(senderModel.getId());
initSenders();
adapter.del(senderModels);
break;
}
});
listView.setOnItemLongClickListener((parent, view, position, id) -> {
//定义AlertDialog.Builder对象当长按列表项的时候弹出确认删除对话框
AlertDialog.Builder builder = new AlertDialog.Builder(SenderActivity.this);
builder.setTitle(R.string.delete_sender_title);
builder.setMessage(R.string.delete_sender_tips);
//添加AlertDialog.Builder对象的setPositiveButton()方法
builder.setPositiveButton(R.string.confirm, (dialog, which) -> {
SenderUtil.delSender(senderModels.get(position).getId());
initSenders();
adapter.del(senderModels);
ToastUtils.show(R.string.delete_sender_toast);
});
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;
case TYPE_GOTIFY:
setGotify(senderModel, true);
break;
default:
ToastUtils.delayedShow(R.string.invalid_sender, 3000);
SenderUtil.delSender(senderModel.getId());
initSenders();
adapter.del(senderModels);
break;
}
});
//添加AlertDialog.Builder对象的setNegativeButton()方法
builder.setNegativeButton(R.string.cancel, (dialog, which) -> {
});
builder.create().show();
return true;
});
//计算浮动按钮位置
FloatingActionButton btnFloat = findViewById(R.id.btnAddSender);
CommonUtils.calcMarginBottom(this, btnFloat, listView, null);
//添加发送通道
btnFloat.setOnClickListener(v -> {
@SuppressLint("InflateParams") View dialog_menu = LayoutInflater.from(SenderActivity.this).inflate(R.layout.alert_dialog_menu, null);
// 设置style 控制默认dialog带来的边距问题
final Dialog dialog = new Dialog(this, R.style.dialog_menu);
dialog.setContentView(dialog_menu);
dialog.show();
GridView gridview = dialog.findViewById(R.id.MemuGridView);
final List<HashMap<String, Object>> item = getMenuData();
SimpleAdapter simpleAdapter = new SimpleAdapter(this, item, R.layout.item_menu, new String[]{"ItemImageView", "ItemTextView"}, new int[]{R.id.ItemImageView, R.id.ItemTextView});
gridview.setAdapter(simpleAdapter);
// 添加点击事件
gridview.setOnItemClickListener((arg0, arg1, position, arg3) -> {
dialog.dismiss();
switch (position) {
case TYPE_DINGDING:
setDingDing(null, false);
break;
case TYPE_EMAIL:
setEmail(null, false);
break;
case TYPE_BARK:
setBark(null, false);
break;
case TYPE_WEB_NOTIFY:
setWebNotify(null, false);
break;
case TYPE_QYWX_GROUP_ROBOT:
setQYWXGroupRobot(null, false);
break;
case TYPE_QYWX_APP:
setQYWXApp(null, false);
break;
case TYPE_SERVER_CHAN:
setServerChan(null, false);
break;
case TYPE_TELEGRAM:
setTelegram(null, false);
break;
case TYPE_SMS:
setSms(null, false);
break;
case TYPE_FEISHU:
setFeiShu(null, false);
break;
case TYPE_PUSHPLUS:
setPushPlus(null, false);
break;
case TYPE_GOTIFY:
setGotify(null, false);
break;
default:
ToastUtils.delayedShow(R.string.not_supported, 3000);
break;
}
});
});
//步骤完成状态校验
StepBar stepBar = findViewById(R.id.stepBar);
stepBar.setHighlight();
}
@Override
protected void onDestroy() {
Log.d(TAG, "onDestroy");
super.onDestroy();
}
@Override
protected void onPause() {
overridePendingTransition(0, 0);
super.onPause();
}
// 初始化数据
private void initSenders() {
senderModels = SenderUtil.getSender(null, null);
}
// 获取发送通道菜单
private List<HashMap<String, Object>> getMenuData() {
//定义图标数组
int[] imageRes = {
R.mipmap.dingding,
R.mipmap.email,
R.mipmap.bark,
R.mipmap.webhook,
R.mipmap.qywx,
R.mipmap.qywxapp,
R.mipmap.serverchan,
R.mipmap.telegram,
R.mipmap.sms,
R.mipmap.feishu,
R.mipmap.pushplus,
R.mipmap.gotify,
};
//定义标题数组
String[] itemName = {
getString(R.string.dingding),
getString(R.string.email),
getString(R.string.bark),
getString(R.string.webhook),
getString(R.string.qywx),
getString(R.string.qywxapp),
getString(R.string.serverchan),
getString(R.string.telegram),
getString(R.string.sms_menu),
getString(R.string.feishu),
getString(R.string.pushplus),
getString(R.string.gotify),
};
List<HashMap<String, Object>> data = new ArrayList<>();
int length = itemName.length;
for (int i = 0; i < length; i++) {
HashMap<String, Object> map = new HashMap<>();
map.put("ItemImageView", imageRes[i]);
map.put("ItemTextView", itemName[i]);
data.add(map);
}
return data;
}
//钉钉机器人
@SuppressLint({"SimpleDateFormat", "SetTextI18n"})
private void setDingDing(final SenderModel senderModel, final boolean isClone) {
DingDingSettingVo dingDingSettingVo = null;
if (senderModel != null) {
String jsonSettingStr = senderModel.getJsonSetting();
if (jsonSettingStr != null) {
dingDingSettingVo = JSON.parseObject(jsonSettingStr, DingDingSettingVo.class);
}
}
final AlertDialog.Builder alertDialog71 = new AlertDialog.Builder(SenderActivity.this);
View view1 = View.inflate(SenderActivity.this, R.layout.alert_dialog_setview_dingding, null);
final EditText editTextDingdingName = view1.findViewById(R.id.editTextDingdingName);
@SuppressLint("UseSwitchCompatOrMaterialCode") final Switch switchDingdingEnable = view1.findViewById(R.id.switchDingdingEnable);
if (senderModel != null) {
editTextDingdingName.setText(senderModel.getName());
switchDingdingEnable.setChecked(senderModel.getStatusChecked());
}
final ClearEditText editTextDingdingToken = view1.findViewById(R.id.editTextDingdingToken);
final ClearEditText editTextDingdingSecret = view1.findViewById(R.id.editTextDingdingSecret);
final EditText editTextDingdingAtMobiles = view1.findViewById(R.id.editTextDingdingAtMobiles);
@SuppressLint("UseSwitchCompatOrMaterialCode") final Switch switchDingdingAtAll = view1.findViewById(R.id.switchDingdingAtAll);
final LinearLayout linearLayoutDingdingAtMobiles = view1.findViewById(R.id.linearLayoutDingdingAtMobiles);
if (dingDingSettingVo != null) {
editTextDingdingToken.setText(dingDingSettingVo.getToken());
editTextDingdingSecret.setText(dingDingSettingVo.getSecret());
editTextDingdingAtMobiles.setText(dingDingSettingVo.getAtMobiles());
if (dingDingSettingVo.getAtAll() != null) {
switchDingdingAtAll.setChecked(dingDingSettingVo.getAtAll());
linearLayoutDingdingAtMobiles.setVisibility(dingDingSettingVo.getAtAll() ? View.GONE : View.VISIBLE);
}
}
switchDingdingAtAll.setOnCheckedChangeListener((buttonView, isChecked) -> {
if (isChecked) {
linearLayoutDingdingAtMobiles.setVisibility(View.GONE);
editTextDingdingAtMobiles.setText("@all");
} else {
linearLayoutDingdingAtMobiles.setVisibility(View.VISIBLE);
editTextDingdingAtMobiles.setText("");
}
Log.d(TAG, "onCheckedChanged:" + isChecked);
});
Button buttonOk = view1.findViewById(R.id.buttonOk);
Button buttonDel = view1.findViewById(R.id.buttonDel);
buttonDel.setText(senderModel != null ? R.string.del : R.string.cancel);
Button buttonTest = view1.findViewById(R.id.buttonTest);
alertDialog71
.setTitle(R.string.setdingdingtitle)
.setIcon(R.mipmap.dingding)
.setView(view1)
.create();
final AlertDialog show = alertDialog71.show();
buttonOk.setOnClickListener(view -> {
String senderName = editTextDingdingName.getText().toString().trim();
int senderStatus = switchDingdingEnable.isChecked() ? STATUS_ON : STATUS_OFF;
String token = editTextDingdingToken.getText().trim();
String secret = editTextDingdingSecret.getText().trim();
String atMobiles = editTextDingdingAtMobiles.getText().toString().trim();
Boolean atAll = switchDingdingAtAll.isChecked();
if (TextUtils.isEmpty(senderName)) {
ToastUtils.delayedShow(R.string.invalid_name, 3000);
return;
}
if (CommonUtils.checkUrl(token, true)) {
ToastUtils.delayedShow(R.string.invalid_token, 3000);
return;
}
DingDingSettingVo dingDingSettingVoNew = new DingDingSettingVo(token, secret, atMobiles, atAll);
if (isClone || senderModel == null) {
SenderModel newSenderModel = new SenderModel();
newSenderModel.setName(senderName);
newSenderModel.setType(TYPE_DINGDING);
newSenderModel.setStatus(senderStatus);
newSenderModel.setJsonSetting(JSON.toJSONString(dingDingSettingVoNew));
SenderUtil.addSender(newSenderModel);
initSenders();
adapter.add(senderModels);
} else {
senderModel.setName(senderName);
senderModel.setType(TYPE_DINGDING);
senderModel.setStatus(senderStatus);
senderModel.setJsonSetting(JSON.toJSONString(dingDingSettingVoNew));
SenderUtil.updateSender(senderModel);
initSenders();
adapter.update(senderModels);
}
show.dismiss();
});
buttonDel.setOnClickListener(view -> {
if (senderModel != null) {
SenderUtil.delSender(senderModel.getId());
initSenders();
adapter.del(senderModels);
}
show.dismiss();
});
buttonTest.setOnClickListener(view -> {
String token = editTextDingdingToken.getText().trim();
if (CommonUtils.checkUrl(token, true)) {
ToastUtils.delayedShow(R.string.invalid_token, 3000);
return;
}
String secret = editTextDingdingSecret.getText().trim();
String atMobiles = editTextDingdingAtMobiles.getText().toString().trim();
Boolean atAll = switchDingdingAtAll.isChecked();
try {
SmsVo smsVo = new SmsVo(getString(R.string.test_phone_num), getString(R.string.test_sender_sms), new Date(), getString(R.string.test_sim_info));
SenderDingdingMsg.sendMsg(0, handler, null, token, secret, atMobiles, atAll, smsVo.getSmsVoForSend());
} catch (Exception e) {
ToastUtils.delayedShow(getString(R.string.failed_to_fwd) + e.getMessage(), 3000);
e.printStackTrace();
}
});
}
//邮箱
@SuppressLint("SimpleDateFormat")
private void setEmail(final SenderModel senderModel, final boolean isClone) {
final String[] MAIL_TYPE = getResources().getStringArray(R.array.MailType);
EmailSettingVo emailSettingVo = null;
//try phrase json setting
if (senderModel != null) {
String jsonSettingStr = senderModel.getJsonSetting();
if (jsonSettingStr != null) {
emailSettingVo = JSON.parseObject(jsonSettingStr, EmailSettingVo.class);
}
}
final AlertDialog.Builder alertDialog71 = new AlertDialog.Builder(SenderActivity.this);
View view1 = View.inflate(SenderActivity.this, R.layout.alert_dialog_setview_email, null);
final EditText editTextEmailName = view1.findViewById(R.id.editTextEmailName);
@SuppressLint("UseSwitchCompatOrMaterialCode") final Switch switchEmailEnable = view1.findViewById(R.id.switchEmailEnable);
if (senderModel != null) {
editTextEmailName.setText(senderModel.getName());
switchEmailEnable.setChecked(senderModel.getStatusChecked());
}
final EditText editTextEmailHost = view1.findViewById(R.id.editTextEmailHost);
final EditText editTextEmailPort = view1.findViewById(R.id.editTextEmailPort);
@SuppressLint("UseSwitchCompatOrMaterialCode") final Switch switchEmailSSl = view1.findViewById(R.id.switchEmailSSl);
final EditText editTextEmailFromAdd = view1.findViewById(R.id.editTextEmailFromAdd);
final EditText editTextEmailNickname = view1.findViewById(R.id.editTextEmailNickname);
final ClearEditText editTextEmailPsw = view1.findViewById(R.id.editTextEmailPsw);
final EditText editTextEmailToAdd = view1.findViewById(R.id.editTextEmailToAdd);
final EditText editTextEmailTitle = view1.findViewById(R.id.editTextEmailTitle);
final Spinner spinnerEmailType = view1.findViewById(R.id.spinnerEmailType);
final LinearLayout layoutServiceSetting = view1.findViewById(R.id.layoutServiceSetting);
if (emailSettingVo != null) {
String mailType = emailSettingVo.getMailType();
if (!TextUtils.isEmpty(mailType)) {
for (int i = 0; i < MAIL_TYPE.length; i++) {
if (mailType.equals(MAIL_TYPE[i])) {
spinnerEmailType.setSelection(i);
break;
}
}
} else {
spinnerEmailType.setSelection(MAIL_TYPE.length - 1);
}
editTextEmailHost.setText(emailSettingVo.getHost());
editTextEmailPort.setText(emailSettingVo.getPort());
switchEmailSSl.setChecked(emailSettingVo.getSsl());
editTextEmailFromAdd.setText(emailSettingVo.getFromEmail());
editTextEmailNickname.setText(emailSettingVo.getNickname());
editTextEmailPsw.setText(emailSettingVo.getPwd());
editTextEmailToAdd.setText(emailSettingVo.getToEmail());
editTextEmailTitle.setText(emailSettingVo.getTitle());
}
Button buttonOk = view1.findViewById(R.id.buttonOk);
Button buttonDel = view1.findViewById(R.id.buttonDel);
buttonDel.setText(senderModel != null ? R.string.del : R.string.cancel);
Button buttonTest = view1.findViewById(R.id.buttonTest);
alertDialog71
.setTitle(R.string.setemailtitle)
.setIcon(R.mipmap.email)
.setView(view1)
.create();
final AlertDialog show = alertDialog71.show();
spinnerEmailType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String mailType = parent.getItemAtPosition(position).toString();
//ToastUtils.show("选择的邮箱类型是:" + mailType);
String hint;
if (mailType.equals(getString(R.string.other_mail_type))) {
hint = getString(R.string.hint_from_add_full);
layoutServiceSetting.setVisibility(View.VISIBLE);
ToastUtils.delayedShow(R.string.tips_other_mail_type, 3000);
} else {
hint = getString(R.string.hint_from_add);
layoutServiceSetting.setVisibility(View.GONE);
}
SpannableString ss = new SpannableString(hint);//定义hint的值
AbsoluteSizeSpan ass = new AbsoluteSizeSpan(13, true);//设置字体大小 true表示单位是sp
ss.setSpan(ass, 0, ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
editTextEmailFromAdd.setHint(new SpannedString(ss));
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
}
});
buttonOk.setOnClickListener(view -> {
String senderName = editTextEmailName.getText().toString().trim();
int senderStatus = switchEmailEnable.isChecked() ? STATUS_ON : STATUS_OFF;
if (TextUtils.isEmpty(senderName)) {
ToastUtils.delayedShow(R.string.invalid_name, 3000);
return;
}
String mailType = spinnerEmailType.getSelectedItem().toString();
String host = editTextEmailHost.getText().toString().trim();
String port = editTextEmailPort.getText().toString().trim();
boolean ssl = switchEmailSSl.isChecked();
String fromEmail = editTextEmailFromAdd.getText().toString().trim();
String pwd = editTextEmailPsw.getText().trim();
String toEmail = editTextEmailToAdd.getText().toString().trim();
String title = editTextEmailTitle.getText().toString().trim();
if (title.isEmpty()) title = "SmsForwarder Title";
String nickname = editTextEmailNickname.getText().toString().trim();
if (nickname.isEmpty()) nickname = "SmsForwarder";
if (fromEmail.isEmpty() || pwd.isEmpty() || toEmail.isEmpty()) {
ToastUtils.delayedShow(R.string.invalid_email, 3000);
return;
}
if (mailType.equals(getString(R.string.other_mail_type)) && (host.isEmpty() || port.isEmpty())) {
ToastUtils.delayedShow(R.string.tips_other_mail_type, 3000);
return;
}
EmailSettingVo emailSettingVoNew = new EmailSettingVo(mailType, host, port, ssl, fromEmail, nickname, pwd, toEmail, title);
if (isClone || senderModel == null) {
SenderModel newSenderModel = new SenderModel();
newSenderModel.setName(senderName);
newSenderModel.setType(TYPE_EMAIL);
newSenderModel.setStatus(senderStatus);
newSenderModel.setJsonSetting(JSON.toJSONString(emailSettingVoNew));
SenderUtil.addSender(newSenderModel);
initSenders();
adapter.add(senderModels);
} else {
senderModel.setName(senderName);
senderModel.setType(TYPE_EMAIL);
senderModel.setStatus(senderStatus);
senderModel.setJsonSetting(JSON.toJSONString(emailSettingVoNew));
SenderUtil.updateSender(senderModel);
initSenders();
adapter.update(senderModels);
}
show.dismiss();
});
buttonDel.setOnClickListener(view -> {
if (senderModel != null) {
SenderUtil.delSender(senderModel.getId());
initSenders();
adapter.del(senderModels);
}
show.dismiss();
});
buttonTest.setOnClickListener(view -> {
String mailType = spinnerEmailType.getSelectedItem().toString();
String host = editTextEmailHost.getText().toString().trim();
String port = editTextEmailPort.getText().toString().trim();
boolean ssl = switchEmailSSl.isChecked();
String fromEmail = editTextEmailFromAdd.getText().toString().trim();
String pwd = editTextEmailPsw.getText().trim();
String toEmail = editTextEmailToAdd.getText().toString().trim();
String title = editTextEmailTitle.getText().toString().trim();
if (title.isEmpty()) title = "SmsForwarder Title";
String nickname = editTextEmailNickname.getText().toString().trim();
if (nickname.isEmpty()) nickname = "SmsForwarder";
if (fromEmail.isEmpty() || pwd.isEmpty() || toEmail.isEmpty()) {
ToastUtils.delayedShow(R.string.invalid_email, 3000);
return;
}
if (mailType.equals(getString(R.string.other_mail_type)) && (host.isEmpty() || port.isEmpty())) {
ToastUtils.delayedShow(R.string.tips_other_mail_type, 3000);
return;
}
try {
EmailSettingVo emailSettingVoNew = new EmailSettingVo(mailType, host, port, ssl, fromEmail, nickname, pwd, toEmail, title);
SmsVo smsVo = new SmsVo(getString(R.string.test_phone_num), getString(R.string.test_sender_sms), new Date(), getString(R.string.test_sim_info));
SenderMailMsg.sendEmail(0, handler, emailSettingVoNew, smsVo.getTitleForSend(title), smsVo.getSmsVoForSend());
} catch (Exception e) {
ToastUtils.delayedShow(getString(R.string.failed_to_fwd) + e.getMessage(), 3000);
e.printStackTrace();
}
});
Button buttonInsertSender = view1.findViewById(R.id.bt_insert_sender);
buttonInsertSender.setOnClickListener(view -> {
editTextEmailTitle.setFocusable(true);
editTextEmailTitle.requestFocus();
CommonUtils.insertOrReplaceText2Cursor(editTextEmailTitle, getString(R.string.tag_from));
});
Button buttonInsertExtra = view1.findViewById(R.id.bt_insert_extra);
buttonInsertExtra.setOnClickListener(view -> {
editTextEmailTitle.setFocusable(true);
editTextEmailTitle.requestFocus();
CommonUtils.insertOrReplaceText2Cursor(editTextEmailTitle, getString(R.string.tag_card_slot));
});
Button buttonInsertTime = view1.findViewById(R.id.bt_insert_time);
buttonInsertTime.setOnClickListener(view -> {
editTextEmailTitle.setFocusable(true);
editTextEmailTitle.requestFocus();
CommonUtils.insertOrReplaceText2Cursor(editTextEmailTitle, getString(R.string.tag_receive_time));
});
Button buttonInsertDeviceName = view1.findViewById(R.id.bt_insert_device_name);
buttonInsertDeviceName.setOnClickListener(view -> {
editTextEmailTitle.setFocusable(true);
editTextEmailTitle.requestFocus();
CommonUtils.insertOrReplaceText2Cursor(editTextEmailTitle, getString(R.string.tag_device_name));
});
}
//Bark
private void setBark(final SenderModel senderModel, final boolean isClone) {
BarkSettingVo barkSettingVo = null;
//try phrase json setting
if (senderModel != null) {
String jsonSettingStr = senderModel.getJsonSetting();
if (jsonSettingStr != null) {
barkSettingVo = JSON.parseObject(jsonSettingStr, BarkSettingVo.class);
}
}
final AlertDialog.Builder alertDialog71 = new AlertDialog.Builder(SenderActivity.this);
View view1 = View.inflate(SenderActivity.this, R.layout.alert_dialog_setview_bark, null);
final EditText editTextBarkName = view1.findViewById(R.id.editTextBarkName);
@SuppressLint("UseSwitchCompatOrMaterialCode") final Switch switchBarkEnable = view1.findViewById(R.id.switchBarkEnable);
if (senderModel != null) {
editTextBarkName.setText(senderModel.getName());
switchBarkEnable.setChecked(senderModel.getStatusChecked());
}
final ClearEditText editTextBarkServer = view1.findViewById(R.id.editTextBarkServer);
final EditText editTextBarkTitle = view1.findViewById(R.id.editTextBarkTitle);
final EditText editTextBarkIcon = view1.findViewById(R.id.editTextBarkIcon);
final EditText editTextBarkSound = view1.findViewById(R.id.editTextBarkSound);
final EditText editTextBarkBadge = view1.findViewById(R.id.editTextBarkBadge);
final EditText editTextBarkUrl = view1.findViewById(R.id.editTextBarkUrl);
final RadioGroup radioGroupBarkLevel = view1.findViewById(R.id.radioGroupBarkLevel);
if (barkSettingVo != null) {
editTextBarkServer.setText(barkSettingVo.getServer());
editTextBarkTitle.setText(barkSettingVo.getTitle());
editTextBarkIcon.setText(barkSettingVo.getIcon());
editTextBarkSound.setText(barkSettingVo.getSound());
editTextBarkBadge.setText(barkSettingVo.getBadge());
editTextBarkUrl.setText(barkSettingVo.getUrl());
radioGroupBarkLevel.check(barkSettingVo.getLevelId());
}
Button buttonOk = view1.findViewById(R.id.buttonOk);
Button buttonDel = view1.findViewById(R.id.buttonDel);
buttonDel.setText(senderModel != null ? R.string.del : R.string.cancel);
Button buttonTest = view1.findViewById(R.id.buttonTest);
alertDialog71
.setTitle(R.string.setbarktitle)
.setIcon(R.mipmap.bark)
.setView(view1)
.create();
final AlertDialog show = alertDialog71.show();
buttonOk.setOnClickListener(view -> {
String senderName = editTextBarkName.getText().toString().trim();
int senderStatus = switchBarkEnable.isChecked() ? STATUS_ON : STATUS_OFF;
if (TextUtils.isEmpty(senderName)) {
ToastUtils.delayedShow(R.string.invalid_name, 3000);
return;
}
//推送地址
String barkServer = editTextBarkServer.getText().trim();
if (!CommonUtils.checkUrl(barkServer, false)) {
ToastUtils.delayedShow(R.string.invalid_bark_server, 3000);
return;
}
String icon = editTextBarkIcon.getText().toString().trim(); //消息图标
String title = editTextBarkTitle.getText().toString().trim(); //标题模板
int levelId = radioGroupBarkLevel.getCheckedRadioButtonId(); //时效性
String sound = editTextBarkSound.getText().toString().trim(); //声音
String badge = editTextBarkBadge.getText().toString().trim(); //角标
String url = editTextBarkUrl.getText().toString().trim(); //链接
BarkSettingVo barkSettingVoNew = new BarkSettingVo(barkServer, icon, title, levelId, sound, badge, url);
if (isClone || senderModel == null) {
SenderModel newSenderModel = new SenderModel();
newSenderModel.setName(senderName);
newSenderModel.setType(TYPE_BARK);
newSenderModel.setStatus(senderStatus);
newSenderModel.setJsonSetting(JSON.toJSONString(barkSettingVoNew));
SenderUtil.addSender(newSenderModel);
initSenders();
adapter.add(senderModels);
} else {
senderModel.setName(senderName);
senderModel.setType(TYPE_BARK);
senderModel.setStatus(senderStatus);
senderModel.setJsonSetting(JSON.toJSONString(barkSettingVoNew));
SenderUtil.updateSender(senderModel);
initSenders();
adapter.update(senderModels);
}
show.dismiss();
});
buttonDel.setOnClickListener(view -> {
if (senderModel != null) {
SenderUtil.delSender(senderModel.getId());
initSenders();
adapter.del(senderModels);
}
show.dismiss();
});
buttonTest.setOnClickListener(view -> {
String barkServer = editTextBarkServer.getText().trim();
String icon = editTextBarkIcon.getText().toString().trim(); //消息图标
String title = editTextBarkTitle.getText().toString().trim(); //标题模板
int levelId = radioGroupBarkLevel.getCheckedRadioButtonId(); //时效性
String sound = editTextBarkSound.getText().toString().trim(); //声音
String badge = editTextBarkBadge.getText().toString().trim(); //角标
String url = editTextBarkUrl.getText().toString().trim(); //链接
BarkSettingVo barkSettingVoNew = new BarkSettingVo(barkServer, icon, title, levelId, sound, badge, url);
if (CommonUtils.checkUrl(barkServer, false)) {
try {
SmsVo smsVo = new SmsVo(getString(R.string.test_phone_num), getString(R.string.test_sender_sms), new Date(), getString(R.string.test_sim_info));
SenderBarkMsg.sendMsg(0, handler, null, barkSettingVoNew, smsVo.getTitleForSend(title), smsVo.getSmsVoForSend(), getString(R.string.test_group_name));
} catch (Exception e) {
ToastUtils.delayedShow(getString(R.string.failed_to_fwd) + e.getMessage(), 3000);
e.printStackTrace();
}
} else {
ToastUtils.delayedShow(R.string.invalid_bark_server, 3000);
}
});
Button buttonInsertSender = view1.findViewById(R.id.bt_insert_sender);
buttonInsertSender.setOnClickListener(view -> {
editTextBarkTitle.setFocusable(true);
editTextBarkTitle.requestFocus();
CommonUtils.insertOrReplaceText2Cursor(editTextBarkTitle, getString(R.string.tag_from));
});
Button buttonInsertExtra = view1.findViewById(R.id.bt_insert_extra);
buttonInsertExtra.setOnClickListener(view -> {
editTextBarkTitle.setFocusable(true);
editTextBarkTitle.requestFocus();
CommonUtils.insertOrReplaceText2Cursor(editTextBarkTitle, getString(R.string.tag_card_slot));
});
Button buttonInsertTime = view1.findViewById(R.id.bt_insert_time);
buttonInsertTime.setOnClickListener(view -> {
editTextBarkTitle.setFocusable(true);
editTextBarkTitle.requestFocus();
CommonUtils.insertOrReplaceText2Cursor(editTextBarkTitle, getString(R.string.tag_receive_time));
});
Button buttonInsertDeviceName = view1.findViewById(R.id.bt_insert_device_name);
buttonInsertDeviceName.setOnClickListener(view -> {
editTextBarkTitle.setFocusable(true);
editTextBarkTitle.requestFocus();
CommonUtils.insertOrReplaceText2Cursor(editTextBarkTitle, getString(R.string.tag_device_name));
});
}
//header序号
int headerItemId = 0;
/**
* 动态增删header
*
* @param headerItemMap 管理item的map用于删除指定header
* @param linearLayoutWebNotifyHeaders 需要挂载item的LinearLayout
* @param key header的key为空则不设置
* @param value header的value为空则不设置
*/
private void addHeaderItemLinearLayout(Map<Integer, LinearLayout> headerItemMap, final LinearLayout linearLayoutWebNotifyHeaders, String key, String value) {
LinearLayout linearLayoutItemAddHeader = (LinearLayout) View.inflate(this, R.layout.item_add_header, null);
ImageView imageViewRemoveHeader = linearLayoutItemAddHeader.findViewById(R.id.imageViewRemoveHeader);
if (key != null && value != null) {
EditText editTextHeaderKey = linearLayoutItemAddHeader.findViewById(R.id.editTextHeaderKey);
EditText editTextHeaderValue = linearLayoutItemAddHeader.findViewById(R.id.editTextHeaderValue);
editTextHeaderKey.setText(key);
editTextHeaderValue.setText(value);
}
imageViewRemoveHeader.setTag(headerItemId);
imageViewRemoveHeader.setOnClickListener(view2 -> {
int itemId = (int) view2.getTag();
linearLayoutWebNotifyHeaders.removeView(headerItemMap.get(itemId));
headerItemMap.remove(itemId);
});
linearLayoutWebNotifyHeaders.addView(linearLayoutItemAddHeader);
headerItemMap.put(headerItemId, linearLayoutItemAddHeader);
headerItemId++;
}
/**
* 从EditText控件中获取全部headers
*
* @param headerItemMap 管理item的map
* @return 全部headers
*/
private Map<String, String> getHeadersFromHeaderItemMap(Map<Integer, LinearLayout> headerItemMap) {
Map<String, String> headers = new HashMap<>();
for (LinearLayout headerItem : headerItemMap.values()) {
EditText editTextHeaderKey = headerItem.findViewById(R.id.editTextHeaderKey);
EditText editTextHeaderValue = headerItem.findViewById(R.id.editTextHeaderValue);
String key = editTextHeaderKey.getText().toString().trim();
String value = editTextHeaderValue.getText().toString().trim();
headers.put(key, value);
}
return headers;
}
//webhook
@SuppressLint("SimpleDateFormat")
private void setWebNotify(final SenderModel senderModel, final boolean isClone) {
WebNotifySettingVo webNotifySettingVo = null;
//try phrase json setting
if (senderModel != null) {
String jsonSettingStr = senderModel.getJsonSetting();
if (jsonSettingStr != null) {
webNotifySettingVo = JSON.parseObject(jsonSettingStr, WebNotifySettingVo.class);
}
}
final AlertDialog.Builder alertDialog71 = new AlertDialog.Builder(SenderActivity.this);
View view1 = View.inflate(SenderActivity.this, R.layout.alert_dialog_setview_webnotify, null);
final EditText editTextWebNotifyName = view1.findViewById(R.id.editTextWebNotifyName);
@SuppressLint("UseSwitchCompatOrMaterialCode") final Switch switchWebNotifyEnable = view1.findViewById(R.id.switchWebNotifyEnable);
if (senderModel != null) {
editTextWebNotifyName.setText(senderModel.getName());
switchWebNotifyEnable.setChecked(senderModel.getStatusChecked());
}
final EditText editTextWebNotifyWebServer = view1.findViewById(R.id.editTextWebNotifyWebServer);
final EditText editTextWebNotifyWebParams = view1.findViewById(R.id.editTextWebNotifyWebParams);
final ClearEditText editTextWebNotifySecret = view1.findViewById(R.id.editTextWebNotifySecret);
final RadioGroup radioGroupWebNotifyMethod = view1.findViewById(R.id.radioGroupWebNotifyMethod);
Map<Integer, LinearLayout> headerItemMap = new HashMap<>(2);
final LinearLayout linearLayoutWebNotifyHeaders = view1.findViewById(R.id.linearLayoutWebNotifyHeaders);
final ImageView imageViewWebNotifyAddHeader = view1.findViewById(R.id.imageViewWebNotifyAddHeader);
if (webNotifySettingVo != null) {
editTextWebNotifyWebServer.setText(webNotifySettingVo.getWebServer());
editTextWebNotifyWebParams.setText(webNotifySettingVo.getWebParams());
editTextWebNotifySecret.setText(webNotifySettingVo.getSecret());
radioGroupWebNotifyMethod.check(webNotifySettingVo.getWebNotifyMethodCheckId());
//set header
Map<String, String> headers = webNotifySettingVo.getHeaders();
if (headers != null) {
for (Map.Entry<String, String> header : headers.entrySet()) {
addHeaderItemLinearLayout(headerItemMap, linearLayoutWebNotifyHeaders, header.getKey(), header.getValue());
}
}
}
//add header
imageViewWebNotifyAddHeader.setOnClickListener(view -> addHeaderItemLinearLayout(headerItemMap, linearLayoutWebNotifyHeaders, null, null));
Button buttonOk = view1.findViewById(R.id.buttonOk);
Button buttonDel = view1.findViewById(R.id.buttonDel);
buttonDel.setText(senderModel != null ? R.string.del : R.string.cancel);
Button buttonTest = view1.findViewById(R.id.buttonTest);
alertDialog71
.setTitle(R.string.setwebnotifytitle)
.setIcon(R.mipmap.webhook)
.setView(view1)
.create();
final AlertDialog show = alertDialog71.show();
buttonOk.setOnClickListener(view -> {
String senderName = editTextWebNotifyName.getText().toString().trim();
int senderStatus = switchWebNotifyEnable.isChecked() ? STATUS_ON : STATUS_OFF;
if (TextUtils.isEmpty(senderName)) {
ToastUtils.delayedShow(R.string.invalid_name, 3000);
return;
}
String webServer = editTextWebNotifyWebServer.getText().toString().trim();
String secret = editTextWebNotifySecret.getText().trim();
String method = radioGroupWebNotifyMethod.getCheckedRadioButtonId() == R.id.radioWebNotifyMethodGet ? "GET" : "POST";
String webParams = editTextWebNotifyWebParams.getText().toString().trim();
Map<String, String> headers = getHeadersFromHeaderItemMap(headerItemMap);
if (!CommonUtils.checkUrl(webServer, false)) {
ToastUtils.delayedShow(R.string.invalid_webserver, 3000);
return;
}
WebNotifySettingVo webNotifySettingVoNew = new WebNotifySettingVo(webServer, secret, method, webParams, headers);
if (isClone || senderModel == null) {
SenderModel newSenderModel = new SenderModel();
newSenderModel.setName(senderName);
newSenderModel.setType(TYPE_WEB_NOTIFY);
newSenderModel.setStatus(senderStatus);
newSenderModel.setJsonSetting(JSON.toJSONString(webNotifySettingVoNew));
SenderUtil.addSender(newSenderModel);
} else {
senderModel.setName(senderName);
senderModel.setType(TYPE_WEB_NOTIFY);
senderModel.setStatus(senderStatus);
senderModel.setJsonSetting(JSON.toJSONString(webNotifySettingVoNew));
SenderUtil.updateSender(senderModel);
}
initSenders();
adapter.update(senderModels);
show.dismiss();
});
buttonDel.setOnClickListener(view -> {
if (senderModel != null) {
SenderUtil.delSender(senderModel.getId());
initSenders();
adapter.del(senderModels);
}
show.dismiss();
});
buttonTest.setOnClickListener(view -> {
String webServer = editTextWebNotifyWebServer.getText().toString().trim();
String secret = editTextWebNotifySecret.getText().trim();
String method = radioGroupWebNotifyMethod.getCheckedRadioButtonId() == R.id.radioWebNotifyMethodGet ? "GET" : "POST";
String webParams = editTextWebNotifyWebParams.getText().toString().trim();
Map<String, String> headers = getHeadersFromHeaderItemMap(headerItemMap);
if (!CommonUtils.checkUrl(webServer, false)) {
ToastUtils.delayedShow(R.string.invalid_webserver, 3000);
return;
}
try {
SmsVo smsVo = new SmsVo(getString(R.string.test_phone_num), getString(R.string.test_sender_sms), new Date(), getString(R.string.test_sim_info));
SenderWebNotifyMsg.sendMsg(0, handler, null, webServer, webParams, secret, method, headers, smsVo, "", "");
} catch (Exception e) {
ToastUtils.delayedShow(getString(R.string.failed_to_fwd) + e.getMessage(), 3000);
e.printStackTrace();
}
});
}
//企业微信群机器人
@SuppressLint("SimpleDateFormat")
private void setQYWXGroupRobot(final SenderModel senderModel, final boolean isClone) {
QYWXGroupRobotSettingVo qywxGroupRobotSettingVo = null;
//try phrase json setting
if (senderModel != null) {
String jsonSettingStr = senderModel.getJsonSetting();
if (jsonSettingStr != null) {
qywxGroupRobotSettingVo = JSON.parseObject(jsonSettingStr, QYWXGroupRobotSettingVo.class);
}
}
final AlertDialog.Builder alertDialog71 = new AlertDialog.Builder(SenderActivity.this);
View view1 = View.inflate(SenderActivity.this, R.layout.alert_dialog_setview_qywxgrouprobot, null);
final EditText editTextQYWXGroupRobotName = view1.findViewById(R.id.editTextQYWXGroupRobotName);
@SuppressLint("UseSwitchCompatOrMaterialCode") final Switch switchQYWXGroupRobotEnable = view1.findViewById(R.id.switchQYWXGroupRobotEnable);
if (senderModel != null) {
editTextQYWXGroupRobotName.setText(senderModel.getName());
switchQYWXGroupRobotEnable.setChecked(senderModel.getStatusChecked());
}
final ClearEditText editTextQYWXGroupRobotWebHook = view1.findViewById(R.id.editTextQYWXGroupRobotWebHook);
if (qywxGroupRobotSettingVo != null) {
editTextQYWXGroupRobotWebHook.setText(qywxGroupRobotSettingVo.getWebHook());
}
Button buttonOk = view1.findViewById(R.id.buttonOk);
Button buttonDel = view1.findViewById(R.id.buttonDel);
buttonDel.setText(senderModel != null ? R.string.del : R.string.cancel);
Button buttonTest = view1.findViewById(R.id.buttonTest);
alertDialog71
.setTitle(R.string.setqywxgrouprobottitle)
.setIcon(R.mipmap.qywx)
.setView(view1)
.create();
final AlertDialog show = alertDialog71.show();
buttonOk.setOnClickListener(view -> {
String senderName = editTextQYWXGroupRobotName.getText().toString().trim();
int senderStatus = switchQYWXGroupRobotEnable.isChecked() ? STATUS_ON : STATUS_OFF;
if (TextUtils.isEmpty(senderName)) {
ToastUtils.delayedShow(R.string.invalid_name, 3000);
return;
}
String webHook = editTextQYWXGroupRobotWebHook.getText().trim();
if (!CommonUtils.checkUrl(webHook, false)) {
ToastUtils.delayedShow(R.string.invalid_webhook, 3000);
return;
}
QYWXGroupRobotSettingVo qywxGroupRobotSettingVoNew = new QYWXGroupRobotSettingVo(webHook);
if (isClone || senderModel == null) {
SenderModel newSenderModel = new SenderModel();
newSenderModel.setName(senderName);
newSenderModel.setType(TYPE_QYWX_GROUP_ROBOT);
newSenderModel.setStatus(senderStatus);
newSenderModel.setJsonSetting(JSON.toJSONString(qywxGroupRobotSettingVoNew));
SenderUtil.addSender(newSenderModel);
initSenders();
adapter.add(senderModels);
} else {
senderModel.setName(senderName);
senderModel.setType(TYPE_QYWX_GROUP_ROBOT);
senderModel.setStatus(senderStatus);
senderModel.setJsonSetting(JSON.toJSONString(qywxGroupRobotSettingVoNew));
SenderUtil.updateSender(senderModel);
initSenders();
adapter.update(senderModels);
}
show.dismiss();
});
buttonDel.setOnClickListener(view -> {
if (senderModel != null) {
SenderUtil.delSender(senderModel.getId());
initSenders();
adapter.del(senderModels);
}
show.dismiss();
});
buttonTest.setOnClickListener(view -> {
String webHook = editTextQYWXGroupRobotWebHook.getText().trim();
if (!CommonUtils.checkUrl(webHook, false)) {
ToastUtils.delayedShow(R.string.invalid_webhook, 3000);
return;
}
try {
SmsVo smsVo = new SmsVo(getString(R.string.test_phone_num), getString(R.string.test_sender_sms), new Date(), getString(R.string.test_sim_info));
SenderQyWxGroupRobotMsg.sendMsg(0, handler, null, webHook, smsVo.getMobile(), smsVo.getSmsVoForSend());
} catch (Exception e) {
ToastUtils.delayedShow(getString(R.string.failed_to_fwd) + e.getMessage(), 3000);
e.printStackTrace();
}
});
}
//企业微信应用
@SuppressLint({"SimpleDateFormat", "SetTextI18n"})
private void setQYWXApp(final SenderModel senderModel, final boolean isClone) {
QYWXAppSettingVo QYWXAppSettingVo = null;
//try phrase json setting
if (senderModel != null) {
String jsonSettingStr = senderModel.getJsonSetting();
if (jsonSettingStr != null) {
QYWXAppSettingVo = JSON.parseObject(jsonSettingStr, QYWXAppSettingVo.class);
}
}
final AlertDialog.Builder alertDialog71 = new AlertDialog.Builder(SenderActivity.this);
View view1 = View.inflate(SenderActivity.this, R.layout.alert_dialog_setview_qywxapp, null);
final EditText editTextQYWXAppName = view1.findViewById(R.id.editTextQYWXAppName);
@SuppressLint("UseSwitchCompatOrMaterialCode") final Switch switchQYWXAppEnable = view1.findViewById(R.id.switchQYWXAppEnable);
if (senderModel != null) {
editTextQYWXAppName.setText(senderModel.getName());
switchQYWXAppEnable.setChecked(senderModel.getStatusChecked());
}
final EditText editTextQYWXAppCorpID = view1.findViewById(R.id.editTextQYWXAppCorpID);
final EditText editTextQYWXAppAgentID = view1.findViewById(R.id.editTextQYWXAppAgentID);
final ClearEditText editTextQYWXAppSecret = view1.findViewById(R.id.editTextQYWXAppSecret);
final LinearLayout linearLayoutQYWXAppToUser = view1.findViewById(R.id.linearLayoutQYWXAppToUser);
final EditText editTextQYWXAppToUser = view1.findViewById(R.id.editTextQYWXAppToUser);
@SuppressLint("UseSwitchCompatOrMaterialCode") final Switch switchQYWXAppAtAll = view1.findViewById(R.id.switchQYWXAppAtAll);
if (QYWXAppSettingVo != null) {
editTextQYWXAppCorpID.setText(QYWXAppSettingVo.getCorpID());
editTextQYWXAppAgentID.setText(QYWXAppSettingVo.getAgentID());
editTextQYWXAppSecret.setText(QYWXAppSettingVo.getSecret());
editTextQYWXAppToUser.setText(QYWXAppSettingVo.getToUser());
switchQYWXAppAtAll.setChecked(QYWXAppSettingVo.getAtAll());
linearLayoutQYWXAppToUser.setVisibility(QYWXAppSettingVo.getAtAll() ? View.GONE : View.VISIBLE);
}
switchQYWXAppAtAll.setOnCheckedChangeListener((buttonView, isChecked) -> {
if (isChecked) {
linearLayoutQYWXAppToUser.setVisibility(View.GONE);
editTextQYWXAppToUser.setText("@all");
} else {
linearLayoutQYWXAppToUser.setVisibility(View.VISIBLE);
editTextQYWXAppToUser.setText("");
}
Log.d(TAG, "onCheckedChanged:" + isChecked);
});
Button buttonOk = view1.findViewById(R.id.buttonOk);
Button buttonDel = view1.findViewById(R.id.buttonDel);
buttonDel.setText(senderModel != null ? R.string.del : R.string.cancel);
Button buttonTest = view1.findViewById(R.id.buttonTest);
alertDialog71
.setTitle(R.string.setqywxapptitle)
.setIcon(R.mipmap.qywxapp)
.setView(view1)
.create();
final AlertDialog show = alertDialog71.show();
buttonOk.setOnClickListener(view -> {
String senderName = editTextQYWXAppName.getText().toString().trim();
int senderStatus = switchQYWXAppEnable.isChecked() ? STATUS_ON : STATUS_OFF;
if (TextUtils.isEmpty(senderName)) {
ToastUtils.delayedShow(R.string.invalid_name, 3000);
return;
}
String toUser = editTextQYWXAppToUser.getText().toString().trim();
if (toUser.isEmpty()) {
ToastUtils.delayedShow(R.string.invalid_at_mobiles, 3000);
editTextQYWXAppToUser.setFocusable(true);
editTextQYWXAppToUser.requestFocus();
return;
}
QYWXAppSettingVo QYWXAppSettingVoNew = new QYWXAppSettingVo(
editTextQYWXAppCorpID.getText().toString().trim(),
editTextQYWXAppAgentID.getText().toString().trim(),
editTextQYWXAppSecret.getText().trim(),
editTextQYWXAppToUser.getText().toString().trim(),
switchQYWXAppAtAll.isChecked());
if (!QYWXAppSettingVoNew.checkParms()) {
ToastUtils.delayedShow(R.string.invalid_webcom_app_parm, 3000);
return;
}
if (isClone || senderModel == null) {
SenderModel newSenderModel = new SenderModel();
newSenderModel.setName(senderName);
newSenderModel.setType(TYPE_QYWX_APP);
newSenderModel.setStatus(senderStatus);
newSenderModel.setJsonSetting(JSON.toJSONString(QYWXAppSettingVoNew));
SenderUtil.addSender(newSenderModel);
initSenders();
adapter.add(senderModels);
} else {
senderModel.setName(senderName);
senderModel.setType(TYPE_QYWX_APP);
senderModel.setStatus(senderStatus);
senderModel.setJsonSetting(JSON.toJSONString(QYWXAppSettingVoNew));
SenderUtil.updateSender(senderModel);
initSenders();
adapter.update(senderModels);
}
show.dismiss();
});
buttonDel.setOnClickListener(view -> {
if (senderModel != null) {
SenderUtil.delSender(senderModel.getId());
initSenders();
adapter.del(senderModels);
}
show.dismiss();
});
buttonTest.setOnClickListener(view -> {
QYWXAppSettingVo QYWXAppSettingVoNew = new QYWXAppSettingVo(
editTextQYWXAppCorpID.getText().toString().trim(),
editTextQYWXAppAgentID.getText().toString().trim(),
editTextQYWXAppSecret.getText().trim(),
editTextQYWXAppToUser.getText().toString().trim(),
switchQYWXAppAtAll.isChecked());
if (!QYWXAppSettingVoNew.checkParms()) {
ToastUtils.delayedShow(R.string.invalid_webcom_app_parm, 3000);
return;
}
if (QYWXAppSettingVoNew.getToUser().isEmpty()) {
ToastUtils.delayedShow(R.string.invalid_at_mobiles, 3000);
return;
}
try {
SmsVo smsVo = new SmsVo(getString(R.string.test_phone_num), getString(R.string.test_sender_sms), new Date(), getString(R.string.test_sim_info));
SenderQyWxAppMsg.sendMsg(0, handler, null, senderModel, QYWXAppSettingVoNew, smsVo.getSmsVoForSend());
} catch (Exception e) {
ToastUtils.delayedShow(getString(R.string.failed_to_fwd) + e.getMessage(), 3000);
e.printStackTrace();
}
});
}
//Server酱·Turbo版
private void setServerChan(final SenderModel senderModel, final boolean isClone) {
ServerChanSettingVo serverchanSettingVo = null;
//try phrase json setting
if (senderModel != null) {
String jsonSettingStr = senderModel.getJsonSetting();
if (jsonSettingStr != null) {
serverchanSettingVo = JSON.parseObject(jsonSettingStr, ServerChanSettingVo.class);
}
}
final AlertDialog.Builder alertDialog71 = new AlertDialog.Builder(SenderActivity.this);
View view1 = View.inflate(SenderActivity.this, R.layout.alert_dialog_setview_serverchan, null);
final EditText editTextServerChanName = view1.findViewById(R.id.editTextServerChanName);
@SuppressLint("UseSwitchCompatOrMaterialCode") final Switch switchServerChanEnable = view1.findViewById(R.id.switchServerChanEnable);
if (senderModel != null) {
editTextServerChanName.setText(senderModel.getName());
switchServerChanEnable.setChecked(senderModel.getStatusChecked());
}
final ClearEditText editTextServerChanSendKey = view1.findViewById(R.id.editTextServerChanSendKey);
if (serverchanSettingVo != null)
editTextServerChanSendKey.setText(serverchanSettingVo.getSendKey());
Button buttonOk = view1.findViewById(R.id.buttonOk);
Button buttonDel = view1.findViewById(R.id.buttonDel);
buttonDel.setText(senderModel != null ? R.string.del : R.string.cancel);
Button buttonTest = view1.findViewById(R.id.buttonTest);
alertDialog71
.setTitle(R.string.setserverchantitle)
.setIcon(R.mipmap.serverchan)
.setView(view1)
.create();
final AlertDialog show = alertDialog71.show();
buttonOk.setOnClickListener(view -> {
String senderName = editTextServerChanName.getText().toString().trim();
int senderStatus = switchServerChanEnable.isChecked() ? STATUS_ON : STATUS_OFF;
if (TextUtils.isEmpty(senderName)) {
ToastUtils.delayedShow(R.string.invalid_name, 3000);
return;
}
String serverChanServer = editTextServerChanSendKey.getText().trim();
if (TextUtils.isEmpty(serverChanServer)) {
ToastUtils.delayedShow(R.string.invalid_sendkey, 3000);
return;
}
ServerChanSettingVo serverChanSettingVoNew = new ServerChanSettingVo(serverChanServer);
if (isClone || senderModel == null) {
SenderModel newSenderModel = new SenderModel();
newSenderModel.setName(senderName);
newSenderModel.setType(TYPE_SERVER_CHAN);
newSenderModel.setStatus(senderStatus);
newSenderModel.setJsonSetting(JSON.toJSONString(serverChanSettingVoNew));
SenderUtil.addSender(newSenderModel);
initSenders();
adapter.add(senderModels);
} else {
senderModel.setName(senderName);
senderModel.setType(TYPE_SERVER_CHAN);
senderModel.setStatus(senderStatus);
senderModel.setJsonSetting(JSON.toJSONString(serverChanSettingVoNew));
SenderUtil.updateSender(senderModel);
initSenders();
adapter.update(senderModels);
}
show.dismiss();
});
buttonDel.setOnClickListener(view -> {
if (senderModel != null) {
SenderUtil.delSender(senderModel.getId());
initSenders();
adapter.del(senderModels);
}
show.dismiss();
});
buttonTest.setOnClickListener(view -> {
String serverChanServer = editTextServerChanSendKey.getText().trim();
if (TextUtils.isEmpty(serverChanServer)) {
ToastUtils.delayedShow(R.string.invalid_sendkey, 3000);
return;
}
try {
SmsVo smsVo = new SmsVo(getString(R.string.test_phone_num), getString(R.string.test_sender_sms), new Date(), getString(R.string.test_sim_info));
SenderServerChanMsg.sendMsg(0, handler, null, serverChanServer, smsVo.getMobile(), smsVo.getSmsVoForSend());
} catch (Exception e) {
ToastUtils.delayedShow(getString(R.string.failed_to_fwd) + e.getMessage(), 3000);
e.printStackTrace();
}
});
}
//Telegram机器人
private void setTelegram(final SenderModel senderModel, final boolean isClone) {
TelegramSettingVo telegramSettingVo = null;
//try phrase json setting
if (senderModel != null) {
String jsonSettingStr = senderModel.getJsonSetting();
if (jsonSettingStr != null) {
telegramSettingVo = JSON.parseObject(jsonSettingStr, TelegramSettingVo.class);
}
}
final AlertDialog.Builder alertDialog71 = new AlertDialog.Builder(SenderActivity.this);
View view1 = View.inflate(SenderActivity.this, R.layout.alert_dialog_setview_telegram, null);
final EditText editTextTelegramName = view1.findViewById(R.id.editTextTelegramName);
@SuppressLint("UseSwitchCompatOrMaterialCode") final Switch switchTelegramEnable = view1.findViewById(R.id.switchTelegramEnable);
if (senderModel != null) {
editTextTelegramName.setText(senderModel.getName());
switchTelegramEnable.setChecked(senderModel.getStatusChecked());
}
final ClearEditText editTextTelegramApiToken = view1.findViewById(R.id.editTextTelegramApiToken);
final EditText editTextTelegramChatId = view1.findViewById(R.id.editTextTelegramChatId);
final RadioGroup radioGroupTelegramMethod = view1.findViewById(R.id.radioGroupTelegramMethod);
final RadioGroup radioGroupProxyType = view1.findViewById(R.id.radioGroupProxyType);
final EditText editTextProxyHost = view1.findViewById(R.id.editTextProxyHost);
final EditText editTextProxyPort = view1.findViewById(R.id.editTextProxyPort);
@SuppressLint("UseSwitchCompatOrMaterialCode") final Switch switchProxyAuthenticator = view1.findViewById(R.id.switchProxyAuthenticator);
final EditText editTextProxyUsername = view1.findViewById(R.id.editTextProxyUsername);
final ClearEditText editTextProxyPassword = view1.findViewById(R.id.editTextProxyPassword);
final LinearLayout layoutProxyHost = view1.findViewById(R.id.layoutProxyHost);
final LinearLayout layoutProxyPort = view1.findViewById(R.id.layoutProxyPort);
final LinearLayout layoutProxyAuthenticator = view1.findViewById(R.id.layoutProxyAuthenticator);
switchProxyAuthenticator.setOnCheckedChangeListener((buttonView, isChecked) -> {
Log.d(TAG, "onCheckedChanged:" + isChecked);
layoutProxyAuthenticator.setVisibility(isChecked ? View.VISIBLE : View.GONE);
});
radioGroupProxyType.setOnCheckedChangeListener((group, checkedId) -> {
if (group != null && checkedId > 0) {
if (checkedId == R.id.btnProxyNone) {
layoutProxyHost.setVisibility(View.GONE);
layoutProxyPort.setVisibility(View.GONE);
layoutProxyAuthenticator.setVisibility(View.GONE);
} else {
layoutProxyHost.setVisibility(View.VISIBLE);
layoutProxyPort.setVisibility(View.VISIBLE);
layoutProxyAuthenticator.setVisibility(switchProxyAuthenticator.isChecked() ? View.VISIBLE : View.GONE);
}
group.check(checkedId);
}
});
if (telegramSettingVo != null) {
editTextTelegramApiToken.setText(telegramSettingVo.getApiToken());
editTextTelegramChatId.setText(telegramSettingVo.getChatId());
radioGroupTelegramMethod.check(telegramSettingVo.getMethodCheckId());
radioGroupProxyType.check(telegramSettingVo.getProxyTypeCheckId());
layoutProxyAuthenticator.setVisibility(telegramSettingVo.getProxyAuthenticator() ? View.VISIBLE : View.GONE);
switchProxyAuthenticator.setChecked(telegramSettingVo.getProxyAuthenticator());
if (Proxy.Type.DIRECT == telegramSettingVo.getProxyType()) {
layoutProxyHost.setVisibility(View.GONE);
layoutProxyPort.setVisibility(View.GONE);
} else {
layoutProxyHost.setVisibility(View.VISIBLE);
layoutProxyPort.setVisibility(View.VISIBLE);
}
editTextProxyHost.setText(telegramSettingVo.getProxyHost());
editTextProxyPort.setText(telegramSettingVo.getProxyPort());
editTextProxyUsername.setText(telegramSettingVo.getProxyUsername());
editTextProxyPassword.setText(telegramSettingVo.getProxyPassword());
}
Button buttonOk = view1.findViewById(R.id.buttonOk);
Button buttonDel = view1.findViewById(R.id.buttonDel);
buttonDel.setText(senderModel != null ? R.string.del : R.string.cancel);
Button buttonTest = view1.findViewById(R.id.buttonTest);
alertDialog71
.setTitle(R.string.settelegramtitle)
.setIcon(R.mipmap.telegram)
.setView(view1)
.create();
final AlertDialog show = alertDialog71.show();
buttonOk.setOnClickListener(view -> {
String senderName = editTextTelegramName.getText().toString().trim();
int senderStatus = switchTelegramEnable.isChecked() ? STATUS_ON : STATUS_OFF;
if (TextUtils.isEmpty(senderName)) {
ToastUtils.delayedShow(R.string.invalid_name, 3000);
return;
}
String apiToken = editTextTelegramApiToken.getText().trim();
String chatId = editTextTelegramChatId.getText().toString().trim();
if (apiToken.isEmpty() || chatId.isEmpty()) {
ToastUtils.delayedShow(R.string.invalid_apiToken_or_chatId, 3000);
return;
}
int proxyTypeId = radioGroupProxyType.getCheckedRadioButtonId();
String proxyHost = editTextProxyHost.getText().toString().trim();
String proxyPort = editTextProxyPort.getText().toString().trim();
if (proxyTypeId != R.id.btnProxyNone && (TextUtils.isEmpty(proxyHost) || TextUtils.isEmpty(proxyPort))) {
ToastUtils.delayedShow(R.string.invalid_host_or_port, 3000);
return;
}
boolean proxyAuthenticator = switchProxyAuthenticator.isChecked();
String proxyUsername = editTextProxyUsername.getText().toString().trim();
String proxyPassword = editTextProxyPassword.getText().trim();
if (proxyAuthenticator && TextUtils.isEmpty(proxyUsername) && TextUtils.isEmpty(proxyPassword)) {
ToastUtils.delayedShow(R.string.invalid_username_or_password, 3000);
return;
}
String method = radioGroupTelegramMethod.getCheckedRadioButtonId() == R.id.radioTelegramMethodGet ? "GET" : "POST";
TelegramSettingVo telegramSettingVoNew = new TelegramSettingVo(apiToken, chatId, proxyTypeId, proxyHost, proxyPort, proxyAuthenticator, proxyUsername, proxyPassword, method);
if (isClone || senderModel == null) {
SenderModel newSenderModel = new SenderModel();
newSenderModel.setName(senderName);
newSenderModel.setType(TYPE_TELEGRAM);
newSenderModel.setStatus(senderStatus);
newSenderModel.setJsonSetting(JSON.toJSONString(telegramSettingVoNew));
SenderUtil.addSender(newSenderModel);
initSenders();
adapter.add(senderModels);
} else {
senderModel.setName(senderName);
senderModel.setType(TYPE_TELEGRAM);
senderModel.setStatus(senderStatus);
senderModel.setJsonSetting(JSON.toJSONString(telegramSettingVoNew));
SenderUtil.updateSender(senderModel);
initSenders();
adapter.update(senderModels);
}
show.dismiss();
});
buttonDel.setOnClickListener(view -> {
if (senderModel != null) {
SenderUtil.delSender(senderModel.getId());
initSenders();
adapter.del(senderModels);
}
show.dismiss();
});
buttonTest.setOnClickListener(view -> {
String apiToken = editTextTelegramApiToken.getText().trim();
String chatId = editTextTelegramChatId.getText().toString().trim();
if (apiToken.isEmpty() || chatId.isEmpty()) {
ToastUtils.delayedShow(R.string.invalid_apiToken_or_chatId, 3000);
return;
}
int proxyTypeId = radioGroupProxyType.getCheckedRadioButtonId();
String proxyHost = editTextProxyHost.getText().toString().trim();
String proxyPort = editTextProxyPort.getText().toString().trim();
if (proxyTypeId != R.id.btnProxyNone && (TextUtils.isEmpty(proxyHost) || TextUtils.isEmpty(proxyPort))) {
ToastUtils.delayedShow(R.string.invalid_host_or_port, 3000);
return;
}
boolean proxyAuthenticator = switchProxyAuthenticator.isChecked();
String proxyUsername = editTextProxyUsername.getText().toString().trim();
String proxyPassword = editTextProxyPassword.getText().trim();
if (proxyAuthenticator && TextUtils.isEmpty(proxyUsername) && TextUtils.isEmpty(proxyPassword)) {
ToastUtils.delayedShow(R.string.invalid_username_or_password, 3000);
return;
}
String method = radioGroupTelegramMethod.getCheckedRadioButtonId() == R.id.radioTelegramMethodGet ? "GET" : "POST";
try {
SmsVo smsVo = new SmsVo(getString(R.string.test_phone_num), getString(R.string.test_sender_sms), new Date(), getString(R.string.test_sim_info));
TelegramSettingVo telegramSettingVoNew = new TelegramSettingVo(apiToken, chatId, proxyTypeId, proxyHost, proxyPort, proxyAuthenticator, proxyUsername, proxyPassword, method);
SenderTelegramMsg.sendMsg(0, handler, null, telegramSettingVoNew, smsVo.getMobile(), smsVo.getSmsVoForSend(), telegramSettingVoNew.getMethod());
} catch (Exception e) {
ToastUtils.delayedShow(getString(R.string.failed_to_fwd) + e.getMessage(), 3000);
e.printStackTrace();
}
});
}
//短信
private void setSms(final SenderModel senderModel, final boolean isClone) {
if (!isClone) {
XXPermissions.with(this)
// 接收短信
.permission(Permission.RECEIVE_SMS)
// 发送短信
.permission(Permission.SEND_SMS)
// 读取短信
.permission(Permission.READ_SMS)
.request(new OnPermissionCallback() {
@Override
public void onGranted(List<String> permissions, boolean all) {
if (!all) {
ToastUtils.show(R.string.toast_granted_part);
}
}
@Override
public void onDenied(List<String> permissions, boolean never) {
if (never) {
ToastUtils.show(R.string.toast_denied_never);
// 如果是被永久拒绝就跳转到应用权限系统设置页面
XXPermissions.startPermissionActivity(SenderActivity.this, permissions);
} else {
ToastUtils.show(R.string.toast_denied);
}
}
});
}
SmsSettingVo smsSettingVo = null;
//try phrase json setting
if (senderModel != null) {
String jsonSettingStr = senderModel.getJsonSetting();
Log.d(TAG, "jsonSettingStr = " + jsonSettingStr);
if (jsonSettingStr != null) {
smsSettingVo = JSON.parseObject(jsonSettingStr, SmsSettingVo.class);
}
}
final AlertDialog.Builder alertDialog71 = new AlertDialog.Builder(SenderActivity.this);
View view1 = View.inflate(SenderActivity.this, R.layout.alert_dialog_setview_sms, null);
final EditText editTextSmsName = view1.findViewById(R.id.editTextSmsName);
@SuppressLint("UseSwitchCompatOrMaterialCode") final Switch switchSmsEnable = view1.findViewById(R.id.switchSmsEnable);
if (senderModel != null) {
editTextSmsName.setText(senderModel.getName());
switchSmsEnable.setChecked(senderModel.getStatusChecked());
}
final RadioGroup radioGroupSmsSimSlot = view1.findViewById(R.id.radioGroupSmsSimSlot);
final EditText editTextSmsMobiles = view1.findViewById(R.id.editTextSmsMobiles);
@SuppressLint("UseSwitchCompatOrMaterialCode") final Switch switchSmsOnlyNoNetwork = view1.findViewById(R.id.switchSmsOnlyNoNetwork);
if (smsSettingVo != null) {
radioGroupSmsSimSlot.check(smsSettingVo.getSmsSimSlotCheckId());
editTextSmsMobiles.setText(smsSettingVo.getMobiles());
switchSmsOnlyNoNetwork.setChecked(smsSettingVo.getOnlyNoNetwork());
}
Button buttonOk = view1.findViewById(R.id.buttonOk);
Button buttonDel = view1.findViewById(R.id.buttonDel);
buttonDel.setText(senderModel != null ? R.string.del : R.string.cancel);
Button buttonTest = view1.findViewById(R.id.buttonTest);
alertDialog71
.setTitle(R.string.setsmstitle)
.setIcon(R.mipmap.sms)
.setView(view1)
.create();
final AlertDialog show = alertDialog71.show();
buttonOk.setOnClickListener(view -> {
String senderName = editTextSmsName.getText().toString().trim();
int senderStatus = switchSmsEnable.isChecked() ? STATUS_ON : STATUS_OFF;
if (TextUtils.isEmpty(senderName)) {
ToastUtils.delayedShow(R.string.invalid_name, 3000);
return;
}
Boolean onlyNoNetwork = switchSmsOnlyNoNetwork.isChecked();
String mobiles = editTextSmsMobiles.getText().toString().trim();
if (TextUtils.isEmpty(mobiles)) {
ToastUtils.delayedShow(R.string.invalid_phone_num, 3000);
return;
}
if (isClone || senderModel == null) {
SenderModel newSenderModel = new SenderModel();
newSenderModel.setName(senderName);
newSenderModel.setType(TYPE_SMS);
newSenderModel.setStatus(senderStatus);
SmsSettingVo smsSettingVoNew = new SmsSettingVo(
newSenderModel.getSmsSimSlotId(radioGroupSmsSimSlot.getCheckedRadioButtonId()),
mobiles,
onlyNoNetwork
);
newSenderModel.setJsonSetting(JSON.toJSONString(smsSettingVoNew));
SenderUtil.addSender(newSenderModel);
initSenders();
adapter.add(senderModels);
} else {
senderModel.setName(senderName);
senderModel.setType(TYPE_SMS);
senderModel.setStatus(senderStatus);
SmsSettingVo smsSettingVoNew = new SmsSettingVo(
senderModel.getSmsSimSlotId(radioGroupSmsSimSlot.getCheckedRadioButtonId()),
mobiles,
onlyNoNetwork
);
senderModel.setJsonSetting(JSON.toJSONString(smsSettingVoNew));
SenderUtil.updateSender(senderModel);
initSenders();
adapter.update(senderModels);
}
show.dismiss();
});
buttonDel.setOnClickListener(view -> {
if (senderModel != null) {
SenderUtil.delSender(senderModel.getId());
initSenders();
adapter.del(senderModels);
}
show.dismiss();
});
buttonTest.setOnClickListener(view -> {
int simSlot = R.id.btnSmsSimSlot2 == radioGroupSmsSimSlot.getCheckedRadioButtonId() ? 1 : 0;
Boolean onlyNoNetwork = switchSmsOnlyNoNetwork.isChecked();
String mobiles = editTextSmsMobiles.getText().toString().trim();
if (TextUtils.isEmpty(mobiles)) {
ToastUtils.delayedShow(R.string.invalid_phone_num, 3000);
return;
}
try {
SmsVo smsVo = new SmsVo(getString(R.string.test_phone_num), getString(R.string.test_sender_sms), new Date(), getString(R.string.test_sim_info));
SenderSmsMsg.sendMsg(0, handler, simSlot, mobiles, onlyNoNetwork, smsVo.getMobile(), smsVo.getSmsVoForSend());
} catch (Exception e) {
ToastUtils.delayedShow(getString(R.string.failed_to_fwd) + e.getMessage(), 3000);
e.printStackTrace();
}
});
}
//飞书机器人
@SuppressLint("SimpleDateFormat")
private void setFeiShu(final SenderModel senderModel, final boolean isClone) {
FeiShuSettingVo feiShuSettingVo = null;
//try phrase json setting
if (senderModel != null) {
String jsonSettingStr = senderModel.getJsonSetting();
if (jsonSettingStr != null) {
feiShuSettingVo = JSON.parseObject(jsonSettingStr, FeiShuSettingVo.class);
}
}
final AlertDialog.Builder alertDialog71 = new AlertDialog.Builder(SenderActivity.this);
View view1 = View.inflate(SenderActivity.this, R.layout.alert_dialog_setview_feishu, null);
final EditText editTextFeishuName = view1.findViewById(R.id.editTextFeishuName);
@SuppressLint("UseSwitchCompatOrMaterialCode") final Switch switchFeishuEnable = view1.findViewById(R.id.switchFeishuEnable);
if (senderModel != null) {
editTextFeishuName.setText(senderModel.getName());
switchFeishuEnable.setChecked(senderModel.getStatusChecked());
}
final ClearEditText editTextFeishuWebhook = view1.findViewById(R.id.editTextFeishuWebhook);
final ClearEditText editTextFeishuSecret = view1.findViewById(R.id.editTextFeishuSecret);
final RadioGroup radioGroupFeishuMsgType = view1.findViewById(R.id.radioGroupFeishuMsgType);
final EditText editTextFeishuTitle = view1.findViewById(R.id.editTextFeishuTitle);
final LinearLayout layoutTitleTemplate = view1.findViewById(R.id.layoutTitleTemplate);
if (feiShuSettingVo != null) {
editTextFeishuWebhook.setText(feiShuSettingVo.getWebhook());
editTextFeishuSecret.setText(feiShuSettingVo.getSecret());
radioGroupFeishuMsgType.check(feiShuSettingVo.getMsgTypeCheckId());
editTextFeishuTitle.setText(feiShuSettingVo.getTitleTemplate());
if ("text".equals(feiShuSettingVo.getMsgType())) {
layoutTitleTemplate.setVisibility(View.GONE);
} else {
layoutTitleTemplate.setVisibility(View.VISIBLE);
}
}
radioGroupFeishuMsgType.setOnCheckedChangeListener((group, checkedId) -> {
if (group != null && checkedId > 0) {
layoutTitleTemplate.setVisibility(checkedId == R.id.radioFeishuMsgTypeText ? View.GONE : View.VISIBLE);
group.check(checkedId);
}
});
Button buttonOk = view1.findViewById(R.id.buttonOk);
Button buttonDel = view1.findViewById(R.id.buttonDel);
buttonDel.setText(senderModel != null ? R.string.del : R.string.cancel);
Button buttonTest = view1.findViewById(R.id.buttonTest);
alertDialog71
.setTitle(R.string.setfeishutitle)
.setIcon(R.mipmap.feishu)
.setView(view1)
.create();
final AlertDialog show = alertDialog71.show();
buttonOk.setOnClickListener(view -> {
String senderName = editTextFeishuName.getText().toString().trim();
int senderStatus = switchFeishuEnable.isChecked() ? STATUS_ON : STATUS_OFF;
if (TextUtils.isEmpty(senderName)) {
ToastUtils.delayedShow(R.string.invalid_name, 3000);
return;
}
String webHook = editTextFeishuWebhook.getText().trim();
String secret = editTextFeishuSecret.getText().trim();
String msgType = radioGroupFeishuMsgType.getCheckedRadioButtonId() == R.id.radioFeishuMsgTypeText ? "text" : "interactive";
String titleTemplate = editTextFeishuTitle.getText().toString().trim();
if (!CommonUtils.checkUrl(webHook, false)) {
ToastUtils.delayedShow(R.string.invalid_webhook, 3000);
return;
}
if (TextUtils.isEmpty(titleTemplate)) titleTemplate = "【{{设备名称}}】来自{{来源号码}}的通知";
FeiShuSettingVo feiShuSettingVoNew = new FeiShuSettingVo(webHook, secret, msgType, titleTemplate);
if (isClone || senderModel == null) {
SenderModel newSenderModel = new SenderModel();
newSenderModel.setName(senderName);
newSenderModel.setType(TYPE_FEISHU);
newSenderModel.setStatus(senderStatus);
newSenderModel.setJsonSetting(JSON.toJSONString(feiShuSettingVoNew));
SenderUtil.addSender(newSenderModel);
initSenders();
adapter.add(senderModels);
} else {
senderModel.setName(senderName);
senderModel.setType(TYPE_FEISHU);
senderModel.setStatus(senderStatus);
senderModel.setJsonSetting(JSON.toJSONString(feiShuSettingVoNew));
SenderUtil.updateSender(senderModel);
initSenders();
adapter.update(senderModels);
}
show.dismiss();
});
buttonDel.setOnClickListener(view -> {
if (senderModel != null) {
SenderUtil.delSender(senderModel.getId());
initSenders();
adapter.del(senderModels);
}
show.dismiss();
});
buttonTest.setOnClickListener(view -> {
String webHook = editTextFeishuWebhook.getText().trim();
String secret = editTextFeishuSecret.getText().trim();
String msgType = radioGroupFeishuMsgType.getCheckedRadioButtonId() == R.id.radioFeishuMsgTypeText ? "text" : "interactive";
String titleTemplate = editTextFeishuTitle.getText().toString().trim();
if (!CommonUtils.checkUrl(webHook, false)) {
ToastUtils.delayedShow(R.string.invalid_webhook, 3000);
return;
}
try {
SmsVo smsVo = new SmsVo(getString(R.string.test_phone_num), getString(R.string.test_sender_sms), new Date(), getString(R.string.test_sim_info));
SenderFeishuMsg.sendMsg(0, handler, null, webHook, secret, msgType, smsVo.getMobile(), new Date(), smsVo.getTitleForSend(titleTemplate), smsVo.getSmsVoForSend());
} catch (Exception e) {
ToastUtils.delayedShow(getString(R.string.failed_to_fwd) + e.getMessage(), 3000);
e.printStackTrace();
}
});
Button buttonInsertSender = view1.findViewById(R.id.bt_insert_sender);
buttonInsertSender.setOnClickListener(view -> {
editTextFeishuTitle.setFocusable(true);
editTextFeishuTitle.requestFocus();
CommonUtils.insertOrReplaceText2Cursor(editTextFeishuTitle, getString(R.string.tag_from));
});
Button buttonInsertExtra = view1.findViewById(R.id.bt_insert_extra);
buttonInsertExtra.setOnClickListener(view -> {
editTextFeishuTitle.setFocusable(true);
editTextFeishuTitle.requestFocus();
CommonUtils.insertOrReplaceText2Cursor(editTextFeishuTitle, getString(R.string.tag_card_slot));
});
Button buttonInsertTime = view1.findViewById(R.id.bt_insert_time);
buttonInsertTime.setOnClickListener(view -> {
editTextFeishuTitle.setFocusable(true);
editTextFeishuTitle.requestFocus();
CommonUtils.insertOrReplaceText2Cursor(editTextFeishuTitle, getString(R.string.tag_receive_time));
});
Button buttonInsertDeviceName = view1.findViewById(R.id.bt_insert_device_name);
buttonInsertDeviceName.setOnClickListener(view -> {
editTextFeishuTitle.setFocusable(true);
editTextFeishuTitle.requestFocus();
CommonUtils.insertOrReplaceText2Cursor(editTextFeishuTitle, getString(R.string.tag_device_name));
});
}
//推送加
@SuppressLint("SimpleDateFormat")
private void setPushPlus(final SenderModel senderModel, final boolean isClone) {
PushPlusSettingVo pushPlusSettingVo = null;
//try phrase json setting
if (senderModel != null) {
String jsonSettingStr = senderModel.getJsonSetting();
if (jsonSettingStr != null) {
pushPlusSettingVo = JSON.parseObject(jsonSettingStr, PushPlusSettingVo.class);
}
}
final AlertDialog.Builder alertDialog71 = new AlertDialog.Builder(SenderActivity.this);
View view1 = View.inflate(SenderActivity.this, R.layout.alert_dialog_setview_pushplus, null);
final EditText editTextPushPlusName = view1.findViewById(R.id.editTextPushPlusName);
@SuppressLint("UseSwitchCompatOrMaterialCode") final Switch switchPushPlusEnable = view1.findViewById(R.id.switchPushPlusEnable);
if (senderModel != null) {
editTextPushPlusName.setText(senderModel.getName());
switchPushPlusEnable.setChecked(senderModel.getStatusChecked());
}
final ClearEditText editTextPushPlusToken = view1.findViewById(R.id.editTextPushPlusToken);
final EditText editTextPushPlusTopic = view1.findViewById(R.id.editTextPushPlusTopic);
final EditText editTextPushPlusTemplate = view1.findViewById(R.id.editTextPushPlusTemplate);
final EditText editTextPushPlusChannel = view1.findViewById(R.id.editTextPushPlusChannel);
final EditText editTextPushPlusWebhook = view1.findViewById(R.id.editTextPushPlusWebhook);
final EditText editTextPushPlusCallbackUrl = view1.findViewById(R.id.editTextPushPlusCallbackUrl);
final EditText editTextPushPlusValidTime = view1.findViewById(R.id.editTextPushPlusValidTime);
final EditText editTextPushPlusTitle = view1.findViewById(R.id.editTextPushPlusTitle);
if (pushPlusSettingVo != null) {
editTextPushPlusToken.setText(pushPlusSettingVo.getToken());
editTextPushPlusTopic.setText(pushPlusSettingVo.getTopic());
editTextPushPlusTemplate.setText(pushPlusSettingVo.getTemplate());
editTextPushPlusChannel.setText(pushPlusSettingVo.getChannel());
editTextPushPlusWebhook.setText(pushPlusSettingVo.getWebhook());
editTextPushPlusCallbackUrl.setText(pushPlusSettingVo.getCallbackUrl());
editTextPushPlusValidTime.setText(pushPlusSettingVo.getValidTime());
editTextPushPlusTitle.setText(pushPlusSettingVo.getTitleTemplate());
}
Button buttonOk = view1.findViewById(R.id.buttonOk);
Button buttonDel = view1.findViewById(R.id.buttonDel);
buttonDel.setText(senderModel != null ? R.string.del : R.string.cancel);
Button buttonTest = view1.findViewById(R.id.buttonTest);
alertDialog71
.setTitle(R.string.setpushplustitle)
.setIcon(R.mipmap.pushplus)
.setView(view1)
.create();
final AlertDialog show = alertDialog71.show();
buttonOk.setOnClickListener(view -> {
String senderName = editTextPushPlusName.getText().toString().trim();
int senderStatus = switchPushPlusEnable.isChecked() ? STATUS_ON : STATUS_OFF;
if (TextUtils.isEmpty(senderName)) {
ToastUtils.delayedShow(R.string.invalid_name, 3000);
return;
}
PushPlusSettingVo pushPlusSettingVoNew = new PushPlusSettingVo(
editTextPushPlusToken.getText().trim(),
editTextPushPlusTopic.getText().toString().trim(),
editTextPushPlusTemplate.getText().toString().trim(),
editTextPushPlusChannel.getText().toString().trim(),
editTextPushPlusWebhook.getText().toString().trim(),
editTextPushPlusCallbackUrl.getText().toString().trim(),
editTextPushPlusValidTime.getText().toString().trim(),
editTextPushPlusTitle.getText().toString().trim()
);
if (TextUtils.isEmpty(pushPlusSettingVoNew.getToken())) {
ToastUtils.delayedShow(R.string.invalid_token, 3000);
return;
}
if (isClone || senderModel == null) {
SenderModel newSenderModel = new SenderModel();
newSenderModel.setName(senderName);
newSenderModel.setType(TYPE_PUSHPLUS);
newSenderModel.setStatus(senderStatus);
newSenderModel.setJsonSetting(JSON.toJSONString(pushPlusSettingVoNew));
SenderUtil.addSender(newSenderModel);
initSenders();
adapter.add(senderModels);
} else {
senderModel.setName(senderName);
senderModel.setType(TYPE_PUSHPLUS);
senderModel.setStatus(senderStatus);
senderModel.setJsonSetting(JSON.toJSONString(pushPlusSettingVoNew));
SenderUtil.updateSender(senderModel);
initSenders();
adapter.update(senderModels);
}
show.dismiss();
});
buttonDel.setOnClickListener(view -> {
if (senderModel != null) {
SenderUtil.delSender(senderModel.getId());
initSenders();
adapter.del(senderModels);
}
show.dismiss();
});
buttonTest.setOnClickListener(view -> {
String title = editTextPushPlusTitle.getText().toString().trim();
if (title.isEmpty()) title = "SmsForwarder Title";
PushPlusSettingVo pushPlusSettingVoNew = new PushPlusSettingVo(
editTextPushPlusToken.getText().trim(),
editTextPushPlusTopic.getText().toString().trim(),
editTextPushPlusTemplate.getText().toString().trim(),
editTextPushPlusChannel.getText().toString().trim(),
editTextPushPlusWebhook.getText().toString().trim(),
editTextPushPlusCallbackUrl.getText().toString().trim(),
editTextPushPlusValidTime.getText().toString().trim(),
title
);
if (TextUtils.isEmpty(pushPlusSettingVoNew.getToken())) {
ToastUtils.delayedShow(R.string.invalid_token, 3000);
return;
}
try {
SmsVo smsVo = new SmsVo(getString(R.string.test_phone_num), getString(R.string.test_sender_sms), new Date(), getString(R.string.test_sim_info));
SenderPushPlusMsg.sendMsg(0, handler, null, pushPlusSettingVoNew, smsVo.getTitleForSend(title), smsVo.getSmsVoForSend());
} catch (Exception e) {
ToastUtils.delayedShow(getString(R.string.failed_to_fwd) + e.getMessage(), 3000);
e.printStackTrace();
}
});
Button buttonInsertSender = view1.findViewById(R.id.bt_insert_sender);
buttonInsertSender.setOnClickListener(view -> {
editTextPushPlusTitle.setFocusable(true);
editTextPushPlusTitle.requestFocus();
CommonUtils.insertOrReplaceText2Cursor(editTextPushPlusTitle, getString(R.string.tag_from));
});
Button buttonInsertExtra = view1.findViewById(R.id.bt_insert_extra);
buttonInsertExtra.setOnClickListener(view -> {
editTextPushPlusTitle.setFocusable(true);
editTextPushPlusTitle.requestFocus();
CommonUtils.insertOrReplaceText2Cursor(editTextPushPlusTitle, getString(R.string.tag_card_slot));
});
Button buttonInsertTime = view1.findViewById(R.id.bt_insert_time);
buttonInsertTime.setOnClickListener(view -> {
editTextPushPlusTitle.setFocusable(true);
editTextPushPlusTitle.requestFocus();
CommonUtils.insertOrReplaceText2Cursor(editTextPushPlusTitle, getString(R.string.tag_receive_time));
});
Button buttonInsertDeviceName = view1.findViewById(R.id.bt_insert_device_name);
buttonInsertDeviceName.setOnClickListener(view -> {
editTextPushPlusTitle.setFocusable(true);
editTextPushPlusTitle.requestFocus();
CommonUtils.insertOrReplaceText2Cursor(editTextPushPlusTitle, getString(R.string.tag_device_name));
});
}
//Gotify
@SuppressLint("SimpleDateFormat")
private void setGotify(final SenderModel senderModel, final boolean isClone) {
GotifySettingVo gotifySettingVo = null;
//try phrase json setting
if (senderModel != null) {
String jsonSettingStr = senderModel.getJsonSetting();
if (jsonSettingStr != null) {
gotifySettingVo = JSON.parseObject(jsonSettingStr, GotifySettingVo.class);
}
}
final AlertDialog.Builder alertDialog71 = new AlertDialog.Builder(SenderActivity.this);
View view1 = View.inflate(SenderActivity.this, R.layout.alert_dialog_setview_gotify, null);
final EditText editTextGotifyName = view1.findViewById(R.id.editTextGotifyName);
@SuppressLint("UseSwitchCompatOrMaterialCode") final Switch switchGotifyEnable = view1.findViewById(R.id.switchGotifyEnable);
if (senderModel != null) {
editTextGotifyName.setText(senderModel.getName());
switchGotifyEnable.setChecked(senderModel.getStatusChecked());
}
final ClearEditText editTextGotifyWebServer = view1.findViewById(R.id.editTextGotifyWebServer);
final EditText editTextGotifyTitle = view1.findViewById(R.id.editTextGotifyTitle);
final EditText editTextGotifyPriority = view1.findViewById(R.id.editTextGotifyPriority);
if (gotifySettingVo != null) {
editTextGotifyWebServer.setText(gotifySettingVo.getWebServer());
editTextGotifyTitle.setText(gotifySettingVo.getTitle());
editTextGotifyPriority.setText(gotifySettingVo.getPriority());
}
Button buttonOk = view1.findViewById(R.id.buttonOk);
Button buttonDel = view1.findViewById(R.id.buttonDel);
buttonDel.setText(senderModel != null ? R.string.del : R.string.cancel);
Button buttonTest = view1.findViewById(R.id.buttonTest);
alertDialog71
.setTitle(R.string.setgotifytitle)
.setIcon(R.mipmap.gotify)
.setView(view1)
.create();
final AlertDialog show = alertDialog71.show();
buttonOk.setOnClickListener(view -> {
String senderName = editTextGotifyName.getText().toString().trim();
int senderStatus = switchGotifyEnable.isChecked() ? STATUS_ON : STATUS_OFF;
if (TextUtils.isEmpty(senderName)) {
ToastUtils.delayedShow(R.string.invalid_name, 3000);
return;
}
String webServer = editTextGotifyWebServer.getText().trim();
if (!CommonUtils.checkUrl(webServer, false)) {
ToastUtils.delayedShow(R.string.invalid_webserver, 3000);
return;
}
String title = editTextGotifyTitle.getText().toString().trim();
if (title.isEmpty()) title = "SmsForwarder Title";
String priority = editTextGotifyPriority.getText().toString().trim();
GotifySettingVo gotifySettingVoNew = new GotifySettingVo(webServer, title, priority);
if (isClone || senderModel == null) {
SenderModel newSenderModel = new SenderModel();
newSenderModel.setName(senderName);
newSenderModel.setType(TYPE_GOTIFY);
newSenderModel.setStatus(senderStatus);
newSenderModel.setJsonSetting(JSON.toJSONString(gotifySettingVoNew));
SenderUtil.addSender(newSenderModel);
initSenders();
adapter.add(senderModels);
} else {
senderModel.setName(senderName);
senderModel.setType(TYPE_GOTIFY);
senderModel.setStatus(senderStatus);
senderModel.setJsonSetting(JSON.toJSONString(gotifySettingVoNew));
SenderUtil.updateSender(senderModel);
initSenders();
adapter.update(senderModels);
}
show.dismiss();
});
buttonDel.setOnClickListener(view -> {
if (senderModel != null) {
SenderUtil.delSender(senderModel.getId());
initSenders();
adapter.del(senderModels);
}
show.dismiss();
});
buttonTest.setOnClickListener(view -> {
String webServer = editTextGotifyWebServer.getText().trim();
if (!CommonUtils.checkUrl(webServer, false)) {
ToastUtils.delayedShow(R.string.invalid_webserver, 3000);
return;
}
String title = editTextGotifyTitle.getText().toString().trim();
if (title.isEmpty()) title = "SmsForwarder Title";
String priority = editTextGotifyPriority.getText().toString().trim();
GotifySettingVo gotifySettingVoNew = new GotifySettingVo(webServer, title, priority);
try {
SmsVo smsVo = new SmsVo(getString(R.string.test_phone_num), getString(R.string.test_sender_sms), new Date(), getString(R.string.test_sim_info));
SenderGotifyMsg.sendMsg(0, handler, null, gotifySettingVoNew, smsVo.getTitleForSend(title), smsVo.getSmsVoForSend());
} catch (Exception e) {
ToastUtils.delayedShow(getString(R.string.failed_to_fwd) + e.getMessage(), 3000);
e.printStackTrace();
}
});
Button buttonInsertSender = view1.findViewById(R.id.bt_insert_sender);
buttonInsertSender.setOnClickListener(view -> {
editTextGotifyTitle.setFocusable(true);
editTextGotifyTitle.requestFocus();
CommonUtils.insertOrReplaceText2Cursor(editTextGotifyTitle, getString(R.string.tag_from));
});
Button buttonInsertExtra = view1.findViewById(R.id.bt_insert_extra);
buttonInsertExtra.setOnClickListener(view -> {
editTextGotifyTitle.setFocusable(true);
editTextGotifyTitle.requestFocus();
CommonUtils.insertOrReplaceText2Cursor(editTextGotifyTitle, getString(R.string.tag_card_slot));
});
Button buttonInsertTime = view1.findViewById(R.id.bt_insert_time);
buttonInsertTime.setOnClickListener(view -> {
editTextGotifyTitle.setFocusable(true);
editTextGotifyTitle.requestFocus();
CommonUtils.insertOrReplaceText2Cursor(editTextGotifyTitle, getString(R.string.tag_receive_time));
});
Button buttonInsertDeviceName = view1.findViewById(R.id.bt_insert_device_name);
buttonInsertDeviceName.setOnClickListener(view -> {
editTextGotifyTitle.setFocusable(true);
editTextGotifyTitle.requestFocus();
CommonUtils.insertOrReplaceText2Cursor(editTextGotifyTitle, getString(R.string.tag_device_name));
});
}
}