package com.qiwenge.android.ui.dialogs;
import android.app.Activity;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.AdapterView;
import com.loopj.android.http.RequestParams;
import com.qiwenge.android.R;
import com.qiwenge.android.constant.Constants;
import com.qiwenge.android.entity.Auth;
import com.qiwenge.android.entity.User;
import com.qiwenge.android.listeners.LoginListener;
import com.qiwenge.android.login.AuthListener;
import com.qiwenge.android.login.AuthSuccess;
import com.qiwenge.android.login.LoginType;
import com.qiwenge.android.login.SinaWeiboLogin;
import com.qiwenge.android.login.TencentLogin;
import com.qiwenge.android.utils.ApiUtils;
import com.qiwenge.android.utils.LoginManager;
import com.qiwenge.android.utils.http.BaseResponseHandler;
import com.qiwenge.android.utils.http.JHttpClient;
import com.qiwenge.android.utils.http.JsonResponseHandler;
/**
* Created by Eric on 14/11/12.
*/
public class LoginDialog implements AuthListener {
private MyDialog dialog;
private Activity act;
private LoginListener loginListener;
public void setLoginListener(LoginListener l) {
loginListener = l;
}
public LoginDialog(Activity context) {
act = context;
dialog = new MyDialog(context, R.string.choose_login_type);
String[] items = context.getResources().getStringArray(R.array.login_types);
dialog.setItems(items, new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
switch (position) {
case 0:
loginSina();
break;
case 1:
loginByTencent();
break;
}
dialog.showLoading();
}
}, false);
}
public void show() {
dialog.show();
}
private void loginSina() {
SinaWeiboLogin.login(act, this);
}
private void loginByTencent() {
TencentLogin.login(act, this);
}
@Override
public void onStart() {
}
@Override
public void onFailure() {
dialog.dismiss();
}
@Override
public void authSuccess(String uid, String username, String avatarUrl, LoginType loginType) {
AuthSuccess authSuccess = new AuthSuccess();
authSuccess.setOpenId(uid);
authSuccess.setUsername(username);
authSuccess.setAvatarUrl(avatarUrl);
authSuccess.setLoginType(loginType);
login(authSuccess);
Message msg = mHandler.obtainMessage();
msg.what = 0;
msg.sendToTarget();
}
private void login(final AuthSuccess authSuccess) {
String url = ApiUtils.putAuth();
System.out.println("login:" + url);
RequestParams params = new RequestParams();
params.put("open_id", authSuccess.getOpenId().toLowerCase());
JHttpClient.put(url, params, new JsonResponseHandler<Auth>(Auth.class, false) {
@Override
public void onSuccess(Auth result) {
if (result != null) {
getUser(result.userId);
LoginManager.saveAuth(act, result);
}
}
@Override
public void onFailure(int statusCode, String msg) {
// System.out.println("login-onFailure-statusCode:" + statusCode);
// System.out.println("login-onFailure-msg:" + msg);
if (statusCode == Constants.STATUS_CODE_UN_REG) {
reg(authSuccess);
}
}
@Override
public void onFinish() {
System.out.println("login-onFinish");
}
});
}
private void reg(AuthSuccess authSuccess) {
String url = ApiUtils.postUser();
System.out.println("reg:" + url);
RequestParams params = new RequestParams();
params.put("username", authSuccess.getUsername());
params.put("avatar", authSuccess.getAvatarUrl());
params.put("open_id", authSuccess.getOpenId().toLowerCase());
params.put("from", authSuccess.getLoginType().toString());
System.out.println("reg:" + url + "?" + params.toString());
JHttpClient.post(url, params, new BaseResponseHandler() {
@Override
public void onSuccess(String result) {
System.out.println("reg-onSuccess:" + result);
}
@Override
public void onFailure(int statusCode, String msg) {
dialog.dismiss();
}
@Override
public void onFinish() {
}
});
}
private void getUser(String userId) {
String url = ApiUtils.getUser(userId);
JHttpClient.get(act, url, null, new JsonResponseHandler<User>(User.class, false) {
@Override
public void onOrigin(String json) {
System.out.println("getUser-onSuccess:" + json);
}
@Override
public void onSuccess(User result) {
LoginManager.saveUser(act, result);
Message msg = mHandler.obtainMessage();
msg.what = 1;
msg.sendToTarget();
}
@Override
public void onFinish() {
dialog.dismiss();
}
});
}
private final Handler mHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
switch (msg.what) {
case 0:
dialog.showLoading();
break;
case 1:
if (loginListener != null) {
loginListener.onSuccess();
}
break;
}
return false;
}
});
}