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.customview.MyArgEditText; import safeluck.drive.evaluation.customview.SelectDialog; 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; private Gson gson = new Gson(); private MyArgEditText platform_ip,platform_port,rtkPlatform_ip,rtkPlatform_port,city,province; 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; rtkPlatform_ip.updateStr(rtkConfig.getIp()); rtkPlatform_port.updateStr(String.valueOf(rtkConfig.getPort())); city.updateStr(String.valueOf(rtkConfig.getCity())); province.updateStr(String.valueOf(rtkConfig.getProvince())); 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 = 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); platform_ip = view.findViewById(R.id.platform_ip); platform_port = view.findViewById(R.id.platform_port); platform_ip.updateStr(ExamPlatformData.getInstance().getPlatformIP()); platform_port.updateStr(ExamPlatformData.getInstance().getPlatformPort()+""); 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_config_signal = view.findViewById(R.id.btn_signal_conf); btn_config_signal.setOnClickListener(this); rtkPlatform_ip = view.findViewById(R.id.rtk_addr_ip); rtkPlatform_port = view.findViewById(R.id.rtk_addr_port); city = view.findViewById(R.id.city_id); province = view.findViewById(R.id.province_id); } @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(); String tempPlatformIp = platform_ip.getInputStr().trim(); String tempRTKPlatformIp = rtkPlatform_ip.getInputStr().trim(); int city_id_ = Integer.parseInt(city.getInputStr().trim()); int province_id_ = Integer.parseInt(province.getInputStr().trim()); int tempPlatformPort = Integer.parseInt(platform_port.getInputStr().trim()); int tempRTKPlatformPort = Integer.parseInt(rtkPlatform_port.getInputStr().trim()); if(ExamPlatformData.getInstance().compareIPandPort(tempPlatformIp,tempPlatformPort)){ SPUtils.put(getActivity(), SPUtils.DES_HEX_PWD,""); ((MainActivity)getActivity()).examPlatformModel.getDataChange().postValue(1); ExamPlatformData.getInstance().insertPlatformIp(tempPlatformIp); ExamPlatformData.getInstance().insertPlatformPort(tempPlatformPort); } if (mRtkConfig != null){ mRtkConfig.setPort(tempRTKPlatformPort); mRtkConfig.setCity(city_id_); mRtkConfig.setProvince(province_id_); mRtkConfig.setIp(tempRTKPlatformIp); if (ExamPlatformData.getInstance().compareRTKIPandPort(tempRTKPlatformIp,tempRTKPlatformPort)){ 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: SelectDialog selectDialog = SelectDialog.newInstance(); selectDialog.show(getFragmentManager(),"selectdialog"); selectDialog.setSelectedListener((int res) -> { if (res != SelectDialog.SELECT_NONE){ if (res == SelectDialog.FIRST){ request_code = REQUEST_CODE_MAP; Toast.makeText(_mActivity, "场考地图选择!", Toast.LENGTH_SHORT).show(); }else{ request_code = REQUEST_CODE_ROADMAP; Toast.makeText(_mActivity, "路考地图选择!", Toast.LENGTH_SHORT).show(); } openFileMgr(); }else{ Toast.makeText(_mActivity, "没有任何选择!", Toast.LENGTH_SHORT).show(); } }); 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(); } }