yy1717
2020-02-28 26ed6eb5e0c3a15b56f724e8890d33e3b6339882
Merge branch 'master' of https://gitee.com/endian11/DriveJudge
11个文件已修改
8个文件已添加
799 ■■■■ 已修改文件
app/src/main/java/safeluck/drive/evaluation/DB/Student.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/StudentInfoUpdateWork.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/adapter/QuickAdapter.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/adapter/SimpleFragmentAdapter.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/adapter/WrapContentLinearLayoutManager.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/app.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/BaseDatasFragment.java 258 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/BaseSettingFragment.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/GpsInfoFragment.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/InspectSignalFragment.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/SetArgumentsFragment.java 270 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/right_arrow.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/basedata_item_normal.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/gps_info_item_rightarrow.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/inspect_signal_head.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/layout_base_datas.xml 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/layout_basedata.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/layout_check_signal.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/values/strings.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/Student.java
@@ -94,10 +94,12 @@
    @Override
    public String toString() {
        return "Student{" +
                "stu_ID=" + stu_id +
                "stu_id=" + stu_id +
                ", name='" + name + '\'' +
                ", ID='" + ID + '\'' +
                ", sex=" + sex +
                ", head_url='" + head_url + '\'' +
                ", begin_time=" + begin_time +
                '}';
    }
}
app/src/main/java/safeluck/drive/evaluation/DB/StudentInfoUpdateWork.java
@@ -8,6 +8,8 @@
import androidx.work.Worker;
import androidx.work.WorkerParameters;
import com.anyun.exam.lib.MyLog;
import org.json.JSONException;
import org.json.JSONObject;
@@ -35,6 +37,7 @@
                String  name = jsonObject.getString("name");
                Student student =new Student(1001,name,id,2);
                student.setHead_url(headUrl);
                MyLog.i("更新签到人员信息:"+student.toString());
                WorkRoomDataBase.getWorkRoomDataBase(getApplicationContext()).getstudentDao().insert(student);
                return Result.success();
            } catch (JSONException e) {
app/src/main/java/safeluck/drive/evaluation/adapter/QuickAdapter.java
New file
@@ -0,0 +1,72 @@
package safeluck.drive.evaluation.adapter;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
public abstract class QuickAdapter<T> extends RecyclerView.Adapter<QuickAdapter.VH>{
    private List<T> mDatas;
    public QuickAdapter(List<T> datas){
        this.mDatas = datas;
    }
    public abstract int getLayoutId(int viewType);
    @Override
    public VH onCreateViewHolder(ViewGroup parent, int viewType) {
        return VH.get(parent,getLayoutId(viewType));
    }
    @Override
    public void onBindViewHolder(VH holder, int position) {
        convert(holder, mDatas.get(position), position);
    }
    @Override
    public int getItemCount() {
        return mDatas.size();
    }
    public abstract void convert(VH holder, T data, int position);
    //更新数据
    public void updateData(List<T> data) {
        this.mDatas = data;
        notifyDataSetChanged();
    }
    public static class VH extends RecyclerView.ViewHolder{
        private SparseArray<View> mViews;
        private View mConvertView;
        private VH(View v){
            super(v);
            mConvertView = v;
            mViews = new SparseArray<>();
        }
        public static VH get(ViewGroup parent, int layoutId){
            View convertView = LayoutInflater.from(parent.getContext()).inflate(layoutId, parent, false);
            return new VH(convertView);
        }
        public <T extends View> T getView(int id){
            View v = mViews.get(id);
            if(v == null){
                v = mConvertView.findViewById(id);
                mViews.put(id, v);
            }
            return (T)v;
        }
        public void setText(int id, String value){
            TextView view = getView(id);
            view.setText(value);
        }
    }
}
app/src/main/java/safeluck/drive/evaluation/adapter/SimpleFragmentAdapter.java
@@ -12,6 +12,7 @@
import safeluck.drive.evaluation.fragment.GpsInfoFragment;
import safeluck.drive.evaluation.fragment.RTKConfigFragment;
import safeluck.drive.evaluation.fragment.JiaXiaoFragment;
import safeluck.drive.evaluation.fragment.SetArgumentsFragment;
/**
@@ -21,7 +22,7 @@
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public class SimpleFragmentAdapter  extends FragmentPagerAdapter {
    private String[] mTitles = new String[]{"基础数据","RTK配置","GNSS信息"};
    private String[] mTitles = new String[]{"基础数据","GNSS信息"};
    public SimpleFragmentAdapter(FragmentManager fm) {
        super(fm);
    }
@@ -34,15 +35,15 @@
                //基本数据
                supportFragment = BaseDatasFragment.newInstance();
                break;
            case 1:
                supportFragment = RTKConfigFragment.newInstance();
                //ftp
                break;
//            case 1:
//                supportFragment = RTKConfigFragment.newInstance();
//                //ftp
//                break;
//            case 2:
//                supportFragment = JiaXiaoFragment.newInstance();
//                //驾校信息
//                break;
            case 2:
            case 1:
                supportFragment = GpsInfoFragment.newInstance();
                break;
                default:break;
app/src/main/java/safeluck/drive/evaluation/adapter/WrapContentLinearLayoutManager.java
New file
@@ -0,0 +1,38 @@
package safeluck.drive.evaluation.adapter;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.anyun.exam.lib.MyLog;
import safeluck.drive.evaluation.fragment.BaseDatasFragment;
public class WrapContentLinearLayoutManager extends LinearLayoutManager {
    private static final String TAG = "WrapContentLinearLayoutManager";
    public WrapContentLinearLayoutManager(Context context) {
        super(context);
    }
    public WrapContentLinearLayoutManager(Context context, int orientation, boolean reverseLayout) {
        super(context, orientation, reverseLayout);
    }
    public WrapContentLinearLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }
    @Override
    public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
        // 在这里通过try来捕获这个异常即可
        try {
            super.onLayoutChildren(recycler, state);
        } catch (IndexOutOfBoundsException e) {
            MyLog.i(TAG, "onLayoutChildren: "+e.getLocalizedMessage()+" : "+e.getMessage());
            e.printStackTrace();
        }
    }
}
app/src/main/java/safeluck/drive/evaluation/app.java
@@ -82,7 +82,7 @@
        super.onCreate();
        //初始化Fragment 建议在Application onCreate里面初始化
        if (SystemUtil.compareProcessName(this)) {
            Fragmentation.builder().stackViewMode(Fragmentation.BUBBLE).debug(true)
            Fragmentation.builder().stackViewMode(Fragmentation.BUBBLE).debug(false)
                    .handleException(new ExceptionHandler() {
                        @Override
                        public void onException(@NonNull Exception e) {
app/src/main/java/safeluck/drive/evaluation/fragment/BaseDatasFragment.java
@@ -8,6 +8,8 @@
import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
@@ -15,6 +17,7 @@
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
@@ -28,6 +31,8 @@
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;
@@ -37,6 +42,9 @@
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;
@@ -52,24 +60,12 @@
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public class BaseDatasFragment extends SupportFragment implements View.OnClickListener {
public class BaseDatasFragment extends SupportFragment {
    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 Gson gson = new Gson();
    private RTKConfig mRtkConfig;
    private AppStatus appStatus;
    private AppStatusViewModel appStatusViewModel;
    private ICEventListener icEventListener = new ICEventListener() {
        @Override
@@ -78,30 +74,49 @@
                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();
                            datas.clear();
                            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);
                                        Log.i(TAG, "onCEvent: "+version);
                                        datas.add(fields[i].getName() + ":" + version);
                                    }else
                                    stringBuffer.append("   "+fields[i].getName() + ":" + fields[i].get(mcuInfo));
                                        datas.add(fields[i].getName() + ":" + fields[i].get(mcuInfo));
                                } catch (IllegalAccessException e) {
                                    e.printStackTrace();
                                } catch (UnsupportedEncodingException e) {
                                    e.printStackTrace();
                                }
                            }
                            tv_mcu.post(new Runnable() {
                            lv.post(new Runnable() {
                                @Override
                                public void run() {
                                    tv_mcu.setText(getString(R.string.mcu_info)+stringBuffer.toString());
                                    if (mRtkConfig != null){
                                        datas.add("省ID:"+mRtkConfig.getProvince());
                                        datas.add("市ID:"+mRtkConfig.getCity());
                                        datas.add("电话:"+mRtkConfig.getPhone());
                                        datas.add("RTK平台地址:"+mRtkConfig.getIp());
                                        datas.add("RTK平台端口:"+mRtkConfig.getPort());
                                        datas.add("考试平台地址:"+ExamPlatformData.getInstance().getPlatformIP());
                                        datas.add("考试平台端口:"+ExamPlatformData.getInstance().getPlatformPort());
                                    }
                                    if (appStatus != null){
                                        datas.add("RTK平台连接状态:"+appStatus.getRtk_connect_status());
                                        datas.add("RTK平台登录状态:"+appStatus.getRtk_login_code());
                                        datas.add("考试平台连接状态:"+appStatus.getRtk_connect_status());
                                        datas.add("考试平台登录状态:"+appStatus.getRtk_login_code());
                                    }
                                    gpsInfoAdapter.addAll(datas);
                                }
                            });
                }
            }
        }
@@ -111,194 +126,75 @@
        return new BaseDatasFragment();
    }
    private List<String> datas = new ArrayList<>();
    private RecyclerView recyclerView;
    private ListView lv;
    private GpsInfoAdapter gpsInfoAdapter;
    private List<String> gpsinfos = new ArrayList<>();
    @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);
        View view = inflater.inflate(R.layout.layout_gps_info, container, false);
        initView(view);
        rtkConfigViewModel= ViewModelProviders.of(this).get(RTKConfigViewModel.class);
        View footView = inflater.inflate(R.layout.gps_info_item_rightarrow,null);
        View headView = inflater.inflate(R.layout.inspect_signal_head,null);
        lv.addFooterView(footView);
        lv.addHeaderView(headView);
        footView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
//                SetArgumentsFragment setArgumentsFragment = findFragment(SetArgumentsFragment.class);
//                if (setArgumentsFragment == null){
//                    setArgumentsFragment = SetArgumentsFragment.newInstance();
//                }
                ((BaseSettingFragment)getParentFragment()).startBrotherFragment(SetArgumentsFragment.newInstance());
            }
        });
        headView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ((BaseSettingFragment)getParentFragment()).startBrotherFragment(InspectSignalFragment.newInstance());
            }
        });
        RTKConfigViewModel rtkConfigViewModel= ViewModelProviders.of(this).get(RTKConfigViewModel.class);
        rtkConfigViewModel.getRTKConfig().observe(this, new Observer<RTKConfig>() {
            @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 = ViewModelProviders.of(this).get(AppStatusViewModel.class);
        appStatusViewModel.getAppStatus().observe(this, new Observer<AppStatus>() {
            @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()));
            public void onChanged(AppStatus ppStatus) {
                if (ppStatus != null){
                    appStatus = ppStatus;
                }
            }
        });
        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);
        lv = view.findViewById(R.id.lv_gpsinfo);
        gpsInfoAdapter = new GpsInfoAdapter(_mActivity);
        lv.setAdapter(gpsInfoAdapter);
        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);
app/src/main/java/safeluck/drive/evaluation/fragment/BaseSettingFragment.java
@@ -51,7 +51,6 @@
    public void startBrotherFragment(SupportFragment targetFragment) {
        start(targetFragment);
    }
    private void initView(View view) {
        tabLayout = view.findViewById(R.id.tab_base_set);
        viewPager = view.findViewById(R.id.vp_base_set);
app/src/main/java/safeluck/drive/evaluation/fragment/GpsInfoFragment.java
@@ -41,7 +41,7 @@
 */
public class GpsInfoFragment extends SupportFragment {
    private static final String TAG = "RTKConfigFragment";
    private static final String TAG = "GpsInfoFragment";
    private ListView lv;
    private GpsInfoAdapter gpsInfoAdapter;
app/src/main/java/safeluck/drive/evaluation/fragment/InspectSignalFragment.java
@@ -1,5 +1,6 @@
package safeluck.drive.evaluation.fragment;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
@@ -13,8 +14,14 @@
import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import com.google.gson.Gson;
import me.yokeyword.fragmentation.SupportFragment;
import safeluck.drive.evaluation.Constant;
import safeluck.drive.evaluation.R;
import safeluck.drive.evaluation.bean.MCUInfo;
import safeluck.drive.evaluation.cEventCenter.CEventCenter;
import safeluck.drive.evaluation.cEventCenter.ICEventListener;
/**
 * MyApplication2
@@ -24,8 +31,26 @@
 */
public class InspectSignalFragment extends SupportFragment {
    private TextView textView_turnLight;
    private TextView textView_turnLight,tv_speed,tv_engine;
    private Toolbar toolbar;
    private Gson gson= new Gson();
    private ICEventListener icEventListener = new ICEventListener() {
        @Override
        public void onCEvent(String topic, int msgCode, int resultCode, Object obj) {
            if (msgCode==Constant.MCU_SN){
                final MCUInfo mcuInfo = gson.fromJson((String)obj, MCUInfo.class);
                if (mcuInfo != null){
                    tv_engine.post(new Runnable() {
                        @Override
                        public void run() {
                            tv_engine.setText(String.valueOf(mcuInfo.getEngine()));
                            tv_speed.setText(String.valueOf(mcuInfo.getSpeed()));
                        }
                    });
                }
            }
        }
    };
    public static SupportFragment newInstance(){
        return new InspectSignalFragment();
@@ -41,6 +66,8 @@
    }
    private void initView(View view) {
        tv_engine = view.findViewById(R.id.tv_roate_speed);
        tv_speed = view.findViewById(R.id.tv_dangwei_num);
        toolbar =view.findViewById(R.id.toolbar);
        toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_arrow_back_white_24dp,null));
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@@ -58,5 +85,17 @@
                textView_turnLight.setCompoundDrawablesWithIntrinsicBounds(left,null,null,null);
            }
        },5*1000);
    }
    @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);
    }
}
app/src/main/java/safeluck/drive/evaluation/fragment/SetArgumentsFragment.java
New file
@@ -0,0 +1,270 @@
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 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 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;
/**
 * 设置所有参数
 * 通过设置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_CAR = 101;
    private int request_code = REQUEST_CODE_MAP;
    private Button btn_config_signal;
    private Button btn_mcu_upgrade,btn_map_select;
    private EditText et_ip,et_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 Toolbar toolbar;
    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, new Observer<RTKConfig>() {
            @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());
                }
            }
        });
        return view;
    }
    private void initView(View view) {
//        toolbar =view.findViewById(R.id.toolbar);
//        toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_arrow_back_white_24dp,null));
//        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                _mActivity.onBackPressed();
//            }
//        });
//        toolbar.setTitle("设置参数");
        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);
        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);
        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);
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_inpsect_signal:
                break;
            case R.id.btn_signal_conf:
                SupportFragment signalFragment = findChildFragment(SignalConfigFragment.class);
                if (signalFragment == null){
                    signalFragment= SignalConfigFragment.newInstance();
                }
                start(signalFragment);
//                ((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:
                Toast.makeText(_mActivity, "保存成功", Toast.LENGTH_SHORT).show();
                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);
                }
                _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;
            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);
    }
    @Override
    public void onDetach() {
        super.onDetach();
    }
}
app/src/main/res/drawable/right_arrow.png
app/src/main/res/layout/basedata_item_normal.xml
New file
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tv_base_data_normal"
    android:padding="10dp"
    android:text="456"
    android:textColor="@android:color/black"
    android:textSize="25sp"
    android:gravity="center_vertical"
    android:layout_width="match_parent" android:layout_height="60dp">
</TextView>
app/src/main/res/layout/gps_info_item_rightarrow.xml
New file
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/text_check_info"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceListItemSmall"
    android:gravity="center_vertical"
    android:text="设置参数"
    android:drawableRight="@drawable/right_arrow"
    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
    android:minHeight="?android:attr/listPreferredItemHeightSmall" />
app/src/main/res/layout/inspect_signal_head.xml
New file
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/text_check_info"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceListItemSmall"
    android:gravity="center_vertical"
    android:text="车载信号"
    android:drawableRight="@drawable/right_arrow"
    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
    android:minHeight="?android:attr/listPreferredItemHeightSmall" />
app/src/main/res/layout/layout_base_datas.xml
@@ -1,12 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView  android:layout_height="match_parent" android:layout_width="match_parent" xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<!--    <include layout="@layout/toolbar"/>-->
<!--    <ScrollView-->
<!--        android:layout_height="match_parent" android:layout_width="match_parent"-->
<!--        >-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:padding="10dp"
        android:gravity="center_horizontal"
        android:background="@color/train_bg"
        >
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
@@ -122,12 +133,14 @@
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:visibility="gone"
                android:text="电话:"/>
            <EditText
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/et_phone"
                android:text="19234567894"
                android:visibility="gone"
                android:inputType="numberDecimal"
                android:background="@android:drawable/editbox_background_normal"/>
        </LinearLayout>
@@ -146,7 +159,7 @@
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="@android:color/black"
                android:text="车载信号输入:"/>
                android:text="车载信号配置:"/>
            <TableLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
@@ -231,6 +244,7 @@
                    <Button  android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="查看信号"
                        android:visibility="gone"
                        android:id="@+id/btn_inpsect_signal"
                        android:padding="5dp"
                        android:background="@drawable/btn_bg_baseset"/>
@@ -293,27 +307,7 @@
        </TableRow>
        </TableLayout>
    </LinearLayout>
        <View
            android:layout_width="match_parent"
            android:layout_height="1px"
            android:layout_marginTop="10dp"
            android:layout_marginBottom="10dp"
            android:background="@color/colorAccent"
            />
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <TextView
                android:textColor="@android:color/black"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:id="@+id/tv_mcu_info"
                android:text="@string/mcu_info"
                android:layout_weight="1"/>
        </LinearLayout>
        <View
            android:layout_width="match_parent"
@@ -328,5 +322,6 @@
            android:id="@+id/btn_save_platform"
            android:text="保存"/>
    </LinearLayout>
<!--    </ScrollView>-->
</LinearLayout>
</ScrollView>
app/src/main/res/layout/layout_basedata.xml
New file
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/recyclerview"/>
</LinearLayout>
app/src/main/res/layout/layout_check_signal.xml
@@ -22,7 +22,7 @@
        android:id="@+id/tv_dangwei"
        android:gravity="center"
        android:text="档位:"/>
        android:text="@string/chesu"/>
    <TextView
        android:layout_width="35dp"
        android:layout_height="25dp"
@@ -35,18 +35,19 @@
        android:layout_width="70dp"
        android:layout_height="25dp"
        android:textColor="@android:color/black"
        android:id="@+id/tv_roate_speed"
        android:gravity="center"
        android:layout_marginTop="15dp"
        android:layout_below="@+id/tv_dangwei"
        android:text="转速:"/>
        android:text="@string/engine"/>
    <TextView
        android:layout_width="70dp"
        android:layout_height="25dp"
        android:gravity="center"
        android:layout_marginTop="15dp"
        android:text="-1.32332"
        android:id="@+id/tv_roate_speed"
        android:layout_toRightOf="@id/tv_dangwei"
        android:layout_below="@+id/tv_dangwei_num"
        android:background="@drawable/dangwei_bg"/>
app/src/main/res/values/strings.xml
@@ -32,4 +32,6 @@
    <string name="sex">性别:</string>
    <string name="begin_time">开始时间:</string>
    <string name="mcu_info">协处理器信息:</string>
    <string name="chesu">车速:</string>
    <string name="engine">转速:</string>
</resources>