package cn.rongcloud.im.ui.activity; import android.content.Intent; import android.os.Bundle; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; import android.view.View; import android.widget.Button; import android.widget.Toast; import cn.rongcloud.im.R; import cn.rongcloud.im.server.network.http.HttpException; import cn.rongcloud.im.server.response.CheckPhoneResponse; import cn.rongcloud.im.server.response.RestPasswordResponse; import cn.rongcloud.im.server.response.SendCodeResponse; import cn.rongcloud.im.server.response.VerifyCodeResponse; import cn.rongcloud.im.server.utils.AMUtils; import cn.rongcloud.im.server.utils.NToast; import cn.rongcloud.im.server.utils.downtime.DownTimer; import cn.rongcloud.im.server.utils.downtime.DownTimerListener; import cn.rongcloud.im.server.widget.ClearWriteEditText; import cn.rongcloud.im.server.widget.LoadDialog; /** * Created by AMing on 16/2/2. * Company RongCloud */ @SuppressWarnings("deprecation") public class ForgetPasswordActivity extends BaseActivity implements View.OnClickListener, DownTimerListener { private static final int CHECK_PHONE = 31; private static final int SEND_CODE = 32; private static final int CHANGE_PASSWORD = 33; private static final int VERIFY_CODE = 34; private static final int CHANGE_PASSWORD_BACK = 1002; private ClearWriteEditText mPhone, mCode, mPassword1, mPassword2; private Button mGetCode, mOK; private String phone, mCodeToken; private boolean available; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_forget); setTitle(R.string.forget_password); initView(); } private void initView() { mPhone = (ClearWriteEditText) findViewById(R.id.forget_phone); mCode = (ClearWriteEditText) findViewById(R.id.forget_code); mPassword1 = (ClearWriteEditText) findViewById(R.id.forget_password); mPassword2 = (ClearWriteEditText) findViewById(R.id.forget_password1); mGetCode = (Button) findViewById(R.id.forget_getcode); mOK = (Button) findViewById(R.id.forget_button); mGetCode.setOnClickListener(this); mOK.setOnClickListener(this); mPhone.addTextChangedListener(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) { if (s.length() == 11) { if (AMUtils.isMobile(s.toString().trim())) { phone = mPhone.getText().toString().trim(); request(CHECK_PHONE, true); AMUtils.onInactive(mContext, mPhone); } else { Toast.makeText(mContext, R.string.Illegal_phone_number, Toast.LENGTH_SHORT).show(); } } else { mGetCode.setClickable(false); mGetCode.setBackgroundDrawable(getResources().getDrawable(R.drawable.rs_select_btn_gray)); } } @Override public void afterTextChanged(Editable s) { } }); mCode.addTextChangedListener(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) { if (s.length() == 6) { AMUtils.onInactive(mContext, mCode); if (available) { mOK.setClickable(true); mOK.setBackgroundDrawable(getResources().getDrawable(R.drawable.rs_select_btn_blue)); } } else { mOK.setClickable(false); mOK.setBackgroundDrawable(getResources().getDrawable(R.drawable.rs_select_btn_gray)); } } @Override public void afterTextChanged(Editable s) { } }); } @Override public Object doInBackground(int requestCode, String id) throws HttpException { switch (requestCode) { case CHECK_PHONE: return action.checkPhoneAvailable("86", phone); case SEND_CODE: return action.sendCode("86", phone); case CHANGE_PASSWORD: return action.restPassword(mPassword1.getText().toString(), mCodeToken); case VERIFY_CODE: return action.verifyCode("86", phone, mCode.getText().toString()); } return super.doInBackground(requestCode, id); } @Override public void onSuccess(int requestCode, Object result) { if (result != null) { switch (requestCode) { case CHECK_PHONE: CheckPhoneResponse response = (CheckPhoneResponse) result; if (response.getCode() == 200) { if (response.isResult()) { NToast.shortToast(mContext, getString(R.string.phone_unregister)); mGetCode.setClickable(false); mGetCode.setBackgroundDrawable(getResources().getDrawable(R.drawable.rs_select_btn_gray)); } else { available = true; mGetCode.setClickable(true); mGetCode.setBackgroundDrawable(getResources().getDrawable(R.drawable.rs_select_btn_blue)); } } break; case SEND_CODE: SendCodeResponse scrres = (SendCodeResponse) result; if (scrres.getCode() == 200) { NToast.shortToast(mContext, R.string.messge_send); } else if (scrres.getCode() == 5000) { NToast.shortToast(mContext, R.string.message_frequency); } break; case VERIFY_CODE: VerifyCodeResponse vcres = (VerifyCodeResponse) result; switch (vcres.getCode()) { case 200: mCodeToken = vcres.getResult().getVerification_token(); if (!TextUtils.isEmpty(mCodeToken)) { request(CHANGE_PASSWORD); } else { NToast.shortToast(mContext, "code token is null"); LoadDialog.dismiss(mContext); } break; case 1000: //验证码错误 NToast.shortToast(mContext, R.string.verification_code_error); LoadDialog.dismiss(mContext); break; case 2000: //验证码过期 NToast.shortToast(mContext, R.string.captcha_overdue); LoadDialog.dismiss(mContext); break; } break; case CHANGE_PASSWORD: RestPasswordResponse response1 = (RestPasswordResponse) result; if (response1.getCode() == 200) { LoadDialog.dismiss(mContext); NToast.shortToast(mContext, getString(R.string.update_success)); Intent data = new Intent(); data.putExtra("phone", phone); data.putExtra("password", mPassword1.getText().toString()); setResult(CHANGE_PASSWORD_BACK, data); this.finish(); } break; } } } @Override public void onFailure(int requestCode, int state, Object result) { switch (requestCode) { case CHECK_PHONE: Toast.makeText(mContext, "手机号可用请求失败", Toast.LENGTH_SHORT).show(); break; case SEND_CODE: NToast.shortToast(mContext, "获取验证码请求失败"); break; } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.forget_getcode: if (TextUtils.isEmpty(mPhone.getText().toString().trim())) { NToast.longToast(mContext, getString(R.string.phone_number_is_null)); } else { DownTimer downTimer = new DownTimer(); downTimer.setListener(this); downTimer.startDown(60 * 1000); request(SEND_CODE); } break; case R.id.forget_button: if (TextUtils.isEmpty(mPhone.getText().toString())) { NToast.shortToast(mContext, getString(R.string.phone_number_is_null)); mPhone.setShakeAnimation(); return; } if (TextUtils.isEmpty(mCode.getText().toString())) { NToast.shortToast(mContext, getString(R.string.code_is_null)); mCode.setShakeAnimation(); return; } if (TextUtils.isEmpty(mPassword1.getText().toString())) { NToast.shortToast(mContext, getString(R.string.password_is_null)); mPassword1.setShakeAnimation(); return; } if (mPassword1.length() < 6 || mPassword1.length() > 16) { NToast.shortToast(mContext, R.string.passwords_invalid); return; } if (TextUtils.isEmpty(mPassword2.getText().toString())) { NToast.shortToast(mContext, getString(R.string.confirm_password)); mPassword2.setShakeAnimation(); return; } if (!mPassword2.getText().toString().equals(mPassword1.getText().toString())) { NToast.shortToast(mContext, getString(R.string.passwords_do_not_match)); return; } LoadDialog.show(mContext); request(VERIFY_CODE); break; } } @Override public void onTick(long millisUntilFinished) { mGetCode.setText("seconds:" + String.valueOf(millisUntilFinished / 1000)); mGetCode.setClickable(false); mGetCode.setBackgroundDrawable(getResources().getDrawable(R.drawable.rs_select_btn_gray)); } @Override public void onFinish() { mGetCode.setText(R.string.get_code); mGetCode.setClickable(true); mGetCode.setBackgroundDrawable(getResources().getDrawable(R.drawable.rs_select_btn_blue)); } }