package com.ectrip.cyt.ui; import java.util.ArrayList; import android.annotation.SuppressLint; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.app.Dialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.content.res.Resources; import android.net.ConnectivityManager; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Bundle; import android.os.IBinder; import android.text.InputType; import android.text.TextUtils; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.WindowManager; import android.view.animation.AnticipateOvershootInterpolator; import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.RadioGroup.OnCheckedChangeListener; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import antistatic.spinnerwheel.AbstractWheel; import com.ectrip.cyt.bean.ConfigBean; import com.ectrip.cyt.config.DevicTool; import com.ectrip.cyt.config.MyApp; import com.ectrip.cyt.constant.constant; import com.ectrip.cyt.db.DbManager; import com.ectrip.cyt.shield_home.LockLayer.MToast; import com.ectrip.cyt.spinnerwheel.adapters.NumericWheelAdapter; import com.ectrip.cyt.utils.AESEncryptor; import com.ectrip.cyt.utils.CommetryUtils; import com.ectrip.cyt.utils.LogUtil; import com.ectrip.cyt.utils.SharedPreferences2Obj; import com.ectrip.cyt.version.UpdateManager; import com.ectrip.trips.check.R; /** * 设置Activity */ public class SettingsActivity extends BaseActivity implements OnClickListener, OnCheckedChangeListener { //返回相应码 private final int SETTING_REQUESTCODE = 1; // 机器码,服务地址,系统密码,企业标识,企业编码 private EditText machineCodeEdit, serviceIpEdit, systemPwdEdit, identityEdit, encodeEdit; // 打印选项组,调试选项组,打印加密选项组 private RelativeLayout printGroup, reprintEncryptGroup; private RadioGroup testGroup; // 调试开关选项,是否打印选项,是否加密打印 private RadioButton testNoRadioBtn, testYesRadioBtn; // 确认按钮 private Button confirmBtn, updateBtn; private View testlayout; // 是否调试模式,密码弹框 private Dialog testDialog, pwdDialog; // 打印次数,标题,版本, private TextView printNumText, titleText, versionText; private String mode; private int isprint = 0; private NetworkConnectChangedReceiver receiver = null; // 打印次数 private Integer pnum = null; // 调试模式 private Boolean testMOdel; // 是否加密 private Boolean isEncrypt; //退出应用次数 private long firstTime = 0; private int num = 0; private RelativeLayout scanGroup; private ImageView isreprint, scanEncrypt, reprntEncrypt; private Boolean scanBack; private LinearLayout lv_printNum; private ArrayList beans; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.app_settings); init(); initConfig(); initView(); initListen(); initData(); initRegist(); } private void init() { pnum = SharedPreferences2Obj.getInstance(SettingsActivity.this) .setName("MachineType").getObject("printNum", Integer.class); if (pnum == null) { SharedPreferences2Obj.getInstance(SettingsActivity.this) .setName("MachineType").setObject("printNum", 2); } else { if (pnum > 3) { pnum = 3; } } testMOdel = SharedPreferences2Obj.getInstance(SettingsActivity.this) .setName("config").getObject("testMOdel", Boolean.class); isEncrypt = SharedPreferences2Obj.getInstance(SettingsActivity.this) .setName("config").getObject("isEncrypt", Boolean.class); } private void initRegist() { if (receiver == null) { receiver = new NetworkConnectChangedReceiver(); } IntentFilter filter = new IntentFilter(); filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); registerReceiver(receiver, filter); } private void initView() { lv_printNum = (LinearLayout) findViewById(R.id.lv_printNum); printNumText = (TextView) findViewById(R.id.printNum); machineCodeEdit = (EditText) findViewById(R.id.machineCodeEdit); systemPwdEdit = (EditText) findViewById(R.id.systemPwdEdit); serviceIpEdit = (EditText) findViewById(R.id.serviceIpEdit); identityEdit = (EditText) findViewById(R.id.identityEdit); encodeEdit = (EditText) findViewById(R.id.encodeEdit); printGroup = (RelativeLayout) this.findViewById(R.id.printGroup); testGroup = (RadioGroup) findViewById(R.id.testGroup); scanGroup = (RelativeLayout) findViewById(R.id.scanEncryptGroup); reprintEncryptGroup = (RelativeLayout) findViewById(R.id.reprintEncryptGroup); testlayout = findViewById(R.id.testlayout);// 调节模式 versionText = (TextView) findViewById(R.id.version); confirmBtn = (Button) findViewById(R.id.set_saveBtn);//确认按钮 updateBtn = (Button) findViewById(R.id.update); titleText = (TextView) findViewById(R.id.title); isreprint = (ImageView) findViewById(R.id.iv_isreprint); reprntEncrypt = (ImageView) findViewById(R.id.iv_reprintEncrypt); scanEncrypt = (ImageView) findViewById(R.id.iv_scanEncrypt); // 显示版本号 String versionName = MyApp.getInstance().getVersionName(); versionText.setText(versionName); confirmBtn.setVisibility(View.VISIBLE); updateBtn.setVisibility(View.VISIBLE); //findViewById(R.id.saveBtn).setVisibility(View.VISIBLE); if (testMOdel != null && testMOdel) { // 是否隐藏 testlayout.setVisibility(View.VISIBLE); } else if (testMOdel != null && !testMOdel) { testlayout.setVisibility(View.GONE); } titleText.setVisibility(View.VISIBLE); titleText.setText(R.string.setting); if (pnum != null) { printNumText.setText(pnum + ""); } if (isEncrypt != null && isEncrypt) { // 是否隐藏 reprntEncrypt.setImageDrawable(getResources().getDrawable(R.drawable.set_choice_blue)); } else if (testMOdel != null && !testMOdel) { reprntEncrypt.setImageDrawable(getResources().getDrawable(R.drawable.set_choice_gray)); } } private void initListen() { versionText.setOnClickListener(this); updateBtn.setOnClickListener(this); titleText.setOnClickListener(this); reprintEncryptGroup.setOnClickListener(this); lv_printNum.setOnClickListener(this); printGroup.setOnClickListener(this); testGroup.setOnClickListener(this); scanGroup.setOnClickListener(this); confirmBtn.setOnClickListener(this); } /*************************************** 退出应用****************************/ private void closeApp() { if (num < 5) { long secondTime = System.currentTimeMillis(); if (secondTime - firstTime > 4000) { // 如果两次按键时间间隔大于2秒,则不退出 if (num == 1) { firstTime = secondTime;// 更新firstTime } } num++; } else { num = 0; exitApp(); } } /*******************************调试模式*********************************************/ private void testApp() { if (num < 5) { long secondTime = System.currentTimeMillis(); if (secondTime - firstTime > 4000) { // 如果两次按键时间间隔大于2秒,则不退出 if (num == 1) { firstTime = secondTime;// 更新firstTime } } num++; } else { num = 0; testDialog(); } } /******************************* 调试弹框****************************************/ private void testDialog() { if (testDialog == null) { final EditText inputpress = new EditText(this); inputpress.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); Builder builder = new AlertDialog.Builder(this); builder.setTitle(R.string.input_pwd_debug); builder.setIcon(android.R.drawable.ic_dialog_info); builder.setView(inputpress).setPositiveButton(R.string.btn_ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String password = inputpress.getText().toString(); if (password.equals(constant.exitPwd)) { LogUtil.isDebug = false; testlayout.setVisibility(View.VISIBLE); SharedPreferences2Obj .getInstance(SettingsActivity.this) .setName("config") .setObject("testMOdel", true); testYesRadioBtn.setChecked(true); testNoRadioBtn.setChecked(false); } else { MToast(SettingsActivity.this, getString(R.string.pwd_error_noexit), MToast.LENGTH_SHORT); } } }); builder.setNegativeButton(R.string.btn_cancel, null); AlertDialog dialog = builder.create(); if (MyApp.getInstance().isHandset) { dialog.getWindow().setType( WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); } dialog.setCanceledOnTouchOutside(false); dialog.show(); } } /******************************** 退出手持机的方法******************************/ private void exitApp() { if (pwdDialog == null) { final EditText inputpress = new EditText(this); inputpress.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); Builder builder = new AlertDialog.Builder(this); builder.setTitle(R.string.input_exit_pwd); builder.setIcon(android.R.drawable.ic_dialog_info); builder.setView(inputpress).setPositiveButton(R.string.btn_ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String password = inputpress.getText().toString(); if (password.equals(constant.exitPwd)) { MyApp.getInstance().exit(); } else { MToast(SettingsActivity.this, getString(R.string.pwd_error_noexit), MToast.LENGTH_SHORT); } } }); builder.setNegativeButton(getString(R.string.cancle_label), null); AlertDialog dialog = builder.create(); if (MyApp.getInstance().isHandset) { dialog.getWindow().setType( WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); } dialog.setCanceledOnTouchOutside(false); dialog.show(); } } private void initData() { beans = DbManager.GetConfigs(); if (beans != null && beans.size() > 0) { serviceIpEdit.setText(beans.get(0).getEc_ip()); if (TextUtils.isEmpty(beans.get(0).getEc_mac())) { machineCodeEdit.setText(DevicTool.getInstance().getDevId()); } else { machineCodeEdit.setText(beans.get(0).getEc_mac()); } systemPwdEdit.setText(beans.get(0).getEc_passwd()); encodeEdit.setText(beans.get(0).getEc_identity()); try { String ec_name = AESEncryptor.decrypt(constant.decrypt, beans .get(0).getEc_signkey()); identityEdit.setText(ec_name); } catch (Exception e) { e.printStackTrace(); } if (1 == beans.get(0).getEc_isPrint()) { isprint = 1; isreprint.setImageDrawable(getResources().getDrawable(R.drawable.set_choice_blue)); } else if (0 == beans.get(0).getEc_isPrint()) { isprint = 0; isreprint.setImageDrawable(getResources().getDrawable(R.drawable.set_choice_gray)); } } else { serviceIpEdit.setText(""); machineCodeEdit.setText(DevicTool.getInstance().getDevId()); systemPwdEdit.setText(constant.pwd); encodeEdit.setText(""); identityEdit.setText(""); MToast(SettingsActivity.this, getString(R.string.init_setting), MToast.LENGTH_SHORT); } scanBack = SharedPreferences2Obj.getInstance(this).setName("config").getObject("scanBack", Boolean.class); if (scanBack != null) { if (scanBack) { scanEncrypt.setImageDrawable(getResources().getDrawable(R.drawable.set_choice_blue)); } else { scanEncrypt.setImageDrawable(getResources().getDrawable(R.drawable.set_choice_gray)); } } else { scanEncrypt.setImageDrawable(getResources().getDrawable(R.drawable.set_choice_gray)); } } public class NetworkConnectChangedReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (WifiManager.WIFI_STATE_CHANGED_ACTION .equals(intent.getAction())) {// 这个监听wifi的打开与关闭,与wifi的连接无关 int wifiState = intent.getIntExtra( WifiManager.EXTRA_WIFI_STATE, 0); LogUtil.e("H3c", "wifiState" + wifiState); switch (wifiState) { case WifiManager.WIFI_STATE_ENABLED: if (machineCodeEdit != null) { if (beans != null && beans.size() > 0) { if (TextUtils.isEmpty(beans.get(0).getEc_mac())) { machineCodeEdit.setText(DevicTool.getInstance().getDevId()); } else { machineCodeEdit.setText(beans.get(0).getEc_mac()); } }else{ machineCodeEdit.setText(DevicTool.getInstance().getDevId()); } } break; } } } } private void initConfig() { mode = getIntent().getStringExtra("mode"); findViewById(R.id.topBack).setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { finish(); } }); } /************************** 下面是打印次数的弹框 ***********************************/ private LayoutInflater inflater; private View layout2; private AlertDialog dialog2; // 部分检票弹框 private AbstractWheel wheel;// 部分检票滚轮 private Button reduce;// 部分检票减按钮 private Button plus;// 部分检票加按钮 @SuppressLint("InflateParams") public void dialog(int num) { if (dialog2 == null) { inflater = LayoutInflater.from(SettingsActivity.this); layout2 = inflater.inflate(R.layout.consume_dialog, null); Builder builder = new AlertDialog.Builder(SettingsActivity.this); builder.setTitle(R.string.print_number); builder.setIcon(android.R.drawable.ic_dialog_info); builder.setView(layout2).setPositiveButton(R.string.btn_ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { printNumText.setText(wheel.getCurrentItem() + 1 + ""); SharedPreferences2Obj .getInstance(SettingsActivity.this) .setName("MachineType") .setObject("printNum", wheel.getCurrentItem() + 1); } }); builder.setNegativeButton(R.string.btn_cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (dialog != null) { try { dialog.dismiss(); } catch (Exception e) { e.printStackTrace(); } catch (Throwable e) { e.printStackTrace(); } } } }); dialog2 = builder.create(); } initWheel(layout2, R.id.wheelView, num); if (MyApp.getInstance().isHandset) { dialog2.getWindow().setType( WindowManager.LayoutParams.TYPE_SYSTEM_ERROR); } dialog2.show(); } private void initWheel(View view, int id, final int num) { wheel = (AbstractWheel) view.findViewById(id); wheel.setViewAdapter(new NumericWheelAdapter(SettingsActivity.this, 1, num)); wheel.setCyclic(true); wheel.setInterpolator(new AnticipateOvershootInterpolator()); reduce = (Button) view.findViewById(R.id.reduce); reduce.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { int current = wheel.getCurrentItem() - 1; if (current < 0) { return; } wheel.setCurrentItem(current); } }); plus = (Button) view.findViewById(R.id.plus); plus.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { int current = wheel.getCurrentItem() + 1; if (num == current) { return; } wheel.setCurrentItem(current); } }); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { try { CommetryUtils.releaseCommery(this); } catch (Exception e) { e.printStackTrace(); } finish(); } return false; } @Override protected void onDestroy() { if (receiver != null) { unregisterReceiver(receiver); } super.onDestroy(); } /************************* 失去焦点的时候,隐藏键盘 *********************************/ /** * 隐藏软键盘 */ @Override public boolean dispatchTouchEvent(MotionEvent ev) { // TODO Auto-generated method stub if (ev.getAction() == MotionEvent.ACTION_DOWN) { // 获得当前得到焦点的View,一般情况下就是EditText(特殊情况就是轨迹求或者实体案件会移动焦点) View v = getCurrentFocus(); if (isShouldHideInput(v, ev)) { InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); hideSoftInput(v.getWindowToken(), im); } } return super.dispatchTouchEvent(ev); } /** * 根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘,因为当用户点击EditText时没必要隐藏 * * @param v * @param event * @return */ public boolean isShouldHideInput(View v, MotionEvent event) { if (v != null && (v instanceof EditText)) { int[] l = {0, 0}; v.getLocationInWindow(l); int left = l[0], top = l[1], bottom = top + v.getHeight(), right = left + v.getWidth(); if (event.getX() > left && event.getX() < right && event.getY() > top && event.getY() < bottom) { // 点击EditText的事件,忽略它。 return false; } else { return true; } } // 如果焦点不是EditText则忽略,这个发生在视图刚绘制完,第一个焦点不在EditView上,和用户用轨迹球选择其他的焦点 return false; } /** * 多种隐藏软件盘方法的其中一种 * * @param token */ public void hideSoftInput(IBinder token, InputMethodManager im) { if (token != null) { im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS); } } /********************************监听事件***************************/ @SuppressLint("DefaultLocale") @Override public void onClick(View arg0) { switch (arg0.getId()) { case R.id.lv_printNum: dialog(3); break; case R.id.version: // 调试模式 testApp(); break; case R.id.update: if (serviceIpEdit.getText() == null || serviceIpEdit.getText().toString() == null || serviceIpEdit.getText().toString().trim().equals("")) { Toast.makeText(SettingsActivity.this, getString(R.string.fill_in_server_ip), Toast.LENGTH_SHORT).show(); return; } if (encodeEdit.getText() == null || encodeEdit.getText().toString() == null || encodeEdit.getText().toString().trim().equals("")) { Toast.makeText(SettingsActivity.this, getString(R.string.fil_in_connkey), Toast.LENGTH_SHORT) .show(); return; } if (identityEdit.getText() == null || identityEdit.getText().toString() == null || identityEdit.getText().toString().trim().equals("")) { Toast.makeText(SettingsActivity.this, R.string.fil_in_qiye_key, Toast.LENGTH_SHORT).show(); return; } try { UpdateManager.getUpdateManager().checkAppUpdate( SettingsActivity.this, serviceIpEdit.getText().toString().trim(), identityEdit.getText().toString().trim(), encodeEdit.getText().toString().trim()); // 并保存信息 try { ConfigBean bean = new ConfigBean(); String mac = machineCodeEdit.getText().toString().trim(); bean.setEc_id(0 + ""); bean.setEc_ip(serviceIpEdit.getText().toString().trim()); bean.setEc_identity(encodeEdit.getText().toString().trim()); bean.setEc_mac(mac.toUpperCase()); bean.setEc_passwd(systemPwdEdit.getText().toString().trim()); String signkey = AESEncryptor.encrypt(constant.decrypt, identityEdit.getText().toString().trim()); bean.setEc_signkey(signkey); bean.setEc_isPrint(isprint); if ("0".equals(mode)) { DbManager.ClearConfig(); DbManager.InsertConfig(bean); } else { DbManager.ModifyConfig(bean); } } catch (Exception e) { e.printStackTrace(); } // } } catch (Exception e) { e.printStackTrace(); } break; case R.id.set_saveBtn: String ec_name = identityEdit.getText().toString().trim(); if (!ec_name.equals("")) { try { ec_name = AESEncryptor.decrypt(constant.decrypt, ec_name); LogUtil.d(TAG,getString(R.string.enterprise_communication_identifier) + ec_name); ec_name = AESEncryptor.encrypt(constant.decrypt, ec_name); } catch (Exception ex) { try { ec_name = AESEncryptor.encrypt(constant.decrypt, ec_name); LogUtil.d(TAG,getString(R.string.not_successfully_decrypt) + ec_name); } catch (Exception e) { e.printStackTrace(); MToast(SettingsActivity.this, getString(R.string.communication_id_error), MToast.LENGTH_SHORT); ec_name = ""; identityEdit.setText(""); return; } } if ("".equals(serviceIpEdit.getText().toString().trim())) { MToast(SettingsActivity.this, getString(R.string.server_ip_notnull), MToast.LENGTH_SHORT); return; } else if ("".equals(systemPwdEdit.getText().toString().trim())) { MToast(SettingsActivity.this, getString(R.string.pwd_notnull), MToast.LENGTH_SHORT); return; } else if ("".equals(encodeEdit.getText().toString().trim())) { MToast(SettingsActivity.this, getString(R.string.connkey_notnull), MToast.LENGTH_SHORT); return; } else if ("".equals(ec_name)) { MToast(SettingsActivity.this, getString(R.string.communication_id_notnull), MToast.LENGTH_SHORT); return; } else { ConfigBean bean = new ConfigBean(); String mac = machineCodeEdit.getText().toString().trim(); bean.setEc_id(0 + ""); bean.setEc_ip(serviceIpEdit.getText().toString().trim()); bean.setEc_identity(encodeEdit.getText().toString().trim()); bean.setEc_mac(mac.toUpperCase()); bean.setEc_passwd(systemPwdEdit.getText().toString().trim()); bean.setEc_signkey(ec_name); bean.setEc_isPrint(isprint); if ("0".equals(mode)) { DbManager.ClearConfig(); DbManager.InsertConfig(bean); } else { DbManager.ModifyConfig(bean); } Intent intent = new Intent(); setResult(SETTING_REQUESTCODE, intent); finish(); } } else { MToast(SettingsActivity.this, getString(R.string.communication_id_notnull), MToast.LENGTH_SHORT); } break; case R.id.title: closeApp(); break; case R.id.printGroup: if (isprint == 1) { isprint = 0; isreprint.setImageDrawable(getResources().getDrawable(R.drawable.set_choice_gray)); } else if (isprint == 0) { isprint = 1; isreprint.setImageDrawable(getResources().getDrawable(R.drawable.set_choice_blue)); } break; case R.id.reprintEncryptGroup: if (isEncrypt != null && isEncrypt) { // 是否隐藏 isEncrypt = false; SharedPreferences2Obj.getInstance(SettingsActivity.this) .setName("config").setObject("isEncrypt", false); reprntEncrypt.setImageDrawable(getResources().getDrawable(R.drawable.set_choice_gray)); } else { isEncrypt = true; SharedPreferences2Obj.getInstance(SettingsActivity.this) .setName("config").setObject("isEncrypt", true); reprntEncrypt.setImageDrawable(getResources().getDrawable(R.drawable.set_choice_blue)); } break; case R.id.scanEncryptGroup: if (scanBack != null && scanBack) { scanBack = false; SharedPreferences2Obj.getInstance(SettingsActivity.this) .setName("config").setObject("scanBack", false); scanEncrypt.setImageDrawable(getResources().getDrawable(R.drawable.set_choice_gray)); } else { scanBack = true; SharedPreferences2Obj.getInstance(SettingsActivity.this) .setName("config").setObject("scanBack", true); scanEncrypt.setImageDrawable(getResources().getDrawable(R.drawable.set_choice_blue)); } break; } } @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (group.getId()) { case R.id.testGroup: // 获取变更后的选中项的ID if (checkedId == testYesRadioBtn.getId()) { SharedPreferences2Obj.getInstance(SettingsActivity.this) .setName("config").setObject("testMOdel", true); testYesRadioBtn.setChecked(true); testNoRadioBtn.setChecked(false); } else if (checkedId == testNoRadioBtn.getId()) { SharedPreferences2Obj.getInstance(SettingsActivity.this) .setName("config").setObject("testMOdel", false); testlayout.setVisibility(View.GONE); testYesRadioBtn.setChecked(false); testNoRadioBtn.setChecked(true); } break; default: break; } } }