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