package com.app.function;
import java.util.HashMap;
import org.json.JSONObject;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
import com.app.interFace.ThirdPartyLoginCallBack;
import com.google.gson.Gson;
import com.ldxy.letsgoo.R;
import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Handler.Callback;
import android.os.Message;
import android.text.TextUtils;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.Toast;
import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.PlatformActionListener;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.sina.weibo.SinaWeibo;
import cn.sharesdk.tencent.qzone.QZone;
import cn.sharesdk.wechat.friends.Wechat;
public class ThirdPartyLogin extends Dialog implements OnClickListener,
Callback, PlatformActionListener {
private static final int MSG_USERID_FOUND = 1;
private static final int MSG_AUTH_CANCEL = 2;
private static final int MSG_AUTH_ERROR = 3;
private static final int MSG_AUTH_COMPLETE = 4;
private Handler handler;
private TextView weixin;
private TextView qq;
private TextView sina;
private Activity activity;
private Platform p;
private RequestQueue mRequestQueue;
private UserInfo user = null;
private ThirdPartyLoginCallBack callback;
public ThirdPartyLogin(Activity activity, ThirdPartyLoginCallBack callback) {
super(activity);
this.activity = activity;
this.callback = callback;
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.login_page);
ShareSDK.initSDK(activity);
handler = new Handler(this);
mRequestQueue = Volley.newRequestQueue(activity);
weixin = (TextView) findViewById(R.id.login_page_weixin);
qq = (TextView) findViewById(R.id.login_page_qq);
sina = (TextView) findViewById(R.id.login_page_sina);
weixin.setOnClickListener(this);
qq.setOnClickListener(this);
sina.setOnClickListener(this);
}
@Override
public void onCancel(Platform platform, int action) {
if (action == Platform.ACTION_USER_INFOR) {
handler.sendEmptyMessage(MSG_AUTH_CANCEL);
}
}
@Override
public void onComplete(Platform platform, int action,
HashMap<String, Object> res) {
if (action == Platform.ACTION_USER_INFOR) {
Message m = new Message();
m.what = MSG_AUTH_COMPLETE;
m.obj = platform.getName();
handler.sendMessage(m);
}
}
@Override
public void onError(Platform platform, int action, Throwable t) {
if (action == Platform.ACTION_USER_INFOR) {
handler.sendEmptyMessage(MSG_AUTH_ERROR);
}
}
@Override
public boolean handleMessage(Message msg) {
switch (msg.what) {
case MSG_AUTH_CANCEL: {
Toast.makeText(activity.getApplicationContext(), "已取消授权", 0).show();
}
break;
case MSG_AUTH_ERROR: {
Toast.makeText(activity.getApplicationContext(), "授权失败", 0).show();
}
break;
case MSG_AUTH_COMPLETE: {
dismiss();
int paramint = ShareSDK.platformNameToId(String.valueOf(msg.obj));
p = ShareSDK.getPlatform(ShareSDK.platformIdToName(paramint));
Authentication(p.getDb().getUserId(), p.getName(), p.getDb()
.getUserName(), p.getDb().getUserGender());
}
break;
case MSG_USERID_FOUND: {
dismiss();
int paramint = ShareSDK.platformNameToId(String.valueOf(msg.obj));
p = ShareSDK.getPlatform(ShareSDK.platformIdToName(paramint));
Authentication(p.getDb().getUserId(), p.getName(), p.getDb()
.getUserName(), p.getDb().getUserGender());
}
break;
}
return false;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.login_page_weixin:
Platform weixin = ShareSDK.getPlatform(Wechat.NAME);
authorize(weixin);
break;
case R.id.login_page_qq:
Platform qq = ShareSDK.getPlatform(QZone.NAME);
authorize(qq);
break;
case R.id.login_page_sina:
Platform sina = ShareSDK.getPlatform(SinaWeibo.NAME);
authorize(sina);
break;
}
}
private void authorize(Platform plat) {
if (plat.isValid()) {
String userId = plat.getDb().getUserId();
if (userId != null) {
Message m = new Message();
m.what = MSG_USERID_FOUND;
m.obj = plat.getName();
handler.sendMessage(m);
return;
}
}
plat.SSOSetting(true);
plat.setPlatformActionListener(this);
plat.showUser(null);
}
private void Authentication(String account, String usertype,
String nickname, String gender) {
String url = Configuration.loginUrl;
HashMap<String, String> params = new HashMap<String, String>();
params.put("account", account);
params.put("usertype", usertype);
params.put("nickname", nickname);
params.put("gender", gender);
JsonObjectRequest jar = new JsonObjectRequest(Request.Method.POST, url,
new JSONObject(params), new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Gson gson = new Gson();
user = gson.fromJson(response.toString(),
UserInfo.class);
if (user == null) {
Toast.makeText(activity.getApplicationContext(),
"登录失败", 0).show();
} else {
UserInfo.setUserInfo(user);
if (TextUtils.isEmpty(UserInfo.user.getPictureurl())) {
UserInfo.user.setPictureurl(p.getDb()
.getUserIcon());
}
callback.donelogin();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(activity.getApplicationContext(),
"登录失败", 0).show();
}
});
mRequestQueue.add(jar);
}
}