399 lines
15 KiB
Java
399 lines
15 KiB
Java
package com.ckkj.water.login;
|
|
|
|
|
|
import static android.view.View.GONE;
|
|
import static android.view.View.INVISIBLE;
|
|
import static android.view.View.VISIBLE;
|
|
|
|
import android.graphics.Color;
|
|
import android.graphics.Typeface;
|
|
import android.os.Bundle;
|
|
import android.os.CountDownTimer;
|
|
import android.os.Handler;
|
|
import android.text.SpannableString;
|
|
import android.text.Spanned;
|
|
import android.text.TextPaint;
|
|
import android.text.TextUtils;
|
|
import android.text.method.LinkMovementMethod;
|
|
import android.text.style.ClickableSpan;
|
|
import android.view.View;
|
|
import android.widget.TextView;
|
|
|
|
import androidx.annotation.NonNull;
|
|
import androidx.core.content.ContextCompat;
|
|
|
|
import com.ckkj.water.utils.manager.LanguageManager;
|
|
import com.google.gson.Gson;
|
|
import com.gyf.immersionbar.ImmersionBar;
|
|
import com.ckkj.water.AppConfig;
|
|
import com.ckkj.water.ConstantUtil;
|
|
import com.ckkj.water.R;
|
|
import com.ckkj.water.base.BaseActivity;
|
|
import com.ckkj.water.databinding.LoginLayoutBinding;
|
|
import com.ckkj.water.login.entity.LoginEntity;
|
|
import com.ckkj.water.login.mvp.LoginContract;
|
|
import com.ckkj.water.login.mvp.LoginImpl;
|
|
import com.ckkj.water.login.mvp.LoginPresenter;
|
|
import com.ckkj.water.main.activity.MainActivity;
|
|
import com.ckkj.water.network.BaseBean;
|
|
import com.ckkj.water.utils.click.ClickUtil;
|
|
import com.ckkj.water.utils.dataUtil.SharePreUtil;
|
|
import com.ckkj.water.utils.manager.WaterUserInfoManager;
|
|
import com.ckkj.water.utils.number.PhoneNumberUtils;
|
|
import com.ckkj.water.utils.show.ToastUtil;
|
|
import com.lxj.xpopup.XPopup;
|
|
import com.lxj.xpopup.interfaces.OnSelectListener;
|
|
|
|
|
|
public class LoginActivity extends BaseActivity<LoginLayoutBinding, LoginPresenter>
|
|
implements LoginContract.LoginView {
|
|
|
|
private boolean mYinsiConfirm = false;
|
|
//当前登录方式 验证码100 密码 200
|
|
private static int LOGIN_TYPE_STATUS_CODE = 100;
|
|
|
|
@Override
|
|
public LoginPresenter createPresenter() {
|
|
return new LoginPresenter(new LoginImpl());
|
|
}
|
|
|
|
@Override
|
|
public void initData(Bundle savedInstanceState) {
|
|
super.initData(savedInstanceState);
|
|
|
|
ImmersionBar.with(this)
|
|
.statusBarColor(R.color.white)
|
|
.statusBarDarkFont(true)
|
|
.init();
|
|
|
|
setupAgreementText();
|
|
|
|
initListener();
|
|
}
|
|
|
|
private void initListener() {
|
|
setClick(viewBinding.tabCode);
|
|
setClick(viewBinding.tabPsd);
|
|
setClick(viewBinding.tvGetVerifiCode);
|
|
setClick(viewBinding.tvLogin);
|
|
setClick(viewBinding.tvGoRegister);
|
|
setClick(viewBinding.tvLanguage);
|
|
setClick(viewBinding.tvResetPsd);
|
|
setClick(viewBinding.checkboxRead);
|
|
setClick(viewBinding.btn133);
|
|
setClick(viewBinding.btn151);
|
|
}
|
|
|
|
private void setClick(View view) {
|
|
view.setOnClickListener(this::onClick);
|
|
}
|
|
|
|
private void setupAgreementText() {
|
|
|
|
ClickUtil.addClickPart(viewBinding.checkboxRead, 100);
|
|
|
|
TextView tvAgreement = findViewById(R.id.tv_agreement_full);
|
|
|
|
String content = getString(R.string.agree_user_policy);
|
|
|
|
String userAgreementText = getString(R.string.user_agreement);
|
|
String privacyPolicyText = getString(R.string.privacy_policy);
|
|
|
|
SpannableString spannableString = new SpannableString(content);
|
|
|
|
addClickableSpan(
|
|
spannableString,
|
|
content,
|
|
userAgreementText,
|
|
() -> {
|
|
ToastUtil.showShort(mContext, "用户协议");
|
|
}
|
|
);
|
|
|
|
addClickableSpan(
|
|
spannableString,
|
|
content,
|
|
privacyPolicyText,
|
|
() -> {
|
|
ToastUtil.showShort(mContext, "隐私政策");
|
|
}
|
|
);
|
|
|
|
tvAgreement.setText(spannableString);
|
|
tvAgreement.setMovementMethod(LinkMovementMethod.getInstance());
|
|
tvAgreement.setHighlightColor(Color.TRANSPARENT);
|
|
}
|
|
|
|
private void addClickableSpan(
|
|
SpannableString spannableString,
|
|
String content,
|
|
String target,
|
|
Runnable action) {
|
|
|
|
int start = content.indexOf(target);
|
|
|
|
if (start < 0) {
|
|
return;
|
|
}
|
|
|
|
int end = start + target.length();
|
|
|
|
ClickableSpan clickableSpan = new ClickableSpan() {
|
|
|
|
@Override
|
|
public void onClick(@NonNull View widget) {
|
|
action.run();
|
|
}
|
|
|
|
@Override
|
|
public void updateDrawState(@NonNull TextPaint ds) {
|
|
super.updateDrawState(ds);
|
|
|
|
ds.setColor(
|
|
ContextCompat.getColor(
|
|
mContext,
|
|
R.color.color_zhu
|
|
)
|
|
);
|
|
|
|
ds.setUnderlineText(false);
|
|
}
|
|
};
|
|
|
|
spannableString.setSpan(
|
|
clickableSpan,
|
|
start,
|
|
end,
|
|
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
|
|
);
|
|
}
|
|
|
|
public void onClick(View v) {
|
|
switch (v.getId()) {
|
|
|
|
case R.id.btn_133:
|
|
showLoadingDialog();
|
|
mPresenter.loginBySmsCode("password",
|
|
"13305376054",
|
|
"",
|
|
"000000");
|
|
break;
|
|
case R.id.btn_151:
|
|
showLoadingDialog();
|
|
mPresenter.loginBySmsCode("password",
|
|
"15192412330",
|
|
"",
|
|
"000000");
|
|
break;
|
|
|
|
case R.id.checkbox_read:
|
|
if(mYinsiConfirm){
|
|
mYinsiConfirm = false;
|
|
viewBinding.checkboxRead.setChecked(false);
|
|
}else{
|
|
mYinsiConfirm = true;
|
|
viewBinding.checkboxRead.setChecked(true);
|
|
}
|
|
break;
|
|
|
|
case R.id.tv_go_register:
|
|
goTo(mContext, RegisterActivity.class,null);
|
|
break;
|
|
|
|
case R.id.tab_code://验证码登录
|
|
LOGIN_TYPE_STATUS_CODE = 100;
|
|
viewBinding.tvLoginByCode.setTextColor(mContext.getResources().getColor(R.color.color_222222));
|
|
viewBinding.tvLoginByCode.setTypeface(Typeface.DEFAULT_BOLD);
|
|
viewBinding.viewLineCode.setVisibility(VISIBLE);
|
|
|
|
viewBinding.tvLoginByPsd.setTextColor(mContext.getResources().getColor(R.color.color_999999));
|
|
viewBinding.tvLoginByPsd.setTypeface(Typeface.DEFAULT);
|
|
viewBinding.viewLinePsd.setVisibility(INVISIBLE);
|
|
|
|
viewBinding.linearVerfiCode.setVisibility(VISIBLE);
|
|
viewBinding.linearPsd.setVisibility(GONE);
|
|
viewBinding.tvResetPsd.setVisibility(GONE);
|
|
break;
|
|
|
|
case R.id.tab_psd://密码登录
|
|
LOGIN_TYPE_STATUS_CODE = 200;
|
|
viewBinding.tvLoginByPsd.setTextColor(mContext.getResources().getColor(R.color.color_222222));
|
|
viewBinding.tvLoginByPsd.setTypeface(Typeface.DEFAULT_BOLD);
|
|
viewBinding.viewLinePsd.setVisibility(VISIBLE);
|
|
|
|
viewBinding.tvLoginByCode.setTextColor(mContext.getResources().getColor(R.color.color_999999));
|
|
viewBinding.tvLoginByCode.setTypeface(Typeface.DEFAULT);
|
|
viewBinding.viewLineCode.setVisibility(INVISIBLE);
|
|
|
|
viewBinding.linearVerfiCode.setVisibility(GONE);
|
|
viewBinding.linearPsd.setVisibility(VISIBLE);
|
|
viewBinding.tvResetPsd.setVisibility(VISIBLE);
|
|
break;
|
|
|
|
case R.id.tv_get_verifi_code:
|
|
if (TextUtils.isEmpty(viewBinding.etAccount.getText().toString())) {
|
|
ToastUtil.showShort(mContext, getString(R.string.login_error_phone_empty));
|
|
return;
|
|
}
|
|
if (!PhoneNumberUtils.checkPhoneNum(viewBinding.etAccount.getText().toString().trim()) &&
|
|
!PhoneNumberUtils.checkEmail(viewBinding.etAccount.getText().toString().trim())) {
|
|
ToastUtil.showShort(mContext, getString(R.string.login_error_phone_invalid));
|
|
return;
|
|
}
|
|
// cdTimer.start();
|
|
showLoadingDialog();
|
|
//发送短信
|
|
mPresenter.getPhoneCode(viewBinding.etAccount.getText().toString(),"");
|
|
break;
|
|
|
|
case R.id.tv_language:
|
|
new XPopup.Builder(mContext)
|
|
.isDestroyOnDismiss(true)
|
|
.dismissOnBackPressed(true)
|
|
.dismissOnTouchOutside(true)
|
|
.asBottomList(
|
|
getString(R.string.change_language),
|
|
LanguageManager.getLanguageDisplayNames(mContext),
|
|
LanguageManager.getLanguageIcons(),
|
|
LanguageManager.getCurrentLanguageIndex(),
|
|
new OnSelectListener() {
|
|
@Override
|
|
public void onSelect(int position, String text) {
|
|
LanguageManager.switchLanguageByIndex(position, LoginActivity.this);
|
|
}
|
|
},
|
|
R.layout.select_language_layout,
|
|
R.layout.select_language_item
|
|
).show();
|
|
break;
|
|
|
|
case R.id.tv_reset_psd ://重置密码
|
|
goTo(mContext, ForgetPasswordActivity.class,null);
|
|
break;
|
|
|
|
// case R.id.checkbox_read:
|
|
// if (mYinsiConfirm) {
|
|
// mYinsiConfirm = false;
|
|
// viewBinding.checkboxRead.setChecked(false);
|
|
// } else {
|
|
// mYinsiConfirm = true;
|
|
// viewBinding.checkboxRead.setChecked(true);
|
|
// }
|
|
// break;
|
|
case R.id.tv_login:
|
|
if (TextUtils.isEmpty(viewBinding.etAccount.getText().toString())) {
|
|
ToastUtil.showShort(mContext, getString(R.string.login_error_phone_empty));
|
|
return;
|
|
}
|
|
if (!PhoneNumberUtils.checkPhoneNum(viewBinding.etAccount.getText().toString().trim()) &&
|
|
!PhoneNumberUtils.checkEmail(viewBinding.etAccount.getText().toString().trim())) {
|
|
ToastUtil.showShort(mContext, getString(R.string.login_error_phone_invalid));
|
|
return;
|
|
}
|
|
String loginType = "sms";
|
|
if(LOGIN_TYPE_STATUS_CODE == 100){//验证码登录
|
|
loginType = "sms";
|
|
if (TextUtils.isEmpty(viewBinding.edCodeInput.getText().toString())) {
|
|
ToastUtil.showShort(mContext, getString(R.string.login_error_code_empty));
|
|
return;
|
|
}
|
|
if (viewBinding.edCodeInput.getText().toString().trim().length() < 6) {
|
|
ToastUtil.showShort(mContext, getString(R.string.login_error_code_invalid));
|
|
return;
|
|
}
|
|
}else{//密码登录
|
|
loginType = "password";
|
|
if (TextUtils.isEmpty(viewBinding.etInputPsd.getText().toString())) {
|
|
ToastUtil.showShort(mContext, getString(R.string.login_error_psd_empty));
|
|
return;
|
|
}
|
|
}
|
|
|
|
// if (!mYinsiConfirm) {
|
|
// ToastUtil.showShort(mContext, getString(R.string.login_error_agreement));
|
|
// return;
|
|
// }
|
|
|
|
showLoadingDialog();
|
|
mPresenter.loginBySmsCode(loginType,
|
|
viewBinding.etAccount.getText().toString().trim(),
|
|
viewBinding.edCodeInput.getText().toString().trim(),
|
|
viewBinding.etInputPsd.getText().toString());
|
|
// new Handler().postDelayed(() -> hideDialogLoading(), 1000);
|
|
break;
|
|
|
|
|
|
}
|
|
}
|
|
|
|
private CountDownTimer cdTimer = new CountDownTimer(6000, 1000) {
|
|
@Override
|
|
public void onTick(long millisUntilFinished) {
|
|
viewBinding.tvGetVerifiCode.setText("(" + millisUntilFinished / 1000 + ") " + getString(R.string.login_resend));
|
|
viewBinding.tvGetVerifiCode.setSelected(true);
|
|
viewBinding.tvGetVerifiCode.setClickable(false);
|
|
viewBinding.tvGetVerifiCode.setTextColor(mContext.getColor(R.color.color_c8c8c8));
|
|
viewBinding.tvGetVerifiCode.setBackground(mContext.getResources().getDrawable(R.drawable.shape_gray_50));
|
|
}
|
|
|
|
@Override
|
|
public void onFinish() {
|
|
viewBinding.tvGetVerifiCode.setText(getString(R.string.login_resend));
|
|
viewBinding.tvGetVerifiCode.setSelected(false);
|
|
viewBinding.tvGetVerifiCode.setClickable(true);
|
|
viewBinding.tvGetVerifiCode.setTextColor(mContext.getColor(R.color.white));
|
|
viewBinding.tvGetVerifiCode.setBackground(mContext.getResources().getDrawable(R.drawable.shape_green_50));
|
|
}
|
|
};
|
|
|
|
@Override
|
|
public void registerSuccess(BaseBean bean) {
|
|
|
|
}
|
|
|
|
@Override
|
|
public void getPhoneCodeSuccess(BaseBean bean) {
|
|
hideDialogLoading();
|
|
ToastUtil.showLong(mContext, getString(R.string.login_code_sent) + ":" + bean.getDataString());
|
|
// cdTimer.start();
|
|
}
|
|
|
|
@Override
|
|
public void loginBySmsCodeSuccess(LoginEntity entity) {
|
|
hideDialogLoading();
|
|
ToastUtil.showShort(mContext, getString(R.string.login_success));
|
|
SharePreUtil.putBoolean(ConstantUtil.SHARE_PRE_NAME, mContext, ConstantUtil.USER_LOGIN, true);
|
|
SharePreUtil.putString(ConstantUtil.SHARE_PRE_NAME, mContext, ConstantUtil.USER_TOKEN, entity.getAccess_token());
|
|
WaterUserInfoManager.getInstance().setEntity(entity);
|
|
// Gson gson = new Gson();
|
|
// String userInfoJson = gson.toJson(entity);
|
|
// SharePreUtil.putString(ConstantUtil.SHARE_PRE_NAME, mContext, ConstantUtil.USER_INFO_JSON_CONTENT, userInfoJson);
|
|
AppConfig.USER_LOGIN = true;
|
|
AppConfig.USER_TOKEN = entity.getAccess_token();
|
|
new Handler().postDelayed(() -> {
|
|
goTo(mContext, MainActivity.class, null);
|
|
finish();
|
|
}, 200);
|
|
}
|
|
|
|
@Override
|
|
public void updateUserPasswordSuccess(BaseBean bean) {
|
|
|
|
}
|
|
|
|
@Override
|
|
public int getLayoutResId(Bundle savedInstanceState) {
|
|
return 0;
|
|
}
|
|
|
|
@Override
|
|
public void showError(String message) {
|
|
hideDialogLoading();
|
|
ToastUtil.showShort(mContext, message);
|
|
}
|
|
|
|
@Override
|
|
public void logOut(BaseBean bean) {
|
|
}
|
|
}
|