Commit 421a1fbb authored by jianglx's avatar jianglx

抽离登录模块,解决其他模块依赖home模块的问题

parent b39586db
apply plugin: 'com.android.library'
apply plugin: 'com.jakewharton.butterknife'
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
flavorDimensions "default"
javaCompileOptions {
annotationProcessorOptions {
includeCompileClasspath = true
arguments = [moduleName: project.getName()]
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
//开发环境
dev {
}
sit {
}
pro {
}
interior {
}
}
compileOptions {
sourceCompatibility = "1.8"
targetCompatibility = "1.8"
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.jakewharton:butterknife:9.0.0-rc1'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
annotationProcessor 'com.jakewharton:butterknife-compiler:9.0.0-rc1'
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation project(':RvWrapper')
implementation project(':component_resource')
annotationProcessor 'com.alibaba:arouter-compiler:1.1.4'
implementation 'com.alibaba:fastjson:1.2.21'
implementation project(':component_utils')
}
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.rv.login">
<application>
<activity
android:name=".BingPhoneActivity"
android:screenOrientation="portrait" />
<activity
android:name=".LoginRvActivity"
android:screenOrientation="portrait"
android:launchMode="singleTask"/>
<activity
android:name=".ConfirmPwdActivity"
android:screenOrientation="portrait" />
<activity
android:name=".PwdLoginActivity"
android:screenOrientation="portrait" />
<activity
android:name=".RegisteredActivity"
android:screenOrientation="portrait" />
</application>
</manifest>
\ No newline at end of file
package com.rv.login;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import com.alibaba.fastjson.JSON;
import com.frame.base.bus.LoginSuccessfulEvent;
import com.frame.base.bus.LoginUserInfoEvent;
import com.frame.base.bus.RxBus;
import com.frame.rv.config.ApiConfig;
import com.frame.rv.config.RvFrameConfig;
import com.ruiwenliu.wrapper.SPConstance;
import com.ruiwenliu.wrapper.base.BaseStatusActivity;
import com.ruiwenliu.wrapper.bean.BeanUserInfo;
import com.ruiwenliu.wrapper.other.TagAliasOperatorHelper;
import com.ruiwenliu.wrapper.presenter.MvpPresenter;
import com.ruiwenliu.wrapper.util.UtilsManager;
import com.ruiwenliu.wrapper.weight.TitleView;
import com.rv.component.utils.AppCookie;
import com.rv.component.utils.Cookie;
import com.rv.component.utils.DateUtils;
import com.rv.component.utils.LogUtil;
import com.rv.login.bean.RegisteredBean;
import com.umeng.socialize.UMAuthListener;
import com.umeng.socialize.UMShareAPI;
import com.umeng.socialize.UMShareConfig;
import com.umeng.socialize.bean.SHARE_MEDIA;
import com.umeng.socialize.utils.SocializeUtils;
import com.yuyife.okgo.OkGoUtil;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* Created :Auser
* Date: 2019/5/15.
* Desc:登录基类
*/
public abstract class BaseLoginActivity<P extends MvpPresenter> extends BaseStatusActivity<P> implements UMAuthListener {
public ProgressDialog dialog;
@Override
protected void initView(Bundle savedInstanceState, TitleView titleView, Intent intent) {
dialog = new ProgressDialog(this);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(mActivity).onActivityResult(requestCode, resultCode, data);
}
@Override
public void onDestroy() {
super.onDestroy();
UMShareAPI.get(mActivity).release();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
UMShareAPI.get(mActivity).onSaveInstanceState(outState);
}
@Override
public void onStart(SHARE_MEDIA platform) {
SocializeUtils.safeShowDialog(dialog);
}
@Override
public void onError(SHARE_MEDIA platform, int action, Throwable t) {
SocializeUtils.safeCloseDialog(dialog);
showToast(mActivity.getString(R.string.rv_login_authorization_failure) + t.getMessage());
}
@Override
public void onCancel(SHARE_MEDIA platform, int action) {
SocializeUtils.safeCloseDialog(dialog);
// Toast.makeText(LoginActivity.this, "取消了", Toast.LENGTH_LONG).show();
}
public void umLogin(SHARE_MEDIA share_media) {
UMShareConfig config = new UMShareConfig();
config.isNeedAuthOnGetUserInfo(true);
UMShareAPI.get(mActivity).setShareConfig(config);
UMShareAPI.get(mActivity).getPlatformInfo(mActivity, share_media, this);
}
public void deleteAuthorize() {
// UMShareAPI.get(mActivity).deleteOauth(mActivity, SHARE_MEDIA.WEIXIN, this);
// UMShareAPI.get(mActivity).deleteOauth(mActivity, SHARE_MEDIA.QQ, this);
}
public void setDataUser(BeanUserInfo data) {
UtilsManager.getInstance(OkGoUtil.application).setSharePreferencesSave(SPConstance.USER_JSON).putString(SPConstance.USER_JSON_USERINFO, JSON.toJSONString(data.getData())).commit();
RxBus.post(new LoginUserInfoEvent());
}
/**
* 第三方登录
*
* @param username
* @param mobilecode
* @param password
* @param nickname
* @param headimgurl
* @param openid
* @param type
*/
public void otherLoginBind(String username, String mobilecode, String password, String nickname, String headimgurl, String openid, int type, int isQQ, String uid) {
Map<String, Object> map = new LinkedHashMap<>();
map.put("username", username);
map.put("mobilecode", mobilecode);
map.put("password", password);
map.put("nickname", nickname);
map.put("headimgurl", headimgurl);
map.put("openid", openid);
map.put("type", type);
map.put("isQQ", isQQ);
if (isQQ == 0) {
map.put("unionid", uid);
}
map.put("code", AppCookie.getStringValue("code"));
mPresenter.postData(2, ApiConfig.HTTP_URL_OTHER_LOGIN_BIND, RegisteredBean.class, map, true);
}
public void processLoginData(RegisteredBean bean) {
LogUtil.d("登录返回的code为" + bean.getData().getCode());
RegisteredBean registeredBean = bean;
Cookie.save(getApplicationContext(), SPConstance.USER_JSON_CODE, registeredBean.getData().getCode());
Cookie.save(getApplicationContext(), SPConstance.USER_JSON_NAME, registeredBean.getData().getUsername());
Cookie.save(getApplicationContext(), SPConstance.USER_JSON_HEADERURL, registeredBean.getData().getHeaderurl());
Cookie.save(getApplicationContext(), SPConstance.USER_JSON_TOKEN, registeredBean.getToken());
Cookie.save(getApplicationContext(), SPConstance.USER_JSON_TOKE_TIME, DateUtils.getCurDate());
Cookie.save(getApplicationContext(), SPConstance.USER_JSON_NICKANAME, registeredBean.getData().getNickname());
Cookie.save(getApplicationContext(), SPConstance.USER_JSON_IMUSERID, registeredBean.getData().getImUserId());
Cookie.save(getApplicationContext(), SPConstance.USER_JSON_IMTOKEN, registeredBean.getData().getImToken());
UtilsManager.getInstance(OkGoUtil.application).setSharePreferencesSave(SPConstance.USER_JSON).putString(SPConstance.USER_JSON_CODE, registeredBean.getData().getCode()).commit();
UtilsManager.getInstance(OkGoUtil.application).setSharePreferencesSave(SPConstance.USER_JSON).putString(SPConstance.USER_JSON_NAME, registeredBean.getData().getUsername()).commit();
UtilsManager.getInstance(OkGoUtil.application).setSharePreferencesSave(SPConstance.USER_JSON).putString(SPConstance.USER_JSON_HEADERURL, registeredBean.getData().getHeaderurl()).commit();
UtilsManager.getInstance(OkGoUtil.application).setSharePreferencesSave(SPConstance.USER_JSON).putString(SPConstance.USER_JSON_USERID, registeredBean.getData().getUserId()).commit();
UtilsManager.getInstance(OkGoUtil.application).setSharePreferencesSave(SPConstance.USER_JSON).putString(SPConstance.USER_JSON_TOKEN, registeredBean.getToken()).commit();
UtilsManager.getInstance(OkGoUtil.application).setSharePreferencesSave(SPConstance.USER_JSON).putString(SPConstance.USER_JSON_IMUSERID, registeredBean.getData().getImUserId()).commit();
UtilsManager.getInstance(OkGoUtil.application).setSharePreferencesSave(SPConstance.USER_JSON).putString(SPConstance.USER_JSON_IMTOKEN, registeredBean.getData().getImToken()).commit();
UtilsManager.getInstance(OkGoUtil.application).setSharePreferencesSave(SPConstance.USER_JSON).putString(SPConstance.USER_JSON_ISCERTIFICATIONSTATUS, registeredBean.getData().getCertificationStatus()).commit();
Map<String, Object> headMap = new LinkedHashMap<>();
if (registeredBean.getToken() != null) {
headMap.put("Authorization", registeredBean.getToken());
mPresenter.getDataHead(RvFrameConfig.ADMIN_POST, 10, ApiConfig.HTTP_URL_APP_USER_INFO, BeanUserInfo.class, headMap, false);
}
OkGoUtil.setToken(registeredBean.getToken(), DateUtils.getCurDate());
// switch (RvFrameConfig.RvFrameInfo.TYPE_LOGIN) {
// case 1:
// if ("0".equals(bean.getData().getCertificationStatus())) { //实名认证状态:0-未认证,1-已认证
// ARouter.getInstance().build(Constance.ACTIVITY_URL_IDCARDCERTIFICATION).navigation();
// } else {
// startActivity(CarDetailActivity.getIntent(mActivity, 1));
// }
// break;
// default:
// finish();
// break;
// }
boolean isAliasAction = true;
TagAliasOperatorHelper.TagAliasBean tagAliasBean = new TagAliasOperatorHelper.TagAliasBean();
tagAliasBean.action = TagAliasOperatorHelper.ACTION_SET;
TagAliasOperatorHelper.sequence++;
if (isAliasAction) {
tagAliasBean.alias = registeredBean.getData().getUserId();
} else {
tagAliasBean.tags = null;
}
tagAliasBean.isAliasAction = isAliasAction;
TagAliasOperatorHelper.getInstance().handleAction(getApplicationContext(), TagAliasOperatorHelper.sequence, tagAliasBean);
RxBus.post(new LoginSuccessfulEvent());
finish();
}
}
package com.rv.login;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import com.frame.rv.config.ApiConfig;
import com.ruiwenliu.wrapper.base.BaseBean;
import com.ruiwenliu.wrapper.bean.SendCodeBean;
import com.ruiwenliu.wrapper.util.RxJavaManager;
import com.ruiwenliu.wrapper.util.listener.TextChangedListener;
import com.ruiwenliu.wrapper.bean.BeanUserInfo;
import com.ruiwenliu.wrapper.base.presenter.CommonPresenter;
import com.ruiwenliu.wrapper.weight.TitleView;
import com.rv.login.bean.CheckLoginBean;
import com.rv.login.bean.RegisteredBean;
import com.umeng.socialize.bean.SHARE_MEDIA;
import java.util.LinkedHashMap;
import java.util.Map;
import butterknife.BindView;
import butterknife.OnClick;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
/**
* Created :Auser
* Date: 2019/5/21.
* Desc:绑定手机号
*/
public class BingPhoneActivity extends BaseLoginActivity<CommonPresenter> {
@BindView(R2.id.et_phone)
EditText etPhone;
@BindView(R2.id.iv_clear_phone)
ImageView ivClearPhone;
@BindView(R2.id.et_phone_code)
EditText etPhoneCode;
@BindView(R2.id.iv_clear_code)
ImageView ivClearCode;
@BindView(R2.id.tv_get_code)
TextView tvGetCode;
@BindView(R2.id.tv_bind)
TextView tvBind;
private String mOpenid;
private String mHeadImg;
private String mName;
private int mIsQQ;
private String mUnionid;
private Disposable mDisposable;
public static Intent getIntent(Context context, String openid, String headImg, int isQQ, String name, String uId) {
return new Intent(context, BingPhoneActivity.class)
.putExtra("openid", openid)
.putExtra("headImg", headImg)
.putExtra("isQQ", isQQ)
.putExtra("name", name)
.putExtra("uId", uId);
}
@Override
protected int setLayout() {
return R.layout.rv_act_bing_phone;
}
@Override
protected void initView(Bundle savedInstanceState, TitleView titleView, Intent intent) {
titleView.setTitle(mActivity.getString(R.string.rv_phone_bind));
mOpenid = intent.getStringExtra("openid");
mHeadImg = intent.getStringExtra("headImg");
mName = intent.getStringExtra("name");
mIsQQ = intent.getIntExtra("isQQ", 1);
mUnionid = intent.getStringExtra("uId");
editListener(etPhone);
editListener(etPhoneCode);
}
@Override
protected void loadData(Bundle savedInstanceState, Intent intent) {
}
@Override
public void onShowResult(int requestType, BaseBean result) {
switch (requestType) {
case 0:
showToast(mActivity.getString(R.string.rv_phone_code_toast));
sendCode(60);
break;
case 1:
CheckLoginBean checkLoginBean = (CheckLoginBean) result;
switch (checkLoginBean.getData().getType()) {
case 0:
showToast(mIsQQ == 1 ? "该手机号已经绑定过一个QQ,请您更换手机号!" : "该手机号已经绑定过一个微信,请您更换手机号!");
break;
case 1:
otherLoginBind(getPhone(), getCode(), "", mName, mHeadImg, mOpenid, 1, mIsQQ, mUnionid);
break;
case 2:
startActivity(ConfirmPwdActivity.getIntent(mActivity, mOpenid, mHeadImg, mIsQQ, mName, getPhone(), getCode(), mUnionid));
finish();
break;
}
break;
case 2:
processLoginData((RegisteredBean) result);
break;
case 10:
setDataUser((BeanUserInfo) result);
break;
}
}
@Override
public void onDestroy() {
super.onDestroy();
stopCarousel();
deleteAuthorize();
}
@OnClick({R2.id.iv_clear_phone, R2.id.iv_clear_code, R2.id.tv_get_code, R2.id.tv_bind})
public void onViewClicked(View view) {
int id = view.getId();
if (id == R.id.iv_clear_phone) {
clearEditData(etPhone);
} else if (id == R.id.iv_clear_code) {
clearEditData(etPhoneCode);
} else if (id == R.id.tv_get_code) {
if (TextUtils.isEmpty(getPhone())) {
showToast(mActivity.getString(R.string.rv_phone_hint));
return;
}
if (getPhone().length() != 11) {
showToast("请输入正确手机号");
return;
}
sendCode();
} else if (id == R.id.tv_bind) {
checkPhone();
}
}
/**
* 发送验证码
*/
private void sendCode() {
Map<String, Object> map = new LinkedHashMap<>();
map.put("username", getPhone());
map.put("type", -1);
mPresenter.postData(0, ApiConfig.HTTP_URL_SEND_CODE, SendCodeBean.class, map, true);
}
/**
* 检查手机号是否绑定
*/
private void checkPhone() {
Map<String, Object> map = new LinkedHashMap<>();
map.put("username", getPhone());
mPresenter.postData(1, ApiConfig.HTTP_URL_CHECK_PHONE, CheckLoginBean.class, map, true);
}
/**
* 获得手机号
*
* @return
*/
private String getPhone() {
return etPhone.getText().toString().trim();
}
/**
* 获得验证码
*
* @return
*/
private String getCode() {
return etPhoneCode.getText().toString().trim();
}
/**
* 清除编辑数据
*/
private void clearEditData(EditText text) {
text.setText("");
}
/**
* 文本输入监听
*
* @param editText
*/
private void editListener(final EditText editText) {
editText.addTextChangedListener(new TextChangedListener() {
@Override
public void afterTextChanged(Editable s) {
super.afterTextChanged(s);
if (editText.getId() == R.id.et_phone) {
ivClearPhone.setVisibility(getPhone().length() > 0 ? View.VISIBLE : View.GONE);
} else if (editText.getId() == R.id.et_phone_code) {
ivClearCode.setVisibility(getCode().length() > 0 ? View.VISIBLE : View.GONE);
}
if (etPhone.length() > 0 && etPhoneCode.length() > 0) {
tvBind.setEnabled(true);
tvBind.setSelected(true);
} else {
tvBind.setEnabled(false);
tvBind.setSelected(false);
}
}
});
}
/**
* 发送验证码
*
* @param timeLong 验证码时长
*/
private void sendCode(final int timeLong) {
RxJavaManager.getInstance().sendCode(timeLong, new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
tvGetCode.setEnabled(false);
}
}, new Observer<Long>() {
@Override
public void onSubscribe(Disposable d) {
mDisposable = d;
}
@Override
public void onNext(Long aLong) {
tvGetCode.setText("" + aLong + "s");
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
tvGetCode.setEnabled(true);
tvGetCode.setText(mActivity.getString(R.string.rv_login_rest));
}
});
}
/**
* 停止计时
*/
public void stopCarousel() {
if (mDisposable != null && !mDisposable.isDisposed()) {
mDisposable.dispose();
}
}
@Override
public void onComplete(SHARE_MEDIA share_media, int i, Map<String, String> map) {
}
}
This diff is collapsed.
package com.rv.login;
import android.content.Context;
import android.graphics.Typeface;
import android.support.annotation.NonNull;
import android.text.SpannableStringBuilder;
import android.text.TextPaint;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.text.style.StyleSpan;
import android.text.style.UnderlineSpan;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.TextView;
import com.alibaba.android.arouter.launcher.ARouter;
import com.frame.base.url.Constance;
import com.frame.rv.config.ApiConfig;
import com.ruiwenliu.wrapper.dialog.BaseDialog;
public class PrivacyTipsDialog extends BaseDialog {
public PrivacyTipsDialog(@NonNull Context context) {
super(context);
setDialogParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER);
}
public PrivacyTipsDialog(Context context, int themeResId) {
super(context, themeResId);
setDialogParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER);
}
@Override
public int getViewLayout() {
return R.layout.dialog_privacy_tips;
}
public static class Builder {
private Context mContext;
private Button btnDisagree, btnAgree;
private TextView txtContent;
private PrivacyTipsDialog dialog;
private PrivacyListener mListener;
public Builder(Context context, PrivacyListener listener) {
mContext = context;
this.mListener = listener;
}
public interface DownloadListener {
void download();
}
public Builder show() {
final PrivacyTipsDialog dialog = create();
dialog.show();
return this;
}
/**
* 创建定制的对话框
*/
public PrivacyTipsDialog create() {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
dialog = new PrivacyTipsDialog(mContext, R.style.DialogActivityTheme);
// 获取对话框的布局
View layout = inflater.inflate(R.layout.dialog_privacy_tips, null);
// 为对话框添加布局和设置大小
dialog.addContentView(layout, new WindowManager.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT));
txtContent = layout.findViewById(R.id.tv_tips_content) ;
this.btnDisagree = layout.findViewById(R.id.btn_disagree);
this.btnAgree = layout.findViewById(R.id.btn_agree);
this.btnAgree.setOnClickListener(v -> {
if (mListener != null) mListener.agree();
dialog.dismiss();
});
this.btnDisagree.setOnClickListener(v -> {
if (mListener != null) mListener.disAgree();
dialog.dismiss();
});
setTextColorAndAction();
dialog.setCancelable(false);
dialog.setContentView(layout);
return dialog;
}
private void avoidHintColor(View view) {
if (view instanceof TextView)
((TextView) view).setHighlightColor(mContext.getResources().getColor(android.R.color.transparent));
}
private void setTextColorAndAction(){
SpannableStringBuilder ssb = new SpannableStringBuilder();
String str = txtContent.getText().toString().trim();
ssb.append(str);
ssb.setSpan(new UnderlineSpan(),str.indexOf("如果您不同意以上"),str.indexOf("您停止注册后将"),0);
ssb.setSpan(new StyleSpan(Typeface.BOLD),str.indexOf("如果您不同意以上"),str.indexOf("您停止注册后将"),0);
ssb.setSpan(new UnderlineSpan(),str.indexOf("请您务必仔细阅读"),str.indexOf("(尤其是以粗"),0);
ssb.setSpan(new StyleSpan(Typeface.BOLD),str.indexOf("请您务必仔细阅读"),str.indexOf("(尤其是以粗"),0);
final int startUserAgreement = str.indexOf("《用户协议》");//第一个出现的位置
ssb.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
avoidHintColor(widget);
ARouter.getInstance().build(Constance.ACTIVITY_URL_WEBVIEW)
.withString("title", "用户协议")
.withString("url", ApiConfig.HTTP_URL_CAR_TYPE_NOTICE)
.withInt("type", 15)
.navigation();
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(mContext.getResources().getColor(R.color.gray_FFB74B)); //设置文件颜色
// 去掉下划线
ds.setUnderlineText(false);
}
}, startUserAgreement, startUserAgreement + 6, 0);
final int endUserAgreement = str.lastIndexOf("《用户协议》");//最后一个出现的位置
ssb.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
avoidHintColor(widget);
ARouter.getInstance().build(Constance.ACTIVITY_URL_WEBVIEW)
.withString("title", "用户协议")
.withString("url", ApiConfig.HTTP_URL_CAR_TYPE_NOTICE)
.withInt("type", 15)
.navigation();
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(mContext.getResources().getColor(R.color.gray_FFB74B)); //设置文件颜色
// 去掉下划线
ds.setUnderlineText(false);
}
}, endUserAgreement, endUserAgreement + 6, 0);
final int startPrivacyAgreement = str.indexOf("《隐私政策》");//第一个出现的位置
ssb.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
avoidHintColor(widget);
ARouter.getInstance().build(Constance.ACTIVITY_URL_WEBVIEW)
.withString("title", "隐私政策")
.withString("url", ApiConfig.HTTP_URL_CAR_TYPE_NOTICE)
.withInt("type", 19)
.navigation();
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(mContext.getResources().getColor(R.color.gray_FFB74B)); //设置文件颜色
// 去掉下划线
ds.setUnderlineText(false);
}
}, startPrivacyAgreement, startPrivacyAgreement + 6, 0);
final int endPrivacyAgreement = str.lastIndexOf("《隐私政策》");//最后一个出现的位置
ssb.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
avoidHintColor(widget);
ARouter.getInstance().build(Constance.ACTIVITY_URL_WEBVIEW)
.withString("title", "隐私政策")
.withString("url", ApiConfig.HTTP_URL_CAR_TYPE_NOTICE)
.withInt("type", 19)
.navigation();
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(mContext.getResources().getColor(R.color.gray_FFB74B)); //设置文件颜色
// 去掉下划线
ds.setUnderlineText(false);
}
}, endPrivacyAgreement, endPrivacyAgreement + 6, 0);
txtContent.setMovementMethod(LinkMovementMethod.getInstance());
txtContent.setText(ssb, TextView.BufferType.SPANNABLE);
}
}
public interface PrivacyListener {
void agree();
void disAgree();
}
}
package com.rv.login;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import com.alibaba.android.arouter.launcher.ARouter;
import com.frame.base.url.Constance;
import com.frame.rv.config.ApiConfig;
import com.ruiwenliu.wrapper.base.BaseBean;
import com.ruiwenliu.wrapper.util.listener.TextChangedListener;
import com.ruiwenliu.wrapper.weight.TitleView;
import com.rv.component.utils.AppCookie;
import com.ruiwenliu.wrapper.bean.BeanUserInfo;
import com.ruiwenliu.wrapper.base.presenter.CommonPresenter;
import com.rv.login.bean.RegisteredBean;
import com.umeng.socialize.bean.SHARE_MEDIA;
import com.umeng.socialize.utils.SocializeUtils;
import java.util.LinkedHashMap;
import java.util.Map;
import butterknife.BindView;
import butterknife.OnClick;
public class PwdLoginActivity extends BaseLoginActivity<CommonPresenter> {
@BindView(R2.id.et_phone)
EditText etPhone;
@BindView(R2.id.iv_clear_phone)
ImageView ivClearPhone;
@BindView(R2.id.et_pwd)
EditText etPwd;
@BindView(R2.id.iv_clear_pwd)
ImageView ivClearPwd;
@BindView(R2.id.tv_login)
TextView tvLogin;
private boolean isShow;
private int jumptype;
public static Intent getIntent(Context context, int jumptype, String phone) {
return new Intent(context, PwdLoginActivity.class)
.putExtra("jumptype", jumptype)
.putExtra("phone", phone);
}
@Override
protected void initView(Bundle savedInstanceState, TitleView titleView, Intent intent) {
super.initView(savedInstanceState, titleView, intent);
titleView.setTitle(mActivity.getString(R.string.rv_pwd_login));
jumptype = intent.getIntExtra("jumptype", 0);
String phone = intent.getStringExtra("phone");
if (!TextUtils.isEmpty(phone)) {
etPhone.setText(phone);
if (phone.length() <= 11) {
etPhone.setSelection(phone.length());
} else {
etPhone.setSelection(11);
}
}
editListener(etPhone);
editListener(etPwd);
}
@Override
protected void loadData(Bundle savedInstanceState, Intent intent) {
}
@Override
protected int setLayout() {
return R.layout.rv_act_pwd_login;
}
@Override
public void onShowResult(int requestType, BaseBean result) {
if (requestType == 0) {
processLoginData((RegisteredBean) result);
} else if (requestType == 10) {
setDataUser((BeanUserInfo) result);
}
}
@OnClick({R2.id.iv_clear_phone, R2.id.iv_clear_pwd, R2.id.tv_login, R2.id.tv_phone_login, R2.id.tv_registered, R2.id.iv_weixin, R2.id.iv_qq, R2.id.tv_forget_pwd})
public void onViewClicked(View view) {
if (view.getId() == R.id.iv_clear_phone) {
clearEditData(etPhone);
} else if (view.getId() == R.id.iv_clear_pwd) {
isShow = !isShow;
ivClearPwd.setSelected(isShow);
etPwd.setTransformationMethod(isShow ? HideReturnsTransformationMethod.getInstance() : PasswordTransformationMethod.getInstance());
} else if (view.getId() == R.id.tv_login) {
if (getPwd().length() < 8) {
showToast(mActivity.getString(R.string.rv_pwd_length));
return;
}
pwdLogin();
} else if (view.getId() == R.id.tv_phone_login) {
finish();
} else if (view.getId() == R.id.tv_registered) {
ARouter.getInstance().build(Constance.ACTIVITY_URL_REGISTER)
.withInt("type", 0)
.withInt("jumptype", jumptype)
.navigation();
finish();
} else if (view.getId() == R.id.iv_weixin) {
umLogin(SHARE_MEDIA.WEIXIN);
} else if (view.getId() == R.id.iv_qq) {
umLogin(SHARE_MEDIA.QQ);
} else if (view.getId() == R.id.tv_forget_pwd) {
ARouter.getInstance().build(Constance.ACTIVITY_URL_REGISTER)
.withInt("type", 1)
.withInt("jumptype", 0)
.navigation();
finish();
}
//
//
// switch (view.getId()) {
// case R.id.iv_clear_phone:
// clearEditData(etPhone);
// break;
// case R.id.iv_clear_pwd:
// isShow=!isShow;
// ivClearPwd.setSelected(isShow);
// etPwd.setTransformationMethod(isShow?HideReturnsTransformationMethod.getInstance(): PasswordTransformationMethod.getInstance());
//// clearEditData(etPwd);
// break;
// case R.id.tv_login://密码登录
//// if(TextUtils.isEmpty(getPhone())){
//// showToast(mActivity.getString(R.string.rv_phone_hint));
//// return;
//// }
//// if(TextUtils.isEmpty(getPwd())){
//// showToast(mActivity.getString(R.string.rv_pwd_hint));
//// return;
//// }
// if (getPwd().length() < 8) {
// showToast(mActivity.getString(R.string.rv_pwd_length));
// return;
// }
// pwdLogin();
// break;
// case R.id.tv_phone_login://手机登录
// finish();
// break;
// case R.id.tv_registered://立即注册
// startActivity(RegisteredActivity.getIntent(mActivity, 0));
// finish();
// break;
// case R.id.iv_weixin:
// umLogin(SHARE_MEDIA.WEIXIN);
// break;
// case R.id.iv_qq:
// umLogin(SHARE_MEDIA.QQ);
// break;
// case R.id.tv_forget_pwd:
// startActivity(RegisteredActivity.getIntent(mActivity, 1));
// finish();
// break;
// }
}
/**
* 获得手机号
*
* @return
*/
private String getPhone() {
return etPhone.getText().toString().trim();
}
/**
* 获得验证码
*
* @return
*/
private String getPwd() {
return etPwd.getText().toString().trim();
}
/**
* 清除编辑数据
*/
private void clearEditData(EditText text) {
text.setText("");
}
/**
* 登录成功回调
*
* @param share_media
* @param i
* @param map
*/
@Override
public void onComplete(SHARE_MEDIA share_media, int i, Map<String, String> map) {
if (dialog != null) {
SocializeUtils.safeCloseDialog(dialog);
}
showToast(mActivity.getString(R.string.rv_login_success));
}
/**
* 文本输入监听
*
* @param editText
*/
private void editListener(final EditText editText) {
editText.addTextChangedListener(new TextChangedListener() {
@Override
public void afterTextChanged(Editable s) {
super.afterTextChanged(s);
if (editText.getId() == R.id.et_phone) {
ivClearPhone.setVisibility(getPhone().length() > 0 ? View.VISIBLE : View.GONE);
} else if (editText.getId() == R.id.et_phone_code) {
}
// switch (editText.getId()) {
// case R.id.et_phone:
// ivClearPhone.setVisibility(getPhone().length() > 0 ? View.VISIBLE : View.GONE);
// break;
// case R.id.et_phone_code:
//
// break;
// }
if (etPhone.length() > 0 && etPwd.length() > 0) {
tvLogin.setEnabled(true);
tvLogin.setSelected(true);
} else {
tvLogin.setEnabled(false);
tvLogin.setSelected(false);
}
}
});
}
/**
* 验证码登录
*/
private void pwdLogin() {
Map<String, Object> map = new LinkedHashMap<>();
map.put("username", getPhone());
map.put("password", getPwd());
map.put("type", 1);
map.put("code", AppCookie.getStringValue( "code"));
mPresenter.postData(0, ApiConfig.HTTP_URL_PWD_LOGIN, RegisteredBean.class, map, true);
}
public class PwdLoginBean {
private String username;
private String password;
public PwdLoginBean(String username, String password) {
this.username = username;
this.password = password;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
}
package com.rv.login;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.support.annotation.NonNull;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.TextUtils;
import android.text.style.ForegroundColorSpan;
import android.util.Base64;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.ruiwenliu.wrapper.dialog.BaseDialog;
import com.ruiwenliu.wrapper.util.TransformationUtils;
import com.ruiwenliu.wrapper.util.glide.GlideOptions;
import com.rv.login.bean.VerifyDataBean;
import com.rv.login.view.VerifyImageView;
public class VerifyDialog extends BaseDialog {
public VerifyDialog(@NonNull Context context) {
super(context);
}
public VerifyDialog(@NonNull Context context, int themeResId) {
super(context, themeResId);
setDialogParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER);
}
@Override
public int getViewLayout() {
return R.layout.dialog_verfy;
}
public static class Builder {
private Context mContext;
VerifyImageView verifyView;
LinearLayout llControl;
VerifyListener listener;
TextView tvHint;
VerifyDataBean.VerifyData verifyData;
VerifyDialog dialog;
public Builder(Context context, VerifyDataBean.VerifyData verifyData) {
this.mContext = context;
this.verifyData = verifyData;
}
public void setListener(VerifyListener listener) {
this.listener = listener;
}
public void change(VerifyDataBean.VerifyData verifyData) {
this.verifyData = verifyData;
showPic();
}
public void dismiss() {
if (dialog != null) {
dialog.dismiss();
}
}
/**
* 创建定制的对话框
*/
@SuppressLint("ClickableViewAccessibility")
public VerifyDialog create() {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
dialog = new VerifyDialog(mContext, R.style.DialogActivityTheme);
// 获取对话框的布局
View layout = inflater.inflate(R.layout.dialog_verfy, null);
// 为对话框添加布局和设置大小
dialog.addContentView(layout, new WindowManager.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT));
this.verifyView = layout.findViewById(R.id.verfyview);
this.verifyView.setVerifyListenter(verifyListenter);
this.llControl = layout.findViewById(R.id.ll_control);
this.tvHint = layout.findViewById(R.id.tv_hint);
showPic();
layout.findViewById(R.id.ll_change_pic).setOnClickListener(v -> {
if (listener != null) {
listener.freshen();
}
});
layout.findViewById(R.id.tv_cancel).setOnClickListener(v -> {
if (listener != null) {
listener.cancel();
}
dialog.dismiss();
});
//默认不能点击对话框其他区域退出 和按返回键退出
dialog.setCancelable(true);
dialog.setContentView(layout);
return dialog;
}
public void showPic() {
if (this.tvHint != null && this.verifyData != null && this.verifyData.getWordList() != null && this.verifyData.getWordList().size() > 0) {
SpannableString spannableString = new SpannableString("请点击图片中的 “" + this.verifyData.getWordList().get(0) + "” 字");
spannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#f64747")), 9,10, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
this.tvHint.setText(spannableString);
}
Bitmap bitmap = stringToBitmap(this.verifyData.getOriginalImageBase64());
GlideOptions options = GlideOptions.placeholderOf(com.ruiwenliu.wrapper.R.drawable.glide_icon_placeholder).
error(com.ruiwenliu.wrapper.R.drawable.glide_icon_error);
Glide.with(mContext)
.asBitmap()
.load(bitmap)
.apply(options)
.into(new TransformationUtils(this.verifyView, transforationListener));
}
private float sy = 1.0f;
public VerifyImageView.TouchVerifyListenter verifyListenter = (x, y) -> {
if (listener != null) {
float relX = x / sy;
float relY = y / sy;
listener.verify((int) relX, (int) relY);
}
};
public Bitmap stringToBitmap(String base64Data) {
if (TextUtils.isEmpty(base64Data)) return null;
byte[] bytes = Base64.decode(base64Data, Base64.DEFAULT);
return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
}
private TransformationUtils.TransforationListener transforationListener = s -> sy = s;
}
public interface VerifyListener {
void cancel();
void verify(int x, int y);
void freshen();
}
}
package com.rv.login.bean;
import com.ruiwenliu.wrapper.base.BaseBean;
/**
* Created :Auser
* Date: 2019/5/21.
* Desc:检查手机号是否绑定第三方
*/
public class CheckLoginBean extends BaseBean {
/**
* data : {"type":1}
* message : 操作成功
*/
private DataBean data;
public DataBean getData() {
return data;
}
public void setData(DataBean data) {
this.data = data;
}
public static class DataBean {
/**
* type : 1
*/
private int type;
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
}
}
package com.rv.login.bean;
import com.ruiwenliu.wrapper.base.BaseBean;
/**
* Created :Auser
* Date: 2019/5/20.
* Desc:注册
*/
public class RegisteredBean extends BaseBean {
/**
* data : {"nickname":"XX_614105","headerurl":"https://retail.xiaochengxucms.com/images/12/2018/11/fDK7kkrmkMReK50l4r1Le740Kmra8.jpg","userid":5,"username":"13612688539"}
* message : 操作成功
* status : 200
* token : eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIxMzYxMjY4ODUzOSIsInVzZXJJZCI6IjUiLCJyZXF1ZXN0VHlwZSI6IkFQUCIsImV4cCI6MTU1ODM0Njg4Nn0.aZfsQ6ZTGkFN9p0p01ICrjAKCHNtFm5q3tA98q8aQrzXV6WylgFEioe_M4daT1TLyKTGc7vMt5-sSxTXNlaYnU7Li7ochG40rvnL8CIrvBDayVEcCRCAe0XG6J0iVR678EJqacqEROUSZOhnuw3fE44HfvI3Aek8Y4f59nnSFCI
*/
private DataBean data;
private String token;
public DataBean getData() {
return data;
}
public void setData(DataBean data) {
this.data = data;
}
public void setMessage(String message) {
this.message = message;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public static class DataBean {
/**
* nickname : XX_614105
* headerurl : https://retail.xiaochengxucms.com/images/12/2018/11/fDK7kkrmkMReK50l4r1Le740Kmra8.jpg
* userid : 5
* username : 13612688539
*/
private String nickname;
private String headerurl;
private String userId;
private String username;
private String imUserId;
private String imToken;
//实名认证状态:0-未认证,1-已认证
private String certificationStatus;
private String code ;
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getHeaderurl() {
return headerurl;
}
public void setHeaderurl(String headerurl) {
this.headerurl = headerurl;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getImUserId() {
return imUserId;
}
public void setImUserId(String imUserId) {
this.imUserId = imUserId;
}
public String getImToken() {
return imToken;
}
public void setImToken(String imToken) {
this.imToken = imToken;
}
public String getCertificationStatus() {
return certificationStatus;
}
public void setCertificationStatus(String certificationStatus) {
this.certificationStatus = certificationStatus;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}
}
package com.rv.login.bean;
import com.ruiwenliu.wrapper.base.BaseBean;
import java.util.List;
public class VerifyDataBean extends BaseBean{
private VerifyData data;
private boolean rel ;
public VerifyData getData() {
return data;
}
public void setData(VerifyData data) {
this.data = data;
}
public boolean isRel() {
return rel;
}
public void setRel(boolean rel) {
this.rel = rel;
}
public class VerifyData{
private String originalImageBase64;
private List<String> wordList;
private double width;
private double height ;
public String getOriginalImageBase64() {
return originalImageBase64;
}
public void setOriginalImageBase64(String originalImageBase64) {
this.originalImageBase64 = originalImageBase64;
}
public List<String> getWordList() {
return wordList;
}
public void setWordList(List<String> wordList) {
this.wordList = wordList;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
}
}
package com.rv.login.bean;
import com.ruiwenliu.wrapper.base.BaseBean;
public class VerifyResultBean extends BaseBean {
private boolean data;
private boolean rel ;
public boolean isData() {
return data;
}
public void setData(boolean data) {
this.data = data;
}
public boolean isRel() {
return rel;
}
public void setRel(boolean rel) {
this.rel = rel;
}
}
package com.rv.login.view;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
public class VerifyImageView extends android.support.v7.widget.AppCompatImageView {
private TouchVerifyListenter verifyListenter;
public VerifyImageView(Context context) {
super(context);
}
public VerifyImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setVerifyListenter(TouchVerifyListenter listenter) {
this.verifyListenter = listenter;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
super.onTouchEvent(event);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
int x = (int) event.getX();
int y = (int) event.getY();
if (verifyListenter != null) {
verifyListenter.verify(x, y);
}
break;
}
return true;
}
public interface TouchVerifyListenter {
void verify(int x, int y);
}
}
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/rv_pwd_watch" android:state_selected="true"/>
<item android:drawable="@drawable/rv_pwd_watch_no" android:state_selected="false"/>
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/size_25"
android:layout_marginBottom="@dimen/size_25"
android:layout_marginLeft="@dimen/size_25"
android:layout_marginRight="@dimen/size_25"
android:background="@color/white"
android:gravity="center_horizontal"
android:orientation="vertical">
<TextView
android:layout_marginLeft="@dimen/size_15"
android:layout_marginRight="@dimen/size_15"
android:layout_marginTop="@dimen/size_20"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="注册协议及隐私政策"
android:textColor="#323232"
android:textSize="@dimen/sp_16" />
<TextView
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"
android:id="@+id/tv_tips_content"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="@dimen/size_20"
android:layout_weight="1"
android:gravity="left"
android:text=" 在您注册成为滴房车用户的过程中,您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议,请您务必仔细阅读、充分理解协议中的条款内容后再点击同意(尤其是以粗体并下划线标识的条款,因为这些条款可能会明确您应履行的义务或对您的权利有所限制):\n\n
《用户协议》\n
《隐私政策》\n\n
【请您注意】如果您不同意以上协议或其中任何条款约定、请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们产品或服务。如您按照注册流程提示填写信息、阅读并点击同意上述协议且完成全部注册流程后,即表示您已充分阅读、理解并接受协议的全部内容;并表明您也同意滴房车可以依据以上的隐私政策内容来处理您的个人信息。如您对以上协议内容有任何疑问,您可随时与滴房车客服联系。
\n\n\n
点击同意即表示您已阅读并同意《用户协议》《隐私政策》"
android:singleLine="false"
android:textColor="#666666"
android:textSize="14sp" />
<View
android:layout_marginTop="@dimen/size_20"
android:layout_width="match_parent"
android:layout_height="1px"
android:background="@color/colorYellow"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/size_50"
android:orientation="horizontal">
<Button
android:textSize="@dimen/size_16"
android:background="@color/white"
android:text="不同意"
android:gravity="center"
android:id="@+id/btn_disagree"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent" />
<Button
android:textSize="@dimen/size_16"
android:textColor="@color/white"
android:text="同意"
android:background="#FF9900"
android:gravity="center"
android:id="@+id/btn_agree"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
android:paddingLeft="@dimen/size_20"
android:paddingRight="@dimen/size_20">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="@dimen/size_5">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!--<com.rv.login.view.TouchVerifyView-->
<!--android:id="@+id/verfyview"-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="wrap_content" />-->
<com.rv.login.view.VerifyImageView
android:id="@+id/verfyview"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/tv_hint"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_40"
android:background="@color/white"
android:gravity="center"
android:textColor="@color/textGray"
android:textSize="@dimen/sp_14" />
</LinearLayout>
</android.support.v7.widget.CardView>
<LinearLayout
android:id="@+id/ll_control"
android:layout_width="match_parent"
android:layout_height="43dp"
android:layout_marginTop="@dimen/dp_10"
android:background="@drawable/shape_rv_button_white"
android:gravity="center_vertical"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/ll_change_pic"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:orientation="horizontal">
<ImageView
android:layout_width="@dimen/size_25"
android:layout_height="@dimen/size_25"
android:src="@drawable/icon_change_verify_code" />
<TextView
android:id="@+id/tv_change"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/size_3"
android:gravity="center"
android:text="换张图片"
android:textColor="@color/colorMain"
android:textSize="@dimen/sp_16" />
</LinearLayout>
<View
android:layout_width="1px"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/size_5"
android:layout_marginBottom="@dimen/size_5"
android:background="@color/colorLine" />
<TextView
android:id="@+id/tv_cancel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:drawablePadding="@dimen/dp_10"
android:gravity="center"
android:text="取消"
android:textColor="@color/colorMain"
android:textSize="@dimen/sp_16" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.rv.login.BingPhoneActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/size_50"
android:layout_marginLeft="@dimen/size_20"
android:layout_marginTop="@dimen/size_30"
android:layout_marginRight="@dimen/size_20"
android:background="@drawable/shape_rv_input"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/dp_10"
android:text="*"
android:textColor="@color/colorAuxiliaryRed"
android:textSize="@dimen/text_14"
android:visibility="visible" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:text="手机号"
android:textColor="@color/text_Main"
android:textSize="@dimen/text_16" />
<EditText
android:id="@+id/et_phone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/size_15"
android:layout_weight="1"
android:background="@null"
android:gravity="center_vertical"
android:hint="@string/rv_phone_hint"
android:inputType="phone"
android:maxLength="11"
android:maxLines="1"
android:textColorHint="@color/colorGray"
android:textSize="@dimen/text_16" />
<ImageView
android:id="@+id/iv_clear_phone"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:padding="@dimen/size_15"
android:src="@drawable/comment_publisher_clear"
android:visibility="gone" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/size_50"
android:layout_marginLeft="@dimen/size_20"
android:layout_marginTop="13dp"
android:layout_marginRight="@dimen/size_20"
android:background="@drawable/shape_rv_input"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/dp_10"
android:text="*"
android:textColor="@color/colorAuxiliaryRed"
android:textSize="@dimen/text_14"
android:visibility="visible" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:text="验证码"
android:textColor="@color/text_Main"
android:textSize="@dimen/text_16" />
<EditText
android:id="@+id/et_phone_code"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/size_15"
android:layout_weight="1"
android:background="@null"
android:gravity="center_vertical"
android:hint="@string/rv_phone_code"
android:inputType="number"
android:maxLength="6"
android:maxLines="1"
android:textColorHint="@color/colorGray"
android:textSize="@dimen/text_16" />
<ImageView
android:id="@+id/iv_clear_code"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:padding="@dimen/size_15"
android:src="@drawable/comment_publisher_clear"
android:visibility="gone" />
<View
android:layout_marginBottom="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_10"
android:layout_width="@dimen/size_half"
android:layout_height="wrap_content"
android:background="@color/textGray" />
<TextView
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"
android:id="@+id/tv_get_code"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:gravity="center"
android:text="@string/rv_get_code"
android:textColor="@color/text_Main"
android:textSize="@dimen/text_16" />
</LinearLayout>
<TextView
android:id="@+id/tv_bind"
android:layout_width="match_parent"
android:layout_height="@dimen/size_50"
android:layout_marginLeft="@dimen/size_30"
android:layout_marginTop="27dp"
android:layout_marginRight="@dimen/size_30"
android:background="@drawable/selector_rv_button"
android:enabled="false"
android:gravity="center"
android:text="@string/rv_bind"
android:textColor="@color/colorWrite"
android:textSize="@dimen/size_16" />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.rv.login.ConfirmPwdActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/size_50"
android:layout_marginLeft="@dimen/size_20"
android:layout_marginTop="@dimen/size_30"
android:layout_marginRight="@dimen/size_20"
android:background="@drawable/shape_rv_input"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/dp_10"
android:text="*"
android:textColor="@color/colorAuxiliaryRed"
android:textSize="@dimen/text_14"
android:visibility="visible" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:text="密码 "
android:textColor="@color/text_Main"
android:textSize="@dimen/text_16" />
<EditText
android:id="@+id/et_pwd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="13dp"
android:layout_weight="1"
android:background="@null"
android:gravity="center_vertical"
android:hint="@string/rv_pwd_hint"
android:inputType="textPassword"
android:maxLength="16"
android:maxLines="1"
android:textColorHint="@color/colorGray"
android:textSize="@dimen/text_16" />
<ImageView
android:id="@+id/iv_clear_pwd"
android:layout_width="41dp"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/dp_10"
android:paddingTop="@dimen/dp_10"
android:paddingRight="@dimen/size_18"
android:paddingBottom="@dimen/dp_10"
android:src="@drawable/selector_rv_pwd" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/size_50"
android:layout_marginLeft="@dimen/size_20"
android:layout_marginTop="13dp"
android:layout_marginRight="@dimen/size_20"
android:background="@drawable/shape_rv_input"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/dp_10"
android:text="*"
android:textColor="@color/colorAuxiliaryRed"
android:textSize="@dimen/text_14"
android:visibility="invisible" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:text="邀请码"
android:textColor="@color/text_Main"
android:textSize="@dimen/text_16" />
<EditText
android:digits="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
android:id="@+id/et_invite_code"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="13dp"
android:layout_weight="1"
android:background="@null"
android:gravity="center_vertical"
android:hint="请输入邀请码(选填)"
android:maxLength="16"
android:maxLines="1"
android:textColorHint="@color/colorGray"
android:textSize="@dimen/text_16" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/size_20"
android:layout_marginTop="13dp"
android:layout_marginRight="@dimen/size_20"
android:gravity="center_vertical"
android:orientation="horizontal">
<CheckBox
android:id="@+id/cb_annotations"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/textGray"
android:textSize="@dimen/text_14" />
<TextView
android:id="@+id/tv_agreement"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/textGray"
android:textSize="@dimen/text_14" />
</LinearLayout>
<TextView
android:id="@+id/tv_registered"
android:layout_width="match_parent"
android:layout_height="@dimen/size_50"
android:layout_marginLeft="@dimen/size_30"
android:layout_marginTop="27dp"
android:layout_marginRight="@dimen/size_30"
android:background="@drawable/selector_rv_button"
android:enabled="false"
android:gravity="center"
android:text="@string/rv_registered"
android:textColor="@color/colorWrite"
android:textSize="@dimen/size_16" />
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
tools:context="com.rv.login.LoginRvActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/size_50"
android:layout_marginLeft="@dimen/size_30"
android:layout_marginRight="@dimen/size_30"
android:layout_marginTop="@dimen/size_50"
android:background="@drawable/shape_rv_input"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/size_15"
android:textColor="@color/text_Main"
android:text="@string/rv_phone_type"
android:textSize="@dimen/text_16" />
<View
android:layout_width="@dimen/size_half"
android:layout_height="@dimen/size_30"
android:layout_marginLeft="@dimen/size_8"
android:background="@color/colorMain" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:layout_marginLeft="@dimen/size_15"
android:gravity="center_vertical"
android:hint="@string/rv_phone_hint"
android:maxLength="11"
android:inputType="number"
android:id="@+id/et_phone"
android:layout_weight="1"
android:maxLines="1"
android:textColorHint="@color/colorGray"
android:textSize="@dimen/text_16" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/iv_clear_phone"
android:visibility="gone"
android:padding="@dimen/size_15"
android:src="@drawable/comment_publisher_clear"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/size_50"
android:layout_marginLeft="@dimen/size_30"
android:layout_marginRight="@dimen/size_30"
android:layout_marginTop="@dimen/size_30"
android:background="@drawable/shape_rv_input"
android:gravity="center_vertical"
android:orientation="horizontal">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:layout_marginLeft="@dimen/size_15"
android:gravity="center_vertical"
android:hint="@string/rv_phone_code"
android:maxLength="6"
android:id="@+id/et_phone_code"
android:inputType="number"
android:layout_weight="1"
android:maxLines="1"
android:textColorHint="@color/colorGray"
android:textSize="@dimen/text_16" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/iv_clear_code"
android:padding="@dimen/size_15"
android:visibility="gone"
android:src="@drawable/comment_publisher_clear" />
<View
android:layout_width="@dimen/size_half"
android:layout_height="@dimen/size_30"
android:layout_marginRight="@dimen/size_8"
android:background="@color/colorMain" />
<TextView
android:layout_width="@dimen/size_100"
android:layout_height="match_parent"
android:id="@+id/tv_get_code"
android:layout_centerVertical="true"
android:gravity="center"
android:text="@string/rv_get_code"
android:textColor="@color/text_Main"
android:textSize="@dimen/text_16" />
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_marginLeft="@dimen/size_30"
android:layout_marginRight="@dimen/size_30"
android:layout_height="@dimen/size_50"
android:textColor="@color/colorWrite"
android:text="@string/rv_login"
android:textSize="@dimen/size_16"
android:id="@+id/tv_login"
android:gravity="center"
android:enabled="false"
android:background="@drawable/selector_rv_button"
android:layout_marginTop="@dimen/size_40"
/>
<LinearLayout
android:layout_marginLeft="@dimen/size_30"
android:layout_marginRight="@dimen/size_30"
android:orientation="horizontal"
android:layout_marginTop="@dimen/size_20"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="@dimen/text_16"
android:layout_weight="1"
android:text="@string/rv_pwd_login"
android:textColor="@color/textMain"
android:id="@+id/tv_pwd_login"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/text_14"
android:text="@string/rv_login_toast"
android:textColor="@color/colorGray"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/text_16"
android:text="@string/rv_registered_toast"
android:textColor="@color/colorAuxiliaryYellow"
android:id="@+id/tv_registered"
/>
</LinearLayout>
<LinearLayout
android:layout_marginLeft="@dimen/size_30"
android:layout_marginRight="@dimen/size_30"
android:layout_marginTop="@dimen/size_100"
android:orientation="horizontal"
android:layout_width="match_parent"
android:gravity="center_vertical"
android:layout_height="wrap_content">
<View
android:layout_width="match_parent"
android:layout_height="@dimen/size_half"
android:layout_weight="1"
android:background="@color/colorGray"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/text_16"
android:textColor="@color/colorGray"
android:text="@string/rv_other_login"
/>
<View
android:layout_width="match_parent"
android:layout_height="@dimen/size_half"
android:layout_weight="1"
android:background="@color/colorGray"
/>
</LinearLayout>
<LinearLayout
android:layout_marginLeft="@dimen/size_45"
android:layout_marginRight="@dimen/size_45"
android:layout_marginTop="@dimen/size_20"
android:orientation="horizontal"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:adjustViewBounds="true"
android:id="@+id/iv_weixin"
android:layout_marginRight="@dimen/size_15"
android:src="@drawable/umeng_socialize_wechat"
android:layout_width="@dimen/size_60"
android:layout_height="@dimen/size_60" />
<ImageView
android:adjustViewBounds="true"
android:id="@+id/iv_qq"
android:layout_marginLeft="@dimen/size_15"
android:src="@drawable/umeng_socialize_qq"
android:layout_width="@dimen/size_60"
android:layout_height="@dimen/size_60" />
</LinearLayout>
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
tools:context="com.rv.login.LoginRvActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/size_50"
android:layout_marginLeft="@dimen/size_30"
android:layout_marginRight="@dimen/size_30"
android:layout_marginTop="@dimen/size_50"
android:background="@drawable/shape_rv_input"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/size_15"
android:textColor="@color/text_Main"
android:text="@string/rv_phone_type"
android:textSize="@dimen/text_16" />
<View
android:layout_width="@dimen/size_half"
android:layout_height="@dimen/size_30"
android:layout_marginLeft="@dimen/size_8"
android:background="@color/colorMain" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:layout_marginLeft="@dimen/size_15"
android:gravity="center_vertical"
android:hint="@string/rv_phone_hint"
android:maxLength="11"
android:inputType="number"
android:id="@+id/et_phone"
android:layout_weight="1"
android:maxLines="1"
android:textColorHint="@color/colorGray"
android:textSize="@dimen/text_16" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/iv_clear_phone"
android:visibility="gone"
android:padding="@dimen/size_15"
android:src="@drawable/comment_publisher_clear"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/size_50"
android:layout_marginLeft="@dimen/size_30"
android:layout_marginRight="@dimen/size_30"
android:layout_marginTop="@dimen/size_30"
android:background="@drawable/shape_rv_input"
android:gravity="center_vertical"
android:orientation="horizontal">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:layout_marginLeft="@dimen/size_15"
android:gravity="center_vertical"
android:hint="@string/rv_pwd_hint"
android:maxLength="16"
android:id="@+id/et_pwd"
android:layout_weight="1"
android:inputType="textPassword"
android:maxLines="1"
android:textColorHint="@color/colorGray"
android:textSize="@dimen/text_16" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/iv_clear_pwd"
android:padding="@dimen/size_15"
android:src="@drawable/selector_rv_pwd"
/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/size_10"
android:layout_gravity="right"
android:textColor="@color/colorGray"
android:id="@+id/tv_forget_pwd"
android:layout_marginRight="@dimen/size_35"
android:text="@string/rv_forget_pwd"
/>
<TextView
android:layout_width="match_parent"
android:layout_marginLeft="@dimen/size_30"
android:layout_marginRight="@dimen/size_30"
android:layout_height="@dimen/size_50"
android:textColor="@color/colorWrite"
android:text="@string/rv_login"
android:textSize="@dimen/size_16"
android:id="@+id/tv_login"
android:gravity="center"
android:enabled="false"
android:background="@drawable/selector_rv_button"
android:layout_marginTop="@dimen/size_30"
/>
<LinearLayout
android:layout_marginLeft="@dimen/size_30"
android:layout_marginRight="@dimen/size_30"
android:orientation="horizontal"
android:layout_marginTop="@dimen/size_20"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="@dimen/text_16"
android:layout_weight="1"
android:text="@string/rv_phone_login"
android:textColor="@color/textMain"
android:id="@+id/tv_phone_login"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/text_14"
android:text="@string/rv_login_toast"
android:textColor="@color/colorGray"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/text_16"
android:text="@string/rv_registered_toast"
android:textColor="@color/colorAuxiliaryYellow"
android:id="@+id/tv_registered"
/>
</LinearLayout>
<LinearLayout
android:visibility="gone"
android:layout_marginLeft="@dimen/size_30"
android:layout_marginRight="@dimen/size_30"
android:layout_marginTop="@dimen/size_100"
android:orientation="horizontal"
android:layout_width="match_parent"
android:gravity="center_vertical"
android:layout_height="wrap_content">
<View
android:layout_width="match_parent"
android:layout_height="@dimen/size_half"
android:layout_weight="1"
android:background="@color/colorGray"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/text_16"
android:textColor="@color/colorGray"
android:text="@string/rv_other_login"
/>
<View
android:layout_width="match_parent"
android:layout_height="@dimen/size_half"
android:layout_weight="1"
android:background="@color/colorGray"
/>
</LinearLayout>
<LinearLayout
android:visibility="gone"
android:layout_marginLeft="@dimen/size_45"
android:layout_marginRight="@dimen/size_45"
android:layout_marginTop="@dimen/size_20"
android:orientation="horizontal"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:adjustViewBounds="true"
android:id="@+id/iv_weixin"
android:layout_marginRight="@dimen/size_15"
android:src="@drawable/umeng_socialize_wechat"
android:layout_width="@dimen/size_60"
android:layout_height="@dimen/size_60" />
<ImageView
android:adjustViewBounds="true"
android:id="@+id/iv_qq"
android:layout_marginLeft="@dimen/size_15"
android:src="@drawable/umeng_socialize_qq"
android:layout_width="@dimen/size_60"
android:layout_height="@dimen/size_60" />
</LinearLayout>
</LinearLayout>
This diff is collapsed.
<resources>
<string name="app_name">plugin_login</string>
<string name="rv_phone_login">手机登录</string>
<string name="rv_phone_hint">请输入11数字的手机号码</string>
<string name="rv_phone_code">请输入短信验证码</string>
<string name="rv_phone_type">+86</string>
<string name="rv_get_code">获取验证码</string>
<string name="rv_login">登录</string>
<string name="rv_pwd_login">密码登录</string>
<string name="rv_login_toast">还没有注册帐号?</string>
<string name="rv_registered_toast">立即注册</string>
<string name="rv_other_login">第三方帐户登录</string>
<string name="rv_login_rest">重新获取</string>
<string name="rv_login_authorization_failure">第三方登录失败</string>
<string name="rv_login_success">登录成功</string>
<string name="rv_pwd_hint">至少8位数字或字母</string>
<string name="rv_pwd_again_hint">请再次输入密码</string>
<string name="rv_registered">注册</string>
<string name="rv_registered_annotations">注册即表示同意滴房车</string>
<string name="rv_registered_agreement">《用户协议》</string>
<string name="rv_phone_registered">手机注册</string>
<string name="rv_phone_bind">绑定手机</string>
<string name="rv_bind">绑定</string>
<string name="rv_phone_code_toast">验证码发送成功</string>
<string name="rv_edit_pwd">设置密码</string>
<string name="rv_pwd_length">密码长度不能小于8位</string>
<string name="rv_confirm_agreement">请确定App协议</string>
<string name="rv_forget_pwd">忘记密码</string>
<string name="rv_reset_pwd">重置密码</string>
</resources>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment