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(); } } } } }