package com.arrownock.opensource.arrownockers.push; import org.json.JSONObject; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.view.Gravity; import android.view.View; import android.view.View.OnFocusChangeListener; import android.widget.Button; import android.widget.EditText; import android.widget.ScrollView; import android.widget.TextView; import com.arrownock.opensource.arrownockers.R; import com.arrownock.opensource.arrownockers.utils.AnUtils; import com.arrownock.opensource.arrownockers.utils.CustomReceiver; import com.arrownock.opensource.arrownockers.utils.CustomReceiver.OnPushArrived; import com.loopj.android.http.AsyncHttpClient; import com.loopj.android.http.JsonHttpResponseHandler; import com.loopj.android.http.RequestParams; // 模拟实际使用场景,由用户申请随机验证码,一分钟有效 public class PushCaseActivity extends Activity implements OnPushArrived, OnFocusChangeListener { private ScrollView sv; private Button requireButton; private TextView timeCounterTextView; private EditText codeTextView; private TextView receivedTextView; private boolean reset = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_push_case); initView(); CustomReceiver.setPushCaseActivity(this); } @Override protected void onDestroy() { super.onDestroy(); CustomReceiver.setPushCaseActivity(null); } private void initView() { sv = (ScrollView) findViewById(R.id.sv); requireButton = (Button) findViewById(R.id.btn_push_case_require); timeCounterTextView = (TextView) findViewById(R.id.tv_push_case_time_counter); codeTextView = (EditText) findViewById(R.id.tv_push_case_code); receivedTextView = (TextView) findViewById(R.id.tv_received_code); codeTextView.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { sv.scrollTo(0, sv.getHeight()); } }); } public void onRequireButtonClick(View view) { AsyncHttpClient client = new AsyncHttpClient(); RequestParams params = new RequestParams("id", AnUtils.getCurrentUsername()); client.post(AnUtils.requireVerifyCodeEndpoint, params, new JsonHttpResponseHandler() { @Override public void onSuccess(JSONObject response) { requireButton.setEnabled(false); requireButton.setTextColor(Color.GRAY); timeCounterTextView.setVisibility(View.VISIBLE); Thread thread = new Thread(new Runnable() { @Override public void run() { int max = 60; while (max > 0) { if (reset) { reset = false; break; } final String message = max + " 秒后需要重新获取新验证码"; runOnUiThread(new Runnable() { public void run() { timeCounterTextView .setText(message); } }); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } max--; } runOnUiThread(new Runnable() { public void run() { timeCounterTextView.setText(""); timeCounterTextView .setVisibility(View.INVISIBLE); requireButton.setEnabled(true); requireButton.setTextColor(Color.BLACK); } }); } }); thread.start(); } @Override public void onFailure(Throwable e, JSONObject errorResponse) { AnUtils.showToast(PushCaseActivity.this, "操作失败", Gravity.CENTER, true); } }); } public void onVerifyButtonClick(View view) { String code = codeTextView.getText().toString(); if (code.trim().length() > 0) { AsyncHttpClient client = new AsyncHttpClient(); RequestParams params = new RequestParams("id", AnUtils.getCurrentUsername()); params.put("auth_code", code); client.post(AnUtils.verifyEndpoint, params, new JsonHttpResponseHandler() { @Override public void onSuccess(JSONObject response) { AnUtils.showToast(PushCaseActivity.this, "验证成功", Gravity.CENTER, true); reset = true; runOnUiThread(new Runnable() { public void run() { timeCounterTextView.setText(""); timeCounterTextView .setVisibility(View.INVISIBLE); requireButton.setEnabled(true); requireButton.setTextColor(Color.BLACK); } }); } @Override public void onFailure(Throwable e, JSONObject errorResponse) { AnUtils.showToast(PushCaseActivity.this, "验证失败", Gravity.CENTER, true); } }); } } @Override public void onPushSaved(String code) { receivedTextView.setText(code); } @Override public void onPushSaved() { } @Override public void onFocusChange(View v, boolean hasFocus) { } }