优化:敏感信息输入框增加明文/密文切换、清除按钮(明文状态下可粘贴)

pull/115/head
pppscn 3 years ago
parent ec726ca8d2
commit cc8037db2e

@ -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) {

@ -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();
}
}

@ -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);
}
}

@ -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);
}
}

@ -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);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 468 B

After

Width:  |  Height:  |  Size: 336 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 349 B

After

Width:  |  Height:  |  Size: 274 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 628 B

After

Width:  |  Height:  |  Size: 420 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 894 B

After

Width:  |  Height:  |  Size: 532 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 736 B

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 连框颜色值 -->
<item>
<shape>
<corners android:radius="0dp"></corners>
<solid android:color="#757575" />
</shape>
</item>
<!-- 主体背景颜色值 -->
<item
android:bottom="1dp"
android:left="0dp"
android:right="0dp"
android:top="0dp">
<shape>
<corners android:radius="0dp"></corners>
<solid android:color="@color/white" />
</shape>
</item>
</layer-list>

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
@ -45,7 +46,7 @@
android:layout_height="wrap_content"
android:text="@string/set_bark_server" />
<EditText
<!--<EditText
android:id="@+id/editTextBarkServer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -53,7 +54,17 @@
android:ems="14"
android:inputType="text"
android:text=""
tools:ignore="LabelFor" />
tools:ignore="LabelFor" />-->
<com.idormy.sms.forwarder.view.ClearEditText
android:id="@+id/editTextBarkServer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/line_bg_white_only_bottom_d8"
app:showEye="true"
app:textColor="@color/tv_black_333333"
app:textColorHint="@color/tv_gray_999999"
app:textSize="15sp" />
</LinearLayout>
<LinearLayout

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
@ -45,7 +46,7 @@
android:layout_height="wrap_content"
android:text="@string/dingding_token" />
<EditText
<!--<EditText
android:id="@+id/editTextDingdingToken"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -53,7 +54,17 @@
android:ems="14"
android:inputType="textPassword"
android:text=""
tools:ignore="LabelFor" />
tools:ignore="LabelFor" />-->
<com.idormy.sms.forwarder.view.ClearEditText
android:id="@+id/editTextDingdingToken"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/line_bg_white_only_bottom_d8"
app:showEye="true"
app:textColor="@color/tv_black_333333"
app:textColorHint="@color/tv_gray_999999"
app:textSize="15sp" />
</LinearLayout>
@ -69,7 +80,7 @@
android:layout_height="wrap_content"
android:text="@string/dingding_secret" />
<EditText
<!--<EditText
android:id="@+id/editTextDingdingSecret"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -77,7 +88,17 @@
android:ems="14"
android:inputType="textPassword"
android:text=""
tools:ignore="LabelFor" />
tools:ignore="LabelFor" />-->
<com.idormy.sms.forwarder.view.ClearEditText
android:id="@+id/editTextDingdingSecret"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/line_bg_white_only_bottom_d8"
app:showEye="true"
app:textColor="@color/tv_black_333333"
app:textColorHint="@color/tv_gray_999999"
app:textSize="15sp" />
</LinearLayout>
<LinearLayout

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
@ -81,7 +82,7 @@
android:layout_height="wrap_content"
android:text="@string/email_password" />
<EditText
<!--<EditText
android:id="@+id/editTextEmailPsw"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -91,7 +92,18 @@
android:inputType="textPassword"
android:maxLines="1"
android:text=""
tools:ignore="LabelFor,TextFields" />
tools:ignore="LabelFor,TextFields" />-->
<com.idormy.sms.forwarder.view.ClearEditText
android:id="@+id/editTextEmailPsw"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:background="@drawable/line_bg_white_only_bottom_d8"
app:showEye="true"
app:textColor="@color/tv_black_333333"
app:textColorHint="@color/tv_gray_999999"
app:textSize="15sp" />
</LinearLayout>
<LinearLayout

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
@ -69,7 +70,7 @@
android:layout_height="wrap_content"
android:text="@string/feishu_secret" />
<EditText
<!--<EditText
android:id="@+id/editTextFeishuSecret"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -77,7 +78,18 @@
android:ems="14"
android:inputType="textPassword"
android:text=""
tools:ignore="LabelFor" />
tools:ignore="LabelFor" />-->
<com.idormy.sms.forwarder.view.ClearEditText
android:id="@+id/editTextFeishuSecret"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:background="@drawable/line_bg_white_only_bottom_d8"
app:showEye="true"
app:textColor="@color/tv_black_333333"
app:textColorHint="@color/tv_gray_999999"
app:textSize="15sp" />
</LinearLayout>
<LinearLayout

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
@ -46,7 +47,17 @@
android:layout_height="wrap_content"
android:text="@string/GotifyWebServer" />
<EditText
<com.idormy.sms.forwarder.view.ClearEditText
android:id="@+id/editTextGotifyWebServer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/line_bg_white_only_bottom_d8"
app:showEye="true"
app:textColor="@color/tv_black_333333"
app:textColorHint="@color/tv_gray_999999"
app:textSize="15sp" />
<!--<EditText
android:id="@+id/editTextGotifyWebServer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -54,7 +65,7 @@
android:ems="14"
android:inputType="textUri"
android:text=""
tools:ignore="LabelFor" />
tools:ignore="LabelFor" />-->
</LinearLayout>
<LinearLayout
@ -76,7 +87,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="标题模板" />
android:text="@string/title_template" />
<TextView
android:layout_width="wrap_content"
@ -163,7 +174,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="优先级" />
android:text="@string/priority" />
<EditText
android:id="@+id/editTextGotifyPriority"
@ -174,9 +185,9 @@
android:ems="14"
android:inputType="number"
android:digits="123456789"
android:maxLength="3"
android:maxLength="1"
android:maxLines="1"
android:text="5"
android:text="@string/_5"
tools:ignore="LabelFor,TextFields" />
</LinearLayout>

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
@ -45,7 +46,7 @@
android:layout_height="wrap_content"
android:text="@string/pushplus_token" />
<EditText
<!--<EditText
android:id="@+id/editTextPushPlusToken"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -54,7 +55,18 @@
android:ems="14"
android:inputType="textPassword"
android:text=""
tools:ignore="LabelFor,TextFields" />
tools:ignore="LabelFor,TextFields" />-->
<com.idormy.sms.forwarder.view.ClearEditText
android:id="@+id/editTextPushPlusToken"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/line_bg_white_only_bottom_d8"
android:layout_marginStart="5dp"
app:showEye="true"
app:textColor="@color/tv_black_333333"
app:textColorHint="@color/tv_gray_999999"
app:textSize="15sp" />
</LinearLayout>
<LinearLayout

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
@ -99,7 +100,7 @@
android:text="@string/App_Secret"
android:textStyle="bold" />
<EditText
<!--<EditText
android:id="@+id/editTextQYWXAppSecret"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -107,7 +108,18 @@
android:autofillHints=""
android:inputType="textPassword"
android:text=""
tools:ignore="LabelFor" />
tools:ignore="LabelFor" />-->
<com.idormy.sms.forwarder.view.ClearEditText
android:id="@+id/editTextQYWXAppSecret"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:background="@drawable/line_bg_white_only_bottom_d8"
app:showEye="true"
app:textColor="@color/tv_black_333333"
app:textColorHint="@color/tv_gray_999999"
app:textSize="15sp" />
</LinearLayout>
<LinearLayout

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
@ -45,7 +46,7 @@
android:layout_height="wrap_content"
android:text="@string/QYWXGroupRobotWebHook" />
<EditText
<!--<EditText
android:id="@+id/editTextQYWXGroupRobotWebHook"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -53,7 +54,17 @@
android:ems="14"
android:inputType="text"
android:text=""
tools:ignore="LabelFor" />
tools:ignore="LabelFor" />-->
<com.idormy.sms.forwarder.view.ClearEditText
android:id="@+id/editTextQYWXGroupRobotWebHook"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/line_bg_white_only_bottom_d8"
app:showEye="true"
app:textColor="@color/tv_black_333333"
app:textColorHint="@color/tv_gray_999999"
app:textSize="15sp" />
</LinearLayout>
<LinearLayout

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
@ -45,7 +46,7 @@
android:layout_height="wrap_content"
android:text="@string/ServerChanSendKey" />
<EditText
<!--<EditText
android:id="@+id/editTextServerChanSendKey"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -53,7 +54,18 @@
android:ems="14"
android:inputType="textPassword"
android:text=""
tools:ignore="LabelFor" />
tools:ignore="LabelFor" />-->
<com.idormy.sms.forwarder.view.ClearEditText
android:id="@+id/editTextServerChanSendKey"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:background="@drawable/line_bg_white_only_bottom_d8"
app:showEye="true"
app:textColor="@color/tv_black_333333"
app:textColorHint="@color/tv_gray_999999"
app:textSize="15sp" />
</LinearLayout>
<LinearLayout

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
@ -47,7 +48,7 @@
android:text="@string/TelegramApiToken"
android:textStyle="bold" />
<EditText
<!--<EditText
android:id="@+id/editTextTelegramApiToken"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -55,7 +56,18 @@
android:ems="14"
android:inputType="textPassword"
android:text=""
tools:ignore="LabelFor" />
tools:ignore="LabelFor" />-->
<com.idormy.sms.forwarder.view.ClearEditText
android:id="@+id/editTextTelegramApiToken"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/line_bg_white_only_bottom_d8"
android:layout_marginStart="5dp"
app:showEye="true"
app:textColor="@color/tv_black_333333"
app:textColorHint="@color/tv_gray_999999"
app:textSize="15sp" />
</LinearLayout>
<LinearLayout
@ -230,40 +242,63 @@
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:orientation="horizontal"
android:orientation="vertical"
android:visibility="gone">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/username" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<EditText
android:id="@+id/editTextProxyUsername"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="3dp"
android:autofillHints=""
android:ems="7"
android:inputType="text"
android:text=""
tools:ignore="LabelFor" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/username" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/password" />
<EditText
android:id="@+id/editTextProxyUsername"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="3dp"
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:orientation="horizontal">
<EditText
android:id="@+id/editTextProxyPassword"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="3dp"
android:autofillHints=""
android:ems="7"
android:inputType="textPassword"
android:text=""
tools:ignore="LabelFor,TextFields" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/password" />
<!--<EditText
android:id="@+id/editTextProxyPassword"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="3dp"
android:autofillHints=""
android:ems="7"
android:inputType="textPassword"
android:text=""
tools:ignore="LabelFor,TextFields" />-->
<com.idormy.sms.forwarder.view.ClearEditText
android:id="@+id/editTextProxyPassword"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:background="@drawable/line_bg_white_only_bottom_d8"
app:showEye="true"
app:textColor="@color/tv_black_333333"
app:textColorHint="@color/tv_gray_999999"
app:textSize="15sp" />
</LinearLayout>
</LinearLayout>
<LinearLayout

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
@ -128,7 +129,7 @@
android:layout_height="wrap_content"
android:text="@string/WebNotifySecret" />
<EditText
<!--<EditText
android:id="@+id/editTextWebNotifySecret"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -136,7 +137,18 @@
android:ems="14"
android:inputType="textPassword"
android:text=""
tools:ignore="LabelFor" />
tools:ignore="LabelFor" />-->
<com.idormy.sms.forwarder.view.ClearEditText
android:id="@+id/editTextWebNotifySecret"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:background="@drawable/line_bg_white_only_bottom_d8"
app:showEye="true"
app:textColor="@color/tv_black_333333"
app:textColorHint="@color/tv_gray_999999"
app:textSize="15sp" />
</LinearLayout>
<LinearLayout

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:focusableInTouchMode="true"
android:minHeight="45dp"
android:orientation="horizontal">
<ImageView
android:id="@+id/iv_edit_left_icon"
android:layout_width="30dp"
android:layout_height="45dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_centerVertical="true"
android:scaleType="centerInside"
android:src="@drawable/icon_login"
android:visibility="gone"
tools:visibility="visible" />
<EditText
android:id="@+id/view_edit_show"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:gravity="center|left"
android:hint="请输入手机号"
android:minHeight="45dp"
android:paddingRight="45dp"
android:textSize="14sp" />
<RelativeLayout
android:layout_width="90dp"
android:layout_height="45dp"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:gravity="right">
<ImageView
android:id="@+id/iv_edit_eye"
android:layout_width="45dp"
android:layout_height="match_parent"
android:scaleType="centerInside"
android:src="@drawable/clear_icon_eye_close"
android:visibility="gone" />
<ImageView
android:id="@+id/iv_edit_clean"
android:layout_width="45dp"
android:layout_height="match_parent"
android:scaleType="centerInside"
android:src="@drawable/clear_icon_close"
android:visibility="gone"
tools:visibility="visible" />
</RelativeLayout>
</RelativeLayout>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.6 KiB

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

@ -6,4 +6,12 @@
<color name="colorBlueGrey">#78909C</color>
<color name="colorBlueGreyDark">#546E7A</color>
<color name="gray_text_light">#979797</color>
<color name="teal_200">#FF03DAC5</color>
<color name="teal_700">#FF018786</color>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
<color name="tv_black_333333">#333333</color>
<color name="tv_gray_999999">#999999</color>
</resources>

@ -274,5 +274,9 @@
<string name="agree">Agree</string>
<string name="disagree">Disagree</string>
<string name="privacy_policy_text">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;</string>
<string name="GotifyWebServer"><![CDATA[设置WebServer例如https://push.example.de/message?token=<apptoken>]]></string>
<string name="GotifyWebServer"><![CDATA[Setting the WebServer, eg.: https://push.example.de/message?token=<apptoken>]]></string>
<string name="title_template">Title Template</string>
<string name="priority">Priority1 9</string>
<string name="_5">5</string>
<string name="enter_webserver_tips">Please enter the WebServer</string>
</resources>

@ -49,4 +49,26 @@
<item name="android:windowBackground">@android:color/transparent</item><!--背景透明-->
<item name="android:backgroundDimEnabled">true</item><!--模糊-->
</style>
<declare-styleable name="ClearEditText">
<attr name="showClean" format="boolean" />
<attr name="drawableClean" format="reference" />
<attr name="cleanPadding" format="dimension" />
<attr name="showEye" format="boolean" />
<attr name="drawableEyeOpen" format="reference" />
<attr name="drawableEyeClose" format="reference" />
<attr name="drawableLeft" format="reference" />
<attr name="hint" format="string" />
<attr name="text" format="string" />
<attr name="textColorHint" format="reference|color" />
<attr name="textColor" format="reference|color" />
<attr name="textSize" format="dimension" />
<attr name="maxLength" format="integer" />
<attr name="maxLines" format="integer" />
<attr name="inputType">
<enum name="none" value="0" />
<enum name="number" value="1" />
<enum name="textPassword" value="2" />
</attr>
</declare-styleable>
</resources>

@ -6,4 +6,12 @@
<color name="colorBlueGrey">#78909C</color>
<color name="colorBlueGreyDark">#546E7A</color>
<color name="gray_text_light">#979797</color>
<color name="teal_200">#FF03DAC5</color>
<color name="teal_700">#FF018786</color>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
<color name="tv_black_333333">#333333</color>
<color name="tv_gray_999999">#999999</color>
</resources>

@ -274,4 +274,8 @@
<string name="disagree">不同意</string>
<string name="privacy_policy_text">SmsForwarder-短信转发器(下称本软件) 100% 免费开源Github 在线编译发版,绝不会收集您的任何隐私数据! \n\n以下情形会上报本软件版本信息 \n 1、启动本软件时发送版本信息发送到《友盟+·U-App移动统计》用于分析本软件的用户版本留存与软件奔溃统计 \n 2、手动检查更新时发送版本号用于检查新版本 \n除此之外没有任何数据 \n\n本软件会遵循《隐私政策》收集、使用版本信息但不会因为您同意了《隐私政策》而进行强制捆绑式的信息收集。</string>
<string name="GotifyWebServer"><![CDATA[设置WebServer例如https://push.example.de/message?token=<apptoken>]]></string>
<string name="title_template">标题模板</string>
<string name="priority">优先级1 - 9</string>
<string name="_5">5</string>
<string name="enter_webserver_tips">请输入WebServer</string>
</resources>

@ -52,4 +52,26 @@
<item name="android:windowBackground">@android:color/transparent</item><!--背景透明-->
<item name="android:backgroundDimEnabled">true</item><!--模糊-->
</style>
<declare-styleable name="ClearEditText">
<attr name="showClean" format="boolean" />
<attr name="drawableClean" format="reference" />
<attr name="cleanPadding" format="dimension" />
<attr name="showEye" format="boolean" />
<attr name="drawableEyeOpen" format="reference" />
<attr name="drawableEyeClose" format="reference" />
<attr name="drawableLeft" format="reference" />
<attr name="hint" format="string" />
<attr name="text" format="string" />
<attr name="textColorHint" format="reference|color" />
<attr name="textColor" format="reference|color" />
<attr name="textSize" format="dimension" />
<attr name="maxLength" format="integer" />
<attr name="maxLines" format="integer" />
<attr name="inputType">
<enum name="none" value="0" />
<enum name="number" value="1" />
<enum name="textPassword" value="2" />
</attr>
</declare-styleable>
</resources>

Loading…
Cancel
Save