Newer
Older
dxcgt / app / src / main / java / com / smartdot / cgt / activity / FrmLogin.java
wangxitong on 6 Apr 2021 14 KB first commit
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();
			}
		});
	}

}