package com.pandocloud.freeiot.ui.login; import java.util.Timer; import java.util.TimerTask; import com.pandocloud.android.api.interfaces.RequestListener; import com.pandocloud.android.api.interfaces.SimpleRequestListener; import com.pandocloud.freeiot.R; import com.pandocloud.freeiot.api.UserApi; import com.pandocloud.freeiot.api.WrapperBaseJsonHttpResponseHandler; import com.pandocloud.freeiot.ui.MainActivity; import com.pandocloud.freeiot.ui.app.AppConstants; import com.pandocloud.freeiot.ui.app.UserState; import com.pandocloud.freeiot.ui.base.BaseActivity; import com.pandocloud.freeiot.ui.bean.http.BaseResponse; import com.pandocloud.freeiot.ui.bean.http.UserLoginResponse; import com.pandocloud.freeiot.ui.bean.http.UserRegisterResponse; import com.pandocloud.freeiot.ui.helper.ProductInfoHelper; import com.pandocloud.freeiot.utils.ActivityUtils; import com.pandocloud.freeiot.utils.AnalyticsUtils; import com.pandocloud.freeiot.utils.CommonUtils; import com.pandocloud.freeiot.utils.GsonUtils; import org.apache.http.Header; import android.annotation.SuppressLint; import android.os.Bundle; import android.os.Handler; import android.text.TextUtils; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.EditText; import android.widget.TextView; import com.pandocloud.freeiot.utils.LogUtils; import com.umeng.analytics.MobclickAgent; public class RegisterActivity extends BaseActivity implements OnClickListener { public static final String MOBILE_REGX = "^((\\+86)|(86))?((13[0-9])|(15[^4,\\D])|(18[0-9])|(17[0-9]))\\d{8}$"; private EditText mPhoneEditView; private EditText mAuthCodeEditView; private EditText mPasswordEditView; private Timer mTimer; private int mDexTime = 60; private TextView mAuthCodeTextView; private ProductInfoHelper mProductInfoHelper; @SuppressLint("HandlerLeak") private Handler mHandler = new Handler() { public void handleMessage(android.os.Message msg) { mDexTime--; if (mDexTime <=0) { mAuthCodeTextView.setEnabled(true); mAuthCodeTextView.setText(R.string.get_authcode); } else { mAuthCodeTextView.setText(getString(R.string.reget_authcode, mDexTime)); } }; }; @Override protected void onCreate(Bundle arg0) { super.onCreate(arg0); setContentView(R.layout.activity_register); mProductInfoHelper = new ProductInfoHelper(productRequestListener); mPhoneEditView = (EditText)findViewById(R.id.mobile); mAuthCodeEditView = (EditText)findViewById(R.id.authcode); mPasswordEditView = (EditText)findViewById(R.id.pwd); mAuthCodeTextView = (TextView) findViewById(R.id.authcode_btn); mAuthCodeTextView.setOnClickListener(this); findViewById(R.id.register_btn).setOnClickListener(this); findViewById(R.id.back).setOnClickListener(this); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { finish(); overridePendingTransition(R.anim.slide_in_from_left, R.anim.slide_out_to_right); } return super.onOptionsItemSelected(item); } public void userVertify() { String mobile = mPhoneEditView.getText().toString().trim(); if (TextUtils.isEmpty(mobile)) { CommonUtils.ToastMsg(this, R.string.error_empty_mobile); return; } if (!mobile.matches(RegisterActivity.MOBILE_REGX)) { CommonUtils.ToastMsg(this, getString(R.string.error_mobile_format)); return; } MobclickAgent.onEvent(RegisterActivity.this, AnalyticsUtils.AnalyticsEventKeys.EVENT_VERTIFY); UserApi.verification(RegisterActivity.this, AppConstants.PRODUCT_KEY, AppConstants.VENDOR_KEY, mobile, null, new WrapperBaseJsonHttpResponseHandler<BaseResponse>(this) { @Override public void onStart() { super.onStart(); } @Override public void onSuccess(int statusCode, Header[] headers, String rawJsonData, BaseResponse response) { if (response.isSuccess()) { CommonUtils.ToastMsg(RegisterActivity.this, R.string.send_authcode_success); mAuthCodeTextView.setEnabled(false); if (mTimer == null) { mTimer = new Timer(); } mDexTime = 60; mTimer.schedule(new VertifyTimeTask(), 0, 1000); } else { CommonUtils.ToastMsg(RegisterActivity.this, R.string.send_authcode_failed); // super.onSuccess(statusCode, headers, rawJsonData, response); } } @Override protected BaseResponse parseResponse2(String rawJsonData, boolean isFailure) throws Throwable { LogUtils.e("RegisterActivity", "rawJsonData: " + rawJsonData); if (!isFailure && !TextUtils.isEmpty(rawJsonData)) { return GsonUtils.getInstance().getGson().fromJson(rawJsonData, BaseResponse.class); } return null; } }); } class VertifyTimeTask extends TimerTask { @Override public void run() { mHandler.sendEmptyMessage(0); } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.authcode_btn: userVertify(); break; case R.id.register_btn: register(); break; case R.id.back: ActivityUtils.animFinish(this, R.anim.slide_in_from_left, R.anim.slide_out_to_right); break; default: break; } } @Override protected void onResume() { super.onResume(); MobclickAgent.onPageStart(AnalyticsUtils.AnalyticsViewKeys.VIEW_REGISTER_ACTIVITY); MobclickAgent.onResume(this); } @Override protected void onPause() { super.onPause(); MobclickAgent.onPageEnd(AnalyticsUtils.AnalyticsViewKeys.VIEW_REGISTER_ACTIVITY); MobclickAgent.onPause(this); } public void register() { String authCode = mAuthCodeEditView.getText().toString().trim(); final String password = mPasswordEditView.getText().toString().trim(); if (TextUtils.isEmpty(authCode)) { CommonUtils.ToastMsg(this, R.string.error_empty_authcode); return; } if (TextUtils.isEmpty(password)) { CommonUtils.ToastMsg(this, R.string.error_empty_pwd); return; } final String phone = mPhoneEditView.getText().toString().trim(); MobclickAgent.onEvent(RegisterActivity.this, AnalyticsUtils.AnalyticsEventKeys.EVENT_REGISTER); UserApi.mobileRegister(RegisterActivity.this, AppConstants.PRODUCT_KEY, null, phone, password, authCode, new WrapperBaseJsonHttpResponseHandler<UserRegisterResponse>(RegisterActivity.this) { @Override public void onStart() { // CommonUtils.showProgressDialog(RegisterActivity.this, null, getString(R.string.registering), new OnDismissListener() { // // @Override // public void onDismiss(DialogInterface dialog) { // UserApi.cancel(RegisterActivity.this, true); // } // }); CommonUtils.showProgressDialog(RegisterActivity.this, null, null); } @Override public void onFailure(int statusCode, Header[] headers, Throwable throwable, String rawJsonData, UserRegisterResponse errorResponse) { super.onFailure(statusCode, headers, throwable, rawJsonData, errorResponse); } @Override public void onSuccess(int statusCode, Header[] headers, String rawJsonData, UserRegisterResponse response) { if (response.isSuccess()) { if (mTimer != null) { mTimer.cancel(); mTimer = null; } if (response.data != null) { UserState.getInstances(RegisterActivity.this).saveAccessToken(response.data.access_token); } login(phone, password); } else { CommonUtils.dismissDialog(); super.onSuccess(statusCode, headers, rawJsonData, response); } } @Override protected UserRegisterResponse parseResponse2(String rawJsonData, boolean isFailure) throws Throwable { LogUtils.d("UserApi#register-> parseResponse: " + rawJsonData); if (!isFailure && !TextUtils.isEmpty(rawJsonData)) { return GsonUtils.getInstance().getGson().fromJson(rawJsonData, UserRegisterResponse.class); } return null; } }); } public void login(String phone, String pwd) { UserApi.login(RegisterActivity.this, AppConstants.PRODUCT_KEY, null, phone, null, pwd, new WrapperBaseJsonHttpResponseHandler<UserLoginResponse>(this) { @Override public void onFailure(int statusCode, Header[] headers, Throwable throwable, String rawJsonData, UserLoginResponse errorResponse) { CommonUtils.ToastMsg(RegisterActivity.this, R.string.register_success); } @Override public void onSuccess(int statusCode, Header[] headers, String rawJsonData, UserLoginResponse response) { if (response.isSuccess()) { if (response.data != null) { UserState.getInstances(RegisterActivity.this).saveAccessToken(response.data.access_token); } mProductInfoHelper.getProductInfo(RegisterActivity.this); } else { CommonUtils.ToastMsg(RegisterActivity.this, R.string.register_success); onBackPressed(); } } @Override protected UserLoginResponse parseResponse2(String rawJsonData, boolean isFailure) throws Throwable { LogUtils.e("RegisterActivity", "rawJsonData: " + rawJsonData); if (!isFailure && !TextUtils.isEmpty(rawJsonData)) { return GsonUtils.getInstance().getGson().fromJson(rawJsonData, UserLoginResponse.class); } return null; } @Override public void onFinish() { CommonUtils.dismissDialog(); } }); } RequestListener productRequestListener = new SimpleRequestListener() { public void onSuccess() { CommonUtils.ToastMsg(RegisterActivity.this, R.string.register_success); setResult(RESULT_OK); ActivityUtils.start(RegisterActivity.this, MainActivity.class, R.anim.slide_in_from_right, R.anim.slide_out_to_left); finish(); } public void onFail(Exception e) { CommonUtils.ToastMsg(RegisterActivity.this, R.string.register_success); onBackPressed(); } public void onFinish() { CommonUtils.dismissDialog(); } }; @Override public void onBackPressed() { finish(); overridePendingTransition(R.anim.slide_in_from_left, R.anim.slide_out_to_right); } @Override protected void onDestroy() { if (mTimer != null) { mTimer.cancel(); mTimer = null; } UserApi.cancel(RegisterActivity.this, true); super.onDestroy(); } }