Files
Android-WaterProject/app/src/main/java/com/ckkj/water/login/LoginActivity.java
fengjignqi d8d546c90a 优化
2026-07-04 10:47:05 +08:00

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