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 698be1d1..8c6f52f7 100644
--- a/app/src/main/java/com/idormy/sms/forwarder/SenderActivity.java
+++ b/app/src/main/java/com/idormy/sms/forwarder/SenderActivity.java
@@ -60,6 +60,7 @@ import com.idormy.sms.forwarder.sender.SenderSmsMsg;
import com.idormy.sms.forwarder.sender.SenderTelegramMsg;
import com.idormy.sms.forwarder.sender.SenderUtil;
import com.idormy.sms.forwarder.sender.SenderWebNotifyMsg;
+import com.idormy.sms.forwarder.view.ClearEditText;
import com.umeng.analytics.MobclickAgent;
import java.net.Proxy;
@@ -310,10 +311,10 @@ public class SenderActivity extends AppCompatActivity {
final EditText editTextDingdingName = view1.findViewById(R.id.editTextDingdingName);
if (senderModel != null)
editTextDingdingName.setText(senderModel.getName());
- final EditText editTextDingdingToken = view1.findViewById(R.id.editTextDingdingToken);
+ final ClearEditText editTextDingdingToken = view1.findViewById(R.id.editTextDingdingToken);
if (dingDingSettingVo != null)
editTextDingdingToken.setText(dingDingSettingVo.getToken());
- final EditText editTextDingdingSecret = view1.findViewById(R.id.editTextDingdingSecret);
+ final ClearEditText editTextDingdingSecret = view1.findViewById(R.id.editTextDingdingSecret);
if (dingDingSettingVo != null)
editTextDingdingSecret.setText(dingDingSettingVo.getSecret());
final EditText editTextDingdingAtMobiles = view1.findViewById(R.id.editTextDingdingAtMobiles);
@@ -417,7 +418,7 @@ public class SenderActivity extends AppCompatActivity {
@SuppressLint("UseSwitchCompatOrMaterialCode") final Switch switchEmailSSl = view1.findViewById(R.id.switchEmailSSl);
final EditText editTextEmailFromAdd = view1.findViewById(R.id.editTextEmailFromAdd);
final EditText editTextEmailNickname = view1.findViewById(R.id.editTextEmailNickname);
- final EditText editTextEmailPsw = view1.findViewById(R.id.editTextEmailPsw);
+ final ClearEditText editTextEmailPsw = view1.findViewById(R.id.editTextEmailPsw);
final EditText editTextEmailToAdd = view1.findViewById(R.id.editTextEmailToAdd);
final EditText editTextEmailTitle = view1.findViewById(R.id.editTextEmailTitle);
final RadioGroup radioGroupEmailProtocol = view1.findViewById(R.id.radioGroupEmailProtocol);
@@ -567,7 +568,7 @@ public class SenderActivity extends AppCompatActivity {
final EditText editTextBarkName = view1.findViewById(R.id.editTextBarkName);
if (senderModel != null) editTextBarkName.setText(senderModel.getName());
- final EditText editTextBarkServer = view1.findViewById(R.id.editTextBarkServer);
+ final ClearEditText editTextBarkServer = view1.findViewById(R.id.editTextBarkServer);
if (barkSettingVo != null) editTextBarkServer.setText(barkSettingVo.getServer());
final EditText editTextBarkIcon = view1.findViewById(R.id.editTextBarkIcon);
if (barkSettingVo != null) editTextBarkIcon.setText(barkSettingVo.getIcon());
@@ -654,7 +655,7 @@ public class SenderActivity extends AppCompatActivity {
final EditText editTextServerChanName = view1.findViewById(R.id.editTextServerChanName);
if (senderModel != null) editTextServerChanName.setText(senderModel.getName());
- final EditText editTextServerChanSendKey = view1.findViewById(R.id.editTextServerChanSendKey);
+ final ClearEditText editTextServerChanSendKey = view1.findViewById(R.id.editTextServerChanSendKey);
if (serverchanSettingVo != null)
editTextServerChanSendKey.setText(serverchanSettingVo.getSendKey());
@@ -742,7 +743,7 @@ public class SenderActivity extends AppCompatActivity {
if (webNotifySettingVo != null) editTextWebNotifyWebServer.setText(webNotifySettingVo.getWebServer());
final EditText editTextWebNotifyWebParams = view1.findViewById(R.id.editTextWebNotifyWebParams);
if (webNotifySettingVo != null) editTextWebNotifyWebParams.setText(webNotifySettingVo.getWebParams());
- final EditText editTextWebNotifySecret = view1.findViewById(R.id.editTextWebNotifySecret);
+ final ClearEditText editTextWebNotifySecret = view1.findViewById(R.id.editTextWebNotifySecret);
if (webNotifySettingVo != null) editTextWebNotifySecret.setText(webNotifySettingVo.getSecret());
final RadioGroup radioGroupWebNotifyMethod = view1.findViewById(R.id.radioGroupWebNotifyMethod);
if (webNotifySettingVo != null) radioGroupWebNotifyMethod.check(webNotifySettingVo.getWebNotifyMethodCheckId());
@@ -825,7 +826,7 @@ public class SenderActivity extends AppCompatActivity {
final EditText editTextQYWXGroupRobotName = view1.findViewById(R.id.editTextQYWXGroupRobotName);
if (senderModel != null) editTextQYWXGroupRobotName.setText(senderModel.getName());
- final EditText editTextQYWXGroupRobotWebHook = view1.findViewById(R.id.editTextQYWXGroupRobotWebHook);
+ final ClearEditText editTextQYWXGroupRobotWebHook = view1.findViewById(R.id.editTextQYWXGroupRobotWebHook);
if (qywxGroupRobotSettingVo != null)
editTextQYWXGroupRobotWebHook.setText(qywxGroupRobotSettingVo.getWebHook());
@@ -911,7 +912,7 @@ public class SenderActivity extends AppCompatActivity {
editTextQYWXAppName.setText(senderModel.getName());
final EditText editTextQYWXAppCorpID = view1.findViewById(R.id.editTextQYWXAppCorpID);
final EditText editTextQYWXAppAgentID = view1.findViewById(R.id.editTextQYWXAppAgentID);
- final EditText editTextQYWXAppSecret = view1.findViewById(R.id.editTextQYWXAppSecret);
+ final ClearEditText editTextQYWXAppSecret = view1.findViewById(R.id.editTextQYWXAppSecret);
final LinearLayout linearLayoutQYWXAppToUser = view1.findViewById(R.id.linearLayoutQYWXAppToUser);
final EditText editTextQYWXAppToUser = view1.findViewById(R.id.editTextQYWXAppToUser);
@SuppressLint("UseSwitchCompatOrMaterialCode") final Switch switchQYWXAppAtAll = view1.findViewById(R.id.switchQYWXAppAtAll);
@@ -1032,7 +1033,7 @@ public class SenderActivity extends AppCompatActivity {
final EditText editTextTelegramName = view1.findViewById(R.id.editTextTelegramName);
if (senderModel != null) editTextTelegramName.setText(senderModel.getName());
- final EditText editTextTelegramApiToken = view1.findViewById(R.id.editTextTelegramApiToken);
+ final ClearEditText editTextTelegramApiToken = view1.findViewById(R.id.editTextTelegramApiToken);
final EditText editTextTelegramChatId = view1.findViewById(R.id.editTextTelegramChatId);
final RadioGroup radioGroupTelegramMethod = view1.findViewById(R.id.radioGroupTelegramMethod);
@@ -1042,7 +1043,7 @@ public class SenderActivity extends AppCompatActivity {
@SuppressLint("UseSwitchCompatOrMaterialCode") final Switch switchProxyAuthenticator = view1.findViewById(R.id.switchProxyAuthenticator);
final EditText editTextProxyUsername = view1.findViewById(R.id.editTextProxyUsername);
- final EditText editTextProxyPassword = view1.findViewById(R.id.editTextProxyPassword);
+ final ClearEditText editTextProxyPassword = view1.findViewById(R.id.editTextProxyPassword);
final LinearLayout layoutProxyHost = view1.findViewById(R.id.layoutProxyHost);
final LinearLayout layoutProxyPort = view1.findViewById(R.id.layoutProxyPort);
@@ -1299,7 +1300,7 @@ public class SenderActivity extends AppCompatActivity {
final EditText editTextFeishuWebhook = view1.findViewById(R.id.editTextFeishuWebhook);
if (feiShuSettingVo != null)
editTextFeishuWebhook.setText(feiShuSettingVo.getWebhook());
- final EditText editTextFeishuSecret = view1.findViewById(R.id.editTextFeishuSecret);
+ final ClearEditText editTextFeishuSecret = view1.findViewById(R.id.editTextFeishuSecret);
if (feiShuSettingVo != null)
editTextFeishuSecret.setText(feiShuSettingVo.getSecret());
@@ -1381,7 +1382,7 @@ public class SenderActivity extends AppCompatActivity {
View view1 = View.inflate(SenderActivity.this, R.layout.alert_dialog_setview_pushplus, null);
final EditText editTextPushPlusName = view1.findViewById(R.id.editTextPushPlusName);
- final EditText editTextPushPlusToken = view1.findViewById(R.id.editTextPushPlusToken);
+ final ClearEditText editTextPushPlusToken = view1.findViewById(R.id.editTextPushPlusToken);
final EditText editTextPushPlusTopic = view1.findViewById(R.id.editTextPushPlusTopic);
final EditText editTextPushPlusTemplate = view1.findViewById(R.id.editTextPushPlusTemplate);
final EditText editTextPushPlusChannel = view1.findViewById(R.id.editTextPushPlusChannel);
@@ -1502,7 +1503,7 @@ public class SenderActivity extends AppCompatActivity {
final EditText editTextGotifyName = view1.findViewById(R.id.editTextGotifyName);
if (senderModel != null) editTextGotifyName.setText(senderModel.getName());
- final EditText editTextGotifyWebServer = view1.findViewById(R.id.editTextGotifyWebServer);
+ final ClearEditText editTextGotifyWebServer = view1.findViewById(R.id.editTextGotifyWebServer);
final EditText editTextGotifyTitle = view1.findViewById(R.id.editTextGotifyTitle);
final EditText editTextGotifyPriority = view1.findViewById(R.id.editTextGotifyPriority);
if (gotifySettingVo != null) {
diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/AnimationUtils.java b/app/src/main/java/com/idormy/sms/forwarder/utils/AnimationUtils.java
new file mode 100644
index 00000000..99207d43
--- /dev/null
+++ b/app/src/main/java/com/idormy/sms/forwarder/utils/AnimationUtils.java
@@ -0,0 +1,230 @@
+package com.idormy.sms.forwarder.utils;
+
+import android.view.View;
+import android.view.animation.AlphaAnimation;
+import android.view.animation.Animation;
+import android.view.animation.Animation.AnimationListener;
+import android.view.animation.LinearInterpolator;
+import android.view.animation.TranslateAnimation;
+import android.widget.TextView;
+
+/**
+ * 动画工具
+ */
+public class AnimationUtils {
+ public enum AnimationState {
+ STATE_SHOW,
+ STATE_HIDDEN
+ }
+
+ /**
+ * 渐隐渐现动画
+ *
+ * @param viewGroup 需要实现动画的对象
+ * @param state 需要实现的状态
+ * @param duration 动画实现的时长(ms)
+ */
+ public static void showAndHiddenCenterAnimation(final View viewGroup, AnimationState state, long duration) {
+ float start = 0f;
+ float end = 0f;
+ if (state == AnimationState.STATE_SHOW) {
+ end = 1.0f;
+ viewGroup.setVisibility(View.VISIBLE);
+ } else if (state == AnimationState.STATE_HIDDEN) {
+ start = 1.0f;
+ viewGroup.setVisibility(View.GONE);
+ }
+ AlphaAnimation animation = new AlphaAnimation(start, end);
+ animation.setDuration(duration);
+ animation.setFillAfter(true);
+ animation.setAnimationListener(new AnimationListener() {
+
+ @Override
+ public void onAnimationStart(Animation animation) {
+ }
+
+ @Override
+ public void onAnimationRepeat(Animation animation) {
+ }
+
+ @Override
+ public void onAnimationEnd(Animation animation) {
+ viewGroup.clearAnimation();
+ }
+ });
+ viewGroup.setAnimation(animation);
+ animation.start();
+ }
+
+ public static void showAndHiddenCloseVideoAnimation(final View view, AnimationState state, long duration) {
+ float start = 0f;
+ float end = 0f;
+ if (state == AnimationState.STATE_SHOW) {
+ end = 1.0f;
+ view.setVisibility(View.VISIBLE);
+ } else if (state == AnimationState.STATE_HIDDEN) {
+ start = 1.0f;
+ view.setVisibility(View.GONE);
+ }
+ AlphaAnimation animation = new AlphaAnimation(start, end);
+ animation.setDuration(duration);
+ animation.setFillAfter(true);
+ animation.setAnimationListener(new AnimationListener() {
+
+ @Override
+ public void onAnimationStart(Animation animation) {
+ }
+
+ @Override
+ public void onAnimationRepeat(Animation animation) {
+ }
+
+ @Override
+ public void onAnimationEnd(Animation animation) {
+ view.clearAnimation();
+ }
+ });
+ view.setAnimation(animation);
+ animation.start();
+ }
+
+ /**
+ * 移动动画
+ *
+ * @param viewGroup 需要实现动画的对象
+ * @param state 需要实现的状态
+ * @param duration 动画实现的时长(ms)
+ */
+ public static void showAndHiddenTopAnimation(final View viewGroup, AnimationState state, long duration, boolean isTop) {
+ float start = 0.0f;
+ float end = 0.0f;
+ if (state == AnimationState.STATE_SHOW) {
+ if (isTop) {
+ start = -1.0f;
+ } else {
+ start = 1.0f;
+ }
+ viewGroup.setVisibility(View.VISIBLE);
+ } else if (state == AnimationState.STATE_HIDDEN) {
+ if (isTop) {
+ end = -1.0f;
+ } else {
+ end = 1.0f;
+ }
+ viewGroup.setVisibility(View.GONE);
+ }
+ Animation translateAnimation = null;
+ translateAnimation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f,
+ Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
+ start, Animation.RELATIVE_TO_SELF, end);
+ translateAnimation.setDuration(duration);
+ translateAnimation.setFillEnabled(true);//使其可以填充效果从而不回到原地
+ translateAnimation.setFillAfter(true);//不回到起始位置
+ //如果不添加setFillEnabled和setFillAfter则动画执行结束后会自动回到远点
+ translateAnimation.setAnimationListener(new AnimationListener() {
+
+ @Override
+ public void onAnimationStart(Animation animation) {
+ }
+
+ @Override
+ public void onAnimationRepeat(Animation animation) {
+ }
+
+ @Override
+ public void onAnimationEnd(Animation animation) {
+ viewGroup.clearAnimation();
+ }
+ });
+ viewGroup.setAnimation(translateAnimation);
+ translateAnimation.start();
+ }
+
+ public static void liveGiftAnimation(final View viewGroup, AnimationState state, long duration) {
+ float start = 0.0f;
+ float end = 0.0f;
+ if (state == AnimationState.STATE_SHOW) {
+ start = -1.0f;
+ viewGroup.setVisibility(View.VISIBLE);
+ } else if (state == AnimationState.STATE_HIDDEN) {
+ end = -1.0f;
+ viewGroup.setVisibility(View.GONE);
+ }
+ Animation translateAnimation = null;
+ translateAnimation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, start,
+ Animation.RELATIVE_TO_SELF, end, Animation.RELATIVE_TO_SELF,
+ 0.0f, Animation.RELATIVE_TO_SELF, 0.0f);
+ translateAnimation.setDuration(duration);
+ translateAnimation.setFillEnabled(true);//使其可以填充效果从而不回到原地
+ translateAnimation.setFillAfter(true);//不回到起始位置
+ //如果不添加setFillEnabled和setFillAfter则动画执行结束后会自动回到远点
+ translateAnimation.setAnimationListener(new AnimationListener() {
+
+ @Override
+ public void onAnimationStart(Animation animation) {
+ }
+
+ @Override
+ public void onAnimationRepeat(Animation animation) {
+ }
+
+ @Override
+ public void onAnimationEnd(Animation animation) {
+ viewGroup.clearAnimation();
+ }
+ });
+ viewGroup.setAnimation(translateAnimation);
+ translateAnimation.start();
+ }
+
+ /**
+ * 礼物通知滚动
+ *
+ * @param viewGroup
+ * @param state
+ * @param duration
+ */
+ public static void liveLotteryAnimation(final TextView viewGroup, AnimationState state, long duration) {
+
+ float start = 0.0f;
+ float end = 0.0f;
+ if (state == AnimationState.STATE_SHOW) {
+ start = 1.0f;
+ end = -1.0f;
+ viewGroup.setVisibility(View.VISIBLE);
+ } else if (state == AnimationState.STATE_HIDDEN) {
+ end = -1.0f;
+ viewGroup.setVisibility(View.GONE);
+ }
+ Animation translateAnimation = null;
+ translateAnimation = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, start,
+ Animation.RELATIVE_TO_PARENT, end, Animation.RELATIVE_TO_SELF,
+ 0.0f, Animation.RELATIVE_TO_SELF, 0.0f);
+ translateAnimation.setDuration(duration);
+ translateAnimation.setFillEnabled(true);//使其可以填充效果从而不回到原地
+ translateAnimation.setFillAfter(true);//不回到起始位置
+ translateAnimation.setInterpolator(new LinearInterpolator());
+ if (viewGroup.getAnimation() != null) {
+ translateAnimation.setStartOffset(duration);
+ }
+ //如果不添加setFillEnabled和setFillAfter则动画执行结束后会自动回到远点
+ translateAnimation.setAnimationListener(new AnimationListener() {
+
+ @Override
+ public void onAnimationStart(Animation animation) {
+ }
+
+ @Override
+ public void onAnimationRepeat(Animation animation) {
+ }
+
+ @Override
+ public void onAnimationEnd(Animation animation) {
+ viewGroup.clearAnimation();
+ viewGroup.setVisibility(View.GONE);
+ }
+ });
+ viewGroup.setAnimation(translateAnimation);
+ translateAnimation.start();
+ }
+}
diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/CommonUtil.java b/app/src/main/java/com/idormy/sms/forwarder/utils/CommonUtil.java
index 9f4ef297..0659118d 100644
--- a/app/src/main/java/com/idormy/sms/forwarder/utils/CommonUtil.java
+++ b/app/src/main/java/com/idormy/sms/forwarder/utils/CommonUtil.java
@@ -19,7 +19,7 @@ import java.security.NoSuchAlgorithmException;
import java.util.Set;
/**
- * 权限相关工具类
+ * 常用工具类
*/
public class CommonUtil {
public static final int NOTIFICATION_REQUEST_CODE = 9527;
@@ -131,4 +131,13 @@ public class CommonUtil {
return null;
}
+
+ /**
+ * @date 2020/12/28 9:52
+ * @description 屏幕像素转换
+ */
+ public static int dp2px(Context context, float dipValue) {
+ final float scale = context.getResources().getDisplayMetrics().density;
+ return (int) (dipValue * scale + 0.5f);
+ }
}
diff --git a/app/src/main/java/com/idormy/sms/forwarder/view/ClearEditText.java b/app/src/main/java/com/idormy/sms/forwarder/view/ClearEditText.java
new file mode 100644
index 00000000..60ea8fdc
--- /dev/null
+++ b/app/src/main/java/com/idormy/sms/forwarder/view/ClearEditText.java
@@ -0,0 +1,293 @@
+package com.idormy.sms.forwarder.view;
+
+import android.animation.ObjectAnimator;
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Color;
+import android.text.Editable;
+import android.text.InputFilter;
+import android.text.InputType;
+import android.text.TextWatcher;
+import android.text.method.HideReturnsTransformationMethod;
+import android.text.method.PasswordTransformationMethod;
+import android.util.AttributeSet;
+import android.util.TypedValue;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.RelativeLayout;
+
+import androidx.annotation.NonNull;
+import androidx.viewpager.widget.ViewPager;
+
+import com.idormy.sms.forwarder.R;
+import com.idormy.sms.forwarder.utils.AnimationUtils;
+import com.idormy.sms.forwarder.utils.CommonUtil;
+
+public class ClearEditText extends RelativeLayout {
+ private EditText myEdie;
+ private ImageView ivEditClean;
+ private ImageView ivEditEye;
+ private boolean isChecked = true;
+ private final Context mContext;
+ private TypedArray mTypedArray;
+ private boolean showClean = true;//清空图标是否显示,true:显示
+ private boolean showEye = false;//密码可见图标是否显示,true:显示
+ private int drawableLeft = -1;//是否显示输入框左侧图片
+ private int drawableEyeOpen = R.drawable.clear_icon_eye_open;//可以看见密码小眼睛样式
+ private int drawableEyeClose = R.drawable.clear_icon_eye_close;//不可见密码小眼睛样式
+ private int drawableClean = R.drawable.clear_icon_close;//清除按钮图片
+ private int cleanPadding = 0;//清除按钮padding边距
+ private String hintStr;
+ private String textStr;
+ private int mTextColorHint = Color.BLACK;
+ private int mTextColor = Color.BLACK;
+ private int mTextSize = -1;
+ private int mMaxLength = 2000;
+ private int mMaxLines = 1;
+ private int mInputType = 0;//输入类型,就做了不限制、数字、文本密码三种
+ private boolean isInput = false;//输入1个字符后更改状态为true,保证小眼睛移动一次
+ private boolean isHideClean = false;//输入字符后,清除了需要小眼睛归为,清除按钮隐藏
+
+ public ClearEditText(Context context) {
+ super(context);
+ mContext = context;
+ initView();
+ }
+
+ public ClearEditText(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ mContext = context;
+ mTypedArray = mContext.obtainStyledAttributes(attrs, R.styleable.ClearEditText);
+ initView();
+ }
+
+ public ClearEditText(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ mContext = context;
+ mTypedArray = mContext.obtainStyledAttributes(attrs, R.styleable.ClearEditText);
+ showClean = mTypedArray.getBoolean(R.styleable.ClearEditText_showClean, showClean);
+ drawableClean = mTypedArray.getResourceId(R.styleable.ClearEditText_drawableClean, drawableClean);
+ cleanPadding = mTypedArray.getDimensionPixelSize(R.styleable.ClearEditText_cleanPadding, cleanPadding);
+
+ showEye = mTypedArray.getBoolean(R.styleable.ClearEditText_showEye, showEye);
+ drawableLeft = mTypedArray.getResourceId(R.styleable.ClearEditText_drawableLeft, -1);
+ drawableEyeClose = mTypedArray.getResourceId(R.styleable.ClearEditText_drawableEyeClose, drawableEyeClose);
+ drawableEyeOpen = mTypedArray.getResourceId(R.styleable.ClearEditText_drawableEyeOpen, drawableEyeOpen);
+
+ hintStr = mTypedArray.getString(R.styleable.ClearEditText_hint);
+ textStr = mTypedArray.getString(R.styleable.ClearEditText_text);
+ mTextColorHint = mTypedArray.getColor(R.styleable.ClearEditText_textColorHint, mTextColorHint);
+ mTextColor = mTypedArray.getColor(R.styleable.ClearEditText_textColor, mTextColor);
+ mTextSize = mTypedArray.getDimensionPixelSize(R.styleable.ClearEditText_textSize, mTextSize);
+ mMaxLength = mTypedArray.getInteger(R.styleable.ClearEditText_maxLength, mMaxLength);
+ mMaxLines = mTypedArray.getDimensionPixelSize(R.styleable.ClearEditText_maxLines, mMaxLines);
+ mInputType = mTypedArray.getInteger(R.styleable.ClearEditText_inputType, mInputType);
+
+ mTypedArray.recycle();
+ initView();
+ }
+
+ // 初始化视图
+ private void initView() {
+ View view = View.inflate(getContext(), R.layout.edit_text_clear, null);
+ ImageView ivLeftIcon = view.findViewById(R.id.iv_edit_left_icon);
+ myEdie = view.findViewById(R.id.view_edit_show);
+ ivEditClean = view.findViewById(R.id.iv_edit_clean);
+ ivEditEye = view.findViewById(R.id.iv_edit_eye);
+
+ myEdie.setHint(hintStr);
+ myEdie.setHintTextColor(mTextColorHint);
+ myEdie.setText(textStr);
+ myEdie.setTextColor(mTextColor);
+ myEdie.setMaxLines(mMaxLines);
+ myEdie.setFilters(new InputFilter[]{new InputFilter.LengthFilter(mMaxLength)});
+ if (mTextSize != -1) {
+ myEdie.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextSize);
+ } else {
+ myEdie.setTextSize(15);
+ }
+ if (mInputType == 1) {
+ myEdie.setInputType(InputType.TYPE_CLASS_NUMBER);
+ } else if (mInputType == 2) {
+ myEdie.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD | InputType.TYPE_CLASS_TEXT);
+ } else {
+ myEdie.setInputType(InputType.TYPE_NUMBER_VARIATION_NORMAL | InputType.TYPE_CLASS_TEXT);
+ }
+ if (showEye) {
+ myEdie.setTransformationMethod(new AsteriskPasswordTransformationMethod());
+ }
+ if (showClean && showEye) {
+ int left = myEdie.getPaddingLeft();
+ int top = myEdie.getPaddingTop();
+ int bottom = myEdie.getPaddingBottom();
+ myEdie.setPadding(left, top, CommonUtil.dp2px(mContext, 90), bottom);
+ } else if (!showClean && !showEye) {
+ int left = myEdie.getPaddingLeft();
+ int top = myEdie.getPaddingTop();
+ int right = myEdie.getPaddingRight();
+ int bottom = myEdie.getPaddingBottom();
+ myEdie.setPadding(left, top, right, bottom);
+ } else {
+ int left = myEdie.getPaddingLeft();
+ int top = myEdie.getPaddingTop();
+ int bottom = myEdie.getPaddingBottom();
+ myEdie.setPadding(left, top, CommonUtil.dp2px(mContext, 45), bottom);
+ }
+
+ myEdie.addTextChangedListener(new TextWatcher() {
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+
+ }
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+ if (s.length() > 0) {
+ isHideClean = false;
+ }
+ }
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ if (s.length() > 0 && !isInput) {//输入字符大于0且只有一个字符时候显示清除按钮动画,小眼睛移动出位置给清除按钮使用
+ showEditClean();
+ moveEditEye();
+ isInput = true;
+ } else if (s.length() == 0) {//无字符小眼睛归位
+ UndoEditEye();
+ }
+ if (s.length() == 0 & !isHideClean) {
+ hideEditClean();
+ isHideClean = true;
+ isInput = false;
+ }
+ if (onEditInputListener != null) {
+ onEditInputListener.input(getText());
+ }
+ }
+ });
+
+ setEditClean(showClean);
+ ivEditClean.setOnClickListener(v -> myEdie.setText(""));
+ ivEditClean.setImageResource(drawableClean);
+ ivEditClean.setPadding(cleanPadding, cleanPadding, cleanPadding, cleanPadding);
+
+ setEditEye(showEye);
+ ivEditEye.setOnClickListener(v -> {
+ if (isChecked) {
+ // 输入一个对用户可见的密码
+ myEdie.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
+ myEdie.setSelection(getText().length());
+ ivEditEye.setImageResource(drawableEyeOpen);
+ isChecked = false;
+ } else {
+ // 输入一个对用户不可见的密码
+ myEdie.setTransformationMethod(new AsteriskPasswordTransformationMethod());
+ myEdie.setSelection(getText().length());
+ ivEditEye.setImageResource(drawableEyeClose);
+ isChecked = true;
+ }
+ });
+ if (drawableLeft != -1) {
+ ivLeftIcon.setVisibility(View.VISIBLE);
+ ivLeftIcon.setImageResource(drawableLeft);
+ } else {
+ ivLeftIcon.setVisibility(View.GONE);
+ }
+ view.setLayoutParams(new LayoutParams(ViewPager.LayoutParams.MATCH_PARENT, ViewPager.LayoutParams.WRAP_CONTENT));
+ addView(view);
+ }
+
+ //密码不可见时候,使用*替换密码
+ public static class AsteriskPasswordTransformationMethod extends PasswordTransformationMethod {
+ @Override
+ public CharSequence getTransformation(CharSequence source, View view) {
+ return new PasswordCharSequence(source);
+ }
+
+ private static class PasswordCharSequence implements CharSequence {
+
+ private final CharSequence mSource;
+
+ public PasswordCharSequence(CharSequence source) {
+ mSource = source; // Store char sequence
+ }
+
+ public char charAt(int index) {
+ return '*'; // This is the important part
+ }
+
+ public int length() {
+ return mSource.length(); // Return default
+ }
+
+ @NonNull
+ public CharSequence subSequence(int start, int end) {
+ return mSource.subSequence(start, end); // Return default
+ }
+ }
+
+ }
+
+ public String getText() {
+ return myEdie.getText().toString().trim();
+ }
+
+ public void setText(String text) {
+ myEdie.setText(text);
+ }
+
+ //代码设置是否显示清除按钮
+ public void setEditClean(boolean isCanClose) {
+ showClean = isCanClose;
+ }
+
+ //代码设置是否显示小眼睛
+ public void setEditEye(boolean isCanSee) {
+ showEye = isCanSee;
+ if (showEye) {
+ ivEditEye.setVisibility(View.VISIBLE);
+ } else {
+ ivEditEye.setVisibility(View.GONE);
+ }
+ }
+
+ private void showEditClean() {
+ if (showClean) {
+ AnimationUtils.showAndHiddenCenterAnimation(ivEditClean, AnimationUtils.AnimationState.STATE_SHOW, 500);
+ }
+ }
+
+ private void hideEditClean() {
+ if (showClean) {
+ AnimationUtils.showAndHiddenCenterAnimation(ivEditClean, AnimationUtils.AnimationState.STATE_HIDDEN, 500);
+ }
+ }
+
+ private void moveEditEye() {
+ if (showEye) {
+ //关闭按钮的宽度
+ int ivWidth = 35;
+ ObjectAnimator.ofFloat(ivEditEye, "translationX", -CommonUtil.dp2px(mContext, ivWidth)).setDuration(500).start();
+ }
+ }
+
+ private void UndoEditEye() {
+ if (showEye) {
+ ObjectAnimator.ofFloat(ivEditEye, "translationX", 0).setDuration(500).start();
+ }
+ }
+
+ public OnEditInputListener onEditInputListener;
+
+ public void setOnEditInputListener(OnEditInputListener listener) {
+ onEditInputListener = listener;
+ }
+
+ //输入监听
+ public interface OnEditInputListener {
+ void input(String content);
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/idormy/sms/forwarder/view/IPEditText.java b/app/src/main/java/com/idormy/sms/forwarder/view/IPEditText.java
index 4d57379a..ca28c058 100644
--- a/app/src/main/java/com/idormy/sms/forwarder/view/IPEditText.java
+++ b/app/src/main/java/com/idormy/sms/forwarder/view/IPEditText.java
@@ -31,7 +31,7 @@ public class IPEditText extends LinearLayout {
public IPEditText(final Context context, AttributeSet attrs) {
super(context, attrs);
//初始化界面
- View view = LayoutInflater.from(context).inflate(R.layout.iptext, this);
+ View view = LayoutInflater.from(context).inflate(R.layout.edit_text_ip, this);
//绑定
Edit1 = findViewById(R.id.edit1);
Edit2 = findViewById(R.id.edit2);
diff --git a/app/src/main/res/drawable-hdpi/ic_forwarder.png b/app/src/main/res/drawable-hdpi/ic_forwarder.png
index 6b0d4afc..98fd7876 100644
Binary files a/app/src/main/res/drawable-hdpi/ic_forwarder.png and b/app/src/main/res/drawable-hdpi/ic_forwarder.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_forwarder.png b/app/src/main/res/drawable-mdpi/ic_forwarder.png
index 403c6ad1..76988064 100644
Binary files a/app/src/main/res/drawable-mdpi/ic_forwarder.png and b/app/src/main/res/drawable-mdpi/ic_forwarder.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_forwarder.png b/app/src/main/res/drawable-xhdpi/ic_forwarder.png
index b37220b7..ddc55c1f 100644
Binary files a/app/src/main/res/drawable-xhdpi/ic_forwarder.png and b/app/src/main/res/drawable-xhdpi/ic_forwarder.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/clear_icon_close.png b/app/src/main/res/drawable-xxhdpi/clear_icon_close.png
new file mode 100644
index 00000000..6c9db289
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/clear_icon_close.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/clear_icon_eye_close.png b/app/src/main/res/drawable-xxhdpi/clear_icon_eye_close.png
new file mode 100644
index 00000000..9a0cf1d2
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/clear_icon_eye_close.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/clear_icon_eye_open.png b/app/src/main/res/drawable-xxhdpi/clear_icon_eye_open.png
new file mode 100644
index 00000000..308f8420
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/clear_icon_eye_open.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_forwarder.png b/app/src/main/res/drawable-xxhdpi/ic_forwarder.png
index c40720d9..3e562fc6 100644
Binary files a/app/src/main/res/drawable-xxhdpi/ic_forwarder.png and b/app/src/main/res/drawable-xxhdpi/ic_forwarder.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_login.png b/app/src/main/res/drawable-xxhdpi/icon_login.png
new file mode 100644
index 00000000..e772488d
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_login.png differ
diff --git a/app/src/main/res/drawable/line_bg_white_only_bottom_d8.xml b/app/src/main/res/drawable/line_bg_white_only_bottom_d8.xml
new file mode 100644
index 00000000..d6763b81
--- /dev/null
+++ b/app/src/main/res/drawable/line_bg_white_only_bottom_d8.xml
@@ -0,0 +1,21 @@
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/alert_dialog_setview_bark.xml b/app/src/main/res/layout/alert_dialog_setview_bark.xml
index 31f1697d..7c6c6a01 100644
--- a/app/src/main/res/layout/alert_dialog_setview_bark.xml
+++ b/app/src/main/res/layout/alert_dialog_setview_bark.xml
@@ -1,5 +1,6 @@
@@ -45,7 +46,7 @@
android:layout_height="wrap_content"
android:text="@string/set_bark_server" />
-
+ tools:ignore="LabelFor" />-->
+
+
@@ -45,7 +46,7 @@
android:layout_height="wrap_content"
android:text="@string/dingding_token" />
-
+ tools:ignore="LabelFor" />-->
+
+
@@ -69,7 +80,7 @@
android:layout_height="wrap_content"
android:text="@string/dingding_secret" />
-
+ tools:ignore="LabelFor" />-->
+
+
@@ -81,7 +82,7 @@
android:layout_height="wrap_content"
android:text="@string/email_password" />
-
+ tools:ignore="LabelFor,TextFields" />-->
+
+
@@ -69,7 +70,7 @@
android:layout_height="wrap_content"
android:text="@string/feishu_secret" />
-
+ tools:ignore="LabelFor" />-->
+
+
@@ -46,7 +47,17 @@
android:layout_height="wrap_content"
android:text="@string/GotifyWebServer" />
-
+
+
+ android:text="@string/title_template" />
+ android:text="@string/priority" />
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 2f41f25e..e8a91ae2 100644
--- a/app/src/main/res/layout/alert_dialog_setview_pushplus.xml
+++ b/app/src/main/res/layout/alert_dialog_setview_pushplus.xml
@@ -1,5 +1,6 @@
@@ -45,7 +46,7 @@
android:layout_height="wrap_content"
android:text="@string/pushplus_token" />
-
+ tools:ignore="LabelFor,TextFields" />-->
+
+
@@ -99,7 +100,7 @@
android:text="@string/App_Secret"
android:textStyle="bold" />
-
+ tools:ignore="LabelFor" />-->
+
+
@@ -45,7 +46,7 @@
android:layout_height="wrap_content"
android:text="@string/QYWXGroupRobotWebHook" />
-
+ tools:ignore="LabelFor" />-->
+
+
@@ -45,7 +46,7 @@
android:layout_height="wrap_content"
android:text="@string/ServerChanSendKey" />
-
+ tools:ignore="LabelFor" />-->
+
+
@@ -47,7 +48,7 @@
android:text="@string/TelegramApiToken"
android:textStyle="bold" />
-
+ tools:ignore="LabelFor" />-->
+
+
-
+
-
+
-
+
+
-
+
+
+
+
+
+
+
+
@@ -128,7 +129,7 @@
android:layout_height="wrap_content"
android:text="@string/WebNotifySecret" />
-
+ tools:ignore="LabelFor" />-->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/iptext.xml b/app/src/main/res/layout/edit_text_ip.xml
similarity index 100%
rename from app/src/main/res/layout/iptext.xml
rename to app/src/main/res/layout/edit_text_ip.xml
diff --git a/app/src/main/res/mipmap-hdpi/bark.png b/app/src/main/res/mipmap-hdpi/bark.png
index 43de6c17..d40f82d9 100644
Binary files a/app/src/main/res/mipmap-hdpi/bark.png and b/app/src/main/res/mipmap-hdpi/bark.png differ
diff --git a/app/src/main/res/mipmap-hdpi/dingding.png b/app/src/main/res/mipmap-hdpi/dingding.png
index be613688..d7b69269 100644
Binary files a/app/src/main/res/mipmap-hdpi/dingding.png and b/app/src/main/res/mipmap-hdpi/dingding.png differ
diff --git a/app/src/main/res/mipmap-hdpi/email.png b/app/src/main/res/mipmap-hdpi/email.png
index 4e8b67fd..1e001fdc 100644
Binary files a/app/src/main/res/mipmap-hdpi/email.png and b/app/src/main/res/mipmap-hdpi/email.png differ
diff --git a/app/src/main/res/mipmap-hdpi/feishu.png b/app/src/main/res/mipmap-hdpi/feishu.png
index 59d10977..c25948ba 100644
Binary files a/app/src/main/res/mipmap-hdpi/feishu.png and b/app/src/main/res/mipmap-hdpi/feishu.png differ
diff --git a/app/src/main/res/mipmap-hdpi/gotify.png b/app/src/main/res/mipmap-hdpi/gotify.png
index c77298c0..8a9684d6 100644
Binary files a/app/src/main/res/mipmap-hdpi/gotify.png and b/app/src/main/res/mipmap-hdpi/gotify.png differ
diff --git a/app/src/main/res/mipmap-hdpi/pushplus.png b/app/src/main/res/mipmap-hdpi/pushplus.png
index 2739d12c..01309c97 100644
Binary files a/app/src/main/res/mipmap-hdpi/pushplus.png and b/app/src/main/res/mipmap-hdpi/pushplus.png differ
diff --git a/app/src/main/res/mipmap-hdpi/qywx.png b/app/src/main/res/mipmap-hdpi/qywx.png
index 2c03dad5..c4c86ec7 100644
Binary files a/app/src/main/res/mipmap-hdpi/qywx.png and b/app/src/main/res/mipmap-hdpi/qywx.png differ
diff --git a/app/src/main/res/mipmap-hdpi/qywxapp.png b/app/src/main/res/mipmap-hdpi/qywxapp.png
index d76e41d6..b7a5e089 100644
Binary files a/app/src/main/res/mipmap-hdpi/qywxapp.png and b/app/src/main/res/mipmap-hdpi/qywxapp.png differ
diff --git a/app/src/main/res/mipmap-hdpi/serverchan.png b/app/src/main/res/mipmap-hdpi/serverchan.png
index 6738f184..608012c9 100644
Binary files a/app/src/main/res/mipmap-hdpi/serverchan.png and b/app/src/main/res/mipmap-hdpi/serverchan.png differ
diff --git a/app/src/main/res/mipmap-hdpi/telegram.png b/app/src/main/res/mipmap-hdpi/telegram.png
index e6196214..73154354 100644
Binary files a/app/src/main/res/mipmap-hdpi/telegram.png and b/app/src/main/res/mipmap-hdpi/telegram.png differ
diff --git a/app/src/main/res/mipmap-hdpi/webhook.png b/app/src/main/res/mipmap-hdpi/webhook.png
index 3f656204..22c625ec 100644
Binary files a/app/src/main/res/mipmap-hdpi/webhook.png and b/app/src/main/res/mipmap-hdpi/webhook.png differ
diff --git a/app/src/main/res/mipmap-mdpi/bark.png b/app/src/main/res/mipmap-mdpi/bark.png
index eb575ede..e29aa485 100644
Binary files a/app/src/main/res/mipmap-mdpi/bark.png and b/app/src/main/res/mipmap-mdpi/bark.png differ
diff --git a/app/src/main/res/mipmap-mdpi/dingding.png b/app/src/main/res/mipmap-mdpi/dingding.png
index 27b57bb7..80360e5e 100644
Binary files a/app/src/main/res/mipmap-mdpi/dingding.png and b/app/src/main/res/mipmap-mdpi/dingding.png differ
diff --git a/app/src/main/res/mipmap-mdpi/email.png b/app/src/main/res/mipmap-mdpi/email.png
index e2b36fe2..ca6d29eb 100644
Binary files a/app/src/main/res/mipmap-mdpi/email.png and b/app/src/main/res/mipmap-mdpi/email.png differ
diff --git a/app/src/main/res/mipmap-mdpi/feishu.png b/app/src/main/res/mipmap-mdpi/feishu.png
index c5944944..9c8a172f 100644
Binary files a/app/src/main/res/mipmap-mdpi/feishu.png and b/app/src/main/res/mipmap-mdpi/feishu.png differ
diff --git a/app/src/main/res/mipmap-mdpi/gotify.png b/app/src/main/res/mipmap-mdpi/gotify.png
index 7b67d9dd..2fa4e1b0 100644
Binary files a/app/src/main/res/mipmap-mdpi/gotify.png and b/app/src/main/res/mipmap-mdpi/gotify.png differ
diff --git a/app/src/main/res/mipmap-mdpi/pushplus.png b/app/src/main/res/mipmap-mdpi/pushplus.png
index ce3626e0..bbd5a9a8 100644
Binary files a/app/src/main/res/mipmap-mdpi/pushplus.png and b/app/src/main/res/mipmap-mdpi/pushplus.png differ
diff --git a/app/src/main/res/mipmap-mdpi/qywx.png b/app/src/main/res/mipmap-mdpi/qywx.png
index 6f8a83ab..54525da6 100644
Binary files a/app/src/main/res/mipmap-mdpi/qywx.png and b/app/src/main/res/mipmap-mdpi/qywx.png differ
diff --git a/app/src/main/res/mipmap-mdpi/qywxapp.png b/app/src/main/res/mipmap-mdpi/qywxapp.png
index 6061c2c1..9a086727 100644
Binary files a/app/src/main/res/mipmap-mdpi/qywxapp.png and b/app/src/main/res/mipmap-mdpi/qywxapp.png differ
diff --git a/app/src/main/res/mipmap-mdpi/serverchan.png b/app/src/main/res/mipmap-mdpi/serverchan.png
index 0d0fc8d7..65a34fbf 100644
Binary files a/app/src/main/res/mipmap-mdpi/serverchan.png and b/app/src/main/res/mipmap-mdpi/serverchan.png differ
diff --git a/app/src/main/res/mipmap-mdpi/telegram.png b/app/src/main/res/mipmap-mdpi/telegram.png
index 2e93ce1b..57eea791 100644
Binary files a/app/src/main/res/mipmap-mdpi/telegram.png and b/app/src/main/res/mipmap-mdpi/telegram.png differ
diff --git a/app/src/main/res/mipmap-mdpi/webhook.png b/app/src/main/res/mipmap-mdpi/webhook.png
index 2668416f..c85fcd35 100644
Binary files a/app/src/main/res/mipmap-mdpi/webhook.png and b/app/src/main/res/mipmap-mdpi/webhook.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/bark.png b/app/src/main/res/mipmap-xhdpi/bark.png
index 6d43bd0d..ad3038fe 100644
Binary files a/app/src/main/res/mipmap-xhdpi/bark.png and b/app/src/main/res/mipmap-xhdpi/bark.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/dingding.png b/app/src/main/res/mipmap-xhdpi/dingding.png
index 1bd8caff..4aff5150 100644
Binary files a/app/src/main/res/mipmap-xhdpi/dingding.png and b/app/src/main/res/mipmap-xhdpi/dingding.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/email.png b/app/src/main/res/mipmap-xhdpi/email.png
index 5cbfe92f..a05d21f9 100644
Binary files a/app/src/main/res/mipmap-xhdpi/email.png and b/app/src/main/res/mipmap-xhdpi/email.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/feishu.png b/app/src/main/res/mipmap-xhdpi/feishu.png
index ab7c7373..9e1e0b6c 100644
Binary files a/app/src/main/res/mipmap-xhdpi/feishu.png and b/app/src/main/res/mipmap-xhdpi/feishu.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/gotify.png b/app/src/main/res/mipmap-xhdpi/gotify.png
index 52dc2915..c2cfeb32 100644
Binary files a/app/src/main/res/mipmap-xhdpi/gotify.png and b/app/src/main/res/mipmap-xhdpi/gotify.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/pushplus.png b/app/src/main/res/mipmap-xhdpi/pushplus.png
index ebf7584b..f283637f 100644
Binary files a/app/src/main/res/mipmap-xhdpi/pushplus.png and b/app/src/main/res/mipmap-xhdpi/pushplus.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/qywx.png b/app/src/main/res/mipmap-xhdpi/qywx.png
index da9cbed9..73878512 100644
Binary files a/app/src/main/res/mipmap-xhdpi/qywx.png and b/app/src/main/res/mipmap-xhdpi/qywx.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/qywxapp.png b/app/src/main/res/mipmap-xhdpi/qywxapp.png
index 6058f68d..5070a0fc 100644
Binary files a/app/src/main/res/mipmap-xhdpi/qywxapp.png and b/app/src/main/res/mipmap-xhdpi/qywxapp.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/serverchan.png b/app/src/main/res/mipmap-xhdpi/serverchan.png
index bc660ec0..7cea93f5 100644
Binary files a/app/src/main/res/mipmap-xhdpi/serverchan.png and b/app/src/main/res/mipmap-xhdpi/serverchan.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/telegram.png b/app/src/main/res/mipmap-xhdpi/telegram.png
index 0d411076..b468ace8 100644
Binary files a/app/src/main/res/mipmap-xhdpi/telegram.png and b/app/src/main/res/mipmap-xhdpi/telegram.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/webhook.png b/app/src/main/res/mipmap-xhdpi/webhook.png
index 3fea770c..0d88a559 100644
Binary files a/app/src/main/res/mipmap-xhdpi/webhook.png and b/app/src/main/res/mipmap-xhdpi/webhook.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/bark.png b/app/src/main/res/mipmap-xxhdpi/bark.png
index 862ecad7..44842c5b 100644
Binary files a/app/src/main/res/mipmap-xxhdpi/bark.png and b/app/src/main/res/mipmap-xxhdpi/bark.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/dingding.png b/app/src/main/res/mipmap-xxhdpi/dingding.png
index feabb77a..bdec8e4b 100644
Binary files a/app/src/main/res/mipmap-xxhdpi/dingding.png and b/app/src/main/res/mipmap-xxhdpi/dingding.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/email.png b/app/src/main/res/mipmap-xxhdpi/email.png
index 15e57d14..50dd9770 100644
Binary files a/app/src/main/res/mipmap-xxhdpi/email.png and b/app/src/main/res/mipmap-xxhdpi/email.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/feishu.png b/app/src/main/res/mipmap-xxhdpi/feishu.png
index 73bdc159..e00e4ee3 100644
Binary files a/app/src/main/res/mipmap-xxhdpi/feishu.png and b/app/src/main/res/mipmap-xxhdpi/feishu.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/gotify.png b/app/src/main/res/mipmap-xxhdpi/gotify.png
index 70dbf2aa..87298fb2 100644
Binary files a/app/src/main/res/mipmap-xxhdpi/gotify.png and b/app/src/main/res/mipmap-xxhdpi/gotify.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/pushplus.png b/app/src/main/res/mipmap-xxhdpi/pushplus.png
index 571cd338..c6a8d459 100644
Binary files a/app/src/main/res/mipmap-xxhdpi/pushplus.png and b/app/src/main/res/mipmap-xxhdpi/pushplus.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/qywx.png b/app/src/main/res/mipmap-xxhdpi/qywx.png
index b8810634..dbc4a2d3 100644
Binary files a/app/src/main/res/mipmap-xxhdpi/qywx.png and b/app/src/main/res/mipmap-xxhdpi/qywx.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/qywxapp.png b/app/src/main/res/mipmap-xxhdpi/qywxapp.png
index 29ad21fa..24087174 100644
Binary files a/app/src/main/res/mipmap-xxhdpi/qywxapp.png and b/app/src/main/res/mipmap-xxhdpi/qywxapp.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/serverchan.png b/app/src/main/res/mipmap-xxhdpi/serverchan.png
index a2565877..0661936c 100644
Binary files a/app/src/main/res/mipmap-xxhdpi/serverchan.png and b/app/src/main/res/mipmap-xxhdpi/serverchan.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/telegram.png b/app/src/main/res/mipmap-xxhdpi/telegram.png
index cd145a09..259384d8 100644
Binary files a/app/src/main/res/mipmap-xxhdpi/telegram.png and b/app/src/main/res/mipmap-xxhdpi/telegram.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/webhook.png b/app/src/main/res/mipmap-xxhdpi/webhook.png
index c8f03b12..dd011c54 100644
Binary files a/app/src/main/res/mipmap-xxhdpi/webhook.png and b/app/src/main/res/mipmap-xxhdpi/webhook.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/bark.png b/app/src/main/res/mipmap-xxxhdpi/bark.png
index fa58baa1..4aeb44a2 100644
Binary files a/app/src/main/res/mipmap-xxxhdpi/bark.png and b/app/src/main/res/mipmap-xxxhdpi/bark.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/dingding.png b/app/src/main/res/mipmap-xxxhdpi/dingding.png
index 461a708b..2c1cf19f 100644
Binary files a/app/src/main/res/mipmap-xxxhdpi/dingding.png and b/app/src/main/res/mipmap-xxxhdpi/dingding.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/email.png b/app/src/main/res/mipmap-xxxhdpi/email.png
index d5e4cf79..24cca624 100644
Binary files a/app/src/main/res/mipmap-xxxhdpi/email.png and b/app/src/main/res/mipmap-xxxhdpi/email.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/feishu.png b/app/src/main/res/mipmap-xxxhdpi/feishu.png
index a8d60fd5..8a6437d1 100644
Binary files a/app/src/main/res/mipmap-xxxhdpi/feishu.png and b/app/src/main/res/mipmap-xxxhdpi/feishu.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/gotify.png b/app/src/main/res/mipmap-xxxhdpi/gotify.png
index 4c11e203..f18f1d13 100644
Binary files a/app/src/main/res/mipmap-xxxhdpi/gotify.png and b/app/src/main/res/mipmap-xxxhdpi/gotify.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/pushplus.png b/app/src/main/res/mipmap-xxxhdpi/pushplus.png
index f9e5d678..96fa3e40 100644
Binary files a/app/src/main/res/mipmap-xxxhdpi/pushplus.png and b/app/src/main/res/mipmap-xxxhdpi/pushplus.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/qywx.png b/app/src/main/res/mipmap-xxxhdpi/qywx.png
index 3a1f8d93..0610c2d4 100644
Binary files a/app/src/main/res/mipmap-xxxhdpi/qywx.png and b/app/src/main/res/mipmap-xxxhdpi/qywx.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/qywxapp.png b/app/src/main/res/mipmap-xxxhdpi/qywxapp.png
index 127139b3..9454ab00 100644
Binary files a/app/src/main/res/mipmap-xxxhdpi/qywxapp.png and b/app/src/main/res/mipmap-xxxhdpi/qywxapp.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/serverchan.png b/app/src/main/res/mipmap-xxxhdpi/serverchan.png
index 5363bb7e..d2098618 100644
Binary files a/app/src/main/res/mipmap-xxxhdpi/serverchan.png and b/app/src/main/res/mipmap-xxxhdpi/serverchan.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/telegram.png b/app/src/main/res/mipmap-xxxhdpi/telegram.png
index c780b913..c45e90db 100644
Binary files a/app/src/main/res/mipmap-xxxhdpi/telegram.png and b/app/src/main/res/mipmap-xxxhdpi/telegram.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/webhook.png b/app/src/main/res/mipmap-xxxhdpi/webhook.png
index 7eb07349..1b67c4ae 100644
Binary files a/app/src/main/res/mipmap-xxxhdpi/webhook.png and b/app/src/main/res/mipmap-xxxhdpi/webhook.png differ
diff --git a/app/src/main/res/values-en/colors.xml b/app/src/main/res/values-en/colors.xml
index 25848ba9..ea4e5a79 100644
--- a/app/src/main/res/values-en/colors.xml
+++ b/app/src/main/res/values-en/colors.xml
@@ -6,4 +6,12 @@
#78909C
#546E7A
#979797
+
+ #FF03DAC5
+ #FF018786
+ #FF000000
+ #FFFFFFFF
+
+ #333333
+ #999999
diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml
index 3251f1ef..c0432b7a 100644
--- a/app/src/main/res/values-en/strings.xml
+++ b/app/src/main/res/values-en/strings.xml
@@ -274,5 +274,9 @@
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;
- ]]>
+ ]]>
+ Title Template
+ Priority(1 – 9)
+ 5
+ Please enter the WebServer
diff --git a/app/src/main/res/values-en/styles.xml b/app/src/main/res/values-en/styles.xml
index bbad0cda..3055d782 100644
--- a/app/src/main/res/values-en/styles.xml
+++ b/app/src/main/res/values-en/styles.xml
@@ -49,4 +49,26 @@
- @android:color/transparent
- true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 25848ba9..ea4e5a79 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -6,4 +6,12 @@
#78909C
#546E7A
#979797
+
+ #FF03DAC5
+ #FF018786
+ #FF000000
+ #FFFFFFFF
+
+ #333333
+ #999999
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 67c13094..d7220ab2 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -274,4 +274,8 @@
不同意
SmsForwarder-短信转发器(下称本软件) 100% 免费开源,Github 在线编译发版,绝不会收集您的任何隐私数据! \n\n以下情形会上报本软件版本信息: \n 1、启动本软件时,发送版本信息发送到《友盟+·U-App移动统计》,用于分析本软件的用户版本留存与软件奔溃统计; \n 2、手动检查更新时,发送版本号用于检查新版本; \n除此之外,没有任何数据!!! \n\n本软件会遵循《隐私政策》收集、使用版本信息,但不会因为您同意了《隐私政策》而进行强制捆绑式的信息收集。
]]>
+ 标题模板
+ 优先级(1 - 9)
+ 5
+ 请输入WebServer
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 3c231574..ab89e382 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -52,4 +52,26 @@
- @android:color/transparent
- true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+