package com.smartdot.cgt.activity; import java.io.File; import java.io.FileOutputStream; import java.util.Timer; import java.util.TimerTask; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.DialogInterface.OnCancelListener; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.Message; import android.telephony.TelephonyManager; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.EditText; import android.widget.ImageView; import android.widget.Toast; import com.smartdot.cgt.R; import com.smartdot.cgt.model.ResponseResult; import com.smartdot.cgt.model.UserModel; import com.smartdot.cgt.request.DownLoadingProgress; import com.smartdot.cgt.request.Request; import com.smartdot.cgt.util.ApplicationMain; import com.smartdot.cgt.util.BaseThread; import com.smartdot.cgt.util.HandlerStatus; import com.smartdot.cgt.util.HttpRequestTools; import com.smartdot.cgt.util.LoginVo; import com.smartdot.cgt.util.Msg; import com.smartdot.cgt.util.MsgCallback; import com.smartdot.cgt.util.PerformanceUtil; import com.smartdot.cgt.util.StringUtils; import com.smartdot.cgt.util.config.ConfigLoader; /** * @ClassName: FrmLogin * @Description: 登陆界面 * @author zhaosw email:vvtale@gmail.com * @date 2014年4月22日 上午12:27:37 */ public class FrmLogin extends BaseActivity { private Button btnLogin; private EditText txtUserName; private EditText txtPassword; private BaseThread thread; // 新增加控件 private ImageView setting; private CheckBox autoLogin, keepPassword; @Override protected void setLayout() { initActivity(false); setContentView(R.layout.login); btnLogin = (Button) findViewById(R.id.btnLogin); txtUserName = (EditText) findViewById(R.id.txtUserName); txtPassword = (EditText) findViewById(R.id.txtPassword); autoLogin = (CheckBox) findViewById(R.id.auto_login); keepPassword = (CheckBox) findViewById(R.id.keep_password); setting = (ImageView) findViewById(R.id.login_setting); } @Override protected void doInit() { String userName = new ConfigLoader().getLastUserName(); if (!StringUtils.isNullOrEmpty(userName)) { txtUserName.setText(userName); txtPassword.requestFocus(); } autoLogin.setChecked(new ConfigLoader().getAutoLogin()); keepPassword.setChecked(new ConfigLoader().getKeepPassword()); // autoCheckPackage(); if (keepPassword.isChecked()) { txtPassword.setText(new ConfigLoader().getPassword()); if (autoLogin.isChecked()) { btnLoginClick(); } } } @Override protected void addEventListener() { btnLogin.setOnClickListener(onClickListener); autoLogin.setOnCheckedChangeListener(onCheckedChangeListener); keepPassword.setOnCheckedChangeListener(onCheckedChangeListener); setting.setOnClickListener(onClickListener); } private OnCheckedChangeListener onCheckedChangeListener = new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (buttonView == autoLogin) { if (autoLogin.isChecked()) { keepPassword.setChecked(true); } } } }; private OnClickListener onClickListener = new OnClickListener() { @Override public void onClick(View arg0) { if (arg0 == setting) { Intent intent = new Intent(FrmLogin.this, FrmSetting.class); intent.putExtra("NEEDSHOWCONTACTSETTING", false); startActivity(intent); } else if (arg0 == btnLogin) { btnLoginClick(); } } }; @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(Menu.NONE, Menu.FIRST + 1, 1, R.string.menu_setting); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == Menu.FIRST + 1) { Intent intent = new Intent(FrmLogin.this, FrmSetting.class); intent.putExtra("NEEDSHOWCONTACTSETTING", false); startActivity(intent); } return super.onOptionsItemSelected(item); } @SuppressWarnings("unchecked") @Override protected void handleMessage(Message msg) { // 登录 if (msg.what == HandlerStatus.REQUEST_LOGIN) { closeProgress(); if (msg.arg1 == HandlerStatus.HANDLE_OK) { // 登录成功时候查看是否保存密码 if (keepPassword.isChecked()) { new ConfigLoader().savePassword(txtPassword.getText() .toString()); } getApplicationMain().hideSoftInputFromWindow( txtPassword.getApplicationWindowToken()); //Msg.showInfo(FrmLogin.this, "用户验证成功!"); UserModel userModel = ((ResponseResult<UserModel>) msg.obj) .getResultObj(); ApplicationMain.getInstance().setUserModel(userModel); LoginVo vo=new LoginVo(); vo.setAdminname(userModel.getUserName()); vo.setBgadminid(userModel.getBgAdminId()); vo.setDeptName(userModel.getDeptName()); vo.setUserid(userModel.getUserId()); vo.setRoleTip(userModel.getRoleTips()); PerformanceUtil.saveUser(FrmLogin.this,vo); String userName = txtUserName.getText().toString(); ConfigLoader configLoader = new ConfigLoader(); Intent intent = new Intent(FrmLogin.this, FrmMain.class); if (StringUtils.isNullOrEmpty(configLoader.getLastUserName())) { // 初次登录,设置主窗口自动同步。 intent.putExtra(FrmMain.NEEDAUTOUPDATEKEY, true); } startActivity(intent); configLoader.saveLastUserName(userName); configLoader.saveAutoLogin(autoLogin.isChecked()); configLoader.saveKeepPassword(keepPassword.isChecked()); FrmLogin.this.finish(); } else if (msg.arg1 == HandlerStatus.HANDLE_FAIL) { Msg.showInfo(FrmLogin.this, "用户名或密码不正确!"); } else if(msg.arg1 == HandlerStatus.HANDLE_ERROR) { // String errorMessage = (String) msg.obj; // errorMessage = errorMessage == null ? "\n" : errorMessage; String errorMessage = "网络异常,连接失败!"; Msg.showInfo(FrmLogin.this, errorMessage); } } // 升级 else if (msg.what == HandlerStatus.REQUEST_CHECKPACKAGE) { if (msg.arg1 == HandlerStatus.HANDLE_OK) { final String[] packageInfo = (String[]) msg.obj; int versionCode = Integer.parseInt(packageInfo[0]); if (versionCode > getVersionCode()) { StringBuffer msgSb = new StringBuffer(); msgSb.append("发现新版本城管通,\n版本号"); msgSb.append(packageInfo[2]); msgSb.append(",\n文件名"); msgSb.append(packageInfo[3]); msgSb.append(",\n点击确认将进行更新!"); Msg.confirm(FrmLogin.this, msgSb.toString(), "版本更新", new MsgCallback() { @Override public void callBack(Boolean result) { if (null != result && result.booleanValue()) { downloadPackage(packageInfo[1], packageInfo[3]); } } }); } } else if (msg.arg1 == HandlerStatus.HANDLE_FAIL) { //Msg.showInfo(FrmLogin.this, "检查更新失败!"); } else { //Msg.showInfo(FrmLogin.this, "检查更新出错!"); } } } @Override protected void onCancelProgress(DialogInterface arg0) { if (thread != null) { thread.interrupt(); } } @Override protected void onCreate(Bundle savedInstanceState) { AppStatusManager.getInstance().setAppStatus(AppStatusManager.AppStatusConstant.APP_NORMAL); // TODO Auto-generated method stub super.onCreate(savedInstanceState); if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) { //结束你的activity finish(); return; } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if(keyCode == KeyEvent.KEYCODE_BACK) { exitBy2Click(); //调用双击退出函数 } return false; } /** * 双击退出函数 */ private static Boolean isExit = false; private void exitBy2Click() { Timer tExit = null; if (!isExit) { isExit = true; // 准备退出 Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); tExit = new Timer(); tExit.schedule(new TimerTask() { @Override public void run() { isExit = false; // 取消退出 } }, 500); // 如果2秒钟内没有按下返回键,则启动定时器取消掉刚才执行的任务 } else { finish(); System.exit(0); } } /** * 自动升级程序 */ private void autoCheckPackage() { BaseThread updateThread = new BaseThread(baseHandler) { @Override public void runThread() { Message msg = this.obtainMessage(); msg.what = HandlerStatus.REQUEST_CHECKPACKAGE; try { ResponseResult<String[]> configResult = Request .getRequest().checkAndGetNewPackage( getVersionCode()); if (configResult.isSuccess()) { msg.arg1 = HandlerStatus.HANDLE_OK; } else if (configResult.isHadError()) { msg.arg1 = HandlerStatus.HANDLE_ERROR; } else { msg.arg1 = HandlerStatus.HANDLE_FAIL; } msg.obj = configResult.getResultObj(); } catch (Exception e) { msg.arg1 = HandlerStatus.HANDLE_ERROR; } this.sendMessage(msg); } }; updateThread.start(); } /** * 登录按钮点击事件 */ protected void btnLoginClick() { String username = txtUserName.getText().toString(); String password = txtPassword.getText().toString(); if(StringUtils.isNullOrEmpty(username)){ Msg.showInfo(FrmLogin.this, "用户名不能为空!"); return ; } if(StringUtils.isNullOrEmpty(password)){ Msg.showInfo(FrmLogin.this, "密码不能为空!"); return ; } // TODO 离线登录 // if (username.equals("001") && password.equals("1")) // { // ConfigLoader configLoader = new ConfigLoader(); // Intent intent = new Intent(FrmLogin.this, FrmMain.class); // if (StringUtils.isNullOrEmpty(configLoader.getLastUserName())) // { // // 初次登录,设置主窗口自动同步。 // intent.putExtra(FrmMain.NEEDAUTOUPDATEKEY, true); // } // if (keepPassword.isChecked()) // { // new ConfigLoader().savePassword(txtPassword.getText() // .toString()); // } // String userName = txtUserName.getText().toString(); // configLoader.saveLastUserName(userName); // configLoader.saveAutoLogin(autoLogin.isChecked()); // configLoader.saveKeepPassword(keepPassword.isChecked()); // startActivity(intent); // FrmLogin.this.finish(); // } checkUser(username, password); } /** * 登录 * * @param username * @param password */ protected void checkUser(final String username, final String password) { TelephonyManager tm = (TelephonyManager) this.getSystemService(TELEPHONY_SERVICE); final String deviceId = tm.getDeviceId(); thread = new BaseThread(baseHandler) { @Override public void runThread() { Message msg = thread.obtainMessage(); if (msg != null) { msg.what = HandlerStatus.REQUEST_LOGIN; ResponseResult<UserModel> loginResult = null; try { loginResult = Request.getRequest().login(username, password, deviceId); if (loginResult.isSuccess()) { msg.obj = loginResult; msg.arg1 = HandlerStatus.HANDLE_OK; } else if (loginResult.isHadError()) { msg.arg1 = HandlerStatus.HANDLE_ERROR; } else { msg.arg1 = HandlerStatus.HANDLE_FAIL; } } catch (Exception e) { msg.arg1 = HandlerStatus.HANDLE_ERROR; msg.obj = e.getMessage(); e.printStackTrace(); } thread.sendMessage(msg); } } }; showProgress("用户登录中。。。", "用户登录"); thread.start(); // 测试入口 // Intent intent = new Intent(); // intent.setClass(FrmLogin.this, FrmMain.class); // startActivity(intent); } /** * 下载更新 * * @param packageId * @param fileName */ protected void downloadPackage(final String packageId, final String fileName) { final ProgressDialog pd; // 进度条对话框 pd = new ProgressDialog(this); pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); pd.setMessage("正在下载更新"); pd.show(); Handler handler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == HandlerStatus.DOWNLOAD_CHECKPACKAGE) { if (msg.arg1 == HandlerStatus.HANDLE_OK) { pd.setProgress((Integer) msg.obj); } else { Msg.showInfo(FrmLogin.this, "更新失败,请确认网络已连接及SD已安装!"); } } } }; final BaseThread thread = new BaseThread(handler) { @Override public void runThread() { try { String url = getCgtConfig().getRequestUrl() + "PwasAdmin/PwasAdmin-downloadNewPackage.action?packageId="; url += packageId; File file = new File(getApplicationMain().getConfigPath( fileName)); if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { // 如果相等的话表示当前的sdcard挂载在手机上并且是可用的 pd.setMax(100); final BaseThread downloadThread = this; FileOutputStream fos = new FileOutputStream(file); HttpRequestTools.get(url, fos, new DownLoadingProgress() { @Override public void onProgressUpdate( Integer progress, int handlerStatus) { Message msg = downloadThread .obtainMessage(); msg.what = handlerStatus; msg.arg1 = HandlerStatus.HANDLE_OK; msg.obj = progress; downloadThread.sendMessage(msg); } }, HandlerStatus.DOWNLOAD_CHECKPACKAGE); fos.close(); sleep(3000); } else { Message msg = this.obtainMessage(); msg.what = HandlerStatus.DOWNLOAD_CHECKPACKAGE; msg.arg1 = HandlerStatus.HANDLE_ERROR; this.sendMessage(msg); } if (file.exists()) { ConfigLoader configLoader = new ConfigLoader(); configLoader.saveLastUserName(null); Intent intent = new Intent(); // 执行动作 intent.setAction(Intent.ACTION_VIEW); // 执行的数据类型 intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive"); startActivity(intent); } } catch (Exception e) { e.printStackTrace(); } finally { pd.dismiss(); // 结束掉进度条对话框 } } }; thread.start(); pd.setOnCancelListener(new OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { thread.interrupt(); } }); } }