package com.yyquan.jzh.activity;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams;
import com.tencent.android.tpush.XGIOperateCallback;
import com.tencent.android.tpush.XGPushManager;
import com.yyquan.jzh.R;
import com.yyquan.jzh.entity.Ip;
import com.yyquan.jzh.entity.User;
import com.yyquan.jzh.location.Location;
import com.yyquan.jzh.util.SaveUserUtil;
import com.yyquan.jzh.util.SharedPreferencesUtil;
import com.yyquan.jzh.util.ToastUtil;
import com.yyquan.jzh.view.DialogView;
import com.yyquan.jzh.xmpp.XmppService;
import com.yyquan.jzh.xmpp.XmppTool;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
import cn.pedant.SweetAlert.SweetAlertDialog;
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.qq.QQ;
import cz.msebera.android.httpclient.Header;
public class LoginActivity extends Activity implements View.OnClickListener, PlatformActionListener {
TextView tv_phone_regster;
EditText et_user;
EditText et_password;
TextView tv_login;
TextView tv_password;
private String url = Ip.ip + "/YfriendService/DoGetUser";
String user = "";
String password = "";
RadioButton rb_qq;
RadioButton rb_weibo;
Location lt;
private final int XMPP_LOGIN = 3;
private final int CREATE_USER = 4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_login);
ShareSDK.initSDK(this);
lt = new Location(this);
}
@Override
protected void onResume() {
super.onResume();
initialView();
}
@Override
protected void onDestroy() {
super.onDestroy();
lt.stopLocation();
}
/**
* 初始化控件
*/
private void initialView() {
DialogView.Initial(LoginActivity.this, "正在登录......");
tv_phone_regster = (TextView) findViewById(R.id.login_textview_phone_regster);
tv_password = (TextView) findViewById(R.id.login_textview_forget_password);
et_user = (EditText) findViewById(R.id.login_editText_user);
et_password = (EditText) findViewById(R.id.login_editText_password);
tv_login = (TextView) findViewById(R.id.login_textview_enter);
rb_qq = (RadioButton) findViewById(R.id.login_imageView_qqlogin);
rb_weibo = (RadioButton) findViewById(R.id.login_imageView_weibologin);
tv_phone_regster.setOnClickListener(this);
tv_password.setOnClickListener(this);
tv_login.setOnClickListener(this);
rb_qq.setOnClickListener(this);
rb_weibo.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.login_textview_phone_regster:
gotoPhoneRegster("regster");
break;
case R.id.login_textview_forget_password:
gotoPhoneRegster("password");
break;
case R.id.login_imageView_qqlogin:
tv_login.setEnabled(false);
DialogView.show();
qq_login();
break;
case R.id.login_imageView_weibologin:
tv_login.setEnabled(false);
DialogView.show();
weibo_login();
break;
case R.id.login_textview_enter:
user = et_user.getText().toString();
password = et_password.getText().toString();
if (user.equals("") || password.equals("")) {
ToastUtil.show(LoginActivity.this, "用户名或密码不能为空");
return;
}
DialogView.show();
tv_login.setEnabled(false);
login(user, password);
break;
}
}
/**
* 新浪微博登录
*/
private void weibo_login() {
Platform weibo = ShareSDK.getPlatform(SinaWeibo.NAME);
if (weibo.isValid()) {
weibo.removeAccount();
}
weibo.setPlatformActionListener(this); // 设置分享事件回调
weibo.SSOSetting(true); // 设置false表示使用SSO授权方式
// weibo.authorize();
weibo.showUser(null);
}
/**
* QQ登录
*/
private void qq_login() {
Platform weibo = ShareSDK.getPlatform(QQ.NAME);
if (weibo.isValid()) {
weibo.removeAccount();//删除前一次的授权信息
}
weibo.setPlatformActionListener(this); // 设置分享事件回调
// 设置false表示使用SSO授权方式,意思就是如果有QQ就直接跳到QQ授权,如果没有就跳到网页
weibo.SSOSetting(false);
weibo.showUser(null);
}
/**
* 跳转到手机注册界面
*/
private void gotoPhoneRegster(String type) {
Intent it = new Intent(this, PhoneRegsterActivity.class);
it.putExtra("type", type);
startActivity(it);
}
long newTime;
@Override
public void onBackPressed() {
if (System.currentTimeMillis() - newTime > 2000) {
newTime = System.currentTimeMillis();
Toast.makeText(this, "再按一次返回键退出程序", Toast.LENGTH_SHORT).show();
} else {
finish();
}
}
@Override
public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {
Log.i("login","chenggong");
Log.i("login",platform.getName()+"");
Log.i("login",hashMap.toString());
Log.i("login", platform.getDb().getUserId()+"");
Message m = new Message();
m.what = 1;
m.obj = new Object[]{platform.getName(), hashMap, platform.getDb().getUserId()};
h.sendMessage(m);
}
@Override
public void onError(Platform platform, int i, Throwable throwable) {
Log.i("login","失败");
Log.i("login",i+"");
Log.i("login",throwable.getMessage());
tv_login.setEnabled(true);
DialogView.dismiss();
}
@Override
public void onCancel(Platform platform, int i) {
tv_login.setEnabled(true);
DialogView.dismiss();
}
Handler h = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
Object[] objs = (Object[]) msg.obj;
String platform = (String) objs[0];
String id = (String) objs[2];
HashMap<String, Object> res = (HashMap<String, Object>) objs[1];
// Toast.makeText(LoginActivity.this,res.toString(),Toast.LENGTH_SHORT).show();
if (platform.equals("QQ")) {
isRegster(id, res, "QQSJHAAJSHAJSH");
} else if (platform.equals("SinaWeibo")) {
isRegster(id, res, "SINAHKSJDHSKDH");
}
break;
case XMPP_LOGIN:
final User users = (User) msg.obj;
new Thread() {
@Override
public void run() {
boolean result = XmppTool.getInstance().login(users.getUser(), users.getPassword(), LoginActivity.this);
if (result) {
runOnUiThread(new Runnable() {
@Override
public void run() {
SaveUserUtil.saveAccount(LoginActivity.this, users);
startService(new Intent(LoginActivity.this, XmppService.class));
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.putExtra("user", users);
regster_push(users.getUser());
SharedPreferencesUtil.setBoolean(LoginActivity.this, "user_message", "login", true);
startActivity(intent);
finish();
DialogView.dismiss();
Toast.makeText(LoginActivity.this, "登陆成功", Toast.LENGTH_LONG).show();
}
});
} else {
runOnUiThread(new Runnable() {
@Override
public void run() {
DialogView.dismiss();
tv_login.setEnabled(true);
Toast.makeText(LoginActivity.this, "登陆失败,请重试", Toast.LENGTH_LONG).show();
}
});
}
}
}.start();
break;
case CREATE_USER:
User use = (User) msg.obj;
regster(use);
break;
}
}
};
/**
* 登录
*/
private void login(String user, String password) {
RequestParams params = new RequestParams();
params.put("user", user);
params.put("password", password);
params.put("action", "login");
AsyncHttpClient client = new AsyncHttpClient();
client.setConnectTimeout(5000);
client.post(url, params, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
String str = new String(responseBody);
if (str != null) {
try {
JSONObject object = new JSONObject(str);
if (object.getString("code").equals("success")) {
object = object.getJSONObject("data");
User user = new User();
user.setUser(object.getString("user"));
user.setPassword(object.getString("password"));
user.setQq(object.getString("qq"));
user.setIcon(object.getString("icon"));
user.setNickname(object.getString("nickname"));
user.setCity(object.getString("city"));
user.setSex(object.getString("sex"));
user.setYears(object.getString("years"));
user.setQianming(object.getString("qianming"));
Message m = h.obtainMessage(XMPP_LOGIN);
m.obj = user;
h.sendMessage(m);
} else {
DialogView.dismiss();
tv_login.setEnabled(true);
Toast.makeText(LoginActivity.this, "账号或密码有误,请重新输入", Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
tv_login.setEnabled(true);
DialogView.dismiss();
}
} else {
tv_login.setEnabled(true);
DialogView.dismiss();
}
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
DialogView.dismiss();
tv_login.setEnabled(true);
Toast.makeText(LoginActivity.this, "网络连接失败,请查看网络设置", Toast.LENGTH_SHORT).show();
}
});
}
/**
* 判断该账号是否已注册
*/
private void isRegster(final String users, final HashMap<String, Object> objs, final String type) {
RequestParams params = new RequestParams();
params.put("user", users);
params.put("action", "search");
AsyncHttpClient client = new AsyncHttpClient();
client.post(url, params, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
String str = new String(responseBody);
if (str != null) {
try {
JSONObject object = new JSONObject(str);
if (object.getString("code").equals("success")) {
// Intent intent = new Intent(LoginActivity.this, QQRegsterActivity.class);
User user = new User();
user.setUser(users);
if (type.equals("QQSJHAAJSHAJSH")) {
user.setNickname((String) objs.get("nickname"));
user.setCity((String) objs.get("province") + (String) objs.get("city"));
user.setSex((String) objs.get("gender"));
user.setIcon((String) objs.get("figureurl_qq_2"));
user.setPassword("QQSJHAAJSHAJSH");
} else if (type.equals("SINAHKSJDHSKDH")) {
user.setNickname((String) objs.get("name"));
user.setCity((String) objs.get("location"));
user.setPassword("SINAHKSJDHSKDH");
String sex = (String) objs.get("gender");
if (sex.equals("f")) {
user.setSex("女");
} else {
user.setSex("男");
}
user.setIcon((String) objs.get("avatar_large"));
}
Message m = h.obtainMessage(CREATE_USER);
m.obj = user;
h.sendMessage(m);
} else if (object.getString("code").equals("failure")) {
login(users, type);
// Toast.makeText(LoginActivity.this, "该账号已注册", Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
} else {
}
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
Toast.makeText(LoginActivity.this, "网络连接失败,请查看网络设置", Toast.LENGTH_SHORT).show();
}
});
}
/**
* 注册
*/
private void regster(final User user) {
RequestParams params = new RequestParams();
params.put("user", user.getUser());
params.put("nickname", user.getNickname());
params.put("password", user.getPassword());
params.put("sex", user.getSex());
params.put("icon", user.getIcon());
params.put("location", lt.location);
if(user.getCity()==null||user.getCity().equals("")){
user.setCity("未知星球");
}
params.put("city", user.getCity());
params.put("years", "");
params.put("qq", "");
params.put("action", "save");
AsyncHttpClient client = new AsyncHttpClient();
client.post(url, params, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
String str = new String(responseBody);
if (str != null) {
try {
JSONObject object = new JSONObject(str);
if (object.getString("code").equals("success")) {
Toast.makeText(LoginActivity.this, "初次登录注册成功", Toast.LENGTH_SHORT).show();
Message m = h.obtainMessage(XMPP_LOGIN);
m.obj = user;
h.sendMessage(m);
} else {
Toast.makeText(LoginActivity.this, "初次登录注册失败,请重试", Toast.LENGTH_SHORT).show();
tv_login.setEnabled(true);
}
} catch (JSONException e) {
e.printStackTrace();
tv_login.setEnabled(true);
}
} else {
tv_login.setEnabled(true);
}
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
Toast.makeText(LoginActivity.this, "网络连接失败,请查看网络设置", Toast.LENGTH_SHORT).show();
tv_login.setEnabled(true);
DialogView.dismiss();
}
});
}
/**
* 注册信鸽
*/
private void regster_push(String user) {
XGPushManager.registerPush(getApplicationContext(), user, new XGIOperateCallback() {
@Override
public void onSuccess(Object o, int i) {
// Toast.makeText(LoginActivity.this, "注册成功", Toast.LENGTH_SHORT).show();
}
@Override
public void onFail(Object o, int i, String s) {
// Toast.makeText(LogoActivity.this, "注册失败" + i + "\n" + s, Toast.LENGTH_SHORT).show();
}
});
}
}