package com.partynetwork.iparty.login;
import org.json.JSONException;
import org.json.JSONObject;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.TransitionDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Handler.Callback;
import android.os.Message;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.AutoCompleteTextView;
import android.widget.EditText;
import android.widget.ImageView;
import com.openfire.manager.XmppConnection;
import com.partynetwork.dataprovider.util.StringUtil;
import com.partynetwork.dataprovider.util.T;
import com.partynetwork.iparty.R;
import com.partynetwork.iparty.app.AppConfig;
import com.partynetwork.iparty.app.AppContext;
import com.partynetwork.iparty.app.AppException;
import com.partynetwork.iparty.app.AppManager;
import com.partynetwork.iparty.app.bean.BLogin;
import com.partynetwork.iparty.app.common.AccessTokenKeeper;
import com.partynetwork.iparty.app.common.QQWeiboHelper;
import com.partynetwork.iparty.app.common.SinaWeiboHelper;
import com.partynetwork.iparty.app.common.UIHelper;
import com.partynetwork.iparty.app.util.StringUtils;
import com.partynetwork.iparty.flipmenu.Main;
import com.partynetwork.myview.myimageview.CircularImage;
import com.partynetwork.myview.mytoast.MenuBottomPop;
import com.tencent.weibo.sdk.android.component.sso.WeiboToken;
import com.baidu.mobstat.StatService;
import com.lidroid.xutils.BitmapUtils;
import eu.inmite.android.lib.dialogs.ISimpleDialogListener;
/**
* 登陆界面
*/
public class Login extends FragmentActivity implements Callback,
OnClickListener, ISimpleDialogListener {
public final static int LOGIN_OTHER = 0x00;
public static final int LOGIN_MAIN = 0x01;
public static final int LOGIN_REGISTER = 0x02;
public static final int LOGIN_GUI = 0x03;
private CircularImage mHeadImage;// 头像
private AutoCompleteTextView mAccount;// 用户名
private EditText mPwd;// 密码
private ImageView imageView;// 背景
private MenuBottomPop menuBottonPop;// 底部功能菜单
private int type;// 登陆类别
private BitmapUtils bitmapUtils;
int registerType = 0;
private Handler handler;
private int i = 1;
// 登陆类别
private int curLoginType;
private EasyLoginReceiver easyLoginReceiver;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.DefaultLightTheme);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.login);
curLoginType = getIntent().getIntExtra("LOGINTYPE", LOGIN_OTHER);
if (curLoginType == LOGIN_REGISTER) {
Intent intent = new Intent(Login.this, Main.class);
intent.putExtra("LOGIN", true);
startActivity(intent);
finish();
}
initView();
initData();
easyLoginReceiver = new EasyLoginReceiver();
// 生成一个BroadReceiver对象
IntentFilter myFilter = new IntentFilter();
// 生成一个IntentFilter对象
myFilter.addAction("com.iparty.easylogin");
// 为IntentFilter添加一个Action
registerReceiver(easyLoginReceiver, myFilter);
}
private void initView() {
imageView = (ImageView) this.findViewById(R.id.background);
mHeadImage = (CircularImage) this.findViewById(R.id.login_head);
mAccount = (AutoCompleteTextView) findViewById(R.id.login_account);
mPwd = (EditText) findViewById(R.id.login_password);
findViewById(R.id.login_forget_text).setOnClickListener(this);
findViewById(R.id.login_submit).setOnClickListener(this);
findViewById(R.id.login_register).setOnClickListener(this);
findViewById(R.id.login_sina).setOnClickListener(this);
findViewById(R.id.login_qq).setOnClickListener(this);
//腾讯先隐掉
findViewById(R.id.login_qq).setVisibility(View.GONE);
}
private void initData() {
// 是否显示登录信息
AppContext ac = (AppContext) getApplication();
BLogin user = ac.getLoginInfo();
if (user == null) {
return;
}
if (!StringUtils.isEmpty(user.getAccount())) {
mAccount.setText(user.getAccount());
mAccount.selectAll();
}
if (!StringUtils.isEmpty(user.getPwd())) {
System.out.println("user.getPwd()======"+user.getPwd());
mPwd.setText(user.getPwd());
}
if (!StringUtils.isEmpty(user.getFace())) {
if (bitmapUtils == null) {
bitmapUtils = new BitmapUtils(this);
}
bitmapUtils.display(mHeadImage, user.getFace());
}
handler = new Handler(this);
handler.postDelayed(runnable, 3000);// 3秒切换一次背景
}
// 用于切换背景图
Runnable runnable = new Runnable() {
@Override
public void run() {
handler.sendEmptyMessage(i);
handler.postDelayed(this, 5000);
if (i == 4) {
i = 1;
} else {
i++;
}
}
};
@Override
public boolean handleMessage(Message msg) {
switch (msg.what) {
case 1:
displayDrawable(R.drawable.login_bg1, R.drawable.login_bg2);
break;
case 2:
displayDrawable(R.drawable.login_bg2, R.drawable.login_bg3);
break;
case 3:
displayDrawable(R.drawable.login_bg3, R.drawable.login_bg4);
break;
case 4:
displayDrawable(R.drawable.login_bg4, R.drawable.login_bg1);
break;
case 5:
T.hideLoading();
BLogin user = (BLogin) msg.obj;
if (user != null) {
// 跳转--加载用户动态
Intent intent = new Intent(Login.this, Main.class);
intent.putExtra("LOGIN", true);
startActivity(intent);
T.showShort(Login.this, "登录成功!");
AppContext appContext = (AppContext) getApplicationContext();
OpenfireLoginTask task = new OpenfireLoginTask(Login.this,
appContext.getLoginUid() + "", appContext
.getLoginInfo().getPwd());
task.execute();
finish();
}
break;
case -1:
AppException e = (AppException) msg.obj;
e.makeToast(Login.this);
break;
default:
break;
}
return false;
}
/**
* 事件监听
*
* @param v
*/
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.login_forget_text:
// 显示重置密码底部菜单
showPopMenu(resetStr, menuClick);
break;
case R.id.login_submit:
// 开始登陆
loginSubmit();
break;
case R.id.login_register:
// 显示注册底部菜单
showPopMenu(registerStr, menuClick2);
break;
case R.id.login_sina:
SinaWeiboHelper.loginAuth(this, loginAuthListener);
break;
case R.id.login_qq:
QQWeiboHelper.loginAuth(this, loginAuthListener);
break;
default:
break;
}
}
LoginAuthListener loginAuthListener = new LoginAuthListener() {
@Override
public void getUserInfo(final int loginType, final String account,
final String uid, final String userName, final String head,
final String token, final long expiresTime) {
T.showLoading(Login.this);
new Thread() {
public void run() {
Message msg = new Message();
try {
AppContext ac = (AppContext) getApplication();
BLogin user = ac.easyLogin(loginType, account, uid,
userName, head, token, expiresTime);
ac.saveLoginInfo(user);// 保存登录信息
msg.what = 5;// 成功
msg.obj = user;
} catch (AppException e) {
e.printStackTrace();
msg.what = -1;
msg.obj = e;
}
handler.sendMessage(msg);
}
}.start();
}
};
/**
* 登陆验证
*/
private void loginSubmit() {
// 获取用户名密码
String account = mAccount.getText().toString();
String pwd = mPwd.getText().toString();
// 验证用户名是否正确
if (!StringUtil.filterEmail(account)
&& !StringUtil.filterPhoneNumber(account)) {
// 用户名格式错误
T.showTips(Login.this, R.drawable.tips_error, "用户名格式错误!");
} else if (!StringUtil.filterPassword(pwd)) {
// 密码格式错误
T.showTips(Login.this, R.drawable.tips_error, "密码格式错误!");
} else {
T.showLoading(this);
// 验证用户名类型
if (StringUtil.filterEmail(account)) {
type = 1;
} else {
type = 0;
}
login(account, pwd, type);
}
}
/**
* 登陆
*
* @param account
* @param pwd
* @param loginType
*/
private void login(final String account, final String pwd,
final int loginType) {
new Thread() {
public void run() {
Message msg = new Message();
try {
AppContext ac = (AppContext) getApplication();
BLogin user = ac.loginVerify(account, pwd, loginType);
ac.saveLoginInfo(user);// 保存登录信息
msg.what = 5;// 成功
msg.obj = user;
} catch (AppException e) {
e.printStackTrace();
msg.what = -1;
msg.obj = e;
}
handler.sendMessage(msg);
}
}.start();
}
private String[] resetStr = new String[] { "通过手机设置密码", "通过邮箱设置密码" };
private OnClickListener menuClick = new OnClickListener() {
public void onClick(View v) {
menuBottonPop.dismiss();
if (v.getTag().equals(resetStr[0])) {
registerType = 2;
} else if (v.getTag().equals(resetStr[1])) {
registerType = 3;
}
Intent intent = new Intent(Login.this, RegisterOneActivity.class);
intent.putExtra("registerType", registerType);
startActivity(intent);
}
};
private String[] registerStr = new String[] { "通过手机注册", "通过邮箱注册" };
private OnClickListener menuClick2 = new OnClickListener() {
public void onClick(View v) {
menuBottonPop.dismiss();
if (v.getTag().equals(registerStr[0])) {
registerType = 0;
} else if (v.getTag().equals(registerStr[1])) {
registerType = 1;
}
Intent intent = new Intent(Login.this, RegisterOneActivity.class);
intent.putExtra("registerType", registerType);
startActivity(intent);
}
};
/**
* 显示底部菜单
*/
private void showPopMenu(String[] str, OnClickListener menuClick) {
menuBottonPop = new MenuBottomPop(this, str, menuClick);
menuBottonPop.showAtLocation(mHeadImage);
}
private void displayDrawable(int drawable1, int drawable2) {
// TransitionDrawable 生成由第一张图片到第二张图片的渐变动画对象
TransitionDrawable drawable = new TransitionDrawable(new Drawable[] {
this.getResources().getDrawable(drawable1),
this.getResources().getDrawable(drawable2) });
// 设置渐变时间
drawable.startTransition(2000);
// 给Imageview设置图片
imageView.setImageDrawable(drawable);
}
@Override
public void onPositiveButtonClicked(int requestCode) {
}
@Override
public void onNegativeButtonClicked(int requestCode) {
if (requestCode == UIHelper.APP_EXIT) {
AppManager.getAppManager().AppExit(this);
finish();
} else if (requestCode == 42) {
AppManager.getAppManager().stopService(this);
XmppConnection.getInstance().closeConnection();
AppContext appContext = (AppContext) getApplication();
appContext.Logout();
UIHelper.showLoginPage(this);
}
}
@Override
public void onBackPressed() {
UIHelper.Exit(this);
}
@Override
protected void onResume() {
StatService.onResume(this);
super.onResume();
}
@Override
public void onPause() {
StatService.onPause(this);
super.onResume();
}
@Override
protected void onDestroy() {
unregisterReceiver(easyLoginReceiver);
super.onDestroy();
}
public interface LoginAuthListener {
public abstract void getUserInfo(int loginType, String account,
String uid, String userName, String head, String token,
long expiresTime);
}
public class EasyLoginReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (null != intent) {
String json = intent.getStringExtra("json");
try {
JSONObject treeNode = new JSONObject(json);
JSONObject dataNode = (JSONObject) treeNode.get("data");
String account = dataNode.getString("name");
String nick = dataNode.getString("nick");
String head = dataNode.getString("head");
String uid = dataNode.getString("openid");
WeiboToken mAccessToken = AccessTokenKeeper
.readQQAccessToken(Login.this);
loginAuthListener.getUserInfo(1, account, uid, nick, head,
mAccessToken.accessToken, mAccessToken.expiresIn);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
}