多语言支持(目前:中文、英文)

This commit is contained in:
pppscn 2021-09-30 11:56:54 +08:00
parent 44b7eb1d55
commit 658ee0b512
36 changed files with 678 additions and 251 deletions

79
.github/workflows/auto_build.yml vendored Normal file
View File

@ -0,0 +1,79 @@
name: Android CI
# 触发器
on:
push:
tags:
- v*
pull_request:
tags:
- v*
jobs:
build:
runs-on: ubuntu-latest
# if: github.event.repository.owner.id == github.event.sender.id
# 设置jdk环境为1.8
steps:
- uses: actions/checkout@v2
- name: set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
# ref: dev
# 获取打包秘钥
- name: Checkout Android Keystore
uses: actions/checkout@v2
with:
repository: pppscn/keystore
token: ${{ secrets.TOKEN }} # 连接仓库的token,需要单独配置
path: keystore # 仓库的根目录名
# 打包release
- name: Build with Gradle
run: bash ./gradlew assembleRelease
# 创建release
- name: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
#GitHub 会自动创建 GITHUB_TOKEN 密码以在工作流程中使用。
#您可以使用 GITHUB_TOKEN 在工作流程运行中进行身份验证。
#当您启用 GitHub Actions 时GitHub 在您的仓库中安装 GitHub 应用程序。
#GITHUB_TOKEN 密码是一种 GitHub 应用程序 安装访问令牌。
#您可以使用安装访问令牌代表仓库中安装的 GitHub 应用程序 进行身份验证。
#令牌的权限仅限于包含您的工作流程的仓库。 更多信息请参阅“GITHUB_TOKEN 的权限”。
#在每个作业开始之前, GitHub 将为作业提取安装访问令牌。 令牌在作业完成后过期。
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
draft: false
prerelease: false
# 获取apk版本号
- name: Get Version Name
uses: actions/github-script@v3
id: get-version
with:
script: |
const str=process.env.GITHUB_REF;
return str.substring(str.indexOf("v"));
result-encoding: string
# 上传至release的资源
- name: Upload Release Asset
id: upload-release-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }} # 上传网址,无需改动
asset_path: app/build/outputs/apk/release/app-release.apk # 上传路径
asset_name: SmsForwarder-${{steps.get-version.outputs.result}}.apk # 资源名
asset_content_type: application/vnd.android.package-archiv #资源类型
# 存档打包的文件
- name: Archive production artifacts
uses: actions/upload-artifact@v2
with:
name: build
path: app/build/outputs #将打包之后的文件全部上传里面会有混淆的map文件

1
.gitignore vendored
View File

@ -17,3 +17,4 @@ gradle.properties
/psd
/keystore/keystore.properties
/app/release
/keystore

View File

@ -57,11 +57,12 @@
- [x] 支持标注卡槽号码(优先使用)、设备信息;自定义转发信息模版
- [x] 支持正则匹配规则
- [x] 支持卡槽匹配规则
- [x] 来电提醒转发
- [x] 转发未接来电提醒
- [x] 接口请求失败后延时重试5次可配置间隔时间
- [x] 转发到飞书机器人
- [x] 自定义 Schemeforwarder://main用于唤起App
- [x] 低电量预警
- [x] 多语言支持(目前:中文、英文)
### 使用流程:
@ -192,32 +193,32 @@
## 更新记录PS.点击版本号下载对应的版本)
+ [v1.0.0](app/release/SmsForwarder_release_20210213_1.0.0.apk) 优化后第一版
+ [v1.1.0](app/release/SmsForwarder_release_20210214_1.1.0.apk) 新增在线升级、缓存清理、加入QQ群功能
+ [v1.1.1](app/release/SmsForwarder_release_20210215_1.1.1.apk) 更新应用/通知栏图标
+ [v1.1.2](app/release/SmsForwarder_release_20210218_1.1.2.apk) 获取系统(ROM)类别及版本号MIUI通知栏显示标题
+ [v1.1.3](app/release/SmsForwarder_release_20210218_1.1.3.apk) AlertDialog增加滚动条避免参数过长时无法点击按钮
+ [v1.2.0](app/release/SmsForwarder_release_20210219_1.2.0.apk) 重写SMTP邮件发送推荐升级
+ [v1.2.1](app/release/SmsForwarder_release_20210226_1.2.1.apk) 修复bark-server升级到2.0后的兼容性问题
+ [v1.2.2](app/release/SmsForwarder_release_20210302_1.2.2.apk) 【预发布】短信模板增加卡槽标识SIM1_中国联通_Unknown 或 SIM2_中国移动_+8615866666666
+ [v1.2.3](app/release/SmsForwarder_release_20210302_1.2.3.apk) 【预发布】转发日志列表/详情增加卡槽标识SIM1 或 SIM2
+ [v1.3.0](app/release/SmsForwarder_release_20210303_1.3.0.apk) 支持双卡手机,增加卡槽标识/运营商/手机号(如果能获取的话)
+ [v1.4.0](app/release/SmsForwarder_release_20210304_1.4.0.apk) 支持多重匹配规则
+ [v1.4.1](app/release/SmsForwarder_release_20210304_1.4.1.apk) 设置中允许关闭页面帮助/表单填写提示
+ [v1.5.0](app/release/SmsForwarder_release_20210305_1.5.0.apk) 新增转发到企业微信应用消息
+ [v1.5.1](app/release/SmsForwarder_release_20210310_1.5.1.apk) 解决Android 9.xx、10.xx收不到广播问题
+ [v1.5.2](app/release/SmsForwarder_release_20210311_1.5.2.apk) 支持标注卡槽号码(优先使用)、设备信息;自定义转发信息模版
+ [v1.6.0](app/release/SmsForwarder_release_20210312_1.6.0.apk) 优化获取SIM信息兼容高版本Android & 自动填写设备备注 & 自动填充卡槽信息到SIM1备注/SIM2备注 & 支持卡槽匹配规则 & 支持正则匹配规则
+ [v1.6.1](app/release/SmsForwarder_release_20210312_1.6.1.apk) 新增转发到Server酱·Turbo版
+ [v1.6.2](app/release/SmsForwarder_release_20210312_1.6.2.apk) 新增转发到Telegram机器人
+ [v1.6.3](app/release/SmsForwarder_release_20210313_1.6.3.apk) 转发到webhook支持GET方式节点改变原配置要重新编辑兼容Android5.0待验证仅minSdkVersion改为21修复钉钉机器人没启用加签时url拼接错误问题
+ [v1.6.4](app/release/SmsForwarder_release_20210313_1.6.4.apk) Android8.1以下手机重启后尝试启动主界面,以便动态获取权限(修复开机自启后无法转发短信,要打开软件后才会转发短信的问题)
+ [v1.7.0](app/release/SmsForwarder_release_20210318_1.7.0.apk) 新增转发到其他手机短信 & 避免热插卡时FC & 规则展示优化 & 获取多卡信息&获取卡槽备注优化 & 新增恢复初始化配置
+ [v1.7.1](app/release/SmsForwarder_release_20210321_1.7.1.apk) 新增转发记录的转发状态(成功/失败&应答信息)
+ [v1.7.2](app/release/SmsForwarder_release_20210325_1.7.2.apk) 新增V1版证书签名避免部分低版本系统(Android 6.x)无证书错误 & 发送方邮箱允许自定义发件人昵称
+ [v1.7.3](app/release/SmsForwarder_release_20210331_1.7.3.apk) 修复“设置匹配模式”默认选择BUG & 转发到webhook时返回http状态200即为成功 & 转发到其他手机短信支持长短信合并
+ [v1.7.4](app/release/SmsForwarder_release_20210715_1.7.4.apk) 修复转发企业微信群机器人碰到"被截断问题 & 转发到webhook时忽略ssl证书校验提高自建服务端兼容性 & 转发telegram时将 # 替换为 井,避免被当作标签 & 隐私保护,发送方设置中敏感信息(密码/token/secret等)用星号显示 & 更新友盟基础组件库 & 解决“设置页面关闭卡槽信息,同时使用默认模板时,发送消息卡槽信息仍显示”
+ [v2.0.0](app/release/SmsForwarder_release_20210930_2.0.0.apk) 来电提醒转发 & 接口请求失败后延时重试5次可配置间隔时间 & 转发到飞书机器人 & 自定义 Schemeforwarder://main用于唤起App & 低电量预警 & 重新梳理代码消灭waring& Bark增加支持分组 & 引入Lombok & 升级gradle版本 & 增加电池优化白名单设置和权限 & 转发到webhook增加支持自定义post数据并支持Json数据提交
+ [v1.0.0] 优化后第一版
+ [v1.1.0] 新增在线升级、缓存清理、加入QQ群功能
+ [v1.1.1] 更新应用/通知栏图标
+ [v1.1.2] 获取系统(ROM)类别及版本号MIUI通知栏显示标题
+ [v1.1.3] AlertDialog增加滚动条避免参数过长时无法点击按钮
+ [v1.2.0] 重写SMTP邮件发送推荐升级
+ [v1.2.1] 修复bark-server升级到2.0后的兼容性问题
+ [v1.2.2] 【预发布】短信模板增加卡槽标识SIM1_中国联通_Unknown 或 SIM2_中国移动_+8615866666666
+ [v1.2.3] 【预发布】转发日志列表/详情增加卡槽标识SIM1 或 SIM2
+ [v1.3.0] 支持双卡手机,增加卡槽标识/运营商/手机号(如果能获取的话)
+ [v1.4.0] 支持多重匹配规则
+ [v1.4.1] 设置中允许关闭页面帮助/表单填写提示
+ [v1.5.0] 新增转发到企业微信应用消息
+ [v1.5.1] 解决Android 9.xx、10.xx收不到广播问题
+ [v1.5.2] 支持标注卡槽号码(优先使用)、设备信息;自定义转发信息模版
+ [v1.6.0] 优化获取SIM信息兼容高版本Android & 自动填写设备备注 & 自动填充卡槽信息到SIM1备注/SIM2备注 & 支持卡槽匹配规则 & 支持正则匹配规则
+ [v1.6.1] 新增转发到Server酱·Turbo版
+ [v1.6.2] 新增转发到Telegram机器人
+ [v1.6.3] 转发到webhook支持GET方式节点改变原配置要重新编辑兼容Android5.0待验证仅minSdkVersion改为21修复钉钉机器人没启用加签时url拼接错误问题
+ [v1.6.4] Android8.1以下手机重启后尝试启动主界面,以便动态获取权限(修复开机自启后无法转发短信,要打开软件后才会转发短信的问题)
+ [v1.7.0] 新增转发到其他手机短信 & 避免热插卡时FC & 规则展示优化 & 获取多卡信息&获取卡槽备注优化 & 新增恢复初始化配置
+ [v1.7.1] 新增转发记录的转发状态(成功/失败&应答信息)
+ [v1.7.2] 新增V1版证书签名避免部分低版本系统(Android 6.x)无证书错误 & 发送方邮箱允许自定义发件人昵称
+ [v1.7.3] 修复“设置匹配模式”默认选择BUG & 转发到webhook时返回http状态200即为成功 & 转发到其他手机短信支持长短信合并
+ [v1.7.4] 修复转发企业微信群机器人碰到"被截断问题 & 转发到webhook时忽略ssl证书校验提高自建服务端兼容性 & 转发telegram时将 # 替换为 井,避免被当作标签 & 隐私保护,发送方设置中敏感信息(密码/token/secret等)用星号显示 & 更新友盟基础组件库 & 解决“设置页面关闭卡槽信息,同时使用默认模板时,发送消息卡槽信息仍显示”
+ [v2.0.0] 来电提醒转发 & 接口请求失败后延时重试5次可配置间隔时间& 转发到飞书机器人 & 自定义 Schemeforwarder://main用于唤起App & 低电量预警 & 重新梳理代码消灭waring& Bark增加支持分组 & 引入Lombok & 升级gradle版本 & 增加电池优化白名单设置和权限 & 转发到webhook增加支持自定义post数据并支持Json数据提交
--------

View File

@ -58,7 +58,7 @@ android {
}
}
//apk file name
android.applicationVariants.all { variant ->
/*android.applicationVariants.all { variant ->
variant.outputs.all {
//def date = new Date().format("yyyyMMdd" , TimeZone.getTimeZone("Asia/Shanghai"))
def date = new Date().format("yyyyMMdd", TimeZone.getTimeZone("GMT+08"))
@ -69,7 +69,7 @@ android {
outputFileName = "SmsForwarder_release_${date}_${versionName}.apk"
}
}
}
}*/
}

View File

@ -19,6 +19,7 @@
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
-keep class com.idormy.sms.forwarder.model.**{*;}
-keep class com.umeng.** {*;}
-keepclassmembers class * {
@ -28,3 +29,15 @@
public static **[] values();
public static ** valueOf(java.lang.String);
}
-dontwarn com.sun.**
-dontwarn javax.mail.**
-dontwarn javax.activation.**
-keep class com.sun.** { *;}
-keep class javax.mail.** { *;}
-keep class javax.activation.** { *;}
-keep class com.smailnet.emailkit.** { *;}
-keep class com.xuexiang.xupdate.entity.** { *; }
-keep class com.xuexiang.xupdatedemo.entity.** { *; }

View File

@ -61,7 +61,7 @@
</activity>
<activity
android:name=".AboutActivity"
android:label="关于">
android:label="@string/about">
<intent-filter>
<!--协议部分,随便设置-->
<data
@ -75,13 +75,13 @@
</activity>
<activity
android:name=".SettingActivity"
android:label="设置" />
android:label="@string/setting" />
<activity
android:name=".RuleActivity"
android:label="转发规则" />
android:label="@string/rule_setting" />
<activity
android:name=".SenderActivity"
android:label="发送方" />
android:label="@string/sender_setting" />
<receiver
android:name=".receiver.RebootBroadcastReceiver"
@ -110,7 +110,6 @@
</receiver>
<service android:name=".service.FrontService" />
<service android:name=".service.BatteryService" />
</application>
</manifest>

View File

@ -63,14 +63,14 @@ public class AboutActivity extends AppCompatActivity {
@Override
public void onBeforeCheck() {
super.onBeforeCheck();
Toast.makeText(AboutActivity.this, "查询中...", Toast.LENGTH_LONG).show();
Toast.makeText(AboutActivity.this, R.string.checking, Toast.LENGTH_LONG).show();
}
@Override
public void noNewVersion(Throwable throwable) {
super.noNewVersion(throwable);
// 没有最新版本的处理
Toast.makeText(AboutActivity.this, "已是最新版本!", Toast.LENGTH_LONG).show();
Toast.makeText(AboutActivity.this, R.string.up_to_date, Toast.LENGTH_LONG).show();
}
})
.update();
@ -94,7 +94,7 @@ public class AboutActivity extends AppCompatActivity {
} catch (Exception e) {
e.printStackTrace();
}
Toast.makeText(AboutActivity.this, "缓存清理完成", Toast.LENGTH_LONG).show();
Toast.makeText(AboutActivity.this, R.string.cache_purged, Toast.LENGTH_LONG).show();
});
Button join_qq_group1 = findViewById(R.id.join_qq_group1);
@ -150,7 +150,7 @@ public class AboutActivity extends AppCompatActivity {
startActivity(intent);
} catch (Exception e) {
// 未安装手Q或安装的版本不支持
Toast.makeText(AboutActivity.this, "未安装手Q或安装的版本不支持", Toast.LENGTH_LONG).show();
Toast.makeText(AboutActivity.this, R.string.unknown_qq_version, Toast.LENGTH_LONG).show();
}
}

View File

@ -83,21 +83,21 @@ public class MainActivity extends AppCompatActivity implements RefreshListView.I
//定义AlertDialog.Builder对象当长按列表项的时候弹出确认删除对话框
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setMessage("确定删除?");
builder.setTitle("提示");
builder.setTitle(R.string.delete_log_title);
builder.setMessage(R.string.delete_log_tips);
//添加AlertDialog.Builder对象的setPositiveButton()方法
builder.setPositiveButton("确定", (dialog, which) -> {
builder.setPositiveButton(R.string.confirm, (dialog, which) -> {
Long id1 = logVos.get(position - 1).getId();
Log.d(TAG, "id = " + id1);
LogUtil.delLog(id1, null);
initTLogs(); //初始化数据
showList(logVos);
Toast.makeText(getBaseContext(), "删除列表项", Toast.LENGTH_SHORT).show();
Toast.makeText(getBaseContext(), R.string.delete_log_toast, Toast.LENGTH_SHORT).show();
});
//添加AlertDialog.Builder对象的setNegativeButton()方法
builder.setNegativeButton("取消", (dialog, which) -> {
builder.setNegativeButton(R.string.cancel, (dialog, which) -> {
});
builder.create().show();
@ -151,29 +151,21 @@ public class MainActivity extends AppCompatActivity implements RefreshListView.I
public void logDetail(LogVo logVo) {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("详情");
builder.setTitle(R.string.details);
String simInfo = logVo.getSimInfo();
if (simInfo != null) {
builder.setMessage(logVo.getFrom() + "\n\n" + logVo.getContent() + "\n\n" + logVo.getSimInfo() + "\n\n" + logVo.getRule() + "\n\n" + aUtil.utc2Local(logVo.getTime()) + "\n\nResponse" + logVo.getForwardResponse());
} else {
builder.setMessage(logVo.getFrom() + "\n\n" + logVo.getContent() + "\n\n" + logVo.getRule() + "\n\n" + aUtil.utc2Local(logVo.getTime()) + "\n\nResponse" + logVo.getForwardResponse());
}
//重发
/*builder.setPositiveButton("重发", (dialog, which) -> {
Long id = logVo.getId();
Log.d(TAG, "id = " + id);
Log.d(TAG, logVo.toString());
Toast.makeText(MainActivity.this, "你确定要重发吗?", Toast.LENGTH_SHORT).show();
dialog.dismiss();
});*/
//删除
builder.setNegativeButton("删除", (dialog, which) -> {
builder.setNegativeButton(R.string.del, (dialog, which) -> {
Long id = logVo.getId();
Log.d(TAG, "id = " + id);
LogUtil.delLog(id, null);
initTLogs(); //初始化数据
showList(logVos);
Toast.makeText(MainActivity.this, "已删除该条记录", Toast.LENGTH_SHORT).show();
Toast.makeText(MainActivity.this, R.string.delete_log_toast, Toast.LENGTH_SHORT).show();
dialog.dismiss();
});
builder.show();
@ -201,8 +193,8 @@ public class MainActivity extends AppCompatActivity implements RefreshListView.I
public void cleanLog(View view) {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("确定要清空转发记录吗?")
.setPositiveButton("清空", (dialog, which) -> {
builder.setTitle(R.string.clear_logs_tips)
.setPositiveButton(R.string.confirm, (dialog, which) -> {
// TODO Auto-generated method stub
LogUtil.delLog(null, null);
initTLogs();

View File

@ -217,14 +217,14 @@ public class RefreshListView extends ListView implements AbsListView.OnScrollLis
case PULL:
arrow.setVisibility(View.VISIBLE);
progress.setVisibility(View.GONE);
tip.setText("下拉可以刷新!");
tip.setText(R.string.pull_tips);
arrow.clearAnimation();
arrow.setAnimation(anim1);
break;
case RELEASE:
arrow.setVisibility(View.VISIBLE);
progress.setVisibility(View.GONE);
tip.setText("松开可以刷新!");
tip.setText(R.string.release_tips);
arrow.clearAnimation();
arrow.setAnimation(anim);
break;
@ -232,7 +232,7 @@ public class RefreshListView extends ListView implements AbsListView.OnScrollLis
topPadding(50);
arrow.setVisibility(View.GONE);
progress.setVisibility(View.VISIBLE);
tip.setText("正在刷新...");
tip.setText(R.string.reflashing_tips);
arrow.clearAnimation();
break;
}

View File

@ -88,20 +88,19 @@ public class RuleActivity extends AppCompatActivity {
listView.setOnItemLongClickListener((parent, view, position, id) -> {
//定义AlertDialog.Builder对象当长按列表项的时候弹出确认删除对话框
AlertDialog.Builder builder = new AlertDialog.Builder(RuleActivity.this);
builder.setMessage("确定删除?");
builder.setTitle("提示");
builder.setTitle(R.string.delete_rule_title);
builder.setMessage(R.string.delete_rule_tips);
//添加AlertDialog.Builder对象的setPositiveButton()方法
builder.setPositiveButton("确定", (dialog, which) -> {
builder.setPositiveButton(R.string.confirm, (dialog, which) -> {
RuleUtil.delRule(ruleModels.get(position).getId());
initRules();
adapter.del(ruleModels);
Toast.makeText(getBaseContext(), "删除列表项", Toast.LENGTH_SHORT).show();
Toast.makeText(getBaseContext(), R.string.delete_rule_toast, Toast.LENGTH_SHORT).show();
});
//添加AlertDialog.Builder对象的setNegativeButton()方法
builder.setNegativeButton("取消", (dialog, which) -> {
builder.setNegativeButton(R.string.cancel, (dialog, which) -> {
});
@ -219,7 +218,7 @@ public class RuleActivity extends AppCompatActivity {
buttonRuleTest.setOnClickListener(view -> {
Object senderId = ruleSenderTv.getTag();
if (senderId == null) {
Toast.makeText(RuleActivity.this, "请先创建选择发送方", Toast.LENGTH_LONG).show();
Toast.makeText(RuleActivity.this, R.string.new_sender_first, Toast.LENGTH_LONG).show();
} else {
int radioGroupRuleCheckId = Math.max(radioGroupRuleCheck.getCheckedRadioButtonId(), radioGroupRuleCheck2.getCheckedRadioButtonId());
if (ruleModel == null) {
@ -331,7 +330,7 @@ public class RuleActivity extends AppCompatActivity {
public void selectSender(final TextView showTv) {
final List<SenderModel> senderModels = SenderUtil.getSender(null, null);
if (senderModels.isEmpty()) {
Toast.makeText(RuleActivity.this, "请先去设置发送方页面添加", Toast.LENGTH_SHORT).show();
Toast.makeText(RuleActivity.this, R.string.add_sender_first, Toast.LENGTH_SHORT).show();
return;
}
final CharSequence[] senderNames = new CharSequence[senderModels.size()];
@ -339,7 +338,7 @@ public class RuleActivity extends AppCompatActivity {
senderNames[i] = senderModels.get(i).getName();
}
AlertDialog.Builder builder = new AlertDialog.Builder(RuleActivity.this);
builder.setTitle("选择发送方");
builder.setTitle(R.string.select_sender);
//添加列表
builder.setItems(senderNames, (dialogInterface, which) -> {
Toast.makeText(RuleActivity.this, senderNames[which], Toast.LENGTH_LONG).show();
@ -356,7 +355,7 @@ public class RuleActivity extends AppCompatActivity {
final EditText editTextTestMsgContent = view.findViewById(R.id.editTextTestMsgContent);
Button buttonRuleTest = view.findViewById(R.id.buttonRuleTest);
AlertDialog.Builder ad1 = new AlertDialog.Builder(RuleActivity.this);
ad1.setTitle("测试规则");
ad1.setTitle(R.string.rule_tester);
ad1.setIcon(android.R.drawable.ic_dialog_email);
ad1.setView(view);
buttonRuleTest.setOnClickListener(v -> {

View File

@ -143,7 +143,7 @@ public class SenderActivity extends AppCompatActivity {
setFeiShu(senderModel);
break;
default:
Toast.makeText(SenderActivity.this, "异常的发送方类型,自动删除!", Toast.LENGTH_LONG).show();
Toast.makeText(SenderActivity.this, R.string.invalid_sender, Toast.LENGTH_LONG).show();
SenderUtil.delSender(senderModel.getId());
initSenders();
adapter.del(senderModels);
@ -155,20 +155,19 @@ public class SenderActivity extends AppCompatActivity {
listView.setOnItemLongClickListener((parent, view, position, id) -> {
//定义AlertDialog.Builder对象当长按列表项的时候弹出确认删除对话框
AlertDialog.Builder builder = new AlertDialog.Builder(SenderActivity.this);
builder.setMessage("确定删除?");
builder.setTitle("提示");
builder.setTitle(R.string.delete_sender_title);
builder.setMessage(R.string.delete_sender_tips);
//添加AlertDialog.Builder对象的setPositiveButton()方法
builder.setPositiveButton("确定", (dialog, which) -> {
builder.setPositiveButton(R.string.confirm, (dialog, which) -> {
SenderUtil.delSender(senderModels.get(position).getId());
initSenders();
adapter.del(senderModels);
Toast.makeText(getBaseContext(), "删除列表项", Toast.LENGTH_SHORT).show();
Toast.makeText(getBaseContext(), R.string.delete_sender_toast, Toast.LENGTH_SHORT).show();
});
//添加AlertDialog.Builder对象的setNegativeButton()方法
builder.setNegativeButton("取消", (dialog, which) -> {
builder.setNegativeButton(R.string.cancel, (dialog, which) -> {
});
@ -184,7 +183,7 @@ public class SenderActivity extends AppCompatActivity {
public void addSender(View view) {
AlertDialog.Builder builder = new AlertDialog.Builder(SenderActivity.this);
builder.setTitle("选择发送方类型");
builder.setTitle(R.string.add_sender_title);
//添加列表
builder.setItems(R.array.add_sender_menu, (dialogInterface, which) -> {
switch (which) {
@ -219,7 +218,7 @@ public class SenderActivity extends AppCompatActivity {
setFeiShu(null);
break;
default:
Toast.makeText(SenderActivity.this, "暂不支持这种转发!", Toast.LENGTH_LONG).show();
Toast.makeText(SenderActivity.this, R.string.not_supported, Toast.LENGTH_LONG).show();
break;
}
});
@ -282,7 +281,6 @@ public class SenderActivity extends AppCompatActivity {
SenderUtil.addSender(newSenderModel);
initSenders();
adapter.add(senderModels);
// adapter.add(newSenderModel);
} else {
senderModel.setName(editTextDingdingName.getText().toString());
senderModel.setType(TYPE_DINGDING);
@ -296,7 +294,6 @@ public class SenderActivity extends AppCompatActivity {
SenderUtil.updateSender(senderModel);
initSenders();
adapter.update(senderModels);
// adapter.update(senderModel,position);
}
@ -309,8 +306,6 @@ public class SenderActivity extends AppCompatActivity {
SenderUtil.delSender(senderModel.getId());
initSenders();
adapter.del(senderModels);
// adapter.del(position);
}
show.dismiss();
});
@ -321,13 +316,13 @@ public class SenderActivity extends AppCompatActivity {
Boolean atAll = switchDingdingAtAll.isChecked();
if (!token.isEmpty()) {
try {
SenderDingdingMsg.sendMsg(0, handler, token, secret, atMobiles, atAll, "测试内容(content)@" + (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())));
SenderDingdingMsg.sendMsg(0, handler, token, secret, atMobiles, atAll, R.string.test_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();
Toast.makeText(SenderActivity.this, getString(R.string.failed_to_fwd) + e.getMessage(), Toast.LENGTH_LONG).show();
e.printStackTrace();
}
} else {
Toast.makeText(SenderActivity.this, "token 不能为空", Toast.LENGTH_LONG).show();
Toast.makeText(SenderActivity.this, R.string.invalid_token, Toast.LENGTH_LONG).show();
}
});
}
@ -441,13 +436,13 @@ public class SenderActivity extends AppCompatActivity {
if (!host.isEmpty() && !port.isEmpty() && !fromEmail.isEmpty() && !pwd.isEmpty() && !toEmail.isEmpty()) {
try {
SenderMailMsg.sendEmail(0, handler, host, port, ssl, fromEmail, nickname, pwd, toEmail, "SmsForwarder Title", "测试内容(content)@" + (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())));
SenderMailMsg.sendEmail(0, handler, host, port, ssl, fromEmail, nickname, pwd, toEmail, "SmsForwarder Title", R.string.test_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();
Toast.makeText(SenderActivity.this, getString(R.string.failed_to_fwd) + e.getMessage(), Toast.LENGTH_LONG).show();
e.printStackTrace();
}
} else {
Toast.makeText(SenderActivity.this, "邮箱参数不完整", Toast.LENGTH_LONG).show();
Toast.makeText(SenderActivity.this, R.string.invalid_email, Toast.LENGTH_LONG).show();
}
});
}
@ -523,13 +518,13 @@ public class SenderActivity extends AppCompatActivity {
String barkServer = editTextBarkServer.getText().toString();
if (!barkServer.isEmpty()) {
try {
SenderBarkMsg.sendMsg(0, handler, barkServer, "19999999999", "【京东】验证码为387481切勿将验证码告知他人请在页面中输入完成验证如有问题请点击 ihelp.jd.com 联系京东客服", "测试分组");
SenderBarkMsg.sendMsg(0, handler, barkServer, getString(R.string.test_phone_num), getString(R.string.test_sms), getString(R.string.test_group_name));
} catch (Exception e) {
Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show();
Toast.makeText(SenderActivity.this, getString(R.string.failed_to_fwd) + e.getMessage(), Toast.LENGTH_LONG).show();
e.printStackTrace();
}
} else {
Toast.makeText(SenderActivity.this, "bark-server 不能为空", Toast.LENGTH_LONG).show();
Toast.makeText(SenderActivity.this, R.string.invalid_bark_server, Toast.LENGTH_LONG).show();
}
});
}
@ -606,13 +601,13 @@ public class SenderActivity extends AppCompatActivity {
String serverChanServer = editTextServerChanSendKey.getText().toString();
if (!serverChanServer.isEmpty()) {
try {
SenderServerChanMsg.sendMsg(0, handler, serverChanServer, "19999999999", "【京东】验证码为387481切勿将验证码告知他人请在页面中输入完成验证如有问题请点击 ihelp.jd.com 联系京东客服");
SenderServerChanMsg.sendMsg(0, handler, serverChanServer, getString(R.string.test_phone_num), getString(R.string.test_sms));
} catch (Exception e) {
Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show();
Toast.makeText(SenderActivity.this, getString(R.string.failed_to_fwd) + e.getMessage(), Toast.LENGTH_LONG).show();
e.printStackTrace();
}
} else {
Toast.makeText(SenderActivity.this, "Server酱·Turbo版的 SendKey 不能为空", Toast.LENGTH_LONG).show();
Toast.makeText(SenderActivity.this, R.string.invalid_sendkey, Toast.LENGTH_LONG).show();
}
});
}
@ -693,13 +688,13 @@ 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", R.string.test_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();
Toast.makeText(SenderActivity.this, getString(R.string.failed_to_fwd) + e.getMessage(), Toast.LENGTH_LONG).show();
e.printStackTrace();
}
} else {
Toast.makeText(SenderActivity.this, "WebServer 不能为空", Toast.LENGTH_LONG).show();
Toast.makeText(SenderActivity.this, R.string.invalid_webserver, Toast.LENGTH_LONG).show();
}
});
}
@ -777,13 +772,13 @@ public class SenderActivity extends AppCompatActivity {
String webHook = editTextQYWXGroupRobotWebHook.getText().toString();
if (!webHook.isEmpty()) {
try {
SenderQyWxGroupRobotMsg.sendMsg(0, handler, webHook, "SmsForwarder Title", "测试内容(content)@" + (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())));
SenderQyWxGroupRobotMsg.sendMsg(0, handler, webHook, "SmsForwarder Title", R.string.test_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();
Toast.makeText(SenderActivity.this, getString(R.string.failed_to_fwd) + e.getMessage(), Toast.LENGTH_LONG).show();
e.printStackTrace();
}
} else {
Toast.makeText(SenderActivity.this, "webHook 不能为空", Toast.LENGTH_LONG).show();
Toast.makeText(SenderActivity.this, R.string.invalid_webhook, Toast.LENGTH_LONG).show();
}
});
}
@ -842,7 +837,7 @@ public class SenderActivity extends AppCompatActivity {
buttonQYWXAppOk.setOnClickListener(view -> {
String toUser = editTextQYWXAppToUser.getText().toString();
if (toUser.isEmpty()) {
Toast.makeText(SenderActivity.this, "指定成员 不能为空 或者 选择@all", Toast.LENGTH_LONG).show();
Toast.makeText(SenderActivity.this, R.string.invalid_at_mobiles, Toast.LENGTH_LONG).show();
editTextQYWXAppToUser.setFocusable(true);
editTextQYWXAppToUser.requestFocus();
return;
@ -897,13 +892,13 @@ public class SenderActivity extends AppCompatActivity {
//Boolean atAll = switchQYWXAppAtAll.isChecked();
if (!toUser.isEmpty()) {
try {
SenderQyWxAppMsg.sendMsg(0, handler, cropID, agentID, secret, toUser, "测试内容(content)@" + (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())), true);
SenderQyWxAppMsg.sendMsg(0, handler, cropID, agentID, secret, toUser, R.string.test_content + (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())), true);
} catch (Exception e) {
Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show();
Toast.makeText(SenderActivity.this, getString(R.string.failed_to_fwd) + e.getMessage(), Toast.LENGTH_LONG).show();
e.printStackTrace();
}
} else {
Toast.makeText(SenderActivity.this, "指定成员 不能为空 或者 选择@all", Toast.LENGTH_LONG).show();
Toast.makeText(SenderActivity.this, R.string.invalid_at_mobiles, Toast.LENGTH_LONG).show();
}
});
}
@ -986,13 +981,13 @@ public class SenderActivity extends AppCompatActivity {
String chatId = editTextTelegramChatId.getText().toString();
if (!apiToken.isEmpty() && !chatId.isEmpty()) {
try {
SenderTelegramMsg.sendMsg(0, handler, apiToken, chatId, "19999999999", "【京东】验证码为387481切勿将验证码告知他人请在页面中输入完成验证如有问题请点击 ihelp.jd.com 联系京东客服");
SenderTelegramMsg.sendMsg(0, handler, apiToken, chatId, getString(R.string.test_phone_num), getString(R.string.test_sms));
} catch (Exception e) {
Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show();
Toast.makeText(SenderActivity.this, getString(R.string.failed_to_fwd) + e.getMessage(), Toast.LENGTH_LONG).show();
e.printStackTrace();
}
} else {
Toast.makeText(SenderActivity.this, "机器人的ApiToken 和 被通知人的ChatId 都不能为空", Toast.LENGTH_LONG).show();
Toast.makeText(SenderActivity.this, R.string.invalid_apiToken_or_chatId, Toast.LENGTH_LONG).show();
}
});
}
@ -1082,13 +1077,13 @@ public class SenderActivity extends AppCompatActivity {
Boolean onlyNoNetwork = switchSmsOnlyNoNetwork.isChecked();
if (!mobiles.isEmpty()) {
try {
SenderSmsMsg.sendMsg(0, handler, simSlot, mobiles, onlyNoNetwork, "19999999999", "【京东】验证码为387481切勿将验证码告知他人请在页面中输入完成验证如有问题请点击 ihelp.jd.com 联系京东客服");
SenderSmsMsg.sendMsg(0, handler, simSlot, mobiles, onlyNoNetwork, getString(R.string.test_phone_num), getString(R.string.test_sms));
} catch (Exception e) {
Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show();
Toast.makeText(SenderActivity.this, getString(R.string.failed_to_fwd) + e.getMessage(), Toast.LENGTH_LONG).show();
e.printStackTrace();
}
} else {
Toast.makeText(SenderActivity.this, "接收手机号不能为空", Toast.LENGTH_LONG).show();
Toast.makeText(SenderActivity.this, R.string.invalid_phone_num, Toast.LENGTH_LONG).show();
}
});
}
@ -1169,13 +1164,13 @@ public class SenderActivity extends AppCompatActivity {
String secret = editTextFeishuSecret.getText().toString();
if (!token.isEmpty()) {
try {
SenderFeishuMsg.sendMsg(0, handler, token, secret, "测试内容(content)@" + (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())));
SenderFeishuMsg.sendMsg(0, handler, token, secret, getString(R.string.test_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();
Toast.makeText(SenderActivity.this, getString(R.string.failed_to_fwd) + e.getMessage(), Toast.LENGTH_LONG).show();
e.printStackTrace();
}
} else {
Toast.makeText(SenderActivity.this, "token 不能为空", Toast.LENGTH_LONG).show();
Toast.makeText(SenderActivity.this, R.string.invalid_webhook, Toast.LENGTH_LONG).show();
}
});
}

View File

@ -27,7 +27,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="当前版本" />
android:text="@string/version" />
<TextView
android:id="@+id/version_now"
@ -42,7 +42,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="检查新版本" />
android:text="@string/check_for_updates" />
</LinearLayout>
@ -60,7 +60,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
android:text="开机启动" />
android:text="@string/auto_startup" />
<Switch
android:id="@+id/switch_with_reboot"
@ -87,7 +87,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
android:text="页面帮助提示" />
android:text="@string/show_tips" />
<Switch
android:id="@+id/switch_help_tip"
@ -114,7 +114,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="开源地址" />
android:text="@string/open_source" />
<TextView
android:id="@+id/linkweb"
@ -141,7 +141,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="同步镜像" />
android:text="@string/synchronize_mirror" />
<TextView
android:id="@+id/linkweb2"
@ -173,19 +173,19 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="互帮互助QQ群" />
android:text="@string/qq_group" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="start"
android:text="①群562854376" />
android:text="@string/qq_group1" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="start"
android:text="②群31330492" />
android:text="@string/qq_group2" />
</LinearLayout>
<Button
@ -193,14 +193,14 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="加入①群" />
android:text="@string/join_qq_group1" />
<Button
android:id="@+id/join_qq_group2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="加入②群" />
android:text="@string/join_qq_group2" />
</LinearLayout>
<LinearLayout
@ -221,7 +221,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="缓存大小" />
android:text="@string/cache" />
<TextView
android:id="@+id/cache_size"
@ -236,7 +236,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="清除缓存" />
android:text="@string/purge" />
</LinearLayout>

View File

@ -40,11 +40,11 @@
android:layout_weight="1"
android:background="@color/colorPrimary"
android:onClick="cleanLog"
android:text="清空记录"
android:text="@string/bt_refresh_log"
tools:ignore="NestedWeights" />
<Button
android:id="@+id/bt_rule_set"
android:id="@+id/rule_setting"
android:layout_width="match_parent"
android:layout_height="35dp"
android:layout_marginStart="10dp"
@ -53,11 +53,11 @@
android:layout_weight="1"
android:background="@color/colorPrimary"
android:onClick="toRuleSetting"
android:text="设置转发规则"
android:text="@string/rule_setting"
tools:ignore="NestedWeights" />
<Button
android:id="@+id/bt_send_set"
android:id="@+id/sender_setting"
android:layout_width="match_parent"
android:layout_height="35dp"
android:layout_marginLeft="10dp"
@ -67,7 +67,7 @@
android:layout_weight="1"
android:background="@color/colorPrimary"
android:onClick="toSendSetting"
android:text="设置发送方" />
android:text="@string/sender_setting" />
</LinearLayout>
</LinearLayout>

View File

@ -32,7 +32,7 @@
android:background="@color/colorPrimary"
android:onClick="addRule"
android:padding="0dp"
android:text="添加转发规则" />
android:text="@string/new_forwarding_rule" />
</LinearLayout>
</LinearLayout>

View File

@ -32,7 +32,7 @@
android:background="@color/colorPrimary"
android:onClick="addSender"
android:padding="0dp"
android:text="添加发送方" />
android:text="@string/new_sender" />
</LinearLayout>
</LinearLayout>

View File

@ -21,7 +21,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="设备名称"
android:text="@string/device_name"
android:textStyle="bold" />
<EditText
@ -55,14 +55,14 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="SIM1备注"
android:text="@string/sim1_remark"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="end"
android:text="运营商_手机号"
android:text="@string/carrier_mobile"
android:textSize="9sp" />
</LinearLayout>
@ -96,14 +96,14 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="SIM2备注"
android:text="@string/sim2_remark"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="end"
android:text="运营商_手机号"
android:text="@string/carrier_mobile"
android:textSize="9sp" />
</LinearLayout>
@ -137,14 +137,14 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="低电量预警阈值(%)"
android:text="@string/low_power_alarm_threshold"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="end"
android:text="取值范围0-100留空或0禁用"
android:text="@string/low_power_alarm_threshold_tips"
android:textSize="9sp" />
</LinearLayout>
@ -178,14 +178,14 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="每次重试间隔(秒)"
android:text="@string/retry_interval"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="end"
android:text="接口请求失败后将重试5次"
android:text="@string/retry_interval_tips"
android:textSize="9sp" />
</LinearLayout>
@ -268,7 +268,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
android:text="转发时附加卡槽信息"
android:text="@string/add_extra"
android:textStyle="bold" />
<Switch
@ -295,7 +295,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
android:text="转发时附加设备名称"
android:text="@string/add_device_name"
android:textStyle="bold" />
<Switch
@ -318,7 +318,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="转发来电"
android:text="@string/forward_missed_calls"
android:textStyle="bold" />
<Switch
@ -346,7 +346,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
android:text="转发时启用自定义模版"
android:text="@string/enable_custom_templates"
android:textStyle="bold" />
<Switch
@ -379,14 +379,14 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="转发信息模版"
android:text="@string/custom_templates"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:text="Tip按需插入内容标签留空使用默认模版"
android:text="@string/custom_templates_tips"
android:textSize="11sp" />
</LinearLayout>
@ -412,22 +412,9 @@
android:layout_weight="1"
android:background="@color/colorPrimary"
android:onClick="toInsertLabel"
android:text="来源号码"
android:text="@string/insert_sender"
tools:ignore="NestedWeights" />
<!--<Button
android:id="@+id/bt_insert_receiver"
android:layout_width="match_parent"
android:layout_height="25dp"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:layout_weight="1"
android:background="@color/colorPrimary"
android:onClick="toInsertLabel"
android:text="接收号码"
tools:ignore="NestedWeights" />-->
<Button
android:id="@+id/bt_insert_content"
android:layout_width="match_parent"
@ -438,7 +425,7 @@
android:layout_weight="1"
android:background="@color/colorPrimary"
android:onClick="toInsertLabel"
android:text="短信内容" />
android:text="@string/insert_content" />
<Button
android:id="@+id/bt_insert_extra"
@ -450,7 +437,7 @@
android:layout_weight="1"
android:background="@color/colorPrimary"
android:onClick="toInsertLabel"
android:text="卡槽信息" />
android:text="@string/insert_extra" />
<Button
android:id="@+id/bt_insert_time"
@ -462,7 +449,7 @@
android:layout_weight="1"
android:background="@color/colorPrimary"
android:onClick="toInsertLabel"
android:text="接收时间" />
android:text="@string/insert_time" />
<Button
android:id="@+id/bt_insert_device_name"
@ -474,7 +461,7 @@
android:layout_weight="1"
android:background="@color/colorPrimary"
android:onClick="toInsertLabel"
android:text="设备名称" />
android:text="@string/insert_device_name" />
</LinearLayout>
@ -488,7 +475,7 @@
android:background="@color/colorPrimary"
android:onClick="initSetting"
android:padding="0dp"
android:text="恢复初始化配置" />
android:text="@string/init_setting" />
<Button
android:id="@+id/btnBatterySetting"
@ -498,7 +485,7 @@
android:background="@color/colorPrimary"
android:onClick="batterySetting"
android:padding="0dp"
android:text="设置电池优化" />
android:text="@string/battery_setting" />
</LinearLayout>

View File

@ -19,7 +19,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="设置分组名称" />
android:text="@string/set_bark_name" />
<EditText
android:id="@+id/editTextBarkName"
@ -43,7 +43,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="设置Bark-Server地址示例https://bark.bms.ink/XXXXXXXX/" />
android:text="@string/set_bark_server" />
<EditText
android:id="@+id/editTextBarkServer"

View File

@ -19,7 +19,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="设置名称" />
android:text="@string/set_name" />
<EditText
android:id="@+id/editTextDingdingName"
@ -42,7 +42,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="设置Token 例如 https://oapi.dingtalk.com/robot/send?access_token=XXXXXX 中的 XXXXXX" />
android:text="@string/dingding_token" />
<EditText
android:id="@+id/editTextDingdingToken"
@ -65,7 +65,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="加签 Secret 没有可不填" />
android:text="@string/dingding_secret" />
<EditText
android:id="@+id/editTextDingdingSecret"
@ -87,7 +87,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="转发时@某人 填写某人的手机号,多个用逗号分开 例如18888888888,19999999999" />
android:text="@string/dingding_at" />
<EditText
android:id="@+id/editTextDingdingAtMobiles"
@ -109,7 +109,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="是否@所有人" />
android:text="@string/is_at_all" />
<Switch
android:id="@+id/switchDingdingAtAll"

View File

@ -19,7 +19,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="设置名称" />
android:text="@string/set_name" />
<EditText
android:id="@+id/editTextEmailName"
@ -42,7 +42,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发件服务器" />
android:text="@string/email_host" />
<EditText
android:id="@+id/editTextEmailHost"
@ -65,7 +65,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="SMTP端口" />
android:text="@string/smtp_port" />
<EditText
android:id="@+id/editTextEmailPort"
@ -80,7 +80,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开启SSL" />
android:text="@string/enable_ssl" />
<Switch
android:id="@+id/switchEmailSSl"
@ -100,7 +100,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发件人帐号" />
android:text="@string/email_account" />
<EditText
android:id="@+id/editTextEmailFromAdd"
@ -123,7 +123,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发件人昵称" />
android:text="@string/email_nickname" />
<EditText
android:id="@+id/editTextEmailNickname"
@ -146,7 +146,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="登录密码/授权码" />
android:text="@string/email_password" />
<EditText
android:id="@+id/editTextEmailPsw"
@ -169,7 +169,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="收件地址" />
android:text="@string/email_to" />
<EditText
android:id="@+id/editTextEmailToAdd"

View File

@ -18,7 +18,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="设置名称" />
android:text="@string/set_name" />
<EditText
android:id="@+id/editTextFeishuName"
@ -41,7 +41,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="设置 Webhook 地址" />
android:text="@string/feishu_webhook" />
<EditText
android:id="@+id/editTextFeishuWebhook"
@ -64,7 +64,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="加签 Secret 没有可不填" />
android:text="@string/feishu_secret" />
<EditText
android:id="@+id/editTextFeishuSecret"

View File

@ -20,7 +20,7 @@
android:layout_width="60dp"
android:layout_height="wrap_content"
android:gravity="end"
android:text="设置名称"
android:text="@string/set_name"
android:textStyle="bold" />
<EditText
@ -44,7 +44,7 @@
android:layout_width="60dp"
android:layout_height="wrap_content"
android:gravity="end"
android:text="企业ID"
android:text="@string/Corp_ID"
android:textStyle="bold" />
<EditText
@ -53,7 +53,7 @@
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:inputType="text"
android:text="@string/wechat_id"
android:text=""
android:autofillHints="" />
</LinearLayout>
@ -68,7 +68,7 @@
android:layout_width="60dp"
android:layout_height="wrap_content"
android:gravity="end"
android:text="AgentID"
android:text="@string/Agent_ID"
android:textStyle="bold" />
<EditText
@ -77,7 +77,7 @@
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:inputType="text"
android:text="@string/Agent_ID"
android:text=""
android:autofillHints="" />
</LinearLayout>
@ -93,7 +93,7 @@
android:layout_width="60dp"
android:layout_height="wrap_content"
android:gravity="end"
android:text="Secret"
android:text="@string/App_Secret"
android:textStyle="bold" />
<EditText
@ -102,7 +102,7 @@
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:inputType="textPassword"
android:text="@string/App_Secret"
android:text=""
android:autofillHints="" />
</LinearLayout>
@ -117,7 +117,7 @@
android:layout_width="60dp"
android:layout_height="wrap_content"
android:gravity="end"
android:text="是否@all"
android:text="@string/is_at_all"
android:textStyle="bold" />
<Switch
@ -145,7 +145,7 @@
android:layout_width="60dp"
android:layout_height="wrap_content"
android:gravity="end"
android:text="指定成员"
android:text="@string/specified_member"
android:textStyle="bold" />
<EditText
@ -163,7 +163,7 @@
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:text="Tip指定接收消息的成员成员ID列表多个接收者用|分隔最多支持1000个" />
android:text="@string/specified_member_tips" />
</LinearLayout>
<LinearLayout

View File

@ -18,7 +18,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="设置名称" />
android:text="@string/set_name" />
<EditText
android:id="@+id/editTextQYWXGroupRobotName"
@ -41,7 +41,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="设置WebHook地址:示例https://qyapi.weixin.qq.com/cgixx?key=xxx" />
android:text="@string/QYWXGroupRobotWebHook" />
<EditText
android:id="@+id/editTextQYWXGroupRobotWebHook"

View File

@ -19,7 +19,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:text="设置匹配的卡槽"
android:text="@string/match_sim_slot"
android:textStyle="bold" />
<RadioGroup
@ -31,7 +31,7 @@
android:id="@+id/btnSimSlotAll"
style="@style/rg_rb_style"
android:checked="true"
android:text="全部" />
android:text="@string/all" />
<RadioButton
android:id="@+id/btnSimSlot1"
@ -57,7 +57,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:text="设置匹配的字段"
android:text="@string/match_field"
android:textStyle="bold" />
<RadioGroup
@ -69,22 +69,22 @@
android:id="@+id/btnTranspondAll"
style="@style/rg_rb_style"
android:checked="true"
android:text="全部" />
android:text="@string/all" />
<RadioButton
android:id="@+id/btnPhone"
style="@style/rg_rb_style"
android:text="手机号" />
android:text="@string/phone_number" />
<RadioButton
android:id="@+id/btnContent"
style="@style/rg_rb_style"
android:text="内容" />
android:text="@string/sms_content" />
<RadioButton
android:id="@+id/btnMultiMatch"
style="@style/rg_rb_style"
android:text="多重匹配" />
android:text="@string/multiple_matches" />
</RadioGroup>
</LinearLayout>
@ -94,6 +94,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="5dp"
android:layout_marginEnd="5dp"
android:layout_marginTop="5dp"
android:orientation="vertical">
@ -101,7 +102,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:text="设置匹配的模式"
android:text="@string/match_type"
android:textStyle="bold" />
<RadioGroup
@ -112,17 +113,17 @@
<RadioButton
android:id="@+id/btnIs"
style="@style/rg_rb_style"
android:text="是   " />
android:text="@string/btn_is" />
<RadioButton
android:id="@+id/btnContain"
style="@style/rg_rb_style"
android:text="包含  " />
android:text="@string/btn_contain" />
<RadioButton
android:id="@+id/btnNotContain"
style="@style/rg_rb_style"
android:text="不包含 " />
android:text="@string/btn_not_contain" />
</RadioGroup>
<RadioGroup
@ -133,17 +134,17 @@
<RadioButton
android:id="@+id/btnStartWith"
style="@style/rg_rb_style"
android:text="开头  " />
android:text="@string/btn_start_with" />
<RadioButton
android:id="@+id/btnEndWith"
style="@style/rg_rb_style"
android:text="结尾  " />
android:text="@string/btn_end_with" />
<RadioButton
android:id="@+id/btnRegex"
style="@style/rg_rb_style"
android:text="正则匹配" />
android:text="@string/btn_regex" />
</RadioGroup>
</LinearLayout>
@ -160,13 +161,15 @@
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="设置匹配的值"
android:layout_marginStart="5dp"
android:text="@string/match_value"
android:textStyle="bold" />
<EditText
android:id="@+id/editTextRuleValue"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:ems="14"
android:inputType="text"
android:text=""
@ -200,7 +203,7 @@
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="设置发送方"
android:text="@string/select_sender"
android:textStyle="bold" />
<LinearLayout
@ -214,7 +217,7 @@
android:layout_height="wrap_content"
android:minWidth="0dp"
android:minHeight="0dp"
android:text="选择" />
android:text="@string/select" />
<TextView
android:id="@+id/ruleSenderTv"

View File

@ -18,8 +18,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="3dp"
android:text="测试模拟的接收卡槽" />
android:text="@string/test_sim_slot" />
<RadioGroup
android:id="@+id/radioGroupTestSimSlot"
@ -47,7 +46,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="3dp"
android:text="测试模拟的来源号码" />
android:text="@string/test_phone_number" />
<EditText
@ -64,7 +63,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="3dp"
android:text="测试模拟的短信内容" />
android:text="@string/test_msg_content" />
<EditText

View File

@ -18,7 +18,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="设置名称" />
android:text="@string/set_name" />
<EditText
android:id="@+id/editTextServerChanName"
@ -41,7 +41,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="设置Server酱·Turbo版的SendKey" />
android:text="@string/ServerChanSendKey" />
<EditText
android:id="@+id/editTextServerChanSendKey"

View File

@ -19,7 +19,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="设置名称" />
android:text="@string/set_name" />
<EditText
android:id="@+id/editTextSmsName"
@ -44,7 +44,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="5dp"
android:text="发送卡槽" />
android:text="@string/SmsSimSlot" />
<RadioGroup
android:id="@+id/radioGroupSmsSimSlot"
@ -56,7 +56,7 @@
android:id="@+id/btnSmsSimSlotOrg"
style="@style/rg_rb_style"
android:checked="true"
android:text="原进原出" />
android:text="@string/same_source" />
<RadioButton
android:id="@+id/btnSmsSimSlot1"
@ -82,7 +82,7 @@
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="接收手机多个号码以半角分号分隔例如15888888888;19999999999" />
android:text="@string/SmsMobiles" />
<EditText
android:id="@+id/editTextSmsMobiles"
@ -104,7 +104,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="仅当无网络时启用" />
android:text="@string/OnlyNoNetwork" />
<Switch
android:id="@+id/switchSmsOnlyNoNetwork"

View File

@ -18,7 +18,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="设置名称" />
android:text="@string/set_name" />
<EditText
android:id="@+id/editTextTelegramName"
@ -41,7 +41,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="设置Telegram机器人的ApiToken" />
android:text="@string/TelegramApiToken" />
<EditText
android:id="@+id/editTextTelegramApiToken"
@ -63,7 +63,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="设置被通知人(或群组)的ChatId" />
android:text="@string/TelegramChatId" />
<EditText
android:id="@+id/editTextTelegramChatId"

View File

@ -18,7 +18,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="设置名称" />
android:text="@string/set_name" />
<EditText
android:id="@+id/editTextWebNotifyName"
@ -42,7 +42,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="5dp"
android:text="请求方式" />
android:text="@string/WebNotifyMethod" />
<RadioGroup
android:id="@+id/radioGroupWebNotifyMethod"
@ -78,7 +78,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="设置WebServer例如https://a.b.com/msg?token=xyz" />
android:text="@string/WebNotifyWebServer" />
<EditText
android:id="@+id/editTextWebNotifyWebServer"
@ -100,7 +100,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text='设置WebParams例如payload=%7B%22text%22%3A%22[msg]%22%7D [msg]将被替换成短信内容。\n支持Json格式例如{"text":[msg]}。\n注意除JSON格式外msg会自动进行UTF-8编码' />
android:text='@string/WebNotifyWebParams' />
<EditText
android:id="@+id/editTextWebNotifyWebParams"
@ -122,7 +122,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="设置Secret:置空则不计算sign" />
android:text="@string/WebNotifySecret" />
<EditText
android:id="@+id/editTextWebNotifySecret"

View File

@ -5,12 +5,12 @@
<item
android:id="@+id/to_setting"
android:orderInCategory="100"
android:title="@string/to_setting"
android:title="@string/setting"
app:showAsAction="never" />
<item
android:id="@+id/to_about"
android:orderInCategory="100"
android:title="@string/to_about"
android:title="@string/about"
app:showAsAction="never" />
</menu>

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="add_sender_menu">
<item>DingTalk Bot</item>
<item>Email</item>
<item>Bark</item>
<item>Webhook</item>
<item>WeCom Group Bot</item>
<item>WeCom</item>
<item>ServerChan·Turbo</item>
<item>Telegram Bot</item>
<item>SMS</item>
<item>FeiShu Bot</item>
</string-array>
</resources>

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#1C8DD4</color>
<color name="colorPrimaryDark">#1B8DD4</color>
<color name="colorAccent">#63C2FA</color>
<color name="white">#FFFFFF</color>
<color name="blank">#696969</color>
<color name="textColor">#DF000000</color>
<color name="textColorRequire">#F44336</color>
<color name="textHintColor">#8A000000</color>
<color name="grey">#EEEEEE</color>
<color name="greyDark">#DDDDDD</color>
<color name="success">#4CAF50</color>
<color name="error">#F44336</color>
</resources>

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#FFFFFF</color>
</resources>

View File

@ -0,0 +1,167 @@
<resources>
<string name="app_name">SmsForwarder</string>
<string name="notification_content">Forward to DingTalk Bot/WeCom Group Bot/Email/Bark/ServerChan/Telegram/Webhook, etc</string>
<!--Common-->
<string name="ok">OK</string>
<string name="cancel">Cancel</string>
<string name="del">Delete</string>
<string name="test">Test</string>
<string name="confirm">Confirm</string>
<string name="tips">Tips</string>
<string name="all">All</string>
<string name="select">Select</string>
<string name="setting">Settings</string>
<string name="about">About</string>
<string name="rule_setting">Rule Setting</string>
<string name="sender_setting">Sender Setting</string>
<string name="log_tips">Tips: Pull to refresh; Long press to delete one log entry.</string>
<string name="rule_tips">Tips: Tap "NEW FORWARDING RULE" to add a new rule; Long press one to delete; Tap an existing one to edit.</string>
<string name="sender_tips">Tips: Tap "NEW SENDER" to add a new sender; Long press one to delete; Tap an existing one to edit.</string>
<!--AboutActivity-->
<string name="version">Version</string>
<string name="check_for_updates">Check for updates</string>
<string name="auto_startup">Auto startup</string>
<string name="show_tips">Show tips</string>
<string name="open_source">Open source</string>
<string name="synchronize_mirror">Synchronize Mirror</string>
<string name="qq_group">QQ Group</string>
<string name="qq_group1">1st562854376</string>
<string name="qq_group2">2nd31330492</string>
<string name="join_qq_group1">Join 1st Group</string>
<string name="join_qq_group2">Join 2nd Group</string>
<string name="cache">Cache</string>
<string name="purge">Purge</string>
<string name="checking">Checking...</string>
<string name="up_to_date">Yo, you are up to date!</string>
<string name="cache_purged">Cache purged</string>
<string name="unknown_qq_version">No mobile QQ is installed or not supported by recent version!</string>
<!--MainActivity-->
<string name="bt_refresh_log">Clear Logs</string>
<string name="delete_log_title">Delete confirmation</string>
<string name="delete_log_tips">Are you sure to delete this log entry?</string>
<string name="delete_log_toast">The log entry has deleted.</string>
<string name="details">Details</string>
<string name="clear_logs_tips">Are you sure to clear all forwarding logs?</string>
<string name="pull_tips">Pull to refresh.</string>
<string name="release_tips">Release to refresh.</string>
<string name="reflashing_tips">Refreshing...</string>
<!--RuleActivity-->
<string name="setrule">Fwd Rule Settings</string>
<string name="delete_rule_title">Delete confirmation</string>
<string name="delete_rule_tips">Are you sure to delete this rule entry?</string>
<string name="delete_rule_toast">The rule entry has deleted.</string>
<string name="new_sender_first">Please add a new sender and then choose it.</string>
<string name="add_sender_first">Please add a sender first.</string>
<string name="select_sender">Select Sender</string>
<string name="rule_tester">Rule tester:</string>
<string name="new_forwarding_rule">New forwarding rule</string>
<string name="test_sim_slot">Test Sim Slot</string>
<string name="test_phone_number">Test Phone Number</string>
<string name="test_msg_content">Test Msg Content</string>
<string name="match_sim_slot">Sim Slot</string>
<string name="match_field">Field</string>
<string name="phone_number">Phone No.</string>
<string name="sms_content">SMS</string>
<string name="multiple_matches">Multiple</string>
<string name="match_type">Type</string>
<string name="btn_is">Is</string>
<string name="btn_contain">Contain</string>
<string name="btn_not_contain">Not Contain</string>
<string name="btn_start_with">Start With</string>
<string name="btn_end_with">End With</string>
<string name="btn_regex">Regex Match</string>
<string name="match_value">Value</string>
<!--SenderActivity-->
<string name="invalid_sender">Invalid sender, abort!</string>
<string name="delete_sender_title">Delete confirmation</string>
<string name="delete_sender_tips">Are you sure to delete this rule entry?</string>
<string name="delete_sender_toast">The rule entry has deleted.</string>
<string name="add_sender_title">Select sender type</string>
<string name="not_supported">Not supported</string>
<string name="setdingdingtitle">DingTalk Bot Settings</string>
<string name="setemailtitle">Email Settings</string>
<string name="setwebnotifytitle">Webhook Settings</string>
<string name="setqywxgrouprobottitle">WeCom Group Bot Settings</string>
<string name="setqywxapptitle">WeCom Settings</string>
<string name="setbarktitle">Bark Settings</string>
<string name="setserverchantitle">ServerChan·Turbo Settings</string>
<string name="settelegramtitle">Telegram Bot Settings</string>
<string name="setsmstitle">SMS Settings</string>
<string name="setfeishutitle">FeiShu Bot Settings</string>
<string name="test_phone_num">19999999999</string>
<string name="test_content">Test content @</string>
<string name="test_sms">【JD】code 387481, ihelp.jd.com</string>
<string name="test_group_name">Test Group Name</string>
<string name="failed_to_fwd">Failed to fwd</string>
<string name="invalid_token">Token cannot be empty</string>
<string name="invalid_email">Invalid email settings</string>
<string name="invalid_bark_server">Bark-server cannot be empty</string>
<string name="invalid_apiToken_or_chatId">Neither ApiToken nor ChatId can be empty</string>
<string name="invalid_sendkey">SendKey cannot be empty</string>
<string name="invalid_webserver">WebServer cannot be empty</string>
<string name="invalid_webhook">webHook cannot be empty</string>
<string name="invalid_at_mobiles">The specified member cannot be empty or select @all</string>
<string name="invalid_phone_num">Phone number cannot be empty</string>
<string name="new_sender">New Sender</string>
<string name="set_bark_name">Bark Group Name</string>
<string name="set_bark_server">Bark-Server, e.g. https://bark.bms.ink/XXXXXXXX/</string>
<string name="set_name">Name</string>
<string name="dingding_token">Token e.g. the XXXXXX part of https://oapi.dingtalk.com/robot/send?access_token=XXXXXX</string>
<string name="dingding_secret">Secret (optional)</string>
<string name="dingding_at">At Mobiles e.g. 18888888888,19999999999</string>
<string name="email_host">SMTP Host</string>
<string name="smtp_port">SMTP Port</string>
<string name="enable_ssl">SSL</string>
<string name="email_account">Account</string>
<string name="email_password">Password/Auth Code</string>
<string name="email_nickname">Nickname</string>
<string name="email_to">Send To</string>
<string name="feishu_webhook">Webhook</string>
<string name="feishu_secret">Secret (optional)</string>
<string name="Corp_ID">Corp ID</string>
<string name="Agent_ID">Agent ID</string>
<string name="App_Secret">App Secret</string>
<string name="is_at_all">Is at all</string>
<string name="specified_member">Specified Member</string>
<string name="specified_member_tips">TipSpecify members receive messages, member ID list (multiple recipients with \'|\' space, maximum 1000)</string>
<string name="QYWXGroupRobotWebHook">WebHook, e.g. https://qyapi.weixin.qq.com/cgixx?key=xxx</string>
<string name="ServerChanSendKey">ServerChan\'s SendKey</string>
<string name="TelegramApiToken">ApiToken</string>
<string name="TelegramChatId">ChatId</string>
<string name="WebNotifyMethod">Method</string>
<string name="WebNotifyWebServer">WebServer e.g. https://a.b.com/msg?token=xyz</string>
<string name="WebNotifyWebParams">WebParams e.g. payload=%7B%22text%22%3A%22[msg]%22%7D [msg] will be replaced with text message content. \nSupport Json format, for example: {"text":[MSG]}.\n Note: MSG is automatically utF-8 encoded in addition to JSON format</string>
<string name="WebNotifySecret">Secret (If empty, sign is not counted)</string>
<string name="SmsSimSlot">Sim Slot</string>
<string name="same_source">Same source</string>
<string name="SmsMobiles">Receive mobile phone numbers separated by, e.g. 15888888888;19999999999</string>
<string name="OnlyNoNetwork">仅当无网络时启用</string>
<!--SettingActivity-->
<string name="device_name">Device name</string>
<string name="sim1_remark">SIM1 Remark</string>
<string name="sim2_remark">SIM2 Remark</string>
<string name="carrier_mobile">Carrier_Mobile Number</string>
<string name="low_power_alarm_threshold">Low power alarm threshold</string>
<string name="low_power_alarm_threshold_tips">Value range: 0-100. Left blank or 0 is disabled</string>
<string name="retry_interval">Retry interval (seconds)</string>
<string name="retry_interval_tips">Retry five times after it fails</string>
<string name="add_extra">Sim slot info attached</string>
<string name="add_device_name">Device Name attached</string>
<string name="forward_missed_calls">Forward missed calls</string>
<string name="enable_custom_templates">Enable custom templates</string>
<string name="custom_templates">Custom templates</string>
<string name="custom_templates_tips">TipInsert labels as needed;Leave blank to default template</string>
<string name="insert_sender">Phone</string>
<string name="insert_content">SMS</string>
<string name="insert_extra">SIM</string>
<string name="insert_time">Time</string>
<string name="insert_device_name">Device</string>
<string name="init_setting">Restore initial Setting</string>
<string name="battery_setting">Battery Optimization</string>
<string name="unknown_number">Unknown Number</string>
<string name="calling">Incoming telegram</string>
<string name="unsupport">Your phone does not support this setting</string>
<string name="isIgnored">Set successfully!</string>
<!--SenderBaseMsg-->
<string name="start_request_interface">Start request interface...</string>
</resources>

View File

@ -0,0 +1,22 @@
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="rg_style">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
</style>
<style name="rg_rb_style">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_weight">1</item>
</style>
</resources>

View File

@ -4,14 +4,14 @@
<color name="colorPrimaryDark">#1B8DD4</color>
<color name="colorAccent">#63C2FA</color>
<color name="white">#FFF</color>
<color name="white">#FFFFFF</color>
<color name="blank">#696969</color>
<color name="textColor">#DF000000</color>
<color name="textColorRequire">#F44336</color>
<color name="textHintColor">#8A000000</color>
<color name="grey">#EEE</color>
<color name="greyDark">#DDD</color>
<color name="grey">#EEEEEE</color>
<color name="greyDark">#DDDDDD</color>
<color name="success">#4CAF50</color>
<color name="error">#F44336</color>
</resources>

View File

@ -1,13 +1,84 @@
<resources>
<string name="app_name">短信转发器</string>
<string name="notification_content">根据规则转发到钉钉/微信/邮箱/bark/Server酱/Telegram/webhook等</string>
<string name="ok">确认</string>
<!--Common-->
<string name="ok">确定</string>
<string name="cancel">取消</string>
<string name="del">删除</string>
<string name="test">测试</string>
<string name="setdingdingtitle">设置钉钉机器人</string>
<string name="feedback_input_text">反馈建议</string>
<string name="confirm">确认</string>
<string name="tips">提示</string>
<string name="all">全部</string>
<string name="select">选择</string>
<string name="setting">设置</string>
<string name="about">关于</string>
<string name="rule_setting">设置转发规则</string>
<string name="sender_setting">设置发送方</string>
<string name="log_tips">提示:置顶下拉刷新,长按删除单条记录</string>
<string name="rule_tips">提示:新建规则点击“添加”,长按删除/点击编辑已有</string>
<string name="sender_tips">提示:新建发送方点击“添加”,长按删除/点击编辑已有</string>
<!--AboutActivity-->
<string name="version">当前版本</string>
<string name="check_for_updates">检查新版本</string>
<string name="auto_startup">开机启动</string>
<string name="show_tips">帮助提示</string>
<string name="open_source">开源仓库</string>
<string name="synchronize_mirror">同步镜像</string>
<string name="qq_group">互帮互助QQ群</string>
<string name="qq_group1">①群562854376</string>
<string name="qq_group2">②群31330492</string>
<string name="join_qq_group1">加入①群</string>
<string name="join_qq_group2">加入②群</string>
<string name="cache">缓存大小</string>
<string name="purge">清除缓存</string>
<string name="checking">检查中...</string>
<string name="up_to_date">已是最新版本!</string>
<string name="cache_purged">缓存清理完成</string>
<string name="unknown_qq_version">未安装手Q或安装的版本不支持</string>
<!--MainActivity-->
<string name="bt_refresh_log">清空记录</string>
<string name="delete_log_title">日志删除确认</string>
<string name="delete_log_tips">确定删除该条日志记录?</string>
<string name="delete_log_toast">该条日志记录已经删除!</string>
<string name="details">详情</string>
<string name="clear_logs_tips">确定要清空转发记录吗?</string>
<string name="pull_tips">下拉可以刷新!</string>
<string name="release_tips">松开可以刷新!</string>
<string name="reflashing_tips">正在刷新...</string>
<!--RuleActivity-->
<string name="setrule">设置转发规则</string>
<string name="delete_rule_title">规则删除确认</string>
<string name="delete_rule_tips">确定删除该条规则?</string>
<string name="delete_rule_toast">该条规则已经删除!</string>
<string name="new_sender_first">请先创建发送方再选择</string>
<string name="add_sender_first">请先去设置发送方页面添加</string>
<string name="select_sender">选择发送方</string>
<string name="rule_tester">规则测试</string>
<string name="new_forwarding_rule">添加转发规则</string>
<string name="test_sim_slot">测试模拟的接收卡槽</string>
<string name="test_phone_number">测试模拟的来源号码</string>
<string name="test_msg_content">测试模拟的短信内容</string>
<string name="match_sim_slot">设置匹配的卡槽</string>
<string name="match_field">设置匹配的字段</string>
<string name="phone_number">手机号</string>
<string name="sms_content">短信内容</string>
<string name="multiple_matches">多重匹配</string>
<string name="match_type">设置匹配的模式</string>
<string name="btn_is"></string>
<string name="btn_contain">包含</string>
<string name="btn_not_contain">不包含</string>
<string name="btn_start_with">开头</string>
<string name="btn_end_with">结尾</string>
<string name="btn_regex">正则匹配</string>
<string name="match_value">设置匹配的值</string>
<!--SenderActivity-->
<string name="invalid_sender">异常的发送方类型,自动删除!</string>
<string name="delete_sender_title">发送方删除确认</string>
<string name="delete_sender_tips">确定删除该条发送方?</string>
<string name="delete_sender_toast">该条发送方已经删除!</string>
<string name="add_sender_title">选择发送方类型</string>
<string name="not_supported">暂不支持这种转发</string>
<string name="setdingdingtitle">设置钉钉机器人</string>
<string name="setemailtitle">设置邮箱</string>
<string name="setwebnotifytitle">设置Webhook</string>
<string name="setqywxgrouprobottitle">设置企业微信群机器人</string>
@ -17,17 +88,80 @@
<string name="settelegramtitle">设置Telegram机器人</string>
<string name="setsmstitle">设置SMS</string>
<string name="setfeishutitle">设置飞书机器人</string>
<string name="check_new_version">检查更新</string>
<string name="to_setting">设置</string>
<string name="to_about">关于</string>
<string name="log_tips">提示:置顶下拉刷新,长按删除单条记录</string>
<string name="rule_tips">提示:新建规则点击“添加”,长按删除/点击编辑已有</string>
<string name="sender_tips">提示:新建发送方点击“添加”,长按删除/点击编辑已有</string>
<string name="test_phone_num">19999999999</string>
<string name="test_content">测试内容(content)@</string>
<string name="test_sms">【京东】验证码为387481切勿将验证码告知他人请在页面中输入完成验证如有问题请点击 ihelp.jd.com 联系京东客服</string>
<string name="test_group_name">测试分组</string>
<string name="failed_to_fwd">发送失败:</string>
<string name="invalid_token">token 不能为空</string>
<string name="invalid_email">邮箱参数不完整</string>
<string name="invalid_bark_server">bark-server 不能为空</string>
<string name="invalid_apiToken_or_chatId">机器人的ApiToken 和 被通知人的ChatId 都不能为空</string>
<string name="invalid_sendkey">Server酱·Turbo版的 SendKey 不能为空</string>
<string name="invalid_webserver">WebServer 不能为空</string>
<string name="invalid_webhook">webHook 不能为空</string>
<string name="invalid_at_mobiles">指定成员 不能为空 或者 选择@all</string>
<string name="invalid_phone_num">接收手机号不能为空</string>
<string name="new_sender">添加发送方</string>
<string name="set_bark_name">设置分组名称</string>
<string name="set_bark_server">设置Bark-Server地址示例https://bark.bms.ink/XXXXXXXX/</string>
<string name="set_name">设置名称</string>
<string name="dingding_token">设置Token 例如 https://oapi.dingtalk.com/robot/send?access_token=XXXXXX 中的 XXXXXX</string>
<string name="dingding_secret">加签 Secret (没有可不填)</string>
<string name="dingding_at">转发时@某人 填写某人的手机号,多个用逗号分开 例如18888888888,19999999999</string>
<string name="email_host">SMTP服务器</string>
<string name="smtp_port">SMTP端口</string>
<string name="enable_ssl">开启SSL</string>
<string name="email_account">发件人帐号</string>
<string name="email_password">登录密码/授权码</string>
<string name="email_nickname">发件人昵称</string>
<string name="email_to">收件地址</string>
<string name="feishu_webhook">Webhook 地址</string>
<string name="feishu_secret">加签 Secret (没有可不填)</string>
<string name="Corp_ID">Corp ID</string>
<string name="Agent_ID">Agent ID</string>
<string name="App_Secret">App Secret</string>
<string name="is_at_all">是否@所有人</string>
<string name="specified_member">指定成员</string>
<string name="specified_member_tips">Tip指定接收消息的成员成员ID列表多个接收者用|分隔最多支持1000个</string>
<string name="QYWXGroupRobotWebHook">设置WebHook地址:示例https://qyapi.weixin.qq.com/cgixx?key=xxx</string>
<string name="ServerChanSendKey">设置Server酱·Turbo版的SendKey</string>
<string name="TelegramApiToken">设置Telegram机器人的ApiToken</string>
<string name="TelegramChatId">设置被通知人(或群组)的ChatId</string>
<string name="WebNotifyMethod">请求方式</string>
<string name="WebNotifyWebServer">设置WebServer例如https://a.b.com/msg?token=xyz</string>
<string name="WebNotifyWebParams">设置WebParams例如payload=%7B%22text%22%3A%22[msg]%22%7D [msg]将被替换成短信内容。\n支持Json格式例如{"text":[msg]}。\n注意除JSON格式外msg会自动进行UTF-8编码</string>
<string name="WebNotifySecret">设置Secret:置空则不计算sign</string>
<string name="SmsSimSlot">发送卡槽</string>
<string name="same_source">原进原出</string>
<string name="SmsMobiles">接收手机多个号码以半角分号分隔例如15888888888;19999999999</string>
<string name="OnlyNoNetwork">仅当无网络时启用</string>
<!--SettingActivity-->
<string name="device_name">设备名称</string>
<string name="sim1_remark">SIM1备注</string>
<string name="sim2_remark">SIM2备注</string>
<string name="carrier_mobile">运营商_手机号</string>
<string name="low_power_alarm_threshold">低电量预警阈值</string>
<string name="low_power_alarm_threshold_tips">取值范围0-100留空或0禁用</string>
<string name="retry_interval">每次重试间隔(秒)</string>
<string name="retry_interval_tips">接口请求失败后将重试5次</string>
<string name="add_extra">转发时附加卡槽信息</string>
<string name="add_device_name">转发时附加设备名称</string>
<string name="forward_missed_calls">转发未接来电</string>
<string name="enable_custom_templates">转发时启用自定义模版</string>
<string name="custom_templates">转发信息模版</string>
<string name="custom_templates_tips">Tip按需插入内容标签留空使用默认模版</string>
<string name="insert_sender">来源号码</string>
<string name="insert_content">短信内容</string>
<string name="insert_extra">卡槽信息</string>
<string name="insert_time">接收时间</string>
<string name="insert_device_name">设备名称</string>
<string name="init_setting">恢复初始化配置</string>
<string name="battery_setting">设置电池优化</string>
<string name="unknown_number">未知号码</string>
<string name="calling">来电</string>
<string name="unsupport">您的手机不支持此设置</string>
<string name="isIgnored">已设置成功!</string>
<string name="wechat_id" />
<string name="Agent_ID" />
<string name="App_Secret" />
<!--SenderBaseMsg-->
<string name="start_request_interface">开始请求接口...</string>
</resources>