package com.way.chat.activity; import java.util.List; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.ImageView; import android.widget.Toast; import com.way.Constants; import com.way.chat.common.bean.User; import com.way.chat.common.tran.bean.TranObject; import com.way.chat.common.tran.bean.TranObjectType; import com.way.client.Client; import com.way.client.ClientOutputThread; import com.way.util.DialogHelp; import com.way.util.SharePreferenceUtil; import com.way.util.UserDB; /** * 登录 * * @author way * */ public class LoginView extends SuperView implements OnClickListener { private Button mBtnRegister; private Button mBtnLogin; private EditText mAccounts, mPassword; private CheckBox mAutoSavePassword; private View mMoreView;// “更多登录选项”的view private ImageView mMoreImage;// “更多登录选项”的箭头图片 private View mMoreMenuView;// “更多登录选项”中的内容view private MenuInflater mi;// 菜单 private boolean mShowMenu = false;// “更多登录选项”的内容是否显示 private boolean mIsServiceRunning = false;// 服务是否启动标志 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.loginpage); initView(); mi = new MenuInflater(this); } @Override protected void onResume() {// 在onResume方法里面先判断网络是否可用,再启动服务,这样在打开网络连接之后返回当前Activity时,会重新启动服务联网, // TODO Auto-generated method stub super.onResume(); if (!GetMsgService.isStart) { Intent service = new Intent(this, GetMsgService.class); startService(service); mIsServiceRunning = true; } else { toast(this); } } public void initView() { mAutoSavePassword = (CheckBox) findViewById(R.id.auto_save_password); mMoreView = findViewById(R.id.more); mMoreMenuView = findViewById(R.id.moremenu); mMoreImage = (ImageView) findViewById(R.id.more_image); mMoreView.setOnClickListener(this); mBtnRegister = (Button) findViewById(R.id.regist_btn); mBtnRegister.setOnClickListener(this); mBtnLogin = (Button) findViewById(R.id.login_btn); mBtnLogin.setOnClickListener(this); mAccounts = (EditText) findViewById(R.id.lgoin_accounts); mPassword = (EditText) findViewById(R.id.login_password); if (mAutoSavePassword.isChecked()) { SharePreferenceUtil util = new SharePreferenceUtil(LoginView.this, Constants.SAVE_USER); mAccounts.setText(util.getId()); mPassword.setText(util.getPasswd()); } } /** * “更多登录选项”内容的显示方法 * * @param bShow * 是否显示 */ public void showMoreView(boolean bShow) { if (bShow) { mMoreMenuView.setVisibility(View.GONE); mMoreImage.setImageResource(R.drawable.login_more_up); mShowMenu = true; } else { mMoreMenuView.setVisibility(View.VISIBLE); mMoreImage.setImageResource(R.drawable.login_more); mShowMenu = false; } } /** * 处理点击事件 */ public void onClick(View v) { switch (v.getId()) { case R.id.more: showMoreView(!mShowMenu); break; case R.id.regist_btn: goRegisterActivity(); break; case R.id.login_btn: login(); break; default: break; } } /** * 进入注册界面 */ public void goRegisterActivity() { Intent intent = new Intent(); intent.setClass(this, RegisterView.class); startActivity(intent); } /** * 点击登录按钮后,弹出验证对话框 */ private Dialog mDialog = null; private void showRequestDialog() { if (mDialog != null) { mDialog.dismiss(); mDialog = null; } mDialog = DialogHelp.creatRequestDialog(this, "正在验证账号..."); mDialog.show(); } /** * 提交账号密码信息到服务器 */ private void login() { String accounts = mAccounts.getText().toString(); String password = mPassword.getText().toString(); if (accounts.length() == 0 || password.length() == 0) { DialogHelp.ToastDialog(this, "QQ登录", "帐号或密码不能为空"); } else { showRequestDialog(); // 通过Socket验证信息 if (GetMsgService.isStart) { Client client = GetMsgService.client; ClientOutputThread out = client.getClientOutputThread(); TranObject<User> o = new TranObject<User>(TranObjectType.LOGIN); User u = new User(); u.setId(Integer.parseInt(accounts)); // u.setPassword(Encode.getEncode("MD5", password)); u.setPassword(password); o.setObject(u); out.setMsg(o); } else { if (mDialog.isShowing()) mDialog.dismiss(); DialogHelp.ToastDialog(LoginView.this, "QQ登录", "服务器未响应!"); } } } @SuppressWarnings("rawtypes") @Override // 依据自己需求处理父类广播接收者收取到的消息 public void getMessage(TranObject msg) { if (msg != null) { // System.out.println("Login:" + msg); switch (msg.getType()) { case LOGIN:// LoginActivity只处理登录的消息 @SuppressWarnings("unchecked") List<User> list = (List<User>) msg.getObject(); if (list.size() > 0) { // 保存用户信息 SharePreferenceUtil util = new SharePreferenceUtil( LoginView.this, Constants.SAVE_USER); util.setId(mAccounts.getText().toString()); util.setPasswd(mPassword.getText().toString()); util.setEmail(list.get(0).getEmail()); util.setName(list.get(0).getName()); util.setImg(list.get(0).getImg()); UserDB db = new UserDB(LoginView.this); db.addUser(list); Intent i = new Intent(LoginView.this, FriendListActivity.class); i.putExtra(Constants.MSGKEY, msg); startActivity(i); if (mDialog.isShowing()) mDialog.dismiss(); finish(); Toast.makeText(getApplicationContext(), "登录成功", 0).show(); } else { DialogHelp.ToastDialog(LoginView.this, "QQ登录", "帐号或密码错误!"); if (mDialog.isShowing()) mDialog.dismiss(); } break; default: break; } } } @Override // 添加菜单 public boolean onCreateOptionsMenu(Menu menu) { mi.inflate(R.menu.login_menu, menu); return super.onCreateOptionsMenu(menu); } @Override // 菜单选项添加事件处理 public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.login_menu_setting: setDialog(); break; case R.id.login_menu_exit: exitDialog(LoginView.this, "QQ提示", "您真的要退出吗?"); break; default: break; } return super.onOptionsItemSelected(item); } @Override public void onBackPressed() {// 捕获返回按键 exitDialog(LoginView.this, "QQ提示", "您真的要退出吗?"); } /** * 退出时的提示框 * * @param context * 上下文对象 * @param title * 标题 * @param msg * 内容 */ private void exitDialog(Context context, String title, String msg) { new AlertDialog.Builder(context).setTitle(title).setMessage(msg) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (mIsServiceRunning) { // 关闭服务 Intent service = new Intent(LoginView.this, GetMsgService.class); stopService(service); } close();// 调用父类自定义的循环关闭方法 } }).setNegativeButton("取消", null).create().show(); } /** * “设置”菜单选项的功能实现 */ private void setDialog() { final View view = LayoutInflater.from(LoginView.this).inflate( R.layout.settingview, null); new AlertDialog.Builder(LoginView.this).setTitle("设置服务器ip端口") .setView(view) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 把ip和port保存到文件中 EditText ipEditText = (EditText) view .findViewById(R.id.setting_ip); EditText portEditText = (EditText) view .findViewById(R.id.setting_port); String ip = ipEditText.getText().toString(); String port = portEditText.getText().toString(); SharePreferenceUtil util = new SharePreferenceUtil( LoginView.this, Constants.IP_PORT); util.setIp(ip); util.setPort(Integer.valueOf(port)); Toast.makeText(getApplicationContext(), "保存成功,请重新启动", 0) .show(); finish(); } }).setNegativeButton("取消", null).create().show(); } /** * 判断手机网络是否可用 * * @param context * @return */ @SuppressWarnings("unused") private boolean isNetworkAvailable() { ConnectivityManager mgr = (ConnectivityManager) getApplicationContext() .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo[] info = mgr.getAllNetworkInfo(); if (info != null) { for (int i = 0; i < info.length; i++) { if (info[i].getState() == NetworkInfo.State.CONNECTED) { return true; } } } return false; } private void toast(Context context) { new AlertDialog.Builder(context) .setTitle("提示") .setMessage("网络连接未打开") .setPositiveButton("前往打开", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent( android.provider.Settings.ACTION_WIRELESS_SETTINGS); startActivity(intent); } }).setNegativeButton("取消", null).create().show(); } }