package com.noprom.app.ui; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v7.app.ActionBarActivity; import android.view.KeyEvent; import android.view.MenuItem; 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 com.noprom.app.AppContext; import com.noprom.app.AppException; import com.noprom.app.R; import com.noprom.app.api.ApiClient; import com.noprom.app.bean.Result; import com.noprom.app.bean.User; import com.noprom.app.common.StringUtils; import com.noprom.app.common.UIHelper; /** * 用户登录 * * @author noprom (http://github.com/noprom) * @version 1.0 * Created by noprom on 2015/3/12. */ public class LoginActivity extends ActionBarActivity { private static final String TAG = "LoginActivity"; private AutoCompleteTextView mAccount; private EditText mPwd; private Button mLoginBtn; private CheckBox chb_rememberMe; private InputMethodManager imm; private int curLoginType; public final static int LOGIN_OTHER = 0x00; public final static int LOGIN_MAIN = 0x01; public final static int LOGIN_SETTING = 0x02; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); getSupportActionBar().setHomeButtonEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true); imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); curLoginType = getIntent().getIntExtra("LOGINTYPE", LOGIN_OTHER); // 初始化控件 mAccount = (AutoCompleteTextView) findViewById(R.id.login_account); mPwd = (EditText) findViewById(R.id.login_password); chb_rememberMe = (CheckBox) findViewById(R.id.login_checkbox_rememberMe); mLoginBtn = (Button) findViewById(R.id.login_btn); mLoginBtn.setOnClickListener(new View.OnClickListener() { @Override 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; } // 登陆操作 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(){ @Override public void handleMessage(Message msg) { if(msg.what == 1){ User user = (User) msg.obj; if(user != null){ // 清空原先的cookie ApiClient.cleanCookie(); // 发送通知广播 UIHelper.sendBroadCast(LoginActivity.this,user.getNotice()); // 提示登录成功 UIHelper.ToastMessage(LoginActivity.this,R.string.msg_login_success); if(curLoginType == LOGIN_MAIN){ // 跳转 -- 加载用户动态 Intent intent = new Intent(LoginActivity.this,MainActivity.class); intent.putExtra("LOGIN",true); startActivity(intent); }else if(curLoginType == LOGIN_SETTING){ // 跳转 -- 用户界面设置 Intent intent = new Intent(LoginActivity.this,SettingsActivity.class); intent.putExtra("LOGIN",true); startActivity(intent); } finish(); } }else if(msg.what == 0){ UIHelper.ToastMessage(LoginActivity.this,getString(R.string.msg_login_fail)+msg.obj); }else if(msg.what == -1){ ((AppException)msg.obj).makeToast(LoginActivity.this); } } }; new Thread(){ @Override 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); } @Override public boolean onOptionsItemSelected(MenuItem item) { finish(); return super.onOptionsItemSelected(item); } }