package com.hdl.photovoltaic.ui.me; import android.os.Bundle; import android.os.CountDownTimer; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; import android.view.View; import com.hdl.linkpm.sdk.core.exception.HDLException; import com.hdl.photovoltaic.R; import com.hdl.photovoltaic.base.CustomBaseActivity; import com.hdl.photovoltaic.config.UserConfigManage; import com.hdl.photovoltaic.databinding.ActivityBindPhoneBinding; import com.hdl.photovoltaic.enums.VerifyType; import com.hdl.photovoltaic.listener.CloudCallBeak; import com.hdl.photovoltaic.other.HdlAccountLogic; import com.hdl.photovoltaic.other.HdlCommonLogic; import com.hdl.photovoltaic.other.HdlLogLogic; import com.hdl.photovoltaic.other.HdlThreadLogic; import com.hdl.photovoltaic.utils.GPSManagerUtils; import com.sahooz.library.countrypicker.Country; import com.sahooz.library.countrypicker.CountryPickerFragment; import com.sahooz.library.countrypicker.PickCountryCallback; /** * 修改绑定手机号的界面 */ public class BindPhoneActivity extends CustomBaseActivity { private ActivityBindPhoneBinding viewBinding; @Override public Object getContentView() { viewBinding = ActivityBindPhoneBinding.inflate(getLayoutInflater()); return viewBinding.getRoot(); } @Override public void onBindView(Bundle savedInstanceState) { setStatusBarTranslucent(); getWindow().setNavigationBarColor(getColor(R.color.text_FF000000)); //初始化 initView(); //初始化界面监听器 initEvent(); } private void initEvent() { viewBinding.toolbarTopRl.topBackLl.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { setResult(20); finish(); } }); viewBinding.bindAreaParentRl.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { selectArea(); } }); viewBinding.bindPhoneVerificationCodeRl.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { sendVerification(); } }); viewBinding.bindPhoneClearIv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { viewBinding.bindPhoneEt.setText(""); } }); //输入账号 viewBinding.bindPhoneEt.addTextChangedListener(accountTextWatcher); //输入验证码 viewBinding.changePhoneVerificationEt.addTextChangedListener(verificationCodeTextWatcher); viewBinding.bindPhoneTv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (isEnabled()) { String phoneStr = viewBinding.bindPhoneEt.getText().toString(); String verificationStr = viewBinding.changePhoneVerificationEt.getText().toString(); HdlAccountLogic.getInstance().bindingAccount_C(phoneStr, "", verificationStr, viewBinding.bindAreaNumberTv.getText().toString(), new CloudCallBeak() { @Override public void onSuccess(Boolean obj) { UserConfigManage.getInstance().setBingPhone(phoneStr); UserConfigManage.getInstance().Save(); setResult(20); finish(); } @Override public void onFailure(HDLException e) { HdlThreadLogic.tipFlashingBox(_mActivity, false, e.getMsg(), e.getCode()); } }); } } }); } private void initView() { if (UserConfigManage.getInstance().isZh()) { viewBinding.bindAreaTv.setText(getText(R.string.home_chinese_mainland)); viewBinding.bindAreaNumberTv.setText("+86"); } else { viewBinding.bindAreaTv.setText(getText(R.string.iraq)); viewBinding.bindAreaNumberTv.setText("+964"); } viewBinding.toolbarTopRl.topTitleTv.setText(R.string.set_change_bind_phone_number); viewBinding.toolbarTopRl.topBackLl.setVisibility(View.VISIBLE); checkClearIconShowOrNot(viewBinding.bindPhoneEt.getText().toString()); try { Country.load(this); Country country = null; if (TextUtils.isEmpty(GPSManagerUtils.getInstance().getCountryCode(this))) { //再根据系统语言 country = Country.getCountryInfo(); } else { //先根据定位 country = Country.getLocationCountryInfo(GPSManagerUtils.getInstance().getCountryCode(this)); } if (country != null) { viewBinding.bindAreaTv.setText(country.translate); viewBinding.bindAreaNumberTv.setText("+" + country.code); } } catch (Exception e) { e.printStackTrace(); } HdlCommonLogic.getInstance().setSpan(viewBinding.bindPhoneVerificationTv, viewBinding.bindPhoneVerificationTv.getText().toString(), true, null); } /** * 国家手机号区号弹窗 */ private void selectArea() { CountryPickerFragment dialog = new CountryPickerFragment(this, new PickCountryCallback() { @Override public void onPick(Country country) { if (country.flag != 0) viewBinding.bindAreaTv.setText(country.translate); String code = "+" + country.code; viewBinding.bindAreaNumberTv.setText(code); } }); dialog.show(); dialog.setDialogSize(); } /** * 发送验证码指令 */ private void sendVerification() { String account = viewBinding.bindPhoneEt.getText().toString(); if (TextUtils.isEmpty(account)) { HdlThreadLogic.tipFlashingBox(this, false, getString(R.string.home_login_phone_null), -1); return; } HdlAccountLogic.getInstance().sendVerifyCode_C(true, account, viewBinding.bindAreaNumberTv.getText().toString(), VerifyType.VerifyType_3, new CloudCallBeak() { @Override public void onSuccess(Boolean obj) { countDownTimer.start(); } @Override public void onFailure(HDLException e) { HdlThreadLogic.tipFlashingBox(_mActivity, false, e.getMsg(), e.getCode()); HdlLogLogic.print(e.getMessage(), e.getCode(), true); } }); } /** * 初始化手机号计时器 */ CountDownTimer countDownTimer = 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.bindPhoneVerificationTv.setText(str); viewBinding.bindPhoneVerificationTv.setEnabled(false); } @Override public void onFinish() { viewBinding.bindPhoneVerificationTv.setText(getString(R.string.home_login_verification_regain)); viewBinding.bindPhoneVerificationTv.setEnabled(true); } }; /** * 检测清除图标是否显示 */ private void checkClearIconShowOrNot(String s) { if (s.replace(" ", "").length() > 0) { if (viewBinding.bindPhoneClearIv.getVisibility() == View.GONE) { viewBinding.bindPhoneClearIv.setVisibility(View.VISIBLE); } } else { if (viewBinding.bindPhoneClearIv.getVisibility() == View.VISIBLE) { viewBinding.bindPhoneClearIv.setVisibility(View.GONE); } } } /** * 校验确认按钮是否启用 */ private boolean isEnabled() { String account = viewBinding.bindPhoneEt.getText().toString().replace(" ", ""); String verificationCode = viewBinding.changePhoneVerificationEt.getText().toString().replace(" ", ""); boolean isEnabled = account.length() > 0 && verificationCode.length() > 0; if (isEnabled) { viewBinding.bindPhoneTv.setTextColor(getColor(R.color.text_FFACACAC)); } else { viewBinding.bindPhoneTv.setTextColor(getColor(R.color.text_FF5B5B5B)); } viewBinding.bindPhoneTv.setEnabled(isEnabled); return isEnabled; } /** * 本地校验 */ private boolean isLocalCheck() { String phoneStr = viewBinding.bindPhoneEt.getText().toString(); String verificationStr = viewBinding.changePhoneVerificationEt.getText().toString(); if (TextUtils.isEmpty(phoneStr)) { HdlThreadLogic.tipFlashingBox(this, false, getString(R.string.home_login_phone_null), -1); return false; } if (TextUtils.isEmpty(verificationStr)) { HdlThreadLogic.tipFlashingBox(this, false, getString(R.string.home_login_null_verification_code), -1); return false; } return true; } /** * 输入账号 */ 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) { } @Override public void afterTextChanged(Editable s) { checkClearIconShowOrNot(s.toString()); isEnabled(); } }; /** * 输入验证码 */ private final TextWatcher verificationCodeTextWatcher = 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) { } @Override public void afterTextChanged(Editable s) { isEnabled(); } }; @Override protected void onDestroy() { super.onDestroy(); Country.destroy(); if (countDownTimer != null) { countDownTimer.cancel(); countDownTimer = null; } viewBinding.bindPhoneEt.removeTextChangedListener(accountTextWatcher); viewBinding.changePhoneVerificationEt.removeTextChangedListener(verificationCodeTextWatcher); } /** * 物理按键返回事件 */ @Override public void onBackPressed() { setResult(20); super.onBackPressed(); } }