package net.oschina.app.ui;
import net.oschina.app.AppContext;
import net.oschina.app.AppException;
import net.oschina.app.R;
import net.oschina.app.api.ApiClient;
import net.oschina.app.bean.Result;
import net.oschina.app.bean.User;
import net.oschina.app.common.StringUtils;
import net.oschina.app.common.UIHelper;
import android.content.Intent;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ViewSwitcher;
/**
* 用户登录对话框
* @author liux (http://my.oschina.net/liux)
* @version 1.0
* @created 2012-3-21
*/
public class LoginDialog extends BaseActivity{
private ViewSwitcher mViewSwitcher;
private ImageButton btn_close;
private Button btn_login;
private AutoCompleteTextView mAccount;
private EditText mPwd;
private AnimationDrawable loadingAnimation;
private View loginLoading;
private CheckBox chb_rememberMe;
private int curLoginType;
private InputMethodManager imm;
public final static int LOGIN_OTHER = 0x00;
public final static int LOGIN_MAIN = 0x01;
public final static int LOGIN_SETTING = 0x02;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login_dialog);
imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
curLoginType = getIntent().getIntExtra("LOGINTYPE", LOGIN_OTHER);
mViewSwitcher = (ViewSwitcher)findViewById(R.id.logindialog_view_switcher);
loginLoading = (View)findViewById(R.id.login_loading);
mAccount = (AutoCompleteTextView)findViewById(R.id.login_account);
mPwd = (EditText)findViewById(R.id.login_password);
chb_rememberMe = (CheckBox)findViewById(R.id.login_checkbox_rememberMe);
btn_close = (ImageButton)findViewById(R.id.login_close_button);
btn_close.setOnClickListener(UIHelper.finish(this));
btn_login = (Button)findViewById(R.id.login_btn_login);
btn_login.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//隐藏软键盘
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
String account = mAccount.getText().toString();
String pwd = mPwd.getText().toString();
boolean isRememberMe = chb_rememberMe.isChecked();
//判断输入
if(StringUtils.isEmpty(account)){
UIHelper.ToastMessage(v.getContext(), getString(R.string.msg_login_email_null));
return;
}
if(StringUtils.isEmpty(pwd)){
UIHelper.ToastMessage(v.getContext(), getString(R.string.msg_login_pwd_null));
return;
}
btn_close.setVisibility(View.GONE);
loadingAnimation = (AnimationDrawable)loginLoading.getBackground();
loadingAnimation.start();
mViewSwitcher.showNext();
login(account, pwd, isRememberMe);
}
});
//是否显示登录信息
AppContext ac = (AppContext)getApplication();
User user = ac.getLoginInfo();
if(user==null || !user.isRememberMe()) return;
if(!StringUtils.isEmpty(user.getAccount())){
mAccount.setText(user.getAccount());
mAccount.selectAll();
chb_rememberMe.setChecked(user.isRememberMe());
}
if(!StringUtils.isEmpty(user.getPwd())){
mPwd.setText(user.getPwd());
}
}
//登录验证
private void login(final String account, final String pwd, final boolean isRememberMe) {
final Handler handler = new Handler() {
public void handleMessage(Message msg) {
if(msg.what == 1){
User user = (User)msg.obj;
if(user != null){
//清空原先cookie
ApiClient.cleanCookie();
//发送通知广播
UIHelper.sendBroadCast(LoginDialog.this, user.getNotice());
//提示登陆成功
UIHelper.ToastMessage(LoginDialog.this, R.string.msg_login_success);
if(curLoginType == LOGIN_MAIN){
//跳转--加载用户动态
Intent intent = new Intent(LoginDialog.this, Main.class);
intent.putExtra("LOGIN", true);
startActivity(intent);
}else if(curLoginType == LOGIN_SETTING){
//跳转--用户设置页面
Intent intent = new Intent(LoginDialog.this, Setting.class);
intent.putExtra("LOGIN", true);
startActivity(intent);
}
finish();
}
}else if(msg.what == 0){
mViewSwitcher.showPrevious();
btn_close.setVisibility(View.VISIBLE);
UIHelper.ToastMessage(LoginDialog.this, getString(R.string.msg_login_fail)+msg.obj);
}else if(msg.what == -1){
mViewSwitcher.showPrevious();
btn_close.setVisibility(View.VISIBLE);
((AppException)msg.obj).makeToast(LoginDialog.this);
}
}
};
new Thread(){
public void run() {
Message msg =new Message();
try {
AppContext ac = (AppContext)getApplication();
User user = ac.loginVerify(account, pwd);
user.setAccount(account);
user.setPwd(pwd);
user.setRememberMe(isRememberMe);
Result res = user.getValidate();
if(res.OK()){
ac.saveLoginInfo(user);//保存登录信息
msg.what = 1;//成功
msg.obj = user;
}else{
ac.cleanLoginInfo();//清除登录信息
msg.what = 0;//失败
msg.obj = res.getErrorMessage();
}
} catch (AppException e) {
e.printStackTrace();
msg.what = -1;
msg.obj = e;
}
handler.sendMessage(msg);
}
}.start();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK) {
this.onDestroy();
}
return super.onKeyDown(keyCode, event);
}
}