diff --git a/.gitignore b/.gitignore
index f4d7428f..075cec65 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,3 +11,4 @@ local.properties
.settings/*
*/.settings/*
/app/pppscn.jks
+/psd
diff --git a/app/src/main/java/com/idormy/sms/forwarder/SenderActivity.java b/app/src/main/java/com/idormy/sms/forwarder/SenderActivity.java
index d67e53aa..a53d201a 100644
--- a/app/src/main/java/com/idormy/sms/forwarder/SenderActivity.java
+++ b/app/src/main/java/com/idormy/sms/forwarder/SenderActivity.java
@@ -1,5 +1,17 @@
package com.idormy.sms.forwarder;
+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_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.content.DialogInterface;
import android.os.Bundle;
import android.os.Handler;
@@ -26,6 +38,7 @@ 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.QYWXAppSettingVo;
import com.idormy.sms.forwarder.model.vo.QYWXGroupRobotSettingVo;
import com.idormy.sms.forwarder.model.vo.ServerChanSettingVo;
@@ -34,6 +47,7 @@ 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.SenderMailMsg;
import com.idormy.sms.forwarder.sender.SenderQyWxAppMsg;
import com.idormy.sms.forwarder.sender.SenderQyWxGroupRobotMsg;
@@ -49,17 +63,6 @@ import java.util.ArrayList;
import java.util.Date;
import java.util.List;
-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_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;
-
public class SenderActivity extends AppCompatActivity {
public static final int NOTIFY = 0x9731993;
@@ -140,6 +143,9 @@ public class SenderActivity extends AppCompatActivity {
case TYPE_SMS:
setSms(senderModel);
break;
+ case TYPE_FEISHU:
+ setFeiShu(senderModel);
+ break;
default:
Toast.makeText(SenderActivity.this, "异常的发送方类型,自动删除!", Toast.LENGTH_LONG).show();
if (senderModel != null) {
@@ -175,7 +181,6 @@ public class SenderActivity extends AppCompatActivity {
//添加AlertDialog.Builder对象的setNegativeButton()方法
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
-
@Override
public void onClick(DialogInterface dialog, int which) {
@@ -227,6 +232,9 @@ public class SenderActivity extends AppCompatActivity {
case TYPE_SMS:
setSms(null);
break;
+ case TYPE_FEISHU:
+ setFeiShu(null);
+ break;
default:
Toast.makeText(SenderActivity.this, "暂不支持这种转发!", Toast.LENGTH_LONG).show();
break;
@@ -237,6 +245,7 @@ public class SenderActivity extends AppCompatActivity {
Log.d(TAG, "setDingDing show" + senderModels.size());
}
+ //钉钉机器人
private void setDingDing(final SenderModel senderModel) {
DingDingSettingVo dingDingSettingVo = null;
//try phrase json setting
@@ -349,6 +358,7 @@ public class SenderActivity extends AppCompatActivity {
});
}
+ //邮箱
private void setEmail(final SenderModel senderModel) {
EmailSettingVo emailSettingVo = null;
//try phrase json setting
@@ -476,6 +486,7 @@ public class SenderActivity extends AppCompatActivity {
});
}
+ //Bark
private void setBark(final SenderModel senderModel) {
BarkSettingVo barkSettingVo = null;
//try phrase json setting
@@ -566,6 +577,7 @@ public class SenderActivity extends AppCompatActivity {
});
}
+ //Server酱·Turbo版
private void setServerChan(final SenderModel senderModel) {
ServerChanSettingVo serverchanSettingVo = null;
//try phrase json setting
@@ -740,7 +752,7 @@ public class SenderActivity extends AppCompatActivity {
String method = radioGroupWebNotifyMethod.getCheckedRadioButtonId() == R.id.radioWebNotifyMethodGet ? "GET" : "POST";
if (!webServer.isEmpty()) {
try {
- SenderWebNotifyMsg.sendMsg(0, handler, webServer, webParams,secret, method, "SmsForwarder Title", "测试内容(content)@" + (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())));
+ SenderWebNotifyMsg.sendMsg(0, handler, webServer, webParams, secret, method, "SmsForwarder Title", "测试内容(content)@" + (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())));
} catch (Exception e) {
Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show();
e.printStackTrace();
@@ -1073,7 +1085,7 @@ public class SenderActivity extends AppCompatActivity {
});
}
- //Sms
+ //短信
private void setSms(final SenderModel senderModel) {
SmsSettingVo smsSettingVo = null;
//try phrase json setting
@@ -1178,6 +1190,101 @@ public class SenderActivity extends AppCompatActivity {
});
}
+ //飞书机器人
+ private void setFeiShu(final SenderModel senderModel) {
+ 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);
+ if (senderModel != null)
+ editTextFeishuName.setText(senderModel.getName());
+ final EditText editTextFeishuWebhook = view1.findViewById(R.id.editTextFeishuWebhook);
+ if (feiShuSettingVo != null)
+ editTextFeishuWebhook.setText(feiShuSettingVo.getWebhook());
+ final EditText editTextFeishuSecret = view1.findViewById(R.id.editTextFeishuSecret);
+ if (feiShuSettingVo != null)
+ editTextFeishuSecret.setText(feiShuSettingVo.getSecret());
+
+ Button buttonfeishuok = view1.findViewById(R.id.buttonfeishuok);
+ Button buttonfeishudel = view1.findViewById(R.id.buttonfeishudel);
+ Button buttonfeishutest = view1.findViewById(R.id.buttonfeishutest);
+ alertDialog71
+ .setTitle(R.string.setfeishutitle)
+ .setIcon(R.mipmap.feishu)
+ .setView(view1)
+ .create();
+ final AlertDialog show = alertDialog71.show();
+ buttonfeishuok.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+
+ if (senderModel == null) {
+ SenderModel newSenderModel = new SenderModel();
+ newSenderModel.setName(editTextFeishuName.getText().toString());
+ newSenderModel.setType(TYPE_FEISHU);
+ newSenderModel.setStatus(STATUS_ON);
+ FeiShuSettingVo feiShuSettingVonew = new FeiShuSettingVo(
+ editTextFeishuWebhook.getText().toString(),
+ editTextFeishuSecret.getText().toString());
+ newSenderModel.setJsonSetting(JSON.toJSONString(feiShuSettingVonew));
+ SenderUtil.addSender(newSenderModel);
+ initSenders();
+ adapter.add(senderModels);
+ } else {
+ senderModel.setName(editTextFeishuName.getText().toString());
+ senderModel.setType(TYPE_FEISHU);
+ senderModel.setStatus(STATUS_ON);
+ FeiShuSettingVo feiShuSettingVonew = new FeiShuSettingVo(
+ editTextFeishuWebhook.getText().toString(),
+ editTextFeishuSecret.getText().toString());
+ senderModel.setJsonSetting(JSON.toJSONString(feiShuSettingVonew));
+ SenderUtil.updateSender(senderModel);
+ initSenders();
+ adapter.update(senderModels);
+ }
+ show.dismiss();
+ }
+ });
+
+ buttonfeishudel.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if (senderModel != null) {
+ SenderUtil.delSender(senderModel.getId());
+ initSenders();
+ adapter.del(senderModels);
+ }
+ show.dismiss();
+ }
+ });
+
+ buttonfeishutest.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ String token = editTextFeishuWebhook.getText().toString();
+ String secret = editTextFeishuSecret.getText().toString();
+ if (token != null && !token.isEmpty()) {
+ try {
+ SenderFeishuMsg.sendMsg(0, handler, token, secret, "测试内容(content)@" + (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())));
+ } catch (Exception e) {
+ Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show();
+ e.printStackTrace();
+ }
+ } else {
+ Toast.makeText(SenderActivity.this, "token 不能为空", Toast.LENGTH_LONG).show();
+ }
+ }
+ });
+ }
+
@Override
protected void onDestroy() {
Log.d(TAG, "onDestroy");
diff --git a/app/src/main/java/com/idormy/sms/forwarder/model/SenderModel.java b/app/src/main/java/com/idormy/sms/forwarder/model/SenderModel.java
index 2b81e0f0..88238ff0 100644
--- a/app/src/main/java/com/idormy/sms/forwarder/model/SenderModel.java
+++ b/app/src/main/java/com/idormy/sms/forwarder/model/SenderModel.java
@@ -17,6 +17,7 @@ public class SenderModel {
public static final int TYPE_SERVER_CHAN = 6;
public static final int TYPE_TELEGRAM = 7;
public static final int TYPE_SMS = 8;
+ public static final int TYPE_FEISHU = 9;
private Long id;
private String name;
private int status;
@@ -52,8 +53,9 @@ public class SenderModel {
return R.mipmap.serverchan;
case (TYPE_TELEGRAM):
return R.mipmap.telegram;
+ case (TYPE_FEISHU):
+ return R.mipmap.feishu;
case (TYPE_SMS):
- return R.mipmap.sms;
default:
return R.mipmap.sms;
}
@@ -77,6 +79,9 @@ public class SenderModel {
return R.mipmap.serverchan;
case (TYPE_TELEGRAM):
return R.mipmap.telegram;
+ case (TYPE_FEISHU):
+ return R.mipmap.feishu;
+ case (TYPE_SMS):
default:
return R.mipmap.sms;
diff --git a/app/src/main/java/com/idormy/sms/forwarder/model/vo/FeiShuSettingVo.java b/app/src/main/java/com/idormy/sms/forwarder/model/vo/FeiShuSettingVo.java
new file mode 100644
index 00000000..4ce58e87
--- /dev/null
+++ b/app/src/main/java/com/idormy/sms/forwarder/model/vo/FeiShuSettingVo.java
@@ -0,0 +1,19 @@
+package com.idormy.sms.forwarder.model.vo;
+
+import java.io.Serializable;
+
+import lombok.Data;
+
+@Data
+public class FeiShuSettingVo implements Serializable {
+ private String webhook;
+ private String secret;
+
+ public FeiShuSettingVo() {
+ }
+
+ public FeiShuSettingVo(String webhook, String secret) {
+ this.webhook = webhook;
+ this.secret = secret;
+ }
+}
diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SendUtil.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SendUtil.java
index 26b62a16..5a6c8561 100644
--- a/app/src/main/java/com/idormy/sms/forwarder/sender/SendUtil.java
+++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SendUtil.java
@@ -3,6 +3,7 @@ package com.idormy.sms.forwarder.sender;
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_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;
@@ -21,6 +22,7 @@ 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.QYWXAppSettingVo;
import com.idormy.sms.forwarder.model.vo.QYWXGroupRobotSettingVo;
import com.idormy.sms.forwarder.model.vo.ServerChanSettingVo;
@@ -254,6 +256,21 @@ public class SendUtil {
}
break;
+ case TYPE_FEISHU:
+ //try phrase json setting
+ if (senderModel.getJsonSetting() != null) {
+ FeiShuSettingVo feiShuSettingVo = JSON.parseObject(senderModel.getJsonSetting(), FeiShuSettingVo.class);
+ if (feiShuSettingVo != null) {
+ try {
+ SenderFeishuMsg.sendMsg(logId, handError, feiShuSettingVo.getWebhook(), feiShuSettingVo.getSecret(), smsVo.getSmsVoForSend());
+ } catch (Exception e) {
+ LogUtil.updateLog(logId, 0, e.getMessage());
+ Log.e(TAG, "senderSendMsg: feishu error " + e.getMessage());
+ }
+ }
+ }
+ break;
+
default:
break;
}
diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderFeishuMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderFeishuMsg.java
new file mode 100644
index 00000000..703297e3
--- /dev/null
+++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderFeishuMsg.java
@@ -0,0 +1,116 @@
+package com.idormy.sms.forwarder.sender;
+
+import static com.idormy.sms.forwarder.SenderActivity.NOTIFY;
+
+import android.os.Bundle;
+import android.os.Handler;
+import android.util.Base64;
+import android.util.Log;
+
+import com.alibaba.fastjson.JSON;
+import com.idormy.sms.forwarder.utils.LogUtil;
+
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+
+import okhttp3.Call;
+import okhttp3.Callback;
+import okhttp3.MediaType;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.RequestBody;
+import okhttp3.Response;
+
+public class SenderFeishuMsg {
+
+ static String TAG = "SenderFeishuMsg";
+
+ public static void sendMsg(final long logId, final Handler handError, String webhook, String secret, String msg) throws Exception {
+ Log.i(TAG, "sendMsg webhook:" + webhook + " secret:" + secret + " msg:" + msg);
+
+ if (webhook == null || webhook.isEmpty()) {
+ return;
+ }
+
+ Map textMsgMap = new HashMap();
+
+ //签名校验
+ if (secret != null && !secret.isEmpty()) {
+ Long timestamp = System.currentTimeMillis();
+ String stringToSign = timestamp + "\n" + secret;
+ Mac mac = Mac.getInstance("HmacSHA256");
+ mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
+ byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
+ String sign = URLEncoder.encode(new String(Base64.encode(signData, Base64.NO_WRAP)), "UTF-8");
+ textMsgMap.put("timestamp", timestamp);
+ textMsgMap.put("sign", sign);
+ }
+
+ //组装报文
+ textMsgMap.put("msg_type", "text");
+ Map content = new HashMap();
+ content.put("text", msg);
+ textMsgMap.put("content", content);
+
+ String textMsg = JSON.toJSONString(textMsgMap);
+ Log.i(TAG, "textMsg:" + textMsg);
+
+ OkHttpClient client = new OkHttpClient();
+ RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"),
+ textMsg);
+
+ final Request request = new Request.Builder()
+ .url(webhook)
+ .addHeader("Content-Type", "application/json; charset=utf-8")
+ .post(requestBody)
+ .build();
+ Call call = client.newCall(request);
+ call.enqueue(new Callback() {
+ @Override
+ public void onFailure(Call call, final IOException e) {
+ LogUtil.updateLog(logId, 0, e.getMessage());
+ Log.d(TAG, "onFailure:" + e.getMessage());
+
+ if (handError != null) {
+ android.os.Message msg = new android.os.Message();
+ msg.what = NOTIFY;
+ Bundle bundle = new Bundle();
+ bundle.putString("DATA", "发送失败:" + e.getMessage());
+ msg.setData(bundle);
+ handError.sendMessage(msg);
+ }
+
+ }
+
+ @Override
+ public void onResponse(Call call, Response response) throws IOException {
+ final String responseStr = response.body().string();
+ Log.d(TAG, "Code:" + String.valueOf(response.code()) + responseStr);
+
+ //TODO:粗略解析是否发送成功
+ if (responseStr.contains("\"StatusCode\":0")) {
+ LogUtil.updateLog(logId, 1, responseStr);
+ } else {
+ LogUtil.updateLog(logId, 0, responseStr);
+ }
+
+ if (handError != null) {
+ android.os.Message msg = new android.os.Message();
+ msg.what = NOTIFY;
+ Bundle bundle = new Bundle();
+ bundle.putString("DATA", "发送状态:" + responseStr);
+ msg.setData(bundle);
+ handError.sendMessage(msg);
+ Log.d(TAG, "respone:" + String.valueOf(response.code()) + responseStr);
+ }
+
+ }
+ });
+ }
+
+}
diff --git a/app/src/main/res/layout/alert_dialog_setview_feishu.xml b/app/src/main/res/layout/alert_dialog_setview_feishu.xml
new file mode 100644
index 00000000..704b790d
--- /dev/null
+++ b/app/src/main/res/layout/alert_dialog_setview_feishu.xml
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-hdpi/bark.png b/app/src/main/res/mipmap-hdpi/bark.png
deleted file mode 100644
index 74e9d39f..00000000
Binary files a/app/src/main/res/mipmap-hdpi/bark.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-hdpi/dingding.png b/app/src/main/res/mipmap-hdpi/dingding.png
deleted file mode 100644
index 51055071..00000000
Binary files a/app/src/main/res/mipmap-hdpi/dingding.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-hdpi/email.png b/app/src/main/res/mipmap-hdpi/email.png
deleted file mode 100644
index d9a01278..00000000
Binary files a/app/src/main/res/mipmap-hdpi/email.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-hdpi/feishu.png b/app/src/main/res/mipmap-hdpi/feishu.png
new file mode 100644
index 00000000..59d10977
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/feishu.png differ
diff --git a/app/src/main/res/mipmap-hdpi/qywx.png b/app/src/main/res/mipmap-hdpi/qywx.png
deleted file mode 100644
index d1af7b21..00000000
Binary files a/app/src/main/res/mipmap-hdpi/qywx.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-hdpi/qywxapp.png b/app/src/main/res/mipmap-hdpi/qywxapp.png
deleted file mode 100644
index eb2cc7e8..00000000
Binary files a/app/src/main/res/mipmap-hdpi/qywxapp.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-hdpi/serverchan.png b/app/src/main/res/mipmap-hdpi/serverchan.png
deleted file mode 100644
index 97282736..00000000
Binary files a/app/src/main/res/mipmap-hdpi/serverchan.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-hdpi/telegram.png b/app/src/main/res/mipmap-hdpi/telegram.png
deleted file mode 100644
index 9d365f61..00000000
Binary files a/app/src/main/res/mipmap-hdpi/telegram.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-hdpi/webhook.png b/app/src/main/res/mipmap-hdpi/webhook.png
deleted file mode 100644
index f978681b..00000000
Binary files a/app/src/main/res/mipmap-hdpi/webhook.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-mdpi/bark.png b/app/src/main/res/mipmap-mdpi/bark.png
deleted file mode 100644
index 909fe7bf..00000000
Binary files a/app/src/main/res/mipmap-mdpi/bark.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-mdpi/dingding.png b/app/src/main/res/mipmap-mdpi/dingding.png
deleted file mode 100644
index 3c9b7736..00000000
Binary files a/app/src/main/res/mipmap-mdpi/dingding.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-mdpi/email.png b/app/src/main/res/mipmap-mdpi/email.png
deleted file mode 100644
index 801dd7e2..00000000
Binary files a/app/src/main/res/mipmap-mdpi/email.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-mdpi/feishu.png b/app/src/main/res/mipmap-mdpi/feishu.png
new file mode 100644
index 00000000..c5944944
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/feishu.png differ
diff --git a/app/src/main/res/mipmap-mdpi/qywx.png b/app/src/main/res/mipmap-mdpi/qywx.png
deleted file mode 100644
index cb4d6e49..00000000
Binary files a/app/src/main/res/mipmap-mdpi/qywx.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-mdpi/qywxapp.png b/app/src/main/res/mipmap-mdpi/qywxapp.png
deleted file mode 100644
index 90657950..00000000
Binary files a/app/src/main/res/mipmap-mdpi/qywxapp.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-mdpi/serverchan.png b/app/src/main/res/mipmap-mdpi/serverchan.png
deleted file mode 100644
index dffdb835..00000000
Binary files a/app/src/main/res/mipmap-mdpi/serverchan.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-mdpi/telegram.png b/app/src/main/res/mipmap-mdpi/telegram.png
deleted file mode 100644
index 91518e27..00000000
Binary files a/app/src/main/res/mipmap-mdpi/telegram.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-mdpi/webhook.png b/app/src/main/res/mipmap-mdpi/webhook.png
deleted file mode 100644
index 491093d7..00000000
Binary files a/app/src/main/res/mipmap-mdpi/webhook.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/bark.png b/app/src/main/res/mipmap-xhdpi/bark.png
deleted file mode 100644
index 83826d85..00000000
Binary files a/app/src/main/res/mipmap-xhdpi/bark.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/dingding.png b/app/src/main/res/mipmap-xhdpi/dingding.png
deleted file mode 100644
index cf69e5e6..00000000
Binary files a/app/src/main/res/mipmap-xhdpi/dingding.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/email.png b/app/src/main/res/mipmap-xhdpi/email.png
deleted file mode 100644
index 3e28759f..00000000
Binary files a/app/src/main/res/mipmap-xhdpi/email.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/feishu.png b/app/src/main/res/mipmap-xhdpi/feishu.png
new file mode 100644
index 00000000..ab7c7373
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/feishu.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/qywx.png b/app/src/main/res/mipmap-xhdpi/qywx.png
deleted file mode 100644
index fc909cb4..00000000
Binary files a/app/src/main/res/mipmap-xhdpi/qywx.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/qywxapp.png b/app/src/main/res/mipmap-xhdpi/qywxapp.png
deleted file mode 100644
index 902db8b5..00000000
Binary files a/app/src/main/res/mipmap-xhdpi/qywxapp.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/serverchan.png b/app/src/main/res/mipmap-xhdpi/serverchan.png
deleted file mode 100644
index 38bce909..00000000
Binary files a/app/src/main/res/mipmap-xhdpi/serverchan.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/telegram.png b/app/src/main/res/mipmap-xhdpi/telegram.png
deleted file mode 100644
index 7633fc5b..00000000
Binary files a/app/src/main/res/mipmap-xhdpi/telegram.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/webhook.png b/app/src/main/res/mipmap-xhdpi/webhook.png
deleted file mode 100644
index 85ae2d88..00000000
Binary files a/app/src/main/res/mipmap-xhdpi/webhook.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/bark.png b/app/src/main/res/mipmap-xxhdpi/bark.png
deleted file mode 100644
index febf2c0d..00000000
Binary files a/app/src/main/res/mipmap-xxhdpi/bark.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/dingding.png b/app/src/main/res/mipmap-xxhdpi/dingding.png
deleted file mode 100644
index 1413b836..00000000
Binary files a/app/src/main/res/mipmap-xxhdpi/dingding.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/email.png b/app/src/main/res/mipmap-xxhdpi/email.png
deleted file mode 100644
index 534ba7d9..00000000
Binary files a/app/src/main/res/mipmap-xxhdpi/email.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/feishu.png b/app/src/main/res/mipmap-xxhdpi/feishu.png
new file mode 100644
index 00000000..73bdc159
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/feishu.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/qywx.png b/app/src/main/res/mipmap-xxhdpi/qywx.png
deleted file mode 100644
index 0f0b1e0a..00000000
Binary files a/app/src/main/res/mipmap-xxhdpi/qywx.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/qywxapp.png b/app/src/main/res/mipmap-xxhdpi/qywxapp.png
deleted file mode 100644
index d8e79152..00000000
Binary files a/app/src/main/res/mipmap-xxhdpi/qywxapp.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/serverchan.png b/app/src/main/res/mipmap-xxhdpi/serverchan.png
deleted file mode 100644
index 853bf825..00000000
Binary files a/app/src/main/res/mipmap-xxhdpi/serverchan.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/telegram.png b/app/src/main/res/mipmap-xxhdpi/telegram.png
deleted file mode 100644
index 8ecd549c..00000000
Binary files a/app/src/main/res/mipmap-xxhdpi/telegram.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/webhook.png b/app/src/main/res/mipmap-xxhdpi/webhook.png
deleted file mode 100644
index 4c0a536c..00000000
Binary files a/app/src/main/res/mipmap-xxhdpi/webhook.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/bark.png b/app/src/main/res/mipmap-xxxhdpi/bark.png
deleted file mode 100644
index e6204ab9..00000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/bark.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/dingding.png b/app/src/main/res/mipmap-xxxhdpi/dingding.png
deleted file mode 100644
index 1f4d906b..00000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/dingding.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/email.png b/app/src/main/res/mipmap-xxxhdpi/email.png
deleted file mode 100644
index f97f1d24..00000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/email.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/feishu.png b/app/src/main/res/mipmap-xxxhdpi/feishu.png
new file mode 100644
index 00000000..a8d60fd5
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/feishu.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/qywx.png b/app/src/main/res/mipmap-xxxhdpi/qywx.png
deleted file mode 100644
index 6900764d..00000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/qywx.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/qywxapp.png b/app/src/main/res/mipmap-xxxhdpi/qywxapp.png
deleted file mode 100644
index 7b2d967f..00000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/qywxapp.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/serverchan.png b/app/src/main/res/mipmap-xxxhdpi/serverchan.png
deleted file mode 100644
index 086aa9e2..00000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/serverchan.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/telegram.png b/app/src/main/res/mipmap-xxxhdpi/telegram.png
deleted file mode 100644
index 6ef57105..00000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/telegram.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/webhook.png b/app/src/main/res/mipmap-xxxhdpi/webhook.png
deleted file mode 100644
index be857645..00000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/webhook.png and /dev/null differ
diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml
index 257a7002..351e1645 100644
--- a/app/src/main/res/values/array.xml
+++ b/app/src/main/res/values/array.xml
@@ -10,5 +10,6 @@
- 转发到Server酱·Turbo版
- 转发到Telegram机器人
- 转发到其他手机短信
+ - 转发到飞书机器人
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ee855ffc..ddca85a3 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -15,6 +15,7 @@
设置Server酱·Turbo版
设置Telegram机器人
设置SMS
+ 设置飞书机器人
检查更新
设置
关于
diff --git a/psd/hdpi.psd b/psd/hdpi.psd
deleted file mode 100644
index b2b0ee6e..00000000
Binary files a/psd/hdpi.psd and /dev/null differ
diff --git a/psd/ic_launcher.psd b/psd/ic_launcher.psd
deleted file mode 100644
index 28799f3e..00000000
Binary files a/psd/ic_launcher.psd and /dev/null differ
diff --git a/psd/mdpi.psd b/psd/mdpi.psd
deleted file mode 100644
index fdae7596..00000000
Binary files a/psd/mdpi.psd and /dev/null differ
diff --git a/psd/xhdpi.psd b/psd/xhdpi.psd
deleted file mode 100644
index 05768bfe..00000000
Binary files a/psd/xhdpi.psd and /dev/null differ
diff --git a/psd/xxhdpi.psd b/psd/xxhdpi.psd
deleted file mode 100644
index 7d8e679c..00000000
Binary files a/psd/xxhdpi.psd and /dev/null differ
diff --git a/psd/xxxhdpi.psd b/psd/xxxhdpi.psd
deleted file mode 100644
index b65ed40c..00000000
Binary files a/psd/xxxhdpi.psd and /dev/null differ