package safeluck.drive.evaluation.fragment; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; 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.ListView; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.widget.Toolbar; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.work.Data; import androidx.work.OneTimeWorkRequest; import androidx.work.WorkInfo; import androidx.work.WorkManager; 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 org.json.JSONException; import org.json.JSONObject; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.lang.reflect.Field; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; 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.adapter.GpsInfoAdapter; import safeluck.drive.evaluation.adapter.QuickAdapter; import safeluck.drive.evaluation.adapter.WrapContentLinearLayoutManager; 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; import safeluck.drive.evaluation.util.SPUtils; import safeluck.drive.evaluation.worker.MCUUpgradeWorker; /** * 设置所有参数 * 通过设置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 SetArgumentsFragment extends SupportFragment implements View.OnClickListener { private static final String TAG = SetArgumentsFragment.class.getSimpleName(); private static final int REQUEST_CODE_MAP = 100; private static final int REQUEST_CODE_ROADMAP = 102; private static final int REQUEST_CODE_CAR = 101; private int request_code = REQUEST_CODE_MAP; private Button btn_config_signal; private Button btn_mcu_upgrade,btn_map_select,btn_roadmap_select; private EditText et_ip,et_port,et_simulte_ip,et_simulate_port; private Gson gson = new Gson(); private EditText et_ip_rtk,et_port_rtk,et_city_id,et_city_province,et_phone; private RTKConfigViewModel rtkConfigViewModel; private RTKConfig mRtkConfig; private boolean needSendRtk = false; public static SetArgumentsFragment newInstance() { return new SetArgumentsFragment(); } // @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, 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()); ExamPlatformData.getInstance().setRTKPort(rtkConfig.getPort()); ExamPlatformData.getInstance().setRTKIP(rtkConfig.getIp()); } }); return view; } private void sendRtkConfigInfo(RTKConfig mRTKConfig) { if (mRTKConfig != null) { String rtkjson = gson.toJson(mRTKConfig); //去除id字段 JSONObject jsonObject = null; try { jsonObject = new JSONObject(rtkjson); } catch (JSONException e) { e.printStackTrace(); } jsonObject.remove("_id"); rtkjson = null; rtkjson = jsonObject.toString(); MyLog.i( "need resend RTK配置信息:" + rtkjson+"标志位:"+needSendRtk); AYSdk.getInstance().sendCmd(Constant.PUSH_RTK_PLATFORM_INFO, rtkjson); } else { MyLog.i("RTKConfig未取到数据"); } needSendRtk = false; } private void initView(View view) { if (HomeFragment.class.getSimpleName().equals(getTopFragment().getClass().getSimpleName())){ ((MainActivity)_mActivity).viewtitle.setVisibility(View.GONE); ((MainActivity)_mActivity).btn_return.setVisibility(View.GONE); }else{ ((MainActivity)_mActivity).viewtitle.setVisibility(View.VISIBLE); ((MainActivity)_mActivity).btn_return.setVisibility(View.VISIBLE); } 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_mcu_upgrade = view.findViewById(R.id.btn_mcu_upgrade); btn_map_select = view.findViewById(R.id.btn_map_select); btn_roadmap_select = view.findViewById(R.id.btn_roadmap_select); view.findViewById(R.id.btn_car_select).setOnClickListener(this); btn_mcu_upgrade.setOnClickListener(this); btn_map_select.setOnClickListener(this); btn_roadmap_select.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_simulte_ip = view.findViewById(R.id.simulate_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); et_simulate_port = view.findViewById(R.id.simulate_port); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_signal_conf: SupportFragment signalFragment = findChildFragment(SignalConfigFragment.class); if (signalFragment == null){ signalFragment= SignalConfigFragment.newInstance(); } start(signalFragment); break; case R.id.btn_mcu_upgrade: OneTimeWorkRequest mcuUpgradeWorkReq = OneTimeWorkRequest.from(MCUUpgradeWorker.class); WorkManager.getInstance(_mActivity.getApplicationContext()).enqueue(mcuUpgradeWorkReq); WorkManager.getInstance(_mActivity.getApplicationContext()).getWorkInfoByIdLiveData(mcuUpgradeWorkReq.getId()) .observe(this, new Observer() { @Override public void onChanged(WorkInfo workInfo) { if (workInfo.getState()== WorkInfo.State.FAILED){ Data data = workInfo.getOutputData(); String str = data.getString(Constant.MCU_UPGRADE_FAIL_RESASON); Toast.makeText(_mActivity, str, Toast.LENGTH_SHORT).show(); } } }); break; case R.id.btn_save_platform: Toast.makeText(_mActivity, "保存成功", Toast.LENGTH_SHORT).show(); if(ExamPlatformData.getInstance().compareIPandPort(et_ip.getText().toString().trim(),Integer.parseInt(et_port.getText().toString().trim()))){ SPUtils.put(getActivity(), SPUtils.DES_HEX_PWD,""); ((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){ String rtkip = et_ip_rtk.getText().toString().trim(); int rtkport = Integer.parseInt(et_port_rtk.getText().toString().trim()); mRtkConfig.setPort(rtkport); mRtkConfig.setCity(Integer.parseInt(et_city_id.getText().toString().trim())); mRtkConfig.setProvince(Integer.parseInt(et_city_province.getText().toString().trim())); mRtkConfig.setIp(rtkip); mRtkConfig.setPhone(et_phone.getText().toString().trim()); if (ExamPlatformData.getInstance().compareRTKIPandPort(rtkip,rtkport)){ mRtkConfig.setRegistered(0); MyLog.i("rtk ip和地址有变化"); needSendRtk = true; sendRtkConfigInfo(mRtkConfig); } rtkConfigViewModel.insertRTKConfig(mRtkConfig); } _mActivity.onBackPressed(); 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; case R.id.btn_roadmap_select: request_code = REQUEST_CODE_ROADMAP; 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(()-> { 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(()-> { 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); } }); } }else if (REQUEST_CODE_ROADMAP == requestCode){ if (data != null){ final Uri uri= data.getData(); Log.i(TAG, "onActivityResult: "+uri.getPath()); ExamPlatformData.getInstance().setNewRoadMapPath(uri.getPath()); CThreadPoolExecutor.runInBackground(() -> { byte[] fileContent = FileUtil.readFile(uri.getPath()); if (fileContent != null){ String str = new String(fileContent); Log.i(TAG, "文件内容:"+str); AYSdk.getInstance().sendCmd(Constant.PUSH_ROAD_MAP_INFO,str); } }); } } } @Override public void onAttach(Context context) { super.onAttach(context); } @Override public void onDetach() { super.onDetach(); } @Override public void onDestroyView() { super.onDestroyView(); } }