diff --git a/app/src/main/java/com/idormy/sms/forwarder/AppListActivity.java b/app/src/main/java/com/idormy/sms/forwarder/AppListActivity.java index e04170cd..3c466c59 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/AppListActivity.java +++ b/app/src/main/java/com/idormy/sms/forwarder/AppListActivity.java @@ -92,7 +92,7 @@ public class AppListActivity extends AppCompatActivity { ClipData mClipData = ClipData.newPlainText("pkgName", appInfo.getPkgName()); cm.setPrimaryClip(mClipData); - Toast.makeText(AppListActivity.this, "已复制包名:" + appInfo.getPkgName(), Toast.LENGTH_LONG).show(); + Toast.makeText(AppListActivity.this, getString(R.string.package_name_copied) + appInfo.getPkgName(), Toast.LENGTH_LONG).show(); }); listView.setOnItemLongClickListener((parent, view, position, id) -> { AppInfo appInfo = appInfoList.get(position); @@ -112,7 +112,7 @@ public class AppListActivity extends AppCompatActivity { Message msg = new Message(); msg.what = NOTIFY; Bundle bundle = new Bundle(); - bundle.putString("DATA", "user".equals(currentType) ? "正在加载用户应用,请稍候..." : "正在加载系统应用,请稍候..."); + bundle.putString("DATA", "user".equals(currentType) ? getString(R.string.loading_user_app) : getString(R.string.loading_system_app)); msg.setData(bundle); handler.sendMessage(msg); diff --git a/app/src/main/java/com/idormy/sms/forwarder/CrashHandler.java b/app/src/main/java/com/idormy/sms/forwarder/CrashHandler.java index d9c0934d..08d81c52 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/CrashHandler.java +++ b/app/src/main/java/com/idormy/sms/forwarder/CrashHandler.java @@ -99,7 +99,7 @@ public class CrashHandler implements UncaughtExceptionHandler { @Override public void run() { Looper.prepare(); - Toast.makeText(mContext, "很抱歉,程序出现异常,即将退出.", Toast.LENGTH_LONG).show(); + Toast.makeText(mContext, R.string.crash_tip, Toast.LENGTH_LONG).show(); Looper.loop(); } }.start(); diff --git a/app/src/main/java/com/idormy/sms/forwarder/MainActivity.java b/app/src/main/java/com/idormy/sms/forwarder/MainActivity.java index b4cd683a..3d33d850 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/MainActivity.java +++ b/app/src/main/java/com/idormy/sms/forwarder/MainActivity.java @@ -110,7 +110,7 @@ public class MainActivity extends AppCompatActivity implements RefreshListView.I try { HttpServer.update(); } catch (Exception e) { - Log.e(TAG, "启用HttpServer:", e); + Log.e(TAG, "Start HttpServer:", e); } } @@ -354,9 +354,9 @@ public class MainActivity extends AppCompatActivity implements RefreshListView.I 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" + "时间:" + TimeUtil.utc2Local(logVo.getTime()) + "\n\n转发结果:\n" + logVo.getForwardResponse()); + builder.setMessage(getString(R.string.from) + logVo.getFrom() + "\n\n" + getString(R.string.msg) + logVo.getContent() + "\n\n" + getString(R.string.slot) + logVo.getSimInfo() + "\n\n" + getString(R.string.rule) + logVo.getRule() + "\n\n" + getString(R.string.time) + TimeUtil.utc2Local(logVo.getTime()) + getString(R.string.result) + logVo.getForwardResponse()); } else { - builder.setMessage("来源:" + logVo.getFrom() + "\n\n" + "消息:" + logVo.getContent() + "\n\n" + "规则:" + logVo.getRule() + "\n\n" + "时间:" + TimeUtil.utc2Local(logVo.getTime()) + "\n\n转发结果:\n" + logVo.getForwardResponse()); + builder.setMessage(getString(R.string.from) + logVo.getFrom() + "\n\n" + getString(R.string.msg) + logVo.getContent() + "\n\n" + getString(R.string.rule) + logVo.getRule() + "\n\n" + getString(R.string.time) + TimeUtil.utc2Local(logVo.getTime()) + getString(R.string.result) + logVo.getForwardResponse()); } //删除 builder.setNegativeButton(R.string.del, (dialog, which) -> { @@ -377,7 +377,7 @@ public class MainActivity extends AppCompatActivity implements RefreshListView.I }); //对于发送失败的消息添加重发按钮 if (logVo.getForwardStatus() != 2) { - builder.setPositiveButton("重发消息", (dialog, which) -> { + builder.setPositiveButton(R.string.resend, (dialog, which) -> { Toast.makeText(MainActivity.this, R.string.resend_toast, Toast.LENGTH_SHORT).show(); SendUtil.resendMsgByLog(MainActivity.this, handler, logVo); dialog.dismiss(); diff --git a/app/src/main/java/com/idormy/sms/forwarder/RuleActivity.java b/app/src/main/java/com/idormy/sms/forwarder/RuleActivity.java index 887ff377..b78cf591 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/RuleActivity.java +++ b/app/src/main/java/com/idormy/sms/forwarder/RuleActivity.java @@ -381,49 +381,49 @@ public class RuleActivity extends AppCompatActivity { buttonInsertSender.setOnClickListener(view -> { textSmsTemplate.setFocusable(true); textSmsTemplate.requestFocus(); - CommonUtil.insertOrReplaceText2Cursor(textSmsTemplate, "{{来源号码}}"); + CommonUtil.insertOrReplaceText2Cursor(textSmsTemplate, getString(R.string.tag_from)); }); Button buttonInsertContent = view1.findViewById(R.id.bt_insert_content); buttonInsertContent.setOnClickListener(view -> { textSmsTemplate.setFocusable(true); textSmsTemplate.requestFocus(); - CommonUtil.insertOrReplaceText2Cursor(textSmsTemplate, "{{短信内容}}"); + CommonUtil.insertOrReplaceText2Cursor(textSmsTemplate, getString(R.string.tag_sms)); }); Button buttonInsertSenderApp = view1.findViewById(R.id.bt_insert_sender_app); buttonInsertSenderApp.setOnClickListener(view -> { textSmsTemplate.setFocusable(true); textSmsTemplate.requestFocus(); - CommonUtil.insertOrReplaceText2Cursor(textSmsTemplate, "{{APP包名}}"); + CommonUtil.insertOrReplaceText2Cursor(textSmsTemplate, getString(R.string.tag_package_name)); }); Button buttonInsertContentApp = view1.findViewById(R.id.bt_insert_content_app); buttonInsertContentApp.setOnClickListener(view -> { textSmsTemplate.setFocusable(true); textSmsTemplate.requestFocus(); - CommonUtil.insertOrReplaceText2Cursor(textSmsTemplate, "{{通知内容}}"); + CommonUtil.insertOrReplaceText2Cursor(textSmsTemplate, getString(R.string.tag_msg)); }); Button buttonInsertExtra = view1.findViewById(R.id.bt_insert_extra); buttonInsertExtra.setOnClickListener(view -> { textSmsTemplate.setFocusable(true); textSmsTemplate.requestFocus(); - CommonUtil.insertOrReplaceText2Cursor(textSmsTemplate, "{{卡槽信息}}"); + CommonUtil.insertOrReplaceText2Cursor(textSmsTemplate, getString(R.string.tag_card_slot)); }); Button buttonInsertTime = view1.findViewById(R.id.bt_insert_time); buttonInsertTime.setOnClickListener(view -> { textSmsTemplate.setFocusable(true); textSmsTemplate.requestFocus(); - CommonUtil.insertOrReplaceText2Cursor(textSmsTemplate, "{{接收时间}}"); + CommonUtil.insertOrReplaceText2Cursor(textSmsTemplate, getString(R.string.tag_receive_time)); }); Button buttonInsertDeviceName = view1.findViewById(R.id.bt_insert_device_name); buttonInsertDeviceName.setOnClickListener(view -> { textSmsTemplate.setFocusable(true); textSmsTemplate.requestFocus(); - CommonUtil.insertOrReplaceText2Cursor(textSmsTemplate, "{{设备名称}}"); + CommonUtil.insertOrReplaceText2Cursor(textSmsTemplate, getString(R.string.tag_device_name)); }); //正则替换 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 60219419..6f3f84f6 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/SenderActivity.java +++ b/app/src/main/java/com/idormy/sms/forwarder/SenderActivity.java @@ -655,28 +655,28 @@ public class SenderActivity extends AppCompatActivity { buttonInsertSender.setOnClickListener(view -> { editTextEmailTitle.setFocusable(true); editTextEmailTitle.requestFocus(); - CommonUtil.insertOrReplaceText2Cursor(editTextEmailTitle, "{{来源号码}}"); + CommonUtil.insertOrReplaceText2Cursor(editTextEmailTitle, getString(R.string.tag_from)); }); Button buttonInsertExtra = view1.findViewById(R.id.bt_insert_extra); buttonInsertExtra.setOnClickListener(view -> { editTextEmailTitle.setFocusable(true); editTextEmailTitle.requestFocus(); - CommonUtil.insertOrReplaceText2Cursor(editTextEmailTitle, "{{卡槽信息}}"); + CommonUtil.insertOrReplaceText2Cursor(editTextEmailTitle, getString(R.string.tag_card_slot)); }); Button buttonInsertTime = view1.findViewById(R.id.bt_insert_time); buttonInsertTime.setOnClickListener(view -> { editTextEmailTitle.setFocusable(true); editTextEmailTitle.requestFocus(); - CommonUtil.insertOrReplaceText2Cursor(editTextEmailTitle, "{{接收时间}}"); + CommonUtil.insertOrReplaceText2Cursor(editTextEmailTitle, getString(R.string.tag_receive_time)); }); Button buttonInsertDeviceName = view1.findViewById(R.id.bt_insert_device_name); buttonInsertDeviceName.setOnClickListener(view -> { editTextEmailTitle.setFocusable(true); editTextEmailTitle.requestFocus(); - CommonUtil.insertOrReplaceText2Cursor(editTextEmailTitle, "{{设备名称}}"); + CommonUtil.insertOrReplaceText2Cursor(editTextEmailTitle, getString(R.string.tag_device_name)); }); } @@ -1770,28 +1770,28 @@ public class SenderActivity extends AppCompatActivity { buttonInsertSender.setOnClickListener(view -> { editTextPushPlusTitle.setFocusable(true); editTextPushPlusTitle.requestFocus(); - CommonUtil.insertOrReplaceText2Cursor(editTextPushPlusTitle, "{{来源号码}}"); + CommonUtil.insertOrReplaceText2Cursor(editTextPushPlusTitle, getString(R.string.tag_from)); }); Button buttonInsertExtra = view1.findViewById(R.id.bt_insert_extra); buttonInsertExtra.setOnClickListener(view -> { editTextPushPlusTitle.setFocusable(true); editTextPushPlusTitle.requestFocus(); - CommonUtil.insertOrReplaceText2Cursor(editTextPushPlusTitle, "{{卡槽信息}}"); + CommonUtil.insertOrReplaceText2Cursor(editTextPushPlusTitle, getString(R.string.tag_card_slot)); }); Button buttonInsertTime = view1.findViewById(R.id.bt_insert_time); buttonInsertTime.setOnClickListener(view -> { editTextPushPlusTitle.setFocusable(true); editTextPushPlusTitle.requestFocus(); - CommonUtil.insertOrReplaceText2Cursor(editTextPushPlusTitle, "{{接收时间}}"); + CommonUtil.insertOrReplaceText2Cursor(editTextPushPlusTitle, getString(R.string.tag_receive_time)); }); Button buttonInsertDeviceName = view1.findViewById(R.id.bt_insert_device_name); buttonInsertDeviceName.setOnClickListener(view -> { editTextPushPlusTitle.setFocusable(true); editTextPushPlusTitle.requestFocus(); - CommonUtil.insertOrReplaceText2Cursor(editTextPushPlusTitle, "{{设备名称}}"); + CommonUtil.insertOrReplaceText2Cursor(editTextPushPlusTitle, getString(R.string.tag_device_name)); }); } @@ -1915,28 +1915,28 @@ public class SenderActivity extends AppCompatActivity { buttonInsertSender.setOnClickListener(view -> { editTextGotifyTitle.setFocusable(true); editTextGotifyTitle.requestFocus(); - CommonUtil.insertOrReplaceText2Cursor(editTextGotifyTitle, "{{来源号码}}"); + CommonUtil.insertOrReplaceText2Cursor(editTextGotifyTitle, getString(R.string.tag_from)); }); Button buttonInsertExtra = view1.findViewById(R.id.bt_insert_extra); buttonInsertExtra.setOnClickListener(view -> { editTextGotifyTitle.setFocusable(true); editTextGotifyTitle.requestFocus(); - CommonUtil.insertOrReplaceText2Cursor(editTextGotifyTitle, "{{卡槽信息}}"); + CommonUtil.insertOrReplaceText2Cursor(editTextGotifyTitle, getString(R.string.tag_card_slot)); }); Button buttonInsertTime = view1.findViewById(R.id.bt_insert_time); buttonInsertTime.setOnClickListener(view -> { editTextGotifyTitle.setFocusable(true); editTextGotifyTitle.requestFocus(); - CommonUtil.insertOrReplaceText2Cursor(editTextGotifyTitle, "{{接收时间}}"); + CommonUtil.insertOrReplaceText2Cursor(editTextGotifyTitle, getString(R.string.tag_receive_time)); }); Button buttonInsertDeviceName = view1.findViewById(R.id.bt_insert_device_name); buttonInsertDeviceName.setOnClickListener(view -> { editTextGotifyTitle.setFocusable(true); editTextGotifyTitle.requestFocus(); - CommonUtil.insertOrReplaceText2Cursor(editTextGotifyTitle, "{{设备名称}}"); + CommonUtil.insertOrReplaceText2Cursor(editTextGotifyTitle, getString(R.string.tag_device_name)); }); } diff --git a/app/src/main/java/com/idormy/sms/forwarder/SettingActivity.java b/app/src/main/java/com/idormy/sms/forwarder/SettingActivity.java index 2fff68fd..45936862 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/SettingActivity.java +++ b/app/src/main/java/com/idormy/sms/forwarder/SettingActivity.java @@ -150,7 +150,7 @@ public class SettingActivity extends AppCompatActivity { switch_enable_phone.setOnCheckedChangeListener((buttonView, isChecked) -> { if (isChecked && !SettingUtil.getSwitchCallType1() && !SettingUtil.getSwitchCallType2() && !SettingUtil.getSwitchCallType3()) { - Toast.makeText(context, "必选选择一个通话类型,才能开启通话记录转发!", Toast.LENGTH_SHORT).show(); + Toast.makeText(context, R.string.enable_phone_fw_tips, Toast.LENGTH_SHORT).show(); SettingUtil.switchEnablePhone(false); return; } @@ -163,7 +163,7 @@ public class SettingActivity extends AppCompatActivity { check_box_call_type_1.setOnCheckedChangeListener((buttonView, isChecked) -> { SettingUtil.switchCallType1(isChecked); if (!isChecked && !SettingUtil.getSwitchCallType1() && !SettingUtil.getSwitchCallType2() && !SettingUtil.getSwitchCallType3()) { - Toast.makeText(context, "必选选择一个通话类型,才能开启通话记录转发!", Toast.LENGTH_SHORT).show(); + Toast.makeText(context, R.string.enable_phone_fw_tips, Toast.LENGTH_SHORT).show(); SettingUtil.switchEnablePhone(false); } }); @@ -171,7 +171,7 @@ public class SettingActivity extends AppCompatActivity { check_box_call_type_2.setOnCheckedChangeListener((buttonView, isChecked) -> { SettingUtil.switchCallType2(isChecked); if (!isChecked && !SettingUtil.getSwitchCallType1() && !SettingUtil.getSwitchCallType2() && !SettingUtil.getSwitchCallType3()) { - Toast.makeText(context, "必选选择一个通话类型,才能开启通话记录转发!", Toast.LENGTH_SHORT).show(); + Toast.makeText(context, R.string.enable_phone_fw_tips, Toast.LENGTH_SHORT).show(); SettingUtil.switchEnablePhone(false); } }); @@ -179,7 +179,7 @@ public class SettingActivity extends AppCompatActivity { check_box_call_type_3.setOnCheckedChangeListener((buttonView, isChecked) -> { SettingUtil.switchCallType3(isChecked); if (!isChecked && !SettingUtil.getSwitchCallType1() && !SettingUtil.getSwitchCallType2() && !SettingUtil.getSwitchCallType3()) { - Toast.makeText(context, "必选选择一个通话类型,才能开启通话记录转发!", Toast.LENGTH_SHORT).show(); + Toast.makeText(context, R.string.enable_phone_fw_tips, Toast.LENGTH_SHORT).show(); SettingUtil.switchEnablePhone(false); } }); @@ -199,10 +199,10 @@ public class SettingActivity extends AppCompatActivity { if (isChecked) { if (!CommonUtil.isNotificationListenerServiceEnabled(this)) { CommonUtil.openNotificationAccess(this); - Toast.makeText(this, "请先授予《短信转发器》通知使用权,否则无法转发APP通知,开启失败!", Toast.LENGTH_LONG).show(); + Toast.makeText(this, R.string.tips_notification_listener, Toast.LENGTH_LONG).show(); return; } else { - Toast.makeText(this, "通知服务已开启", Toast.LENGTH_LONG).show(); + Toast.makeText(this, R.string.notification_service_is_on, Toast.LENGTH_LONG).show(); CommonUtil.toggleNotificationListenerService(this); } } @@ -252,7 +252,7 @@ public class SettingActivity extends AppCompatActivity { switch_enable_send_sms.setOnCheckedChangeListener((buttonView, isChecked) -> { String webServer = editText_text_send_sms.getText().trim(); if (isChecked && !CommonUtil.checkUrl(webServer, false)) { - HttpUtil.Toast(TAG, "url为空或不正确无法启用"); + HttpUtil.Toast(TAG, getString(R.string.invalid_webserver)); switch_enable_send_sms.setChecked(false); return; } @@ -340,7 +340,7 @@ public class SettingActivity extends AppCompatActivity { cb_battery_level_alarm_once.setOnCheckedChangeListener((buttonView, isChecked) -> { SettingUtil.switchBatteryLevelAlarmOnce(isChecked); if (isChecked && 0 == SettingUtil.getBatteryLevelAlarmMin() && 0 == SettingUtil.getBatteryLevelAlarmMax()) { - Toast.makeText(context, "【注意】电量预警阈值上下限都是0,持续提醒不起作用", Toast.LENGTH_SHORT).show(); + Toast.makeText(context, R.string.tips_battery_level_alarm_once, Toast.LENGTH_SHORT).show(); SettingUtil.switchEnablePhone(false); } }); @@ -493,7 +493,7 @@ public class SettingActivity extends AppCompatActivity { //跳转自启动页面 public static void startToAutoStartSetting(Context context) { - Log.e("Util", "******************当前手机型号为:" + Build.MANUFACTURER); + Log.e("Util", "******************The current phone model is:" + Build.MANUFACTURER); Set>> entries = hashMap.entrySet(); boolean has = false; @@ -524,7 +524,7 @@ public class SettingActivity extends AppCompatActivity { } } if (!has) { - Toast.makeText(context, "兼容方案", Toast.LENGTH_SHORT).show(); + Toast.makeText(context, R.string.tips_compatible_solution, Toast.LENGTH_SHORT).show(); try { Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); @@ -686,7 +686,7 @@ public class SettingActivity extends AppCompatActivity { } //设置转发时启用自定义模版 - @SuppressLint("UseSwitchCompatOrMaterialCode") + @SuppressLint({"UseSwitchCompatOrMaterialCode", "SetTextI18n"}) private void switchSmsTemplate(Switch switch_sms_template) { boolean isOn = SettingUtil.getSwitchSmsTemplate(); switch_sms_template.setChecked(isOn); @@ -700,7 +700,11 @@ public class SettingActivity extends AppCompatActivity { layout_sms_template.setVisibility(isChecked ? View.VISIBLE : View.GONE); SettingUtil.switchSmsTemplate(isChecked); if (!isChecked) { - textSmsTemplate.setText("{{来源号码}}\n{{短信内容}}\n{{卡槽信息}}\n{{接收时间}}\n{{设备名称}}"); + textSmsTemplate.setText(getString(R.string.tag_from) + "\n" + + getString(R.string.tag_sms) + "\n" + + getString(R.string.tag_card_slot) + "\n" + + getString(R.string.tag_receive_time) + "\n" + + getString(R.string.tag_device_name)); } }); } @@ -735,19 +739,19 @@ public class SettingActivity extends AppCompatActivity { textSmsTemplate.requestFocus(); switch (v.getId()) { case R.id.bt_insert_sender: - CommonUtil.insertOrReplaceText2Cursor(textSmsTemplate, "{{来源号码}}"); + CommonUtil.insertOrReplaceText2Cursor(textSmsTemplate, getString(R.string.tag_from)); return; case R.id.bt_insert_content: - CommonUtil.insertOrReplaceText2Cursor(textSmsTemplate, "{{短信内容}}"); + CommonUtil.insertOrReplaceText2Cursor(textSmsTemplate, getString(R.string.tag_sms)); return; case R.id.bt_insert_extra: - CommonUtil.insertOrReplaceText2Cursor(textSmsTemplate, "{{卡槽信息}}"); + CommonUtil.insertOrReplaceText2Cursor(textSmsTemplate, getString(R.string.tag_card_slot)); return; case R.id.bt_insert_time: - CommonUtil.insertOrReplaceText2Cursor(textSmsTemplate, "{{接收时间}}"); + CommonUtil.insertOrReplaceText2Cursor(textSmsTemplate, getString(R.string.tag_receive_time)); return; case R.id.bt_insert_device_name: - CommonUtil.insertOrReplaceText2Cursor(textSmsTemplate, "{{设备名称}}"); + CommonUtil.insertOrReplaceText2Cursor(textSmsTemplate, getString(R.string.tag_device_name)); return; default: } diff --git a/app/src/main/java/com/idormy/sms/forwarder/model/RuleModel.java b/app/src/main/java/com/idormy/sms/forwarder/model/RuleModel.java index b9f8356d..c9ea0461 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/model/RuleModel.java +++ b/app/src/main/java/com/idormy/sms/forwarder/model/RuleModel.java @@ -5,6 +5,7 @@ import android.util.Log; import androidx.annotation.NonNull; +import com.idormy.sms.forwarder.MyApplication; import com.idormy.sms.forwarder.R; import com.idormy.sms.forwarder.model.vo.SmsVo; import com.idormy.sms.forwarder.utils.RuleLineUtils; @@ -44,32 +45,32 @@ public class RuleModel { public static final Map TYPE_MAP = new HashMap<>(); static { - TYPE_MAP.put("sms", "短信"); - TYPE_MAP.put("call", "来电"); - TYPE_MAP.put("app", "应用"); + TYPE_MAP.put("sms", getString(R.string.rule_sms)); + TYPE_MAP.put("call", getString(R.string.rule_call)); + TYPE_MAP.put("app", getString(R.string.rule_app)); } static { - FILED_MAP.put("transpond_all", "全部转发"); - FILED_MAP.put("phone_num", "手机号"); - FILED_MAP.put("msg_content", "内容"); - FILED_MAP.put("multi_match", "多重匹配"); - FILED_MAP.put("package_name", "APP包名"); - FILED_MAP.put("inform_content", "通知内容"); + FILED_MAP.put("transpond_all", getString(R.string.rule_transpond_all)); + FILED_MAP.put("phone_num", getString(R.string.rule_phone_num)); + FILED_MAP.put("msg_content", getString(R.string.rule_msg_content)); + FILED_MAP.put("multi_match", getString(R.string.rule_multi_match)); + FILED_MAP.put("package_name", getString(R.string.rule_package_name)); + FILED_MAP.put("inform_content", getString(R.string.rule_inform_content)); } static { - CHECK_MAP.put("is", "是"); - CHECK_MAP.put("notis", "不是"); - CHECK_MAP.put("contain", "包含"); - CHECK_MAP.put("startwith", "开头是"); - CHECK_MAP.put("endwith", "结尾是"); - CHECK_MAP.put("notcontain", "不包含"); - CHECK_MAP.put("regex", "正则匹配"); + CHECK_MAP.put("is", getString(R.string.rule_is)); + CHECK_MAP.put("notis", getString(R.string.rule_notis)); + CHECK_MAP.put("contain", getString(R.string.rule_contain)); + CHECK_MAP.put("startwith", getString(R.string.rule_startwith)); + CHECK_MAP.put("endwith", getString(R.string.rule_endwith)); + CHECK_MAP.put("notcontain", getString(R.string.rule_notcontain)); + CHECK_MAP.put("regex", getString(R.string.rule_regex)); } static { - SIM_SLOT_MAP.put("ALL", "全部"); + SIM_SLOT_MAP.put("ALL", getString(R.string.rule_all)); SIM_SLOT_MAP.put("SIM1", "SIM1"); SIM_SLOT_MAP.put("SIM2", "SIM2"); } @@ -90,11 +91,11 @@ public class RuleModel { private int status; public static String getRuleMatch(String filed, String check, String value, String simSlot) { - String SimStr = SIM_SLOT_MAP.get(simSlot) + "卡 "; + String SimStr = SIM_SLOT_MAP.get(simSlot) + getString(R.string.rule_card); if (filed == null || filed.equals(FILED_TRANSPOND_ALL)) { - return SimStr + "全部 转发到 "; + return SimStr + getString(R.string.rule_all_fw_to); } else { - return SimStr + "当 " + FILED_MAP.get(filed) + " " + CHECK_MAP.get(check) + " " + value + " 转发到 "; + return SimStr + getString(R.string.rule_when) + FILED_MAP.get(filed) + " " + CHECK_MAP.get(check) + " " + value + getString(R.string.rule_fw_to); } } @@ -242,11 +243,11 @@ public class RuleModel { } public String getRuleMatch() { - String SimStr = "app".equals(type) ? "" : SIM_SLOT_MAP.get(simSlot) + "卡 "; + String SimStr = "app".equals(type) ? "" : SIM_SLOT_MAP.get(simSlot) + getString(R.string.rule_card); if (filed == null || filed.equals(FILED_TRANSPOND_ALL)) { - return SimStr + "全部 转发到 "; + return SimStr + getString(R.string.rule_all_fw_to); } else { - return SimStr + "当 " + FILED_MAP.get(filed) + " " + CHECK_MAP.get(check) + " " + value + " 转发到 "; + return SimStr + getString(R.string.rule_when) + FILED_MAP.get(filed) + " " + CHECK_MAP.get(check) + " " + value + getString(R.string.rule_fw_to); } } @@ -334,6 +335,10 @@ public class RuleModel { } } + private static String getString(int resId) { + return MyApplication.getContext().getString(resId); + } + @NonNull @Override public String toString() { diff --git a/app/src/main/java/com/idormy/sms/forwarder/model/vo/LogVo.java b/app/src/main/java/com/idormy/sms/forwarder/model/vo/LogVo.java index 061aef44..25698f30 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/model/vo/LogVo.java +++ b/app/src/main/java/com/idormy/sms/forwarder/model/vo/LogVo.java @@ -1,5 +1,6 @@ package com.idormy.sms.forwarder.model.vo; +import com.idormy.sms.forwarder.MyApplication; import com.idormy.sms.forwarder.R; import lombok.Data; @@ -56,8 +57,12 @@ public class LogVo { } public String getForwardResponse() { - if (this.forwardStatus == 1) return "处理中..."; + if (this.forwardStatus == 1) return getString(R.string.processing); return forwardResponse; } + + private static String getString(int resId) { + return MyApplication.getContext().getString(resId); + } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/model/vo/SmsVo.java b/app/src/main/java/com/idormy/sms/forwarder/model/vo/SmsVo.java index f22209c3..367de91d 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/model/vo/SmsVo.java +++ b/app/src/main/java/com/idormy/sms/forwarder/model/vo/SmsVo.java @@ -5,6 +5,8 @@ import android.util.Log; import androidx.annotation.NonNull; +import com.idormy.sms.forwarder.MyApplication; +import com.idormy.sms.forwarder.R; import com.idormy.sms.forwarder.utils.SettingUtil; import java.io.Serializable; @@ -43,16 +45,19 @@ public class SmsVo implements Serializable { @SuppressLint("SimpleDateFormat") public String getTitleForSend(String titleTemplate, String regexReplace) { - if (titleTemplate == null || titleTemplate.isEmpty()) titleTemplate = "{{来源号码}}"; + if (titleTemplate == null || titleTemplate.isEmpty()) titleTemplate = getString(R.string.tag_from); String deviceMark = SettingUtil.getAddExtraDeviceMark().trim(); String versionName = SettingUtil.getVersionName(); - String titleForSend = titleTemplate.replace("{{来源号码}}", mobile).replace("{{APP包名}}", mobile) - .replace("{{短信内容}}", content).replace("{{通知内容}}", content) - .replace("{{卡槽信息}}", simInfo).replace("{{通知标题}}", simInfo) - .replace("{{接收时间}}", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date)) - .replace("{{设备名称}}", deviceMark) - .replace("{{当前应用版本号}}", versionName) + String titleForSend = titleTemplate.replace(getString(R.string.tag_from), mobile) + .replace(getString(R.string.tag_package_name), mobile) + .replace(getString(R.string.tag_sms), content) + .replace(getString(R.string.tag_msg), content) + .replace(getString(R.string.tag_card_slot), simInfo) + .replace(getString(R.string.tag_title), simInfo) + .replace(getString(R.string.tag_receive_time), new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date)) + .replace(getString(R.string.tag_device_name), deviceMark) + .replace(getString(R.string.tag_app_version), versionName) .trim(); return RegexReplace(regexReplace, titleForSend); @@ -71,7 +76,11 @@ public class SmsVo implements Serializable { @SuppressLint("SimpleDateFormat") public String getSmsVoForSend(String ruleSmsTemplate, String regexReplace) { String deviceMark = SettingUtil.getAddExtraDeviceMark().trim(); - String customSmsTemplate = "{{来源号码}}\n{{短信内容}}\n{{卡槽信息}}\n{{接收时间}}\n{{设备名称}}"; + String customSmsTemplate = getString(R.string.tag_from) + "\n" + + getString(R.string.tag_sms) + "\n" + + getString(R.string.tag_card_slot) + "\n" + + getString(R.string.tag_receive_time) + "\n" + + getString(R.string.tag_device_name); //优先取转发规则的自定义模板,留空则取全局设置 if (!ruleSmsTemplate.isEmpty()) { @@ -85,12 +94,15 @@ public class SmsVo implements Serializable { } String versionName = SettingUtil.getVersionName(); - String smsVoForSend = customSmsTemplate.replace("{{来源号码}}", mobile).replace("{{APP包名}}", mobile) - .replace("{{短信内容}}", content).replace("{{通知内容}}", content) - .replace("{{卡槽信息}}", simInfo).replace("{{通知标题}}", simInfo) - .replace("{{接收时间}}", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date)) - .replace("{{设备名称}}", deviceMark) - .replace("{{当前应用版本号}}", versionName) + String smsVoForSend = customSmsTemplate.replace(getString(R.string.tag_from), mobile) + .replace(getString(R.string.tag_package_name), mobile) + .replace(getString(R.string.tag_sms), content) + .replace(getString(R.string.tag_msg), content) + .replace(getString(R.string.tag_card_slot), simInfo) + .replace(getString(R.string.tag_title), simInfo) + .replace(getString(R.string.tag_receive_time), new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date)) + .replace(getString(R.string.tag_device_name), deviceMark) + .replace(getString(R.string.tag_app_version), versionName) .trim(); return RegexReplace(regexReplace, smsVoForSend); @@ -113,11 +125,15 @@ public class SmsVo implements Serializable { } return newContent; } catch (Exception e) { - Log.e("RegexReplace", "获取接收手机号失败:" + e.getMessage()); + Log.e("RegexReplace", "Failed to get the receiving phone number:" + e.getMessage()); return Content; } } + private static String getString(int resId) { + return MyApplication.getContext().getString(resId); + } + @NonNull @Override public String toString() { @@ -128,4 +144,5 @@ public class SmsVo implements Serializable { ", simInfo=" + simInfo + '}'; } + } diff --git a/app/src/main/java/com/idormy/sms/forwarder/receiver/BaseServlet.java b/app/src/main/java/com/idormy/sms/forwarder/receiver/BaseServlet.java index b25989ba..3158defe 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/receiver/BaseServlet.java +++ b/app/src/main/java/com/idormy/sms/forwarder/receiver/BaseServlet.java @@ -14,14 +14,22 @@ import org.eclipse.jetty.server.Server; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; -import java.io.*; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintWriter; +import java.io.Reader; import java.util.List; import javax.servlet.MultipartConfigElement; import javax.servlet.ServletOutputStream; import javax.servlet.annotation.MultipartConfig; import javax.servlet.annotation.WebServlet; -import javax.servlet.http.*; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; @WebServlet @MultipartConfig @@ -107,7 +115,7 @@ public class BaseServlet extends HttpServlet { BufferedReader reader = req.getReader(); try { String read = read(reader); - Log.i(TAG, "请求内容:" + read); + Log.i(TAG, "Request message:" + read); List smsHubVos = JSON.parseArray(read, SmsHubVo.class); if (smsHubVos.size() == 1 && SmsHubVo.Action.heartbeat.code().equals(smsHubVos.get(0).getAction())) { smsHubVos.clear(); @@ -141,7 +149,7 @@ public class BaseServlet extends HttpServlet { } private void printErrMsg(HttpServletResponse resp, PrintWriter writer, Exception e) { - String text = "服务器内部错误:" + e.getMessage(); + String text = "Internal server error: " + e.getMessage(); Log.e(TAG, text); resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); writer.println(text); @@ -160,7 +168,7 @@ public class BaseServlet extends HttpServlet { } } catch (Exception e) { e.printStackTrace(); - String text = "服务器内部错误:" + e.getMessage(); + String text = "Internal server error: " + e.getMessage(); Log.e(TAG, text); resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } finally { diff --git a/app/src/main/java/com/idormy/sms/forwarder/receiver/PhoneStateReceiver.java b/app/src/main/java/com/idormy/sms/forwarder/receiver/PhoneStateReceiver.java index a33894dd..4d115057 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/receiver/PhoneStateReceiver.java +++ b/app/src/main/java/com/idormy/sms/forwarder/receiver/PhoneStateReceiver.java @@ -44,7 +44,7 @@ public class PhoneStateReceiver extends BroadcastReceiver { (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); } int state = mTelephonyManager.getCallState(); - Log.d(TAG, "来电信息:state=" + state + " phoneNumber = " + phoneNumber); + Log.d(TAG, "Caller information: state=" + state + " phoneNumber = " + phoneNumber); switch (state) { //包括响铃、第三方来电等待 case TelephonyManager.CALL_STATE_RINGING: @@ -80,7 +80,7 @@ public class PhoneStateReceiver extends BroadcastReceiver { if ((callInfo.getType() == 1 && !SettingUtil.getSwitchCallType1()) || (callInfo.getType() == 2 && !SettingUtil.getSwitchCallType2()) || (callInfo.getType() == 3 && !SettingUtil.getSwitchCallType3())) { - Log.d(TAG, "未启用该类型的通话记录转发,不做处理!"); + Log.w(TAG, "Call record forwarding of this type is not enabled, no processing will be done!"); return; } @@ -105,7 +105,7 @@ public class PhoneStateReceiver extends BroadcastReceiver { String currHash = CommonUtil.MD5(phoneNumber + simInfo + time); Log.d(TAG, "prevHash=" + prevHash + " currHash=" + currHash); if (prevHash != null && prevHash.equals(currHash)) { - Log.w(TAG, "同一卡槽同一秒的重复未接来电广播不再重复处理(部分机型会收到两条广播)"); + Log.w(TAG, "Repeated missed call broadcasts of the same card slot in the same second are no longer processed repeatedly (some models will receive two broadcasts)"); return; } SettingUtil.setPrevNoticeHash(phoneNumber, currHash); diff --git a/app/src/main/java/com/idormy/sms/forwarder/receiver/SmsBroadcastReceiver.java b/app/src/main/java/com/idormy/sms/forwarder/receiver/SmsBroadcastReceiver.java index c6d9eb40..c24425b4 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/receiver/SmsBroadcastReceiver.java +++ b/app/src/main/java/com/idormy/sms/forwarder/receiver/SmsBroadcastReceiver.java @@ -58,7 +58,7 @@ public class SmsBroadcastReceiver extends BroadcastReceiver { simInfo = simId == 2 ? SettingUtil.getAddExtraSim2() : SettingUtil.getAddExtraSim1(); simInfo = "SIM" + simId + "_" + simInfo; } catch (Exception e) { - Log.e(TAG, "获取接收手机号失败:" + e.getMessage()); + Log.e(TAG, "Failed to get the receiving phone number:" + e.getMessage()); } List smsVoList = new ArrayList<>(); @@ -87,7 +87,7 @@ public class SmsBroadcastReceiver extends BroadcastReceiver { smsVoList.add(new SmsVo(mobile, mobileToContent.get(mobile), date, simInfo)); } - Log.d(TAG, "短信:" + smsVoList); + Log.d(TAG, "SMS: " + smsVoList); SendUtil.send_msg_list(context, smsVoList, simId, "sms"); //SmsHubApi @@ -101,7 +101,7 @@ public class SmsBroadcastReceiver extends BroadcastReceiver { } } catch (Throwable throwable) { - Log.e(TAG, "解析短信失败:" + throwable.getMessage()); + Log.e(TAG, "Parsing SMS failed: " + throwable.getMessage()); } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/HttpServer.java b/app/src/main/java/com/idormy/sms/forwarder/sender/HttpServer.java index ee534b99..21dbc0ea 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/HttpServer.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/HttpServer.java @@ -58,7 +58,7 @@ public class HttpServer { } long l = System.currentTimeMillis(); if (l - ts < 3000 && asRunning()) { - Toast.makeText(context, "点击启动后请等待3秒", Toast.LENGTH_SHORT).show(); + Toast.makeText(context, R.string.tips_wait_3_seconds, Toast.LENGTH_SHORT).show(); return false; } if (asRunning().equals(SettingUtil.getSwitchEnableHttpServer())) { diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderBarkMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderBarkMsg.java index d200dcbb..83ec7421 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderBarkMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderBarkMsg.java @@ -44,7 +44,8 @@ public class SenderBarkMsg extends SenderBaseMsg { } int isCode = content.indexOf("验证码"); int isPassword = content.indexOf("动态密码"); - if (isCode != -1 || isPassword != -1) { + int isPassword2 = content.indexOf("短信密码"); + if (isCode != -1 || isPassword != -1 || isPassword2 != -1) { Pattern p = Pattern.compile("(\\d{4,6})"); Matcher m = p.matcher(content); if (m.find()) { diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderTelegramMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderTelegramMsg.java index 1d524739..e793b24d 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderTelegramMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderTelegramMsg.java @@ -14,6 +14,7 @@ import com.idormy.sms.forwarder.utils.LogUtil; import java.io.IOException; import java.net.InetSocketAddress; import java.net.Proxy; +import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -89,7 +90,7 @@ public class SenderTelegramMsg extends SenderBaseMsg { final Request request; if (method.equals("GET")) { request = new Request.Builder() - .url(requestUrl + "?chat_id=" + chatId + "&text=" + finalText) + .url(requestUrl + "?chat_id=" + chatId + "&text=" + URLEncoder.encode(finalText, "UTF-8")) .build(); } else { Map bodyMap = new HashMap(); diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtil.java b/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtil.java index 96119dc9..df7b44c4 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtil.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtil.java @@ -8,6 +8,9 @@ import android.content.pm.PackageManager; import android.preference.PreferenceManager; import android.util.Log; +import com.idormy.sms.forwarder.MyApplication; +import com.idormy.sms.forwarder.R; + @SuppressWarnings({"SynchronizeOnNonFinalField", "unused"}) public class SettingUtil { static Boolean hasInit = false; @@ -111,7 +114,12 @@ public class SettingUtil { } public static String getSmsTemplate() { - return sp_setting.getString(Define.SP_MSG_KEY_STRING_SMS_TEMPLATE, "{{来源号码}}\n{{短信内容}}\n{{卡槽信息}}\n{{接收时间}}\n{{设备名称}}"); + return sp_setting.getString(Define.SP_MSG_KEY_STRING_SMS_TEMPLATE, + getString(R.string.tag_from) + "\n" + + getString(R.string.tag_sms) + "\n" + + getString(R.string.tag_card_slot) + "\n" + + getString(R.string.tag_receive_time) + "\n" + + getString(R.string.tag_device_name)); } public static void setSmsTemplate(String textSmsTemplate) { @@ -272,4 +280,8 @@ public class SettingUtil { return ""; } } + + private static String getString(int resId) { + return MyApplication.getContext().getString(resId); + } } diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml index 310d0a0f..2362d78f 100644 --- a/app/src/main/res/layout/activity_setting.xml +++ b/app/src/main/res/layout/activity_setting.xml @@ -27,7 +27,7 @@ android:layout_marginStart="5dp" android:layout_marginTop="10dp" android:layout_marginEnd="5dp" - android:gravity="bottom" + android:gravity="center_vertical" android:orientation="horizontal"> @@ -242,7 +242,7 @@ android:layout_marginStart="5dp" android:layout_marginTop="10dp" android:layout_marginEnd="5dp" - android:gravity="bottom" + android:gravity="center_vertical" android:orientation="horizontal"> @@ -508,8 +508,8 @@ android:id="@+id/cb_battery_level_alarm_once" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:scaleX="0.8" - android:scaleY="0.8" + android:scaleX="0.7" + android:scaleY="0.7" android:text="@string/keep_reminding" /> @@ -520,7 +520,7 @@ android:layout_marginStart="5dp" android:layout_marginTop="10dp" android:layout_marginEnd="5dp" - android:gravity="bottom" + android:gravity="center_vertical" android:orientation="horizontal"> @@ -733,7 +733,7 @@ android:layout_marginStart="5dp" android:layout_marginTop="10dp" android:layout_marginEnd="5dp" - android:gravity="bottom" + android:gravity="center_vertical" android:orientation="horizontal"> diff --git a/app/src/main/res/layout/alert_dialog_setview_dingding.xml b/app/src/main/res/layout/alert_dialog_setview_dingding.xml index a0987df1..242865e7 100644 --- a/app/src/main/res/layout/alert_dialog_setview_dingding.xml +++ b/app/src/main/res/layout/alert_dialog_setview_dingding.xml @@ -25,23 +25,20 @@ @@ -77,7 +74,6 @@ app:textSize="15sp" /> - + android:singleLine="true" + tools:ignore="LabelFor" /> @@ -217,16 +213,15 @@ diff --git a/app/src/main/res/layout/alert_dialog_setview_gotify.xml b/app/src/main/res/layout/alert_dialog_setview_gotify.xml index 43344326..e646c6b7 100644 --- a/app/src/main/res/layout/alert_dialog_setview_gotify.xml +++ b/app/src/main/res/layout/alert_dialog_setview_gotify.xml @@ -25,24 +25,20 @@ + android:singleLine="true" + tools:ignore="LabelFor" /> diff --git a/app/src/main/res/layout/alert_dialog_setview_pushplus.xml b/app/src/main/res/layout/alert_dialog_setview_pushplus.xml index 962390e5..1093f564 100644 --- a/app/src/main/res/layout/alert_dialog_setview_pushplus.xml +++ b/app/src/main/res/layout/alert_dialog_setview_pushplus.xml @@ -25,23 +25,20 @@ + android:singleLine="true" + tools:ignore="LabelFor" /> diff --git a/app/src/main/res/layout/alert_dialog_setview_qywxapp.xml b/app/src/main/res/layout/alert_dialog_setview_qywxapp.xml index 6b411f04..c6de1a8a 100644 --- a/app/src/main/res/layout/alert_dialog_setview_qywxapp.xml +++ b/app/src/main/res/layout/alert_dialog_setview_qywxapp.xml @@ -26,23 +26,20 @@ diff --git a/app/src/main/res/layout/alert_dialog_setview_qywxgrouprobot.xml b/app/src/main/res/layout/alert_dialog_setview_qywxgrouprobot.xml index a2f38a42..8d982784 100644 --- a/app/src/main/res/layout/alert_dialog_setview_qywxgrouprobot.xml +++ b/app/src/main/res/layout/alert_dialog_setview_qywxgrouprobot.xml @@ -25,23 +25,20 @@ diff --git a/app/src/main/res/layout/alert_dialog_setview_serverchan.xml b/app/src/main/res/layout/alert_dialog_setview_serverchan.xml index 089243a7..0ba422a1 100644 --- a/app/src/main/res/layout/alert_dialog_setview_serverchan.xml +++ b/app/src/main/res/layout/alert_dialog_setview_serverchan.xml @@ -25,23 +25,20 @@ diff --git a/app/src/main/res/layout/alert_dialog_setview_sms.xml b/app/src/main/res/layout/alert_dialog_setview_sms.xml index 67b593ac..76f7cd3b 100644 --- a/app/src/main/res/layout/alert_dialog_setview_sms.xml +++ b/app/src/main/res/layout/alert_dialog_setview_sms.xml @@ -24,23 +24,20 @@ diff --git a/app/src/main/res/layout/alert_dialog_setview_telegram.xml b/app/src/main/res/layout/alert_dialog_setview_telegram.xml index 5d971223..533cfa40 100644 --- a/app/src/main/res/layout/alert_dialog_setview_telegram.xml +++ b/app/src/main/res/layout/alert_dialog_setview_telegram.xml @@ -25,23 +25,20 @@ diff --git a/app/src/main/res/layout/alert_dialog_setview_webnotify.xml b/app/src/main/res/layout/alert_dialog_setview_webnotify.xml index 31c1b4e5..f5fe934e 100644 --- a/app/src/main/res/layout/alert_dialog_setview_webnotify.xml +++ b/app/src/main/res/layout/alert_dialog_setview_webnotify.xml @@ -25,23 +25,20 @@ diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 37113895..2e825541 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -116,7 +116,7 @@ CronID, AgentID and Secret cannot be blank Phone number cannot be blank New Sender - Bark Group Name/Status + GroupName/Status Bark-Server e.g. https://day.app/XXXXXXXX/ Bark-Icon (optional) @@ -168,11 +168,11 @@ Device name SIM1 Label SIM2 Label - Label of SIM, eg.: "CMCC", "13800138000", etc. - Low power alarm threshold - Value range: 0–100. Left blank or 0 is disabled - Retry interval (seconds) - Disabled when times = 0, the interval is incremented + Label of SIM,\neg. SIM1_AT&T_88888888 + Low power alarm + Value range: 0–100.\nLeft blank or 0 is disabled + Retry interval + Disabled when times = 0,\nthe interval is incremented Forward sms Main switch, requires permissions to read and sned SMS messages, especially verification SMS texts. Forward calls log @@ -180,7 +180,7 @@ Forward app Ntf. Main switch, requires permission to read notification. Auto close Ntf. - Global custom template + Global Custom Template Priority: custom template for forwarding rules > Global custom template > System default Enable regular replacement content Format: RegularExpression===ReplacementResult,One rule per line.\ne.g. (\\d{3})\\d+(\\d{4})===$1****$2 @@ -261,9 +261,9 @@ ✱Account ✱Servers ✱Email - below + % - above + 0 Monitor battery status changes Notify when charging status changes (charging/discharging/uncharged/fully charged) @@ -282,7 +282,7 @@ Agree Disagree SmsForwarder (the "Application/App"), is 100\% free and open source, and is compliled and released basing on repository hosted on GitHub. The App will not collect any of your privacy data!\n\n Version information of the App will be sent in the following situations: \n 1. As startup, version information will be sent to "Umeng +· U-APP Mobile Statistics" for user retention analyze and crash stats;\n 2. Manual update check triggered by user;\n The App collects no any other data!!\n\n The App collects and uses version information only in accordance with the Privacy Policy, and will not collect any other information as an abuse of users\' consent to the Privacy Policy; - Setting the WebServer + WebServer ]]> Title Template Priority(1 – 9) @@ -313,10 +313,10 @@ TODO Forwarding Function Main switch: Enable the forwarding function as required - Mandatory type: - Missed call - Received call - Local outgoing call + Call type: + Missed + Received + Call out Optional action: Active request Obtain instructions through passive reception or active polling to operate the machine @@ -328,11 +328,58 @@ It is recommended to open each authorization or setting, do not disable the notification bar, to avoid the APP service being killed Custom settings If the automatic acquisition fails, please fill in the remarks manually; after clearing, it will be automatically acquired again! - times + , Interval - seconds + sec Retry [Test Channel] Congratulations, the sending channel test is successful, please continue to add forwarding rules! SIM1_TestOperator_18888888888 - Keep reminding + Continued + RESEND + From: + Msg: + Slot: + Rule: + Time: + \n\nResult: \n + In the processing… + {{FROM}} + {{SMS}} + {{PACKAGE_NAME}} + {{MSG}} + {{CARD_SLOT}} + {{RECEIVE_TIME}} + {{DEVICE_NAME}} + {{APP_VERSION}} + {{TITLE}} + SMS + CALL + APP + ALL + Transpond All + Phone Num + Msg Content + Multi Match + Package Name + Inform Content +  Card  +  When  +  Fw. To  +  All Fw. To  + IS + NOTIS + CONTAIN + STARTWITH + ENDWITH + NOTCONTAIN + REGEX + Package name copied: + Loading user app, please wait… + Loading system app, please wait… + Very sorry! The program has an exception and is about to exit… + A call type must be selected to enable call log forwarding! + Notification service is on + [Note] The upper and lower limits of the battery warning threshold are 0, and the continuous warning does not work. + Compatible solution + Please wait 3 seconds after clicking start diff --git a/app/src/main/res/values-en/styles.xml b/app/src/main/res/values-en/styles.xml index 2117a5c7..f27b25a5 100644 --- a/app/src/main/res/values-en/styles.xml +++ b/app/src/main/res/values-en/styles.xml @@ -32,12 +32,15 @@ wrap_content 5dip 5dip + 10dip + 10dip 5dip 5dip @drawable/select_selector @null center 13sp + 0.1 @drawable/txt_select_selector diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3866f590..f7098284 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -312,7 +312,7 @@ TODO 转发功能 总开关,请根据实际需要,启用对应的转发功能 - 必选类型: + 通话类型: 未接来电 已接来电 本机去电 @@ -334,4 +334,51 @@ 【测试通道】恭喜您,该发送通道测试成功,请继续添加转发规则! SIM1_测试运营商_18888888888 持续提醒 + 重发消息 + 来源: + 消息: + 卡槽: + 规则: + 时间: + \n\n转发结果:\n + 处理中… + {{来源号码}} + {{短信内容}} + {{APP包名}} + {{通知内容}} + {{卡槽信息}} + {{接收时间}} + {{设备名称}} + {{当前应用版本号}} + {{通知标题}} + 短信 + 来电 + 应用 + 全部 + 全部转发 + 手机号 + 内容 + 多重匹配 + APP包名 + 通知内容 +  卡  +  当  +  转发到  +  全部 转发到  + + 不是 + 包含 + 开头是 + 结尾是 + 不包含 + 正则匹配 + 已复制包名: + 正在加载用户应用,请稍候… + 正在加载系统应用,请稍候… + 很抱歉!程序出现异常,即将退出… + 必须选择一个通话类型,才能开启通话记录转发! + 通知服务已开启 + 【注意】电量预警阈值上下限都是0,持续提醒不起作用 + 兼容方案 + 点击启动后请等待3秒