package com.mm.android.deviceaddmodule.mobilecommon.widget; import android.content.Context; import android.os.CountDownTimer; import android.text.InputFilter; import android.text.TextWatcher; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; import com.mm.android.deviceaddmodule.R; public class SMSValidEditText extends LinearLayout implements OnClickListener{ private final static int TIME = 60000 + 500; private EditText mSMSValidEt; private TextView mTimeCountTv; private TimeCount mTimeCount; private SMSValidOnclick mListener; public interface SMSValidOnclick{ public void requestValidateCode(); } public void setSMSValidOnclick(SMSValidOnclick listener){ mListener = listener; } public SMSValidEditText(Context context) { this(context, null); } public SMSValidEditText(Context context, AttributeSet attrs) { this(context, attrs, 0); } public SMSValidEditText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); LayoutInflater.from(context).inflate(R.layout.sms_valid_view, this); initView(); mListener = new DefaultSMSValidOnclick(); mTimeCount = new TimeCount(TIME, 1000); } public void startTimeCount(){ mTimeCount.start(); } private void initView() { mSMSValidEt = findViewById(R.id.et_sms_valid); mTimeCountTv = findViewById(R.id.tv_sms_valid_tip); mTimeCountTv.setOnClickListener(this); } public String getValidCode(){ return mSMSValidEt.getText().toString(); } public void setValidText(int valid){ mTimeCount.cancel(); mTimeCountTv.setText(valid); mTimeCountTv.setEnabled(true); mTimeCountTv.setClickable(true); } class TimeCount extends CountDownTimer { public TimeCount(long millisInFuture, long countDownInterval) { super(millisInFuture, countDownInterval); } @Override public void onTick(long millisUntilFinished) { mTimeCountTv.setClickable(false); mTimeCountTv.setEnabled(false); millisUntilFinished -= 650; mTimeCountTv.setText(getResources().getString(R.string.valid_code_retrieve_valid_num, millisUntilFinished / 1000)); if((millisUntilFinished / 1000) == 0){ mTimeCountTv.setText(getResources().getString(R.string.device_manager_regain)); mTimeCountTv.setEnabled(true); mTimeCountTv.setClickable(true); } } @Override public void onFinish() { mTimeCountTv.setText(getResources().getString(R.string.device_manager_regain)); mTimeCountTv.setEnabled(true); mTimeCountTv.setClickable(true); } } @Override public void onClick(View v) { mListener.requestValidateCode(); } //取消倒计时 public void cancelCountDown(){ if(mTimeCount != null){ mTimeCount.cancel(); } } public void addTextWatcher(TextWatcher watcher){ mSMSValidEt.addTextChangedListener(watcher); } public void setHintText(int hint){ mSMSValidEt.setHint(hint); } public void setFilters(InputFilter[] inputFilters) { mSMSValidEt.setFilters(inputFilters); } static class DefaultSMSValidOnclick implements SMSValidOnclick{ @Override public void requestValidateCode() { } } }