/**
*
*/
package com.keju.maomao.activity;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.Display;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import com.keju.maomao.Constants;
import com.keju.maomao.R;
import com.keju.maomao.SystemException;
import com.keju.maomao.activity.bar.BarListActivity;
import com.keju.maomao.activity.base.BaseActivity;
import com.keju.maomao.helper.BusinessHelper;
import com.keju.maomao.util.NetUtil;
import com.keju.maomao.util.SharedPrefUtil;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.Tencent;
import com.tencent.tauth.UiError;
import com.umeng.analytics.MobclickAgent;
/**
* 登录界面
*
* @author zhouyong
* @data 创建时间:2013-10-16 下午1:23:52
*/
public class LoginActivity extends BaseActivity implements OnClickListener {
private EditText edUserName, edPassWord;
private Button btnLogin;
private TextView tvGetPasswordBack, tvRegisterMaoMao;
private ImageView ivSinaLogin, ivQQLogin;// 第三方登陆
private ProgressDialog pd;
private int logintype;// 登陆方式标志位
private Tencent mTencent;
private static final String SCOPE = "all";
private Button btn;
private String nickName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
MobclickAgent.onError(this);
findView();
fillData();
}
private void findView() {
mTencent = Tencent.createInstance(Constants.TENCENT_APP_ID, this.getApplicationContext());
edUserName = (EditText) this.findViewById(R.id.edUserName);
edPassWord = (EditText) this.findViewById(R.id.edPassWord);
tvGetPasswordBack = (TextView) this.findViewById(R.id.tvGetPasswordBack);
tvGetPasswordBack.setOnClickListener(this);
tvRegisterMaoMao = (TextView) this.findViewById(R.id.tvRegisterMaoMao);
tvRegisterMaoMao.setOnClickListener(this);
btnLogin = (Button) this.findViewById(R.id.btnLogin);
btnLogin.setOnClickListener(this);
ivSinaLogin = (ImageView) this.findViewById(R.id.ivSinaLogin);
ivSinaLogin.setOnClickListener(this);
ivQQLogin = (ImageView) this.findViewById(R.id.ivQQLogin);
ivQQLogin.setOnClickListener(this);
btn = (Button) this.findViewById(R.id.btn);
btn.setOnClickListener(this);
}
private void fillData() {
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnLogin:
String userName = edUserName.getText().toString().trim();
String passWord = edPassWord.getText().toString().trim();
if (TextUtils.isEmpty(userName) || TextUtils.isEmpty(passWord)) {
showShortToast("请输入用户名或密码");
return;
}
if (NetUtil.checkNet(LoginActivity.this)) {
logintype = Constants.LOGIN_COMMON;// 表示普通登陆
SharedPrefUtil.setLoginType(LoginActivity.this, logintype);
SharedPrefUtil.setPassword(LoginActivity.this, passWord);
new LoginTask(logintype, userName, passWord).execute();
} else {
showShortToast(R.string.NoSignalException);
}
break;
case R.id.ivSinaLogin:
if (SharedPrefUtil.checkWeiboBind(LoginActivity.this)) {
String openUid = SharedPrefUtil.getWeiboUid(this);
if (NetUtil.checkNet(this)) {
logintype = Constants.LOGIN_SINA;// 表示新浪微博登陆
SharedPrefUtil.setLoginType(LoginActivity.this, logintype);
SharedPrefUtil.setOpenId(LoginActivity.this, openUid);
new CheckTask(logintype, openUid).execute();
} else {
showShortToast(R.string.NoSignalException);
}
} else {
if (NetUtil.checkNet(this)) {
Intent authorizeIntent = new Intent(this, AuthorizeActivity.class);
authorizeIntent.putExtra(Constants.EXTRA_BIND_FROM, Constants.BIND_WEIBO);
logintype = Constants.LOGIN_SINA;// 表示新浪微博登陆
SharedPrefUtil.setLoginType(LoginActivity.this, logintype);
startActivityForResult(authorizeIntent, Constants.REQUEST_CODE_BIND_WEIBO);
} else {
showShortToast(R.string.NoSignalException);
}
}
break;
case R.id.ivQQLogin:
if (SharedPrefUtil.checkQQBind(this)) {
String openUid = SharedPrefUtil.getQQOpenid(this);
if (NetUtil.checkNet(this)) {
logintype = Constants.LOGIN_QQ;
SharedPrefUtil.setLoginType(LoginActivity.this, logintype);
SharedPrefUtil.setOpenId(LoginActivity.this, openUid);
new CheckTask(logintype, openUid).execute();
} else {
showShortToast(R.string.NoSignalException);
}
} else {
logintype = Constants.LOGIN_QQ;
IUiListener listener = new BaseUiListener(logintype);
mTencent.login(this, SCOPE, listener);
}
break;
case R.id.tvRegisterMaoMao:
openActivity(RegisterActivity.class);
break;
case R.id.btn:
openActivity(BarListActivity.class);
default:
break;
}
}
/**
* 登陆
*
* @author Zhouyong
*/
public class LoginTask extends AsyncTask<Void, Void, JSONObject> {
private String userName;
private String passWord;
private int logintype;
private String openid;
private boolean isThirdLogin = false;
/**
* @param nickName
* @param LoginWay
* @param openUid
*/
public LoginTask(int logintype, String openUid, boolean isThirdLogin) {
super();
this.openid = openUid;
this.logintype = logintype;
this.isThirdLogin = isThirdLogin;
}
/**
* @param LoginWay
* @param commonLogin
* @param userName
* @param passWord
*/
public LoginTask(int logintype, String userName, String passWord) {
super();
this.passWord = passWord;
this.userName = userName;
this.logintype = logintype;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
if (pd == null) {
pd = new ProgressDialog(LoginActivity.this);
}
pd.setMessage("正在登陆中...");
pd.show();
}
@Override
protected JSONObject doInBackground(Void... params) {
try {
if (isThirdLogin) {
return new BusinessHelper().thirdLogin(logintype, openid);
} else {
return new BusinessHelper().login(logintype, userName, passWord);
}
} catch (SystemException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(JSONObject result) {
super.onPostExecute(result);
if (pd != null) {
pd.dismiss();
}
if (result != null) {
try {
int status = result.getInt("status");
if (status == Constants.REQUEST_SUCCESS) {
JSONObject userJson = result.getJSONObject("user");
int uid = 0;
if (userJson.has("id")) {
uid = userJson.getInt("id");
}
SharedPrefUtil.setUid(LoginActivity.this, uid);
showShortToast("登录成功");
openActivity(MainActivity.class);
// openActivity(CityChangActivity.class);
finish();
} else {
if(result.getString("message").equals("不存在这个open_id")){
LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.dialog_ninkname_, null); //
TextView tvDialogMsg = (TextView) view.findViewById(R.id.tvDialogMsg); // 取得布局文件的控件
final EditText etNickName = (EditText) view.findViewById(R.id.etNickName); // 取得布局文件的控件
tvDialogMsg.setText("没有昵称无法第三方登录,请输入昵称");
final Dialog dialog = new Dialog(LoginActivity.this, R.style.dialog); // 取得style的文件
dialog.setContentView(view); // 将取得布局文件set进去
dialog.show(); // 显示
WindowManager windowManager = getWindowManager();
Display display = windowManager.getDefaultDisplay();
WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();
lp.width = (int) (display.getWidth() - 30); // 设置宽度
dialog.getWindow().setAttributes(lp);
Button btnDialogLeft = (Button) view.findViewById(R.id.btnDialogLeft);
btnDialogLeft.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
nickName = etNickName.getText().toString().trim();
if (TextUtils.isEmpty(nickName)) {
showShortToast("请输入昵称");
} else {
if (NetUtil.checkNet(LoginActivity.this)) {
new RegisterTask(nickName, logintype, openid, true).execute();
} else {
showShortToast(R.string.NoSignalException);
}
}
}
});
Button btnDialogRight = (Button) view.findViewById(R.id.btnDialogRight);
btnDialogRight.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
btnDialogRight.setText("取消");
}else{
showShortToast(result.getString("message"));
}
}
} catch (JSONException e) {
showShortToast(R.string.json_exception);
}
} else {
showShortToast(R.string.connect_server_exception);
}
}
}
/**
* 检查接口
*
* @author Zhouyong
*/
public class CheckTask extends AsyncTask<Void, Void, JSONObject> {
private int logintype;
private String openUid;
/**
* @param logintype
* @param openUid
*/
public CheckTask(int logintype, String openUid) {
this.logintype = logintype;
this.openUid = openUid;
}
@Override
protected JSONObject doInBackground(Void... params) {
try {
return new BusinessHelper().check(logintype, openUid);
} catch (SystemException e) {
}
return null;
}
@Override
protected void onPostExecute(JSONObject result) {
super.onPostExecute(result);
if (pd != null) {
pd.dismiss();
}
if (result != null) {
try {
int status = result.getInt("status");
if (status == Constants.REQUEST_FAILD) {
LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.dialog_ninkname_, null); //
TextView tvDialogMsg = (TextView) view.findViewById(R.id.tvDialogMsg); // 取得布局文件的控件
final EditText etNickName = (EditText) view.findViewById(R.id.etNickName); // 取得布局文件的控件
tvDialogMsg.setText("没有昵称无法第三方登录,请输入昵称");
final Dialog dialog = new Dialog(LoginActivity.this, R.style.dialog); // 取得style的文件
dialog.setContentView(view); // 将取得布局文件set进去
dialog.show(); // 显示
WindowManager windowManager = getWindowManager();
Display display = windowManager.getDefaultDisplay();
WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();
lp.width = (int) (display.getWidth() - 30); // 设置宽度
dialog.getWindow().setAttributes(lp);
Button btnDialogLeft = (Button) view.findViewById(R.id.btnDialogLeft);
btnDialogLeft.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
nickName = etNickName.getText().toString().trim();
if (TextUtils.isEmpty(nickName)) {
showShortToast("请输入昵称");
} else {
if (NetUtil.checkNet(LoginActivity.this)) {
new RegisterTask(nickName, logintype, openUid, true).execute();
} else {
showShortToast(R.string.NoSignalException);
}
}
}
});
Button btnDialogRight = (Button) view.findViewById(R.id.btnDialogRight);
btnDialogRight.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
btnDialogRight.setText("取消");
} else {
if (NetUtil.checkNet(LoginActivity.this)) {
new LoginTask(logintype, openUid, true).execute();
} else {
showShortToast(R.string.NoSignalException);
}
}
} catch (JSONException e) {
showShortToast(R.string.json_exception);
}
} else {
showShortToast(R.string.connect_server_exception);
}
}
}
public class RegisterTask extends AsyncTask<Void, Void, JSONObject> {
private String nickName;
private int logintype;
private String openId;;
private boolean isThirdLogin = false;
/**
* @param nickName
* @param logintype
* @param openId
* @param isThirdLogin
*/
public RegisterTask(String nickName, int logintype, String openId, boolean isThirdLogin) {
this.nickName = nickName;
this.logintype = logintype;
this.openId = openId;
this.isThirdLogin = isThirdLogin;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
if (pd == null) {
pd = new ProgressDialog(LoginActivity.this);
}
pd.setMessage("登陆中...");
pd.show();
}
@Override
protected JSONObject doInBackground(Void... params) {
try {
if (isThirdLogin) {
return new BusinessHelper().register(nickName, logintype, openId);
} else {
// return new BusinessHelper().thirdLogin(logintype,
// openId);
}
} catch (SystemException e) {
}
return null;
}
@Override
protected void onPostExecute(JSONObject result) {
super.onPostExecute(result);
if (pd != null) {
pd.dismiss();
}
if (result != null) {
try {
int status = result.getInt("status");
if (status == Constants.REQUEST_SUCCESS) {
JSONObject userJson = result.getJSONObject("user");
showShortToast("登陆成功");
int uid = userJson.getInt("id");
SharedPrefUtil.setUid(LoginActivity.this, uid);
setResult(RESULT_OK);
openActivity(MainActivity.class);
finish();
} else {
showShortToast(result.getString("message"));
}
} catch (JSONException e) {
showShortToast(R.string.json_exception);
}
} else {
showShortToast(R.string.connect_server_exception);
}
}
}
private class BaseUiListener implements IUiListener {
private int logintype;
/**
* @param logintype
*/
public BaseUiListener(int logintype) {
super();
this.logintype = logintype;
}
@Override
public void onComplete(JSONObject response) {
String access_token;
String expires_in;
String openid;
try {
access_token = response.getString("access_token");
expires_in = response.getString("expires_in");
openid = response.getString("openid");
String currTime = System.currentTimeMillis() + "";
SharedPrefUtil.setQQInfo(LoginActivity.this, access_token, expires_in, openid, currTime);
SharedPrefUtil.setLoginType(LoginActivity.this, logintype);
new LoginTask(logintype, openid, true).execute();
} catch (JSONException e) {
}
}
@Override
public void onError(UiError e) {
showShortToast("msg:" + e.errorMessage + ", detail:" + e.errorDetail);
}
@Override
public void onCancel() {
showShortToast("取消授权");
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case Constants.REQUEST_CODE_BIND_WEIBO:
if (resultCode == RESULT_OK) {
String uid = SharedPrefUtil.getWeiboUid(LoginActivity.this);
logintype = Constants.LOGIN_SINA;
new LoginTask(logintype, uid, true).execute();
}
break;
case Constants.REQUEST_CODE_REGISTER:
if (resultCode == RESULT_OK) {
finish();
}
break;
default:
if (mTencent == null) {
return;
}
if (!mTencent.onActivityResult(requestCode, resultCode, data)) {
}
break;
}
}
}