package com.mogujie.tt.ui.activity;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.Header;
import org.json.JSONArray;
import org.json.JSONObject;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.JsonHttpResponseHandler;
import com.loopj.android.http.PersistentCookieStore;
import com.loopj.android.http.RequestParams;
import com.mogujie.tt.R;
import com.mogujie.tt.app.IMEntrance;
import com.mogujie.tt.cache.biz.CacheHub;
import com.mogujie.tt.config.SysConstant;
import com.mogujie.tt.conn.NetStateDispach;
import com.mogujie.tt.imlib.IMActions;
import com.mogujie.tt.imlib.IMLoginManager;
import com.mogujie.tt.imlib.common.ErrorCode;
import com.mogujie.tt.imlib.db.IMDbManager.LoginIdentity;
import com.mogujie.tt.imlib.service.IMService;
import com.mogujie.tt.log.Logger;
import com.mogujie.tt.ui.base.TTBaseActivity;
import com.mogujie.tt.ui.utils.IMServiceHelper;
import com.mogujie.tt.ui.utils.IMServiceHelper.OnIMServiceListner;
public class LoginActivity extends TTBaseActivity implements OnIMServiceListner {
// todo eric remove uiHandler dead Codes
// protected static Handler uiHandler = null;
private EditText mNameView;
private EditText mPasswordView;
private String loginName;
@SuppressWarnings("unused")
private View mLoginFormView;
private View mLoginStatusView;
private Logger logger = Logger.getLogger(LoginActivity.class);
private IMServiceHelper imServiceHelper = new IMServiceHelper();
private IMLoginManager imLoginMgr;
public static Context instance = null;
private LoginIdentity loginIdentity;
private AsyncHttpClient client = new AsyncHttpClient();
private PersistentCookieStore myCookieStore;
// public static Handler getUiHandler() {
//
// return uiHandler;
//
// }
private String getLoginErrorTip(int errorCode) {
switch (errorCode) {
case ErrorCode.E_CONNECT_LOGIN_SERVER_FAILED:
return getString(R.string.connect_login_server_failed);
case ErrorCode.E_REQ_MSG_SERVER_ADDRS_FAILED:
return getString(R.string.req_msg_server_addrs_failed);
case ErrorCode.E_CONNECT_MSG_SERVER_FAILED:
return getString(R.string.connect_msg_server_failed);
case ErrorCode.E_LOGIN_MSG_SERVER_FAILED:
return getString(R.string.login_msg_server_failed);
case ErrorCode.E_LOGIN_GENERAL_FAILED:
return getString(R.string.login_error_general_failed);
default:
return getString(R.string.login_error_unexpected);
}
}
private void onLoginError(int errorCode) {
logger.e("login#onLoginError -> errorCode:%d", errorCode);
String errorTip = getLoginErrorTip(errorCode);
logger.d("login#errorTip:%s", errorTip);
mLoginStatusView.setVisibility(View.GONE);
Toast.makeText(this, errorTip, Toast.LENGTH_LONG).show();
}
@Override
public void onAction(String action, Intent intent,
BroadcastReceiver broadcastReceiver) {
// TODO Auto-generated method stub
logger.d("login#onAction -> action:%s", action);
if (action.equals(IMActions.ACTION_LOGIN_RESULT)) {
int errorCode = intent.getIntExtra(
SysConstant.lOGIN_ERROR_CODE_KEY, -1);
if (errorCode != ErrorCode.S_OK) {
onLoginError(errorCode);
} else {
onLoginSuccess();
}
}
}
@Override
public void onIMServiceConnected() {
// TODO Auto-generated method stub
logger.d("login#onIMServiceConnected");
IMService imService = imServiceHelper.getIMService();
if (imService == null) {
return;
}
imLoginMgr = imService.getLoginManager();
if (imLoginMgr != null) {
logger.i("chat#connect im service ok");
}
try {
loginIdentity = imService.getDbManager().loadLoginIdentity();
logger.d("login#loginId:%s", loginIdentity.loginId);
mNameView.setText(loginIdentity.loginId);
mPasswordView.setText(loginIdentity.pwd);
} catch (Exception e) {
logger.w("loadIdentity failed");
}
}
private void reqLoginServerAddrs () {
RequestParams paramMap = new RequestParams();
paramMap.put("imclient", "1.0");
paramMap.put("macim", "ooxx");
paramMap.put("remember", "1");
paramMap.put("user_email", "满山");
paramMap.put("user_pass", "xmg9273168275");
client.setUserAgent("Android-TT");
client.post("http://www.mogujie.com/user/zlogin/", paramMap, new JsonHttpResponseHandler() {
@Override
public void onFailure(int statusCode, Header[] headers,
String responseString, Throwable throwable) {
logger.d("login#onFailure1, responseString:%s", responseString);
super.onFailure(statusCode, headers, responseString, throwable);
}
@Override
public void onFailure(int statusCode, Header[] headers,
Throwable throwable, JSONArray errorResponse) {
logger.d("login#onFailure2, errorResponse:%s", errorResponse);
super.onFailure(statusCode, headers, throwable, errorResponse);
}
@Override
public void onFailure(int statusCode, Header[] headers,
Throwable throwable, JSONObject errorResponse) {
logger.d("login#onFailure3, errorResponse:%s", errorResponse);
super.onFailure(statusCode, headers, throwable, errorResponse);
}
@Override
public void onSuccess(int statusCode, Header[] headers,
JSONArray response) {
logger.d("login#onSuccess1, response:%s", response);
super.onSuccess(statusCode, headers, response);
}
@Override
public void onSuccess(int statusCode, Header[] headers,
JSONObject response) {
logger.d("login#onSuccess2, response:%s", response);
super.onSuccess(statusCode, headers, response);
}
@Override
public void onSuccess(int statusCode, Header[] headers,
String responseString) {
logger.d("login#onSuccess3, responseString:%s", responseString);
super.onSuccess(statusCode, headers, responseString);
}
});
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
logger.d("login#onCreate");
myCookieStore = new PersistentCookieStore(this);
client.setCookieStore(myCookieStore);
reqLoginServerAddrs();
List<String> actions = new ArrayList<String>();
actions.add(IMActions.ACTION_LOGIN_RESULT);
if (!imServiceHelper.connect(getApplicationContext(), actions,
IMServiceHelper.INTENT_NO_PRIORITY, this)) {
logger.e("login#fatal, connect im service failed");
}
// if (true) {
// CommonTest.test();
// return;
// }
IMEntrance.getInstance().setContext(LoginActivity.this);
initHandler();
setContentView(R.layout.tt_activity_login);
instance = this;
mNameView = (EditText) findViewById(R.id.name);
mPasswordView = (EditText) findViewById(R.id.password);
mPasswordView
.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int id,
KeyEvent keyEvent) {
if (id == R.id.login || id == EditorInfo.IME_NULL) {
attemptLogin();
return true;
}
return false;
}
});
mLoginFormView = findViewById(R.id.login_form);
mLoginStatusView = findViewById(R.id.login_status);
findViewById(R.id.sign_in_button).setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View view) {
attemptLogin();
// if (NetworkUtil.isNetWorkAvalible(LoginActivity.this)) {
//
//
//
// } else {
// mPasswordView.setError(getString(R.string.invalid_network));
// mPasswordView.requestFocus();
// }
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
imServiceHelper.disconnect(getApplicationContext());
}
public void attemptLogin() {
// mNameView.setError(null);
//
// mPasswordView.setError(null);
loginName = mNameView.getText().toString();
String mPassword = mPasswordView.getText().toString();
boolean cancel = false;
View focusView = null;
if (TextUtils.isEmpty(mPassword)) {
// mPasswordView.setError(getString(R.string.error_field_required));
Toast.makeText(this, getString(R.string.error_field_required),
Toast.LENGTH_SHORT).show();
focusView = mPasswordView;
cancel = true;
} else if (mPassword.length() < 4) {
// mPasswordView.setError(getString(R.string.error_invalid_password));
//
// focusView = mPasswordView;
//
// cancel = true;
}
if (TextUtils.isEmpty(loginName)) {
// mNameView.setError(getString(R.string.error_field_required));
Toast.makeText(this, getString(R.string.error_field_required),
Toast.LENGTH_SHORT).show();
focusView = mNameView;
cancel = true;
}
if (cancel) {
focusView.requestFocus();
} else {
showProgress(true);
// mPasswordView.setFocusable(false);
// mNameView.setFocusable(false);
// login(mName, mPassword);
// IMEntrance.getInstance().initTask(this, loginNickName,
// mPassword);
if (imLoginMgr != null) {
boolean userNameChanged = true;
boolean pwdChanged = true;
if (loginIdentity != null) {
if (loginName.equals(loginIdentity.loginId)) {
logger.d("login#username is not changed");
userNameChanged = false;
}
if (mPassword.equals(loginIdentity.pwd)) {
logger.d("login#pwd is not changed");
pwdChanged = false;
}
}
imLoginMgr.login(loginName, mPassword, userNameChanged,
pwdChanged);
}
}
}
@Override
public void onBackPressed() {
logger.d("login#onBackPressed");
if (imLoginMgr != null) {
imLoginMgr.cancel();
}
// TODO Auto-generated method stub
super.onBackPressed();
}
private void showProgress(final boolean show) {
if (show) {
mLoginStatusView.setVisibility(View.VISIBLE);
} else {
mLoginStatusView.setVisibility(View.GONE);
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
LoginActivity.this.finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
protected void initHandler() {
// uiHandler = new Handler() {
//
// @Override
// public void handleMessage(Message msg) {
//
// super.handleMessage(msg);
//
// switch (msg.what) {
// case HandlerConstant.HANDLER_LOGIN_MSG_SERVER:
// onLoginSuccess();
// break;
// case HandlerConstant.HANDLER_LOGIN_MSG_SERVER_FAILED:
// onLoginFailed(getString(R.string.login_failed));
// break;
// case HandlerConstant.HANDLER_LOGIN_MSG_SERVER_TIMEOUT:
// onLoginFailed(getString(R.string.login_timeout));
// break;
// default:
// onLoginFailed(getString(R.string.error_incorrect_user));
// break;
// }
// }
// };
}
// private void onLoginFailed(String tip) {
// mPasswordView.setError(tip);
// mPasswordView.requestFocus();
// mLoginStatusView.setVisibility(View.GONE);
// }
private void onLoginSuccess() {
logger.i("login#onLoginSuccess");
// todo eric remove it
CacheHub.getInstance()
.setLoginUser(
imServiceHelper.getIMService().getLoginManager()
.getLoginUser());
// todo eric remove this
// Intent i = new Intent();
// i.setAction(SysConstant.START_SERVICE_ACTION);
// LoginActivity.this.sendBroadcast(i);
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
LoginActivity.this.finish();
}
@Override
protected void onStop() {
NetStateDispach.getInstance().unregister(LoginActivity.class);
super.onStop();
}
}