优化:bark推送新增标题模板、时效性、声音、角标、链接设置项

pull/115/head
pppscn 3 years ago
parent 928c3f7003
commit ee1c21b8cb

@ -47,15 +47,15 @@ android {
}
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//minifyEnabled true
//shrinkResources true
//proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
debug {
//minifyEnabled true
//shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.debug
}
}

@ -65,6 +65,8 @@
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />

@ -2,6 +2,7 @@ package com.idormy.sms.forwarder;
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
@ -132,7 +133,7 @@ public class MainActivity extends AppCompatActivity implements RefreshListView.I
//是否同意隐私协议
if (!MyApplication.allowPrivacyPolicy) {
dialog();
dialog(this);
return;
}
@ -448,10 +449,9 @@ public class MainActivity extends AppCompatActivity implements RefreshListView.I
}
/*** 隐私协议授权弹窗*/
@SuppressLint({"ResourceType", "InflateParams"})
public void dialog() {
Dialog dialog = new Dialog(this, R.style.dialog);
View inflate = LayoutInflater.from(MainActivity.this).inflate(R.layout.diaolog_privacy_policy, null);
public void dialog(Context context) {
Dialog dialog = new Dialog(context, R.style.dialog);
@SuppressLint("InflateParams") View inflate = LayoutInflater.from(context).inflate(R.layout.diaolog_privacy_policy, null);
TextView succsebtn = inflate.findViewById(R.id.succsebtn);
TextView canclebtn = inflate.findViewById(R.id.caclebtn);
@ -467,7 +467,7 @@ public class MainActivity extends AppCompatActivity implements RefreshListView.I
dialog.dismiss();
//跳转到HomeActivity
final Intent intent = getPackageManager().getLaunchIntentForPackage(getPackageName());
final Intent intent = context.getPackageManager().getLaunchIntentForPackage(getPackageName());
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

@ -693,9 +693,21 @@ public class SenderActivity extends AppCompatActivity {
}
final ClearEditText editTextBarkServer = view1.findViewById(R.id.editTextBarkServer);
if (barkSettingVo != null) editTextBarkServer.setText(barkSettingVo.getServer());
final EditText editTextBarkTitle = view1.findViewById(R.id.editTextBarkTitle);
final EditText editTextBarkIcon = view1.findViewById(R.id.editTextBarkIcon);
if (barkSettingVo != null) editTextBarkIcon.setText(barkSettingVo.getIcon());
final EditText editTextBarkSound = view1.findViewById(R.id.editTextBarkSound);
final EditText editTextBarkBadge = view1.findViewById(R.id.editTextBarkBadge);
final EditText editTextBarkUrl = view1.findViewById(R.id.editTextBarkUrl);
final RadioGroup radioGroupBarkLevel = view1.findViewById(R.id.radioGroupBarkLevel);
if (barkSettingVo != null) {
editTextBarkServer.setText(barkSettingVo.getServer());
editTextBarkTitle.setText(barkSettingVo.getTitle());
editTextBarkIcon.setText(barkSettingVo.getIcon());
editTextBarkSound.setText(barkSettingVo.getSound());
editTextBarkBadge.setText(barkSettingVo.getBadge());
editTextBarkUrl.setText(barkSettingVo.getUrl());
radioGroupBarkLevel.check(barkSettingVo.getLevelId());
}
Button buttonBarkOk = view1.findViewById(R.id.buttonBarkOk);
Button buttonBarkDel = view1.findViewById(R.id.buttonBarkDel);
@ -715,14 +727,20 @@ public class SenderActivity extends AppCompatActivity {
return;
}
//推送地址
String barkServer = editTextBarkServer.getText().trim();
if (!CommonUtil.checkUrl(barkServer, false)) {
Toast.makeText(SenderActivity.this, R.string.invalid_bark_server, Toast.LENGTH_LONG).show();
return;
}
String barkIcon = editTextBarkIcon.getText().toString().trim();
BarkSettingVo barkSettingVoNew = new BarkSettingVo(barkServer, barkIcon);
String icon = editTextBarkIcon.getText().toString().trim(); //消息图标
String title = editTextBarkTitle.getText().toString().trim(); //标题模板
int levelId = radioGroupBarkLevel.getCheckedRadioButtonId(); //时效性
String sound = editTextBarkSound.getText().toString().trim(); //声音
String badge = editTextBarkBadge.getText().toString().trim(); //角标
String url = editTextBarkUrl.getText().toString().trim(); //链接
BarkSettingVo barkSettingVoNew = new BarkSettingVo(barkServer, icon, title, levelId, sound, badge, url);
if (isClone || senderModel == null) {
SenderModel newSenderModel = new SenderModel();
newSenderModel.setName(senderName);
@ -755,11 +773,17 @@ public class SenderActivity extends AppCompatActivity {
buttonBarkTest.setOnClickListener(view -> {
String barkServer = editTextBarkServer.getText().trim();
String barkIcon = editTextBarkIcon.getText().toString().trim();
String icon = editTextBarkIcon.getText().toString().trim(); //消息图标
String title = editTextBarkTitle.getText().toString().trim(); //标题模板
int levelId = radioGroupBarkLevel.getCheckedRadioButtonId(); //时效性
String sound = editTextBarkSound.getText().toString().trim(); //声音
String badge = editTextBarkBadge.getText().toString().trim(); //角标
String url = editTextBarkUrl.getText().toString().trim(); //链接
BarkSettingVo barkSettingVoNew = new BarkSettingVo(barkServer, icon, title, levelId, sound, badge, url);
if (CommonUtil.checkUrl(barkServer, false)) {
try {
SmsVo smsVo = new SmsVo(getString(R.string.test_phone_num), getString(R.string.test_sender_sms), new Date(), getString(R.string.test_sim_info));
SenderBarkMsg.sendMsg(0, handler, null, barkServer, barkIcon, getString(R.string.test_phone_num), smsVo.getSmsVoForSend(), getString(R.string.test_group_name));
SenderBarkMsg.sendMsg(0, handler, null, barkSettingVoNew, smsVo.getTitleForSend(title), smsVo.getSmsVoForSend(), getString(R.string.test_group_name));
} catch (Exception e) {
Toast.makeText(SenderActivity.this, getString(R.string.failed_to_fwd) + e.getMessage(), Toast.LENGTH_LONG).show();
e.printStackTrace();
@ -768,6 +792,36 @@ public class SenderActivity extends AppCompatActivity {
Toast.makeText(SenderActivity.this, R.string.invalid_bark_server, Toast.LENGTH_LONG).show();
}
});
Button buttonInsertSender = view1.findViewById(R.id.bt_insert_sender);
buttonInsertSender.setOnClickListener(view -> {
editTextBarkTitle.setFocusable(true);
editTextBarkTitle.requestFocus();
CommonUtil.insertOrReplaceText2Cursor(editTextBarkTitle, getString(R.string.tag_from));
});
Button buttonInsertExtra = view1.findViewById(R.id.bt_insert_extra);
buttonInsertExtra.setOnClickListener(view -> {
editTextBarkTitle.setFocusable(true);
editTextBarkTitle.requestFocus();
CommonUtil.insertOrReplaceText2Cursor(editTextBarkTitle, getString(R.string.tag_card_slot));
});
Button buttonInsertTime = view1.findViewById(R.id.bt_insert_time);
buttonInsertTime.setOnClickListener(view -> {
editTextBarkTitle.setFocusable(true);
editTextBarkTitle.requestFocus();
CommonUtil.insertOrReplaceText2Cursor(editTextBarkTitle, getString(R.string.tag_receive_time));
});
Button buttonInsertDeviceName = view1.findViewById(R.id.bt_insert_device_name);
buttonInsertDeviceName.setOnClickListener(view -> {
editTextBarkTitle.setFocusable(true);
editTextBarkTitle.requestFocus();
CommonUtil.insertOrReplaceText2Cursor(editTextBarkTitle, getString(R.string.tag_device_name));
});
}
//webhook

@ -1,20 +1,51 @@
package com.idormy.sms.forwarder.model.vo;
import com.idormy.sms.forwarder.R;
import java.io.Serializable;
import lombok.Data;
@Data
public class BarkSettingVo implements Serializable {
private String server;
private String icon;
private String server; //推送地址
private String icon; //消息图标
private String title; //标题模板
private String level; //时效性
private String sound; //声音
private String badge; //角标
private String url; //链接
public BarkSettingVo() {
}
public BarkSettingVo(String server, String icon) {
public BarkSettingVo(String server, String icon, String title, int levelId, String sound, String badge, String url) {
this.server = server;
this.icon = icon;
this.title = title;
this.level = getLevelStr(levelId);
this.sound = sound;
this.badge = badge;
this.url = url;
}
public int getLevelId() {
if (level.equals("timeSensitive")) {
return R.id.btnBarkLevelTimeSensitive;
} else if (level.equals("passive")) {
return R.id.btnBarkLevelPassive;
} else {
return R.id.btnBarkLevelActive;
}
}
public String getLevelStr(int id) {
if (id == R.id.btnBarkLevelTimeSensitive) {
return "timeSensitive";
} else if (id == R.id.btnBarkLevelPassive) {
return "passive";
} else {
return "active";
}
}
}

@ -229,7 +229,7 @@ public class SendUtil {
BarkSettingVo barkSettingVo = JSON.parseObject(senderModel.getJsonSetting(), BarkSettingVo.class);
if (barkSettingVo != null) {
try {
SenderBarkMsg.sendMsg(logId, handError, retryInterceptor, barkSettingVo.getServer(), barkSettingVo.getIcon(), smsVo.getMobile(), smsVo.getSmsVoForSend(smsTemplate, regexReplace), senderModel.getName());
SenderBarkMsg.sendMsg(logId, handError, retryInterceptor, barkSettingVo, smsVo.getTitleForSend(barkSettingVo.getTitle(), regexReplace), smsVo.getSmsVoForSend(smsTemplate, regexReplace), senderModel.getName());
} catch (Exception e) {
LogUtil.updateLog(logId, 0, e.getMessage());
Log.e(TAG, "senderSendMsg: SenderBarkMsg error " + e.getMessage());

@ -1,15 +1,16 @@
package com.idormy.sms.forwarder.sender;
import android.os.Handler;
import android.text.TextUtils;
import android.util.Log;
import androidx.annotation.NonNull;
import com.idormy.sms.forwarder.model.vo.BarkSettingVo;
import com.idormy.sms.forwarder.utils.Define;
import com.idormy.sms.forwarder.utils.LogUtil;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
@ -17,31 +18,45 @@ import java.util.regex.Pattern;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class SenderBarkMsg extends SenderBaseMsg {
static final String TAG = "SenderBarkMsg";
public static void sendMsg(final long logId, final Handler handError, final RetryIntercepter retryInterceptor, String barkServer, String barkIcon, String from, String content, String groupName) throws Exception {
Log.i(TAG, "sendMsg barkServer:" + barkServer + " from:" + from + " content:" + content);
public static void sendMsg(final long logId, final Handler handError, final RetryIntercepter retryInterceptor, BarkSettingVo barkSettingVo, String title, String content, String groupName) throws Exception {
Log.i(TAG, "sendMsg barkServer:" + barkSettingVo.toString() + " title:" + title + " content:" + content);
if (barkServer == null || barkServer.isEmpty()) {
String requestUrl = barkSettingVo.getServer(); //推送地址
Log.i(TAG, "requestUrl:" + requestUrl);
if (requestUrl == null || requestUrl.isEmpty()) {
return;
}
String icon = barkSettingVo.getIcon(); //消息图标
String level = barkSettingVo.getLevel(); //时效性
String sound = barkSettingVo.getSound(); //声音
String badge = barkSettingVo.getBadge(); //角标
String url = barkSettingVo.getUrl(); //链接
//特殊处理避免标题重复
content = content.replaceFirst("^" + from + "(.*)", "").trim();
barkServer += URLEncoder.encode(from, "UTF-8");
barkServer += "/" + URLEncoder.encode(content, "UTF-8");
barkServer += "?isArchive=1"; //自动保存
barkServer += "&group=" + URLEncoder.encode(groupName, "UTF-8"); //增加支持分组
if (barkIcon != null && !barkIcon.isEmpty()) {
barkServer += "&icon=" + URLEncoder.encode(barkIcon, "UTF-8"); //指定推送消息图标
}
content = content.replaceFirst("^" + title + "(.*)", "").trim();
String Content_Type = "application/x-www-form-urlencoded";
MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("title", title)
.addFormDataPart("body", content)
.addFormDataPart("isArchive", "1")
.addFormDataPart("group", groupName);
if (!TextUtils.isEmpty(icon)) builder.addFormDataPart("icon", icon);
if (!TextUtils.isEmpty(level)) builder.addFormDataPart("level", level);
if (!TextUtils.isEmpty(sound)) builder.addFormDataPart("sound", sound);
if (!TextUtils.isEmpty(badge)) builder.addFormDataPart("badge", badge);
int isCode = content.indexOf("验证码");
int isPassword = content.indexOf("动态密码");
int isPassword2 = content.indexOf("短信密码");
@ -50,25 +65,25 @@ public class SenderBarkMsg extends SenderBaseMsg {
Matcher m = p.matcher(content);
if (m.find()) {
System.out.println(m.group());
barkServer += "&automaticallyCopy=1&copy=" + m.group();
builder.addFormDataPart("automaticallyCopy", "1");
builder.addFormDataPart("copy", m.group());
}
}
final String requestUrl = barkServer;
Log.i(TAG, "requestUrl:" + requestUrl);
RequestBody body = builder.build();
Log.d(TAG, "method = POST, Body = " + body.toString());
OkHttpClient.Builder builder = new OkHttpClient.Builder();
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder();
//设置重试拦截器
if (retryInterceptor != null) builder.addInterceptor(retryInterceptor);
if (retryInterceptor != null) clientBuilder.addInterceptor(retryInterceptor);
//设置读取超时时间
OkHttpClient client = builder
OkHttpClient client = clientBuilder
.readTimeout(Define.REQUEST_TIMEOUT_SECONDS, TimeUnit.SECONDS)
.writeTimeout(Define.REQUEST_TIMEOUT_SECONDS, TimeUnit.SECONDS)
.connectTimeout(Define.REQUEST_TIMEOUT_SECONDS, TimeUnit.SECONDS)
.build();
final Request request = new Request.Builder().url(requestUrl).get().build();
final Request request = new Request.Builder().url(requestUrl).method("POST", body).build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(@NonNull Call call, @NonNull final IOException e) {

@ -69,51 +69,12 @@ public class BatteryService extends Service {
@SuppressLint("DefaultLocale")
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "BatteryReceiver--------------");
String action = intent.getAction();
Log.i(TAG, " 0 action:" + action);
Log.i(TAG, "ACTION_BATTERY_CHANGED");
int status = intent.getIntExtra("status", 0);
int health = intent.getIntExtra("health", 0);
//boolean present = intent.getBooleanExtra("present", false);
int levelCur = intent.getIntExtra("level", 0);
int scale = intent.getIntExtra("scale", 0);
//int icon_small = intent.getIntExtra("icon-small", 0);
int plugged = intent.getIntExtra("plugged", 0);
int voltage = intent.getIntExtra("voltage", 0);
int temperature = intent.getIntExtra("temperature", 0);
//String technology = intent.getStringExtra("technology");
String msg = "";
msg += "\n剩余电量" + levelCur + "%";
if (scale > 0) msg += "\n充满电量" + scale + "%";
if (voltage > 0) msg += "\n当前电压" + String.format("%.2f", voltage / 1000F) + "V";
if (temperature > 0) msg += "\n当前温度" + String.format("%.2f", temperature / 10F) + "℃";
msg += "\n电池状态" + getStatus(status);
if (health > 0) msg += "\n健康度" + getHealth(health);
switch (plugged) {
case BatteryManager.BATTERY_PLUGGED_AC:
msg += "\n充电器AC";
break;
case BatteryManager.BATTERY_PLUGGED_USB:
msg += "\n充电器USB";
break;
case BatteryManager.BATTERY_PLUGGED_WIRELESS:
msg += "\n充电器无线";
break;
}
Log.i(TAG, msg);
//电量发生变化
int levelCur = intent.getIntExtra("level", 0);
int levelPre = SettingUtil.getBatteryLevelCurrent();
if (levelCur != levelPre) {
String msg = batteryReceiver(intent);
SettingUtil.setBatteryLevelCurrent(levelCur);
int levelMin = SettingUtil.getBatteryLevelAlarmMin();
@ -135,13 +96,14 @@ public class BatteryService extends Service {
sendMessage(context, msg);
return;
}
}
//充电状态改变
int status = intent.getIntExtra("status", 0);
if (SettingUtil.getSwitchEnableBatteryReceiver()) {
int oldStatus = SettingUtil.getBatteryStatus();
if (status != oldStatus) {
String msg = batteryReceiver(intent);
SettingUtil.setBatteryStatus(status);
msg = "【充电状态】发生变化:" + getStatus(oldStatus) + " → " + getStatus(status) + msg;
sendMessage(context, msg);
@ -150,6 +112,52 @@ public class BatteryService extends Service {
}
};
@SuppressLint("DefaultLocale")
private String batteryReceiver(Intent intent) {
Log.i(TAG, "BatteryReceiver--------------");
String action = intent.getAction();
Log.i(TAG, " 0 action:" + action);
Log.i(TAG, "ACTION_BATTERY_CHANGED");
int status = intent.getIntExtra("status", 0);
int health = intent.getIntExtra("health", 0);
//boolean present = intent.getBooleanExtra("present", false);
int levelCur = intent.getIntExtra("level", 0);
int scale = intent.getIntExtra("scale", 0);
//int icon_small = intent.getIntExtra("icon-small", 0);
int plugged = intent.getIntExtra("plugged", 0);
int voltage = intent.getIntExtra("voltage", 0);
int temperature = intent.getIntExtra("temperature", 0);
//String technology = intent.getStringExtra("technology");
String msg = "";
msg += "\n剩余电量" + levelCur + "%";
if (scale > 0) msg += "\n充满电量" + scale + "%";
if (voltage > 0) msg += "\n当前电压" + String.format("%.2f", voltage / 1000F) + "V";
if (temperature > 0) msg += "\n当前温度" + String.format("%.2f", temperature / 10F) + "℃";
msg += "\n电池状态" + getStatus(status);
if (health > 0) msg += "\n健康度" + getHealth(health);
switch (plugged) {
case BatteryManager.BATTERY_PLUGGED_AC:
msg += "\n充电器AC";
break;
case BatteryManager.BATTERY_PLUGGED_USB:
msg += "\n充电器USB";
break;
case BatteryManager.BATTERY_PLUGGED_WIRELESS:
msg += "\n充电器无线";
break;
}
Log.i(TAG, msg);
return msg;
}
//电池状态
private String getStatus(int status) {
switch (status) {

@ -50,18 +50,24 @@
android:layout_marginEnd="10dp"
android:orientation="vertical">
<TextView
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/set_bark_server"
android:textStyle="bold" />
android:orientation="horizontal">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/set_bark_server_tips"
android:textSize="10sp"
tools:ignore="SmallSp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/set_bark_server"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/set_bark_server_tips"
android:textSize="10sp"
tools:ignore="SmallSp" />
</LinearLayout>
<com.idormy.sms.forwarder.view.ClearEditText
android:id="@+id/editTextBarkServer"
@ -82,21 +88,67 @@
android:layout_marginEnd="10dp"
android:orientation="vertical">
<TextView
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/set_bark_icon"
android:textStyle="bold" />
android:orientation="horizontal">
<TextView
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/set_bark_icon"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:text="@string/set_bark_icon_tips"
android:textSize="10sp"
tools:ignore="SmallSp" />
</LinearLayout>
<EditText
android:id="@+id/editTextBarkIcon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:autofillHints=""
android:ems="14"
android:inputType="text"
android:text=""
tools:ignore="LabelFor" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="10dp"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/set_bark_icon_tips"
android:textSize="10sp"
tools:ignore="SmallSp" />
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/bark_sound"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:text="@string/bark_sound_tips"
android:textSize="10sp"
tools:ignore="SmallSp" />
</LinearLayout>
<EditText
android:id="@+id/editTextBarkIcon"
android:id="@+id/editTextBarkSound"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:autofillHints=""
@ -106,6 +158,222 @@
tools:ignore="LabelFor" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="10dp"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/bark_badge"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:text="@string/bark_badge_tips"
android:textSize="10sp"
tools:ignore="SmallSp" />
</LinearLayout>
<EditText
android:id="@+id/editTextBarkBadge"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:autofillHints=""
android:ems="14"
android:inputType="text"
android:text=""
tools:ignore="LabelFor" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="10dp"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/bark_url"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:text="@string/bark_url_tips"
android:textSize="10sp"
tools:ignore="SmallSp" />
</LinearLayout>
<EditText
android:id="@+id/editTextBarkUrl"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:autofillHints=""
android:ems="14"
android:inputType="textUri"
android:text=""
tools:ignore="LabelFor" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="10dp"
android:layout_marginTop="5dp"
android:layout_marginEnd="10dp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="5dp"
android:text="@string/bark_level"
android:textStyle="bold" />
<RadioGroup
android:id="@+id/radioGroupBarkLevel"
style="@style/rg_style"
android:layout_marginStart="3dp"
android:orientation="horizontal">
<RadioButton
android:id="@+id/btnBarkLevelActive"
style="@style/rg_rb_style"
android:checked="true"
android:text="@string/bark_level_active" />
<RadioButton
android:id="@+id/btnBarkLevelTimeSensitive"
style="@style/rg_rb_style"
android:text="@string/bark_level_timeSensitive" />
<RadioButton
android:id="@+id/btnBarkLevelPassive"
style="@style/rg_rb_style"
android:text="@string/bark_level_passive" />
</RadioGroup>
</LinearLayout>
<LinearLayout
android:id="@+id/layout_sms_template"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="10dp"
android:background="@android:color/white"
android:gravity="center_vertical"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/title_template"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:text="@string/custom_templates_tips"
android:textSize="10sp"
tools:ignore="SmallSp" />
</LinearLayout>
<EditText
android:id="@+id/editTextBarkTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:autofillHints=""
android:gravity="start|top"
android:inputType="text"
android:minLines="1"
android:text=""
tools:ignore="LabelFor,TextFields" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/bt_insert_sender"
android:layout_width="match_parent"
android:layout_height="25dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:layout_weight="1"
android:background="@color/colorBlueGrey"
android:text="@string/insert_sender"
tools:ignore="ButtonStyle,NestedWeights" />
<Button
android:id="@+id/bt_insert_extra"
android:layout_width="match_parent"
android:layout_height="25dp"
android:layout_marginStart="5dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:layout_weight="1"
android:background="@color/colorBlueGrey"
android:text="@string/insert_extra"
tools:ignore="ButtonStyle,NestedWeights" />
<Button
android:id="@+id/bt_insert_time"
android:layout_width="match_parent"
android:layout_height="25dp"
android:layout_marginStart="5dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:layout_weight="1"
android:background="@color/colorBlueGrey"
android:text="@string/insert_time"
tools:ignore="ButtonStyle,NestedWeights" />
<Button
android:id="@+id/bt_insert_device_name"
android:layout_width="match_parent"
android:layout_height="25dp"
android:layout_marginStart="5dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:layout_weight="1"
android:background="@color/colorBlueGrey"
android:text="@string/insert_device_name"
tools:ignore="ButtonStyle,NestedWeights" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"

@ -390,4 +390,14 @@
<string name="tips_get_info_failed">Failed to get one-click clone information from sender</string>
<string name="linkman">Linkman:</string>
<string name="via_number">Via Number:</string>
<string name="bark_sound">Sound (optional)</string>
<string name="bark_sound_tips">e.g. minuet.caf</string>
<string name="bark_badge">Badge (optional)</string>
<string name="bark_badge_tips">e.g. 888</string>
<string name="bark_url">Url (optional)</string>
<string name="bark_url_tips">e.g. https://github.com/pppscn/SmsForwarder</string>
<string name="bark_level">Level</string>
<string name="bark_level_active">active</string>
<string name="bark_level_timeSensitive">timeSensitive</string>
<string name="bark_level_passive">passive</string>
</resources>

@ -117,10 +117,10 @@
<string name="invalid_phone_num">接收手机号不能为空</string>
<string name="new_sender">添加发送通道</string>
<string name="set_bark_name">分组名称/状态</string>
<string name="set_bark_server">设置Bark-Server地址</string>
<string name="set_bark_server_tips">https://day.app/XXXXXXXX/</string>
<string name="set_bark_icon">设置推送消息图标(可选)</string>
<string name="set_bark_icon_tips">http://day.app/assets/images/avatar.jpg</string>
<string name="set_bark_server">Bark-Server</string>
<string name="set_bark_server_tips">https://day.app/XXXXXXXX/</string>
<string name="set_bark_icon">消息图标(可选)</string>
<string name="set_bark_icon_tips">http://day.app/assets/images/avatar.jpg</string>
<string name="set_name">名称/状态</string>
<string name="dingding_token">Token不含链接</string>
<string name="dingding_token_tips">https://oapi.dingtalk.com/robot/send?access_token=XXX 中的 XXX</string>
@ -389,4 +389,14 @@
<string name="tips_get_info_failed">从发送端获取一键克隆信息失败</string>
<string name="linkman">联 系 人:</string>
<string name="via_number">来源号码:</string>
<string name="bark_sound">消息声音(可选)</string>
<string name="bark_sound_tips">minuet.caf</string>
<string name="bark_badge">消息角标(可选)</string>
<string name="bark_badge_tips">888</string>
<string name="bark_url">消息链接(可选)</string>
<string name="bark_url_tips">https://github.com/pppscn/SmsForwarder</string>
<string name="bark_level">通知级别</string>
<string name="bark_level_active">立即亮屏</string>
<string name="bark_level_timeSensitive">时效性</string>
<string name="bark_level_passive">仅加列表</string>
</resources>

Loading…
Cancel
Save