package safeluck.drive.evaluation.fragment; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import com.anyun.exam.lib.AYSdk; import com.anyun.exam.lib.MyLog; import com.anyun.exam.lib.util.ByteUtil; import com.google.gson.Gson; import com.safeluck.aykj.utils.BytesUtils; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.lang.reflect.Field; import java.nio.charset.Charset; import me.yokeyword.fragmentation.SupportFragment; import safeluck.drive.evaluation.Constant; import safeluck.drive.evaluation.DB.appstatusdb.AppStatus; import safeluck.drive.evaluation.DB.appstatusdb.AppStatusViewModel; import safeluck.drive.evaluation.DB.rtktb.RTKConfig; import safeluck.drive.evaluation.DB.rtktb.RTKConfigViewModel; import safeluck.drive.evaluation.MainActivity; import safeluck.drive.evaluation.R; import safeluck.drive.evaluation.bean.ExamPlatformData; import safeluck.drive.evaluation.bean.MCUInfo; import safeluck.drive.evaluation.cEventCenter.CEventCenter; import safeluck.drive.evaluation.cEventCenter.ICEventListener; import safeluck.drive.evaluation.util.CThreadPoolExecutor; import safeluck.drive.evaluation.util.FileUtil; /** * 基础数据设置 * 通过设置IP和port,与驾考辅助软件通过tcp传输GPS报文给评判软件 * MyApplication2 * Created by lzw on 2019/3/20. 11:22:39 * 邮箱:632393724@qq.com * All Rights Saved! Chongqing AnYun Tech co. LTD */ public class BaseDatasFragment extends SupportFragment implements View.OnClickListener { private static final String TAG = BaseDatasFragment.class.getSimpleName(); private static final int REQUEST_CODE_MAP = 100; private static final int REQUEST_CODE_CAR = 101; private int request_code = REQUEST_CODE_MAP; private Button btn_inspect_signal; private Button btn_config_signal; private Button btn_mcu_upgrade,btn_map_select; private EditText et_ip,et_port; private Gson gson; StringBuffer stringBuffer = new StringBuffer(); private EditText et_ip_rtk,et_port_rtk,et_city_id,et_city_province,et_phone; private TextView tv_mcu; // RTK注册状态、RTK连接状态、 // private TextView tv_reg,tv_connect,tv_model,tv_sn,tv_imei,tv_login; private RTKConfigViewModel rtkConfigViewModel; private RTKConfig mRtkConfig; private AppStatusViewModel appStatusViewModel; private ICEventListener icEventListener = new ICEventListener() { @Override public void onCEvent(String topic, int msgCode, int resultCode, Object obj) { if (msgCode == Constant.MCU_SN){ String mcuinfoStr = (String)obj; if (gson != null){ final MCUInfo mcuInfo=gson.fromJson(mcuinfoStr, MCUInfo.class); stringBuffer.delete(0,stringBuffer.toString().length()); Field [] fields = mcuInfo.getClass().getDeclaredFields(); for (int i = 0; i < fields.length; i++) { fields[i].setAccessible(true); try { if (fields[i].getName().equalsIgnoreCase("version")){ String version = (String) fields[i].get(mcuInfo); version = new String(BytesUtils.hexStringToBytes(version),"GBK"); stringBuffer.append(" "+fields[i].getName() + ":" + version); }else stringBuffer.append(" "+fields[i].getName() + ":" + fields[i].get(mcuInfo)); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } tv_mcu.post(new Runnable() { @Override public void run() { tv_mcu.setText(getString(R.string.mcu_info)+stringBuffer.toString()); } }); } } } }; public static SupportFragment newInstance() { return new BaseDatasFragment(); } @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.layout_base_datas, container, false); initView(view); rtkConfigViewModel= ViewModelProviders.of(this).get(RTKConfigViewModel.class); rtkConfigViewModel.getRTKConfig().observe(this, new Observer() { @Override public void onChanged(RTKConfig rtkConfig) { if (rtkConfig != null){ Log.i(TAG, "RTKConfig Changed: "+rtkConfig.toString()); mRtkConfig = rtkConfig; et_ip_rtk.setText(rtkConfig.getIp()); et_city_id.setText(String.valueOf(rtkConfig.getCity())); et_city_province.setText(String.valueOf(rtkConfig.getProvince())); et_port_rtk.setText(String.valueOf(rtkConfig.getPort())); et_phone.setText(rtkConfig.getPhone()); // tv_sn.setText(getResources().getString(R.string.rtk_config_sn,rtkConfig.getSn())); // tv_model.setText(getResources().getString(R.string.rtk_config_model,rtkConfig.getModel())); // tv_imei.setText(getResources().getString(R.string.rtk_config_imei,rtkConfig.getImei())); // tv_reg.setText(getResources().getString(R.string.rtk_register_status,rtkConfig.getRegistered())); } } }); appStatusViewModel = ViewModelProviders.of(this).get(AppStatusViewModel.class); appStatusViewModel.getAppStatus().observe(this, new Observer() { @Override public void onChanged(AppStatus appStatus) { if (appStatus != null){ // tv_login.setText(getResources().getString(R.string.rtk_config_login,appStatus.getRtk_login_code())); // tv_connect.setText(getResources().getString(R.string.rtk_connect_status,appStatus.getRtk_connect_status())); } } }); return view; } private void initView(View view) { gson = new Gson(); view.findViewById(R.id.btn_save_platform).setOnClickListener(this); et_ip = view.findViewById(R.id.et_platform_ip); et_port = view.findViewById(R.id.et_platform_port); et_ip.setText(ExamPlatformData.getInstance().getPlatformIP()); et_port.setText(ExamPlatformData.getInstance().getPlatformPort()+""); btn_inspect_signal = view.findViewById(R.id.btn_inpsect_signal); btn_mcu_upgrade = view.findViewById(R.id.btn_mcu_upgrade); btn_map_select = view.findViewById(R.id.btn_map_select); view.findViewById(R.id.btn_car_select).setOnClickListener(this); btn_mcu_upgrade.setOnClickListener(this); btn_map_select.setOnClickListener(this); btn_inspect_signal.setOnClickListener(this); btn_config_signal = view.findViewById(R.id.btn_signal_conf); btn_config_signal.setOnClickListener(this); et_ip_rtk = view.findViewById(R.id.rtk_addr_ip); et_city_id = view.findViewById(R.id.et_city_id); et_city_province = view.findViewById(R.id.et_provice_id); et_phone = view.findViewById(R.id.et_phone); et_port_rtk = view.findViewById(R.id.rtk_addr_port); tv_mcu = view.findViewById(R.id.tv_mcu_info); // tv_connect = view.findViewById(R.id.tv_rtk_connect);//RTK平台连接状态 // tv_imei = view.findViewById(R.id.tv_rtk_imei); // tv_login = view.findViewById(R.id.tv_rtk_login);//RTK平台登录结果 // tv_model = view.findViewById(R.id.tv_rtk_model); // tv_reg = view.findViewById(R.id.tv_rtk_reg);//RTK平台注册状态 // tv_sn = view.findViewById(R.id.tv_rtk_sn); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_inpsect_signal: ((BaseSettingFragment)getParentFragment()).startBrotherFragment(InspectSignalFragment.newInstance()); break; case R.id.btn_signal_conf: ((BaseSettingFragment)getParentFragment()).startBrotherFragment(SignalConfigFragment.newInstance()); break; case R.id.btn_mcu_upgrade: try { byte[] datas =FileUtil.readLocalFile(getActivity(),"dfu.bin"); if (datas != null){ Log.i(TAG,ByteUtil.byte2hex(datas)); String strs = new String(datas, Charset.forName("ISO-8859-1")); Log.i(TAG, "onClick: datas.legnth=="+strs.getBytes("ISO-8859-1").length); AYSdk.getInstance().sendCmd(Constant.UPGRADE_MCU_CONTENT_FILE, strs); }else{ MyLog.i(TAG,"mcu升级文件不存在"); } } catch (IOException e) { e.printStackTrace(); } break; case R.id.btn_save_platform: if(ExamPlatformData.getInstance().compareIPandPort(et_ip.getText().toString().trim(),Integer.parseInt(et_port.getText().toString().trim()))){ ((MainActivity)getActivity()).examPlatformModel.getDataChange().postValue(1); ExamPlatformData.getInstance().insertPlatformIp(et_ip.getText().toString().trim()); ExamPlatformData.getInstance().insertPlatformPort(Integer.parseInt(et_port.getText().toString().trim())); } if (mRtkConfig != null){ mRtkConfig.setPort(Integer.parseInt(et_port_rtk.getText().toString().trim())); mRtkConfig.setCity(Integer.parseInt(et_city_id.getText().toString().trim())); mRtkConfig.setProvince(Integer.parseInt(et_city_province.getText().toString().trim())); mRtkConfig.setIp(et_ip_rtk.getText().toString().trim()); mRtkConfig.setPhone(et_phone.getText().toString().trim()); rtkConfigViewModel.insertRTKConfig(mRtkConfig); } break; case R.id.btn_car_select://车辆模型和地图公用一套代码 区别在于REQUEST_CODE request_code = REQUEST_CODE_CAR; openFileMgr(); break; case R.id.btn_map_select: request_code = REQUEST_CODE_MAP; openFileMgr(); break; default: break; } } private void openFileMgr() { Intent intent = new Intent(); intent.setAction(Intent.ACTION_GET_CONTENT); intent.setType("*/*"); intent.addCategory(Intent.CATEGORY_OPENABLE); try { startActivityForResult(intent, request_code); } catch (android.content.ActivityNotFoundException e) { e.printStackTrace(); Toast.makeText(_mActivity, "请安装文件管理器", Toast.LENGTH_SHORT).show(); } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (REQUEST_CODE_MAP == requestCode){ if (data != null){ final Uri uri= data.getData(); Log.i(TAG, "onActivityResult: "+uri.getPath()); ExamPlatformData.getInstance().setNewMapPath(uri.getPath()); CThreadPoolExecutor.runInBackground(new Runnable() { @Override public void run() { byte[] fileContent = FileUtil.readFile(uri.getPath()); if (fileContent != null){ String str = new String(fileContent); Log.i(TAG, "文件内容:"+str); AYSdk.getInstance().sendCmd(Constant.PUSH_MAP_INFO,str); } } }); } }else if (requestCode == REQUEST_CODE_CAR){ if (data != null){ final Uri uri= data.getData(); Log.i(TAG, "onActivityResult: "+uri.getPath()); ExamPlatformData.getInstance().setCarModelPath(uri.getPath()); CThreadPoolExecutor.runInBackground(new Runnable() { @Override public void run() { byte[] fileContent = FileUtil.readFile(uri.getPath()); if (fileContent != null){ String str = new String(fileContent); Log.i(TAG, "文件内容:"+str); AYSdk.getInstance().sendCmd(Constant.PUSH_VECHILE_PROFILE,str); } } }); } } } @Override public void onAttach(Context context) { super.onAttach(context); CEventCenter.onBindEvent(true,icEventListener,Constant.BIND_MCUINFO_TOPIC); } @Override public void onDetach() { super.onDetach(); CEventCenter.onBindEvent(true,icEventListener,Constant.BIND_MCUINFO_TOPIC); } }