package com.hdl.photovoltaic.ui.account; import android.os.Bundle; import android.os.CountDownTimer; import android.text.Editable; import android.text.InputType; import android.text.SpannableStringBuilder; import android.text.TextPaint; import android.text.TextUtils; import android.text.TextWatcher; import android.text.method.HideReturnsTransformationMethod; import android.text.method.PasswordTransformationMethod; import android.text.style.ClickableSpan; import android.view.View; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.content.res.AppCompatResources; import com.hdl.linkpm.sdk.core.exception.HDLException; import com.hdl.linkpm.sdk.user.HDLLinkPMUser; import com.hdl.linkpm.sdk.user.bean.HDLUserRegionBean; import com.hdl.photovoltaic.R; import com.hdl.photovoltaic.base.CustomBaseActivity; import com.hdl.photovoltaic.config.AppConfigManage; import com.hdl.photovoltaic.config.UserConfigManage; import com.hdl.photovoltaic.databinding.ActivityChangePasswordBinding; import com.hdl.photovoltaic.listener.CloudCallBeak; import com.hdl.photovoltaic.other.HdlAccountLogic; import com.hdl.photovoltaic.other.HdlCommonLogic; import com.hdl.photovoltaic.other.HdlThreadLogic; import com.hdl.photovoltaic.widget.ConfirmationCancelDialog; import com.hdl.photovoltaic.widget.ConfirmationTipDialog; /** * 忘记密码界面 */ public class ChangePassword extends CustomBaseActivity { ActivityChangePasswordBinding viewBinding; private boolean isPhoneType = true; private String mPhoneAccount; private String mPhonePsw; private String mPhoneConfirmPsw; private String mPhoneVerificationCode; private String mMailAccount; private String mMailPsw; private String mMailConfirmPsw; private String mMailVerificationCode; @Override public Object getContentView() { viewBinding = ActivityChangePasswordBinding.inflate(getLayoutInflater()); return viewBinding.getRoot(); } @Override public void onBindView(Bundle savedInstanceState) { setStatusBarTranslucent(); getWindow().setNavigationBarColor(getColor(R.color.text_00000000)); //初始化 initView(); //初始化界面监听器 initEvent(); } /** * 初始化界面 */ private void initView() { switchPhoneOrMailView(); HdlCommonLogic.getInstance().setSpan(viewBinding.changePhoneVerificationTv, viewBinding.changePhoneVerificationTv.getText().toString(), true,null); HdlCommonLogic.getInstance().setSpan(viewBinding.changeMailVerificationTv, viewBinding.changeMailVerificationTv.getText().toString(), true,null); } /** * 设置监听事件 */ private void initEvent() { //返回 viewBinding.changeBackTv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); //切换手机号 viewBinding.changePhoneIc.underlineCl.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { isPhoneType = true; switchPhoneOrMailView(); } }); //切换邮箱号 viewBinding.changeMailRl.underlineCl.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { isPhoneType = false; switchPhoneOrMailView(); } }); //输入手机号或者邮箱 viewBinding.changeAccountEt.addTextChangedListener(accountTextWatcher); //手机号获取验证码 viewBinding.changePhoneVerificationTv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { sendVerification(); } }); //输入手机验证码 viewBinding.changePhoneVerificationEt.addTextChangedListener(phoneVerificationTextWatcher); //邮箱获取验证码 viewBinding.changeMailVerificationTv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { sendVerification(); } }); //输入邮箱验证码 viewBinding.changeMailVerificationEt.addTextChangedListener(MailVerificationTextWatcher); //输入密码 viewBinding.changePswEt.addTextChangedListener(changePswTextWatcher); //密码显示或者隐藏 viewBinding.changePswHideIv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (v.isSelected()) { v.setSelected(false); viewBinding.changePswHideIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.hide)); viewBinding.changePswEt.setTransformationMethod(PasswordTransformationMethod.getInstance()); } else { v.setSelected(true); viewBinding.changePswHideIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.show)); viewBinding.changePswEt.setTransformationMethod(HideReturnsTransformationMethod.getInstance()); } //设置光标位置 if (!TextUtils.isEmpty(viewBinding.changePswEt.getText())) { viewBinding.changePswEt.setSelection(viewBinding.changePswEt.length()); } } }); //输入确认密码 viewBinding.changeConfirmPswEt.addTextChangedListener(changeConfirmPswTextWatcher); //确认密码显示或者隐藏 viewBinding.changeConfirmPswHideIv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (v.isSelected()) { v.setSelected(false); viewBinding.changeConfirmPswHideIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.hide)); viewBinding.changeConfirmPswEt.setTransformationMethod(PasswordTransformationMethod.getInstance()); } else { v.setSelected(true); viewBinding.changeConfirmPswHideIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.show)); viewBinding.changeConfirmPswEt.setTransformationMethod(HideReturnsTransformationMethod.getInstance()); } //设置光标位置 if (!TextUtils.isEmpty(viewBinding.changeConfirmPswEt.getText())) { viewBinding.changeConfirmPswEt.setSelection(viewBinding.changeConfirmPswEt.length()); } } }); //重置密码 viewBinding.confirmTv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (!isLocalCheckAccountAndPassword()) { return; } String account = viewBinding.changeAccountEt.getText().toString(); String psw = viewBinding.changeConfirmPswEt.getText().toString(); String verification_code; if (isPhoneType) { verification_code = viewBinding.changePhoneVerificationEt.getText().toString(); } else { verification_code = viewBinding.changeMailVerificationEt.getText().toString(); } if (UserConfigManage.getInstance().isBAccount()) { HdlAccountLogic.getInstance().changePassword_B(isPhoneType, account, psw, verification_code, new CloudCallBeak() { @Override public void onSuccess(Boolean obj) { HdlThreadLogic.runMainThread(new Runnable() { @Override public void run() { ConfirmationTipDialog dialog = new ConfirmationTipDialog(_mActivity); dialog.show(); dialog.setYesOnclickListener(new ConfirmationCancelDialog.onYesOnclickListener() { @Override public void Confirm() { finish(); } }); } }, null, null); } @Override public void onFailure(HDLException e) { HdlThreadLogic.toast(_mActivity, e); } }); } else { HdlAccountLogic.getInstance().changePassword_C(isPhoneType, account, psw, verification_code, new CloudCallBeak() { @Override public void onSuccess(Boolean obj) { HdlThreadLogic.runMainThread(new Runnable() { @Override public void run() { ConfirmationTipDialog dialog = new ConfirmationTipDialog(_mActivity); dialog.show(); dialog.setYesOnclickListener(new ConfirmationCancelDialog.onYesOnclickListener() { @Override public void Confirm() { finish(); } }); } }, null, null); } @Override public void onFailure(HDLException e) { HdlThreadLogic.toast(_mActivity, e); } }); } } }); } /** * 发送验证码指令 */ private void sendVerification() { String account = viewBinding.changeAccountEt.getText().toString(); if (TextUtils.isEmpty(account)) { if (isPhoneType) { viewBinding.textErrorTv.setText(R.string.home_login_phone_null); } else { viewBinding.textErrorTv.setText(R.string.home_login_mail_null); } return; } //获取账号区域信息 HdlAccountLogic.getInstance().regionByAccount(account, new CloudCallBeak() { //发送消息验证码 @Override public void onSuccess(HDLUserRegionBean obj) { //设置账号所在区域协议及地址 AppConfigManage.setUserRegionUrl(obj.getRegionUrl()); HDLLinkPMUser.getInstance().setUserRegionUrl(AppConfigManage.getUserRegionUrl()); HdlAccountLogic.getInstance().sendVerifyCode(isPhoneType, account, "86", 2, new CloudCallBeak() { @Override public void onSuccess(Boolean obj) { if (isPhoneType) { phoneCountDownTimer.start(); } else { mailCountDownTimer.start(); } } @Override public void onFailure(HDLException e) { HdlThreadLogic.toast(_mActivity, e); } }); } @Override public void onFailure(HDLException e) { HdlThreadLogic.toast(_mActivity, e); // hideLoading(); } }); } /** * 初始化手机号计时器 */ CountDownTimer phoneCountDownTimer = new CountDownTimer(60 * 1000, 1000) { @Override public void onTick(long millisUntilFinished) { long time = (millisUntilFinished / 1000); String str = time + "s" + getString(R.string.home_login_psw_verification_repeater); viewBinding.changePhoneVerificationTv.setText(str); // viewBinding.changePhoneVerificationTv.setTextColor(getResources().getColor(R.color.text_E6FFFFFF)); viewBinding.changePhoneVerificationTv.setEnabled(false); } @Override public void onFinish() { viewBinding.changePhoneVerificationTv.setText(getString(R.string.home_login_verification_regain)); // viewBinding.changePhoneVerificationTv.setTextColor(getResources().getColor(R.color.text_E6FFFFFF)); viewBinding.changePhoneVerificationTv.setEnabled(true); } }; /** * 初始化邮箱计时器 */ CountDownTimer mailCountDownTimer = new CountDownTimer(60 * 1000, 1000) { @Override public void onTick(long millisUntilFinished) { long time = (millisUntilFinished / 1000); String str = time + "s" + getString(R.string.home_login_psw_verification_repeater); viewBinding.changeMailVerificationTv.setText(str); // viewBinding.changeMailVerificationTv.setTextColor(getResources().getColor(R.color.text_E6FFFFFF)); viewBinding.changeMailVerificationTv.setEnabled(false); } @Override public void onFinish() { viewBinding.changeMailVerificationTv.setText(getString(R.string.home_login_verification_regain)); // viewBinding.changeMailVerificationTv.setTextColor(getResources().getColor(R.color.text_E6FFFFFF)); viewBinding.changeMailVerificationTv.setEnabled(true); } }; /** * 切换手机号或者邮箱的样式 */ private void switchPhoneOrMailView() { if (isPhoneType) { //手机号 viewBinding.changePhoneIc.accountTitleTv.setText(R.string.home_login_phone); viewBinding.changePhoneIc.accountTitleTv.setTextSize(18); viewBinding.changePhoneIc.accountTitleTv.setTextColor(getResources().getColor(R.color.text_E6FFFFFF)); viewBinding.changePhoneIc.lineV.setVisibility(View.VISIBLE); viewBinding.changeMailRl.accountTitleTv.setText(R.string.home_login_email); viewBinding.changeMailRl.accountTitleTv.setTextSize(14); viewBinding.changeMailRl.accountTitleTv.setTextColor(getResources().getColor(R.color.text_66FFFFFF)); viewBinding.changeMailRl.lineV.setVisibility(View.GONE); //输入手机号 viewBinding.changeAccountEt.setInputType(InputType.TYPE_CLASS_NUMBER); viewBinding.changeAccountEt.setHint(R.string.home_login_input_phone); //显示手机号验证码,隐藏邮箱验证码, viewBinding.changePhoneVerificationCodeRl.setVisibility(View.VISIBLE); viewBinding.changeMailVerificationCodeRl.setVisibility(View.GONE); //记录邮箱账号和密码 mMailAccount = viewBinding.changeAccountEt.getText().toString(); mMailVerificationCode = viewBinding.changePhoneVerificationEt.getText().toString(); mMailPsw = viewBinding.changePswEt.getText().toString(); mMailConfirmPsw = viewBinding.changeConfirmPswEt.getText().toString(); //显示旧数据 viewBinding.changeAccountEt.setText(mPhoneAccount); viewBinding.changePhoneVerificationEt.setText(mPhoneVerificationCode); viewBinding.changePswEt.setText(mPhonePsw); viewBinding.changeConfirmPswEt.setText(mPhoneConfirmPsw); } else { //邮箱 viewBinding.changePhoneIc.accountTitleTv.setText(R.string.home_login_phone); viewBinding.changePhoneIc.accountTitleTv.setTextSize(14); viewBinding.changePhoneIc.accountTitleTv.setTextColor(getResources().getColor(R.color.text_66FFFFFF)); viewBinding.changePhoneIc.lineV.setVisibility(View.GONE); viewBinding.changeMailRl.accountTitleTv.setText(R.string.home_login_email); viewBinding.changeMailRl.accountTitleTv.setTextSize(18); viewBinding.changeMailRl.accountTitleTv.setTextColor(getResources().getColor(R.color.text_E6FFFFFF)); viewBinding.changeMailRl.lineV.setVisibility(View.VISIBLE); //输入邮箱 viewBinding.changeAccountEt.setInputType(InputType.TYPE_CLASS_TEXT); viewBinding.changeAccountEt.setHint(R.string.home_login_input_mail); //显示箱邮验证码,隐藏手机号验证码, viewBinding.changePhoneVerificationCodeRl.setVisibility(View.GONE); viewBinding.changeMailVerificationCodeRl.setVisibility(View.VISIBLE); //记录手机号和密码 mPhoneAccount = viewBinding.changeAccountEt.getText().toString(); mPhoneVerificationCode = viewBinding.changePhoneVerificationEt.getText().toString(); mPhonePsw = viewBinding.changePswEt.getText().toString(); mPhoneConfirmPsw = viewBinding.changeConfirmPswEt.getText().toString(); //显示旧数据 viewBinding.changeAccountEt.setText(mMailAccount); viewBinding.changeMailVerificationEt.setText(mMailVerificationCode); viewBinding.changePswEt.setText(mMailPsw); viewBinding.changeConfirmPswEt.setText(mMailConfirmPsw); } isCompleteEnabled(); } /** * 校验按钮是否启用 */ private void isCompleteEnabled() { String account = viewBinding.changeAccountEt.getText().toString(); String psw1 = viewBinding.changePswEt.getText().toString(); String psw2 = viewBinding.changeConfirmPswEt.getText().toString(); String verification_code; if (isPhoneType) { verification_code = viewBinding.changePhoneVerificationEt.getText().toString(); } else { verification_code = viewBinding.changeMailVerificationEt.getText().toString(); } boolean isEnabled = account.length() > 0 && psw1.length() > 0 && psw2.length() > 0 && verification_code.length() > 0; if (isEnabled) { viewBinding.confirmTv.setTextColor(getColor(R.color.text_E6FFFFFF)); } else { viewBinding.confirmTv.setTextColor(getColor(R.color.text_66FFFFFF)); } viewBinding.confirmTv.setEnabled(isEnabled); } /** * 本地校验输入账号或者密码是否正确 */ private boolean isLocalCheckAccountAndPassword() { String psw1 = viewBinding.changePswEt.getText().toString(); String psw2 = viewBinding.changeConfirmPswEt.getText().toString(); if (!psw1.equals(psw2)) { viewBinding.textErrorTv.setText(R.string.home_login_psw_unlikeliness); return false; } if (psw1.length() < 6 || psw1.length() > 16) { viewBinding.textErrorTv.setText(R.string.home_login_error_6_16_str); return false; } // if (psw2.length() < 6 || psw2.length() > 16) { // viewBinding.textErrorTv.setText(R.string.home_login_error_6_16_str); // return false; // } return true; } @Override protected void onDestroy() { super.onDestroy(); if (phoneCountDownTimer != null) { phoneCountDownTimer.cancel(); phoneCountDownTimer = null; } if (mailCountDownTimer != null) { mailCountDownTimer.cancel(); mailCountDownTimer = null; } viewBinding.changeAccountEt.removeTextChangedListener(accountTextWatcher); viewBinding.changePhoneVerificationEt.removeTextChangedListener(phoneVerificationTextWatcher); viewBinding.changeMailVerificationEt.removeTextChangedListener(MailVerificationTextWatcher); viewBinding.changePswEt.removeTextChangedListener(changePswTextWatcher); viewBinding.changeConfirmPswEt.removeTextChangedListener(changeConfirmPswTextWatcher); } /** * 输入手机号或者邮箱 */ private final TextWatcher accountTextWatcher = new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { isCompleteEnabled(); } @Override public void afterTextChanged(Editable s) { } }; /** * 输入手机验证码 */ private final TextWatcher phoneVerificationTextWatcher = new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { isCompleteEnabled(); } @Override public void afterTextChanged(Editable s) { } }; /** * 邮箱获取验证码 */ private final TextWatcher MailVerificationTextWatcher = new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { isCompleteEnabled(); } @Override public void afterTextChanged(Editable s) { } }; /** * 输入密码 */ private final TextWatcher changePswTextWatcher = new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { isCompleteEnabled(); } @Override public void afterTextChanged(Editable s) { } }; /** * 输入确认密码 */ private final TextWatcher changeConfirmPswTextWatcher = new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { isCompleteEnabled(); } @Override public void afterTextChanged(Editable s) { } }; }