package com.xiaomi.xms.sales.activity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import com.xiaomi.xms.sales.R;
import com.xiaomi.xms.sales.loader.RequestLoader;
import com.xiaomi.xms.sales.loader.RequestLoader.Result;
import com.xiaomi.xms.sales.model.Tags;
import com.xiaomi.xms.sales.request.HostManager;
import com.xiaomi.xms.sales.request.Request;
import com.xiaomi.xms.sales.util.Constants;
import com.xiaomi.xms.sales.util.ToastUtil;
import com.xiaomi.xms.sales.util.Utils;
import org.json.JSONObject;
import java.util.ArrayList;
public class MessageCheckActivity extends BaseActivity {
private static final String TAG = "MessageCheckActivity";
private static final int REQUEST_CHECKCODE_LOADER = 1;
private static final int REQUEST_SEND_MESSAGE_LOADER = 0;
private RequestLoader mCheckCodeLoader;
private RequestLoader mSendMessageLoader;
private EditText mVerifiCode;
private Button mSubmit;
private Button mSendMessageSubmit;
private TextView mPromptText;
private String mOldTel;
private String mOrderId;
private TimeCount mTime;
private Long mOverTimeLong = (long) 0;
private boolean startDownCount;
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
setCustomContentView(R.layout.order_edit_secure_activity);
mVerifiCode = (EditText) findViewById(R.id.secure_authentication);
mSubmit = (Button) findViewById(R.id.submit);
mSendMessageSubmit = (Button) findViewById(R.id.send_message_btn);
mPromptText = (TextView) findViewById(R.id.prompt_send_text);
mOldTel = getIntent().getStringExtra(Constants.Intent.EXTRA_ORDER_EDIT_OLDTEL);
mOrderId = getIntent().getStringExtra(Constants.Intent.EXTRA_PAYMENT_ORDER_ID);
if (!TextUtils.isEmpty(mOldTel)) {
mPromptText.setText(getString(R.string.order_edit_prompt_message,
mOldTel.substring(0, 3) + "****" + mOldTel.substring(7)));
}
mSubmit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String code = mVerifiCode.getText().toString();
if (TextUtils.isEmpty(code)) {
ToastUtil.show(MessageCheckActivity.this, R.string.order_edit_code_not_null);
return;
}
getSupportLoaderManager().initLoader(REQUEST_CHECKCODE_LOADER, null,
mRequestCheckCodeCallback);
if (mCheckCodeLoader != null) {
Request request = new Request(HostManager.getCheckMessageCode());
request.addParam(Tags.EditOrder.CHECKCODE, code);
request.addParam(Tags.EditOrder.ORDER_ID, mOrderId);
mCheckCodeLoader.load(REQUEST_CHECKCODE_LOADER, request);
}
}
});
mSendMessageSubmit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
getSupportLoaderManager().initLoader(REQUEST_SEND_MESSAGE_LOADER, null,
mRequestSendMessageCallback);
if (mSendMessageLoader != null) {
startDownCount = true;
Request request = new Request(HostManager.getSendMessage());
request.addParam(Tags.EditOrder.TEL, mOldTel);
request.addParam(Tags.EditOrder.ORDER_MODIFY, "1");
request.addParam(Tags.EditOrder.ORDER_ID, mOrderId);
mSendMessageLoader.load(REQUEST_SEND_MESSAGE_LOADER, request);
}
}
});
}
private LoaderCallbacks<RequestLoader.Result> mRequestCheckCodeCallback = new LoaderCallbacks<RequestLoader.Result>() {
@Override
public void onLoaderReset(Loader<Result> loader) {
}
@Override
public void onLoadFinished(Loader<Result> loader, Result result) {
getSupportLoaderManager().destroyLoader(REQUEST_CHECKCODE_LOADER);
if (result != null) {
if (Tags.isJSONResultOK(result.mData)) {
handleResult(true);
Utils.Preference.setLongPref(MessageCheckActivity.this,
Constants.Prefence.PREF_KEY_MESSAGE_OVER_TIME + mOrderId, (long) 0);
} else {
handleResult(false);
if (result.mData != null) {
ToastUtil.show(MessageCheckActivity.this,
result.mData.optString(Tags.DESCRIPTION, "服务异常"));
}
}
}
}
@Override
public Loader<Result> onCreateLoader(int type, Bundle bundle) {
mCheckCodeLoader = new RequestLoader(MessageCheckActivity.this);
return mCheckCodeLoader;
}
};
private LoaderCallbacks<RequestLoader.Result> mRequestSendMessageCallback = new LoaderCallbacks<RequestLoader.Result>() {
@Override
public void onLoaderReset(Loader<Result> loader) {
}
@Override
public void onLoadFinished(Loader<Result> loader, Result result) {
getSupportLoaderManager().destroyLoader(REQUEST_SEND_MESSAGE_LOADER);
if (result != null) {
if (Tags.isJSONResultOK(result.mData)) {
ToastUtil.show(MessageCheckActivity.this, R.string.order_code_sent);
if (result.mData != null) {
JSONObject dataJson = result.mData.optJSONObject("data");
if (dataJson != null) {
long countDownTime = dataJson.optLong("countDownTime");
mTime = new TimeCount(countDownTime * 1000, 1000);
} else {
mTime = new TimeCount(300000, 1000);
}
mTime.start();
}
} else {
if (result.mData != null) {
String errorDesc = result.mData.optString(Tags.DESCRIPTION);
if (TextUtils.isEmpty(errorDesc)) {
ToastUtil.show(MessageCheckActivity.this,
R.string.order_code_sent_error);
} else {
ToastUtil.show(MessageCheckActivity.this, errorDesc);
}
}
}
}
}
@Override
public Loader<Result> onCreateLoader(int type, Bundle bundle) {
mSendMessageLoader = new RequestLoader(MessageCheckActivity.this);
return mSendMessageLoader;
}
};
@Override
public void onResume() {
super.onResume();
setTitle(R.string.order_edit_secure_title);
long currentTime = System.currentTimeMillis();
long backTime = Utils.Preference.getLongPref(this,
Constants.Prefence.PREF_KEY_CURRENT_TIME + mOrderId, 0);
long overTime = Utils.Preference.getLongPref(this,
Constants.Prefence.PREF_KEY_MESSAGE_OVER_TIME + mOrderId, 0);
if (overTime > 0 && overTime > currentTime - backTime) {
mTime = new TimeCount(overTime - (currentTime - backTime), 1000);
mTime.start();
}
}
private void handleResult(boolean intentResult) {
if (intentResult) {
Intent data = new Intent();
setResult(Activity.RESULT_OK, data);
finish();
}
}
class TimeCount extends CountDownTimer {
public TimeCount(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);// 参数依次为总时长,和计时的时间间隔
}
@Override
public void onFinish() {// 计时完毕时触发
mSendMessageSubmit.setText(getString(R.string.order_send_message_submit));
mSendMessageSubmit.setTextColor(getResources().getColor(R.color.primary_text_color));
mSendMessageSubmit.setClickable(true);
cancel();
mOverTimeLong = (long) 0;
mTime = null;
}
@Override
public void onTick(long millisUntilFinished) {// 计时过程显示
mSendMessageSubmit.setClickable(false);
mSendMessageSubmit.setTextColor(getResources()
.getColor(R.color.secondary_text_color));
mSendMessageSubmit.setText(getString(R.string.order_retransmission_submit,
millisUntilFinished / 1000));
mOverTimeLong = millisUntilFinished;
}
}
@Override
public void onBackPressed() {
super.onBackPressed();
if (startDownCount) {
startDownCount = false;
Utils.Preference.setLongPref(this, Constants.Prefence.PREF_KEY_CURRENT_TIME + mOrderId,
System.currentTimeMillis());
Utils.Preference.setLongPref(this,
Constants.Prefence.PREF_KEY_MESSAGE_OVER_TIME + mOrderId,
mOverTimeLong);
}
mTime = null;
ArrayList<String> list = Utils.Preference.getAllPreferenceKey(this);
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).contains(Constants.Prefence.PREF_KEY_CURRENT_TIME)) {
String orderIdString = list.get(i).substring(
Constants.Prefence.PREF_KEY_CURRENT_TIME.length());
long overtime = Utils.Preference.getLongPref(this,
Constants.Prefence.PREF_KEY_MESSAGE_OVER_TIME + orderIdString, 0);
if (Utils.Preference.getLongPref(this, list.get(i), 0) + overtime <= System
.currentTimeMillis()) {
Utils.Preference.removePref(this,
Constants.Prefence.PREF_KEY_MESSAGE_OVER_TIME + orderIdString);
Utils.Preference.removePref(this, list.get(i));
}
}
}
}
}
}