endian11
2020-10-26 a5c2e37286dd29b02fff10247e6f3201ad5f58cd
Merge remote-tracking branch 'origin/lowprecision'
22个文件已修改
38个文件已添加
2846 ■■■■■ 已修改文件
app/src/main/assets/Gear_Setting.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/assets/area_setting.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/assets/common_setting.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/assets/cornerlamp_setting.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/assets/overtake_setting.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/assets/sidestop_setting.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/assets/startcar_setting.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/assets/station_setting.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/assets/stop_setting.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/assets/straightline_setting.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/assets/subdecGear_setting.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/Constant.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/adapter/SimpleFragmentAdapter.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/app.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/bean/AreaSetting.java 308 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/bean/CommonSetting.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/bean/CorneringLampSetting.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/bean/OverTakeMeetingSetting.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/bean/SideStopSetting.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/bean/StartCarSetting.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/bean/StationSetting.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/bean/StraightLineSetting.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/bean/SubDecGearSetting.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/ArcGisMapFragment.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/rulefragments/FragmentSetting0.java 192 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/rulefragments/FragmentSetting1.java 180 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/rulefragments/FragmentSetting2.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/rulefragments/FragmentSetting3.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/rulefragments/FragmentSetting4.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/rulefragments/FragmentSetting5.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/rulefragments/FragmentSetting6.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/rulefragments/FragmentSetting7.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/rulefragments/FragmentSetting8.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/rulefragments/FragmentSetting9.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/rulefragments/cview/TextEditText.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/util/Utils.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/viewmodels/AreaSettingViewModel.kt 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/viewmodels/CommonSettingViewModel.kt 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/viewmodels/CorneringLampSettingViewModel.kt 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/viewmodels/GearRelateSet.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/viewmodels/GearRelateSetViewModel.kt 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/viewmodels/OverTakeAndMeetingSettingViewModel.kt 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/viewmodels/SideStopSettingViewModel.kt 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/viewmodels/StartCarSettingViewModel.kt 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/viewmodels/StationSettingViewModel.kt 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/viewmodels/StraightLineSettingViewModel.kt 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/viewmodels/SubDecGearSettingViewModel.kt 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/fragment_add_sub_gear_setting_1.xml 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/fragment_content.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/fragment_gear_setting.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/fragment_gear_setting_1.xml 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/layout_common_judge_1.xml 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/layout_fragment_changkao.xml 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/layout_fragment_over_take.xml 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/layout_fragment_parkover_1.xml 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/layout_fragment_setlights.xml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/layout_fragment_start.xml 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/layout_fragment_stationsettin.xml 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/layout_fragment_straight_line.xml 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/values/strings.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/assets/Gear_Setting.json
New file
@@ -0,0 +1 @@
{"gear_n_allow_time":5,"same_gear_min_time":5,"gear_speed_error_cumulative_time":15,"gear_speed_table":[[0,20],[5,30],[15,40],[25,10000],[35,10000]]}
app/src/main/assets/area_setting.json
New file
@@ -0,0 +1 @@
{"hold_start_key_limit_time":2000,"curve_pause_criteria":200,"park_bottom_pause_criteria":2000,"park_bottom_limit_time":210,"park_edge_pause_criteria":2000,"park_edge_limit_time":90,"turn_a90_pause_criteria":2000,"ramp_start_car_limit_time":30,"ramp_stoppoint_red_distance":0.5,"ramp_edge_yellow_distance":0.3,"ramp_edge_red_distance":0.5,"ramp_slide_yellow_distance":0.1,"ramp_slide_red_distance":0.3}
app/src/main/assets/common_setting.json
New file
@@ -0,0 +1 @@
{"road_slide_yellow_distance":0.1,"road_slide_red_distance":0.3,"road_pause_criteria":2000,"crash_dotted_line_cumulative_time":10,"continuous_change_lane_min_time":10,"change_lane_limit_distance":100}
app/src/main/assets/cornerlamp_setting.json
New file
@@ -0,0 +1 @@
{"turn_signal_min_advance":3}
app/src/main/assets/overtake_setting.json
New file
@@ -0,0 +1 @@
{"overtake_limit_distance":150}
app/src/main/assets/sidestop_setting.json
New file
@@ -0,0 +1 @@
{"road_total_distance":3000,"road_max_speed":3,"stop_car_open_door_allow_time":15,"stop_car_limit_distance":150,"stop_car_edge_red_distance":0.5,"stop_car_edge_yellow_distance":0.3}
app/src/main/assets/startcar_setting.json
New file
@@ -0,0 +1 @@
{"start_car_limit_distance":10,"open_door_drive_allow_distance":1.1,"start_car_max_rpm":2500}
app/src/main/assets/station_setting.json
New file
@@ -0,0 +1 @@
{"cross_school_max_speed":30,"crossing_break_valid_distance":30,"crossing_stop_valid_distance":3.5}
app/src/main/assets/stop_setting.json
New file
@@ -0,0 +1 @@
{"road_stop_dist":150,"road_stop_open_door_time":2,"road_stop_edge_red_dist":0.5,"road_stop_edge_yellow_dist":0.3,"road_max_speed":60,"road_max_dist":3000}
app/src/main/assets/straightline_setting.json
New file
@@ -0,0 +1 @@
{"straight_limit_distance":100,"straight_max_offset":0.3}
app/src/main/assets/subdecGear_setting.json
New file
@@ -0,0 +1 @@
{"shift_limit_distance":120,"shift_hold_time":3}
app/src/main/java/safeluck/drive/evaluation/Constant.java
@@ -110,4 +110,5 @@
    public static final String MCU_UPGRADE_FAIL_RESASON = "mcu_upgrade_fail_reason";
    @NotNull
    public static final String TTS="tts_judge";
    public static int ID_judge_args = 0x8019;
}
app/src/main/java/safeluck/drive/evaluation/adapter/SimpleFragmentAdapter.java
@@ -20,7 +20,7 @@
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public class SimpleFragmentAdapter  extends FragmentPagerAdapter {
    private String[] mTitles = new String[]{"基础数据","GNSS信息"};
    private String[] mTitles = new String[]{"基础数据","考试系统设置"};
//    private String[] mTitles = new String[]{"基础数据","GNSS信息","考试系统设置"};
    public SimpleFragmentAdapter(FragmentManager fm) {
        super(fm);
@@ -38,12 +38,10 @@
//                supportFragment = RTKConfigFragment.newInstance();
//                //ftp
//                break;
//            case 2:
//                supportFragment = SysExamSettingFragment.newInstance();
//                break;
                        case 1:
                supportFragment = GpsInfoFragment.newInstance();
                supportFragment = SysExamSettingFragment.newInstance();
                break;
                default:break;
        }
        return supportFragment;
app/src/main/java/safeluck/drive/evaluation/app.java
@@ -31,6 +31,9 @@
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.util.Date;
import java.util.concurrent.Executors;
@@ -119,9 +122,28 @@
//            DataInitKt.sendSignalConfigToRemote(getApplicationContext());
//            OneTimeWorkRequest mcuUpgradeWorker = OneTimeWorkRequest.from(MCUUpgradeWorker.class);
//            WorkManager.getInstance(getApplicationContext()).beginWith(examStatausOutWorker).then(mcuUpgradeWorker).enqueue();
            sendJudgeArgs();
        });
    }
    private void sendJudgeArgs() {
        File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+getPackageName());
        if (dir.exists()){
            File[] files = dir.listFiles();
            for (int i = 0; i < files.length; i++) {
                if (files[i].getName().contains("_setting")||files[i].getName().contains("_Setting")){
                Log.i(TAG,files[i].getName());
                    byte[] buffer = FileUtil.readFile(files[i].getAbsolutePath());
                    AYSdk.getInstance().sendCmd(Constant.ID_judge_args,new String(buffer).trim());
                }
            }
        }
    }
    public static Context getAppContext(){
        return appContext;
    }
app/src/main/java/safeluck/drive/evaluation/bean/AreaSetting.java
New file
@@ -0,0 +1,308 @@
package safeluck.drive.evaluation.bean;
/**
 * DriveJudge
 * Created by lzw on 2020/10/22. 17:13:51
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public class AreaSetting {
    /**
     * hold_start_key_limit_time : 2000
     * curve_pause_criteria : 200
     * park_bottom_pause_criteria : 2000
     * park_bottom_limit_time : 210
     * park_edge_pause_criteria : 2000
     * park_edge_limit_time : 90
     * turn_a90_pause_criteria : 2000
     * ramp_start_car_limit_time : 30
     * ramp_stoppoint_red_distance : 0.5
     * ramp_edge_yellow_distance : 0.3
     * ramp_edge_red_distance : 0.5
     * ramp_slide_yellow_distance : 0.1
     * ramp_slide_red_distance : 0.3
     */
    private int hold_start_key_limit_time;
    private int curve_pause_criteria;
    private int park_bottom_pause_criteria;
    private int park_bottom_limit_time;
    private int park_edge_pause_criteria;
    private int park_edge_limit_time;
    private int turn_a90_pause_criteria;
    private int ramp_start_car_limit_time;
    private double ramp_stoppoint_red_distance;
    private double ramp_edge_yellow_distance;
    private double ramp_edge_red_distance;
    private double ramp_slide_yellow_distance;
    private double ramp_slide_red_distance;
    public int getHold_start_key_limit_time() {
        return hold_start_key_limit_time;
    }
    public void setHold_start_key_limit_time(int hold_start_key_limit_time) {
        this.hold_start_key_limit_time = hold_start_key_limit_time;
    }
    public int getCurve_pause_criteria() {
        return curve_pause_criteria;
    }
    public void setCurve_pause_criteria(int curve_pause_criteria) {
        this.curve_pause_criteria = curve_pause_criteria;
    }
    public int getPark_bottom_pause_criteria() {
        return park_bottom_pause_criteria;
    }
    public void setPark_bottom_pause_criteria(int park_bottom_pause_criteria) {
        this.park_bottom_pause_criteria = park_bottom_pause_criteria;
    }
    public int getPark_bottom_limit_time() {
        return park_bottom_limit_time;
    }
    public void setPark_bottom_limit_time(int park_bottom_limit_time) {
        this.park_bottom_limit_time = park_bottom_limit_time;
    }
    public int getPark_edge_pause_criteria() {
        return park_edge_pause_criteria;
    }
    public void setPark_edge_pause_criteria(int park_edge_pause_criteria) {
        this.park_edge_pause_criteria = park_edge_pause_criteria;
    }
    public int getPark_edge_limit_time() {
        return park_edge_limit_time;
    }
    public void setPark_edge_limit_time(int park_edge_limit_time) {
        this.park_edge_limit_time = park_edge_limit_time;
    }
    public int getTurn_a90_pause_criteria() {
        return turn_a90_pause_criteria;
    }
    public void setTurn_a90_pause_criteria(int turn_a90_pause_criteria) {
        this.turn_a90_pause_criteria = turn_a90_pause_criteria;
    }
    public int getRamp_start_car_limit_time() {
        return ramp_start_car_limit_time;
    }
    public void setRamp_start_car_limit_time(int ramp_start_car_limit_time) {
        this.ramp_start_car_limit_time = ramp_start_car_limit_time;
    }
    public double getRamp_stoppoint_red_distance() {
        return ramp_stoppoint_red_distance;
    }
    public void setRamp_stoppoint_red_distance(double ramp_stoppoint_red_distance) {
        this.ramp_stoppoint_red_distance = ramp_stoppoint_red_distance;
    }
    public double getRamp_edge_yellow_distance() {
        return ramp_edge_yellow_distance;
    }
    public void setRamp_edge_yellow_distance(double ramp_edge_yellow_distance) {
        this.ramp_edge_yellow_distance = ramp_edge_yellow_distance;
    }
    public double getRamp_edge_red_distance() {
        return ramp_edge_red_distance;
    }
    public void setRamp_edge_red_distance(double ramp_edge_red_distance) {
        this.ramp_edge_red_distance = ramp_edge_red_distance;
    }
    public double getRamp_slide_yellow_distance() {
        return ramp_slide_yellow_distance;
    }
    public void setRamp_slide_yellow_distance(double ramp_slide_yellow_distance) {
        this.ramp_slide_yellow_distance = ramp_slide_yellow_distance;
    }
    public double getRamp_slide_red_distance() {
        return ramp_slide_red_distance;
    }
    public void setRamp_slide_red_distance(double ramp_slide_red_distance) {
        this.ramp_slide_red_distance = ramp_slide_red_distance;
    }
    /**
     *
     * area_release_start_key    Int    豪秒。松开点火开关时限。    2000
     * area_curve_pause_time    int    毫秒。中途停车判定    2000
     * area_park_pause_time    int    毫秒。倒库中途停车判定    2000
     * area_park_finish_time    int    秒。倒库最长完成时间    210
     * area_park2_pause_time    int    毫秒。侧方中途停车判定    2000
     * area_park2_finish_time    int    秒。侧方最长完成时间    90
     * area_turn_a90_pause_time    int    毫秒。直角中途停车判定    2000
     * area_ramp_finish_time    int    秒。完成时间    30
     * area_ramp_flag_red_dist    double    米。超出桩杆距离    0.5
     * area_ramp_edge_yellow_dist    double    米。边线黄牌距离    0.3
     * area_ramp_edge_red_dist    double    米。边线红牌距离    0.5
     * area_ramp_slide_yellow_dist    double    米。后滑黄牌距离    0.1
     * area_ramp_slide_red_dist    double    米。后滑红牌距离    0.3
     *
     *
     * area_release_start_key : 2000
     * area_curve_pause_time : 2000
     * area_park_pause_time : 2000
     * area_park_finish_time : 210
     * area_park2_pause_time : 2000
     * area_park2_finish_time : 90
     * area_turn_a90_pause_time : 2000
     * area_ramp_finish_time : 30
     * area_ramp_flag_red_dist : 0.5
     * area_ramp_edge_yellow_dist : 0.3
     * area_ramp_edge_red_dist : 0.5
     * area_ramp_slide_yellow_dist : 0.1
     * area_ramp_slide_red_dist : 0.3
     */
//    private int area_release_start_key;
//    private int area_curve_pause_time;
//    private int area_park_pause_time;
//    private int area_park_finish_time;
//    private int area_park2_pause_time;
//    private int area_park2_finish_time;
//    private int area_turn_a90_pause_time;
//    private int area_ramp_finish_time;
//    private double area_ramp_flag_red_dist;
//    private double area_ramp_edge_yellow_dist;
//    private double area_ramp_edge_red_dist;
//    private double area_ramp_slide_yellow_dist;
//    private double area_ramp_slide_red_dist;
//
//    public int getArea_release_start_key() {
//        return area_release_start_key;
//    }
//
//    public void setArea_release_start_key(int area_release_start_key) {
//        this.area_release_start_key = area_release_start_key;
//    }
//
//    public int getArea_curve_pause_time() {
//        return area_curve_pause_time;
//    }
//
//    public void setArea_curve_pause_time(int area_curve_pause_time) {
//        this.area_curve_pause_time = area_curve_pause_time;
//    }
//
//    public int getArea_park_pause_time() {
//        return area_park_pause_time;
//    }
//
//    public void setArea_park_pause_time(int area_park_pause_time) {
//        this.area_park_pause_time = area_park_pause_time;
//    }
//
//    public int getArea_park_finish_time() {
//        return area_park_finish_time;
//    }
//
//    public void setArea_park_finish_time(int area_park_finish_time) {
//        this.area_park_finish_time = area_park_finish_time;
//    }
//
//    public int getArea_park2_pause_time() {
//        return area_park2_pause_time;
//    }
//
//    public void setArea_park2_pause_time(int area_park2_pause_time) {
//        this.area_park2_pause_time = area_park2_pause_time;
//    }
//
//    public int getArea_park2_finish_time() {
//        return area_park2_finish_time;
//    }
//
//    public void setArea_park2_finish_time(int area_park2_finish_time) {
//        this.area_park2_finish_time = area_park2_finish_time;
//    }
//
//    public int getArea_turn_a90_pause_time() {
//        return area_turn_a90_pause_time;
//    }
//
//    public void setArea_turn_a90_pause_time(int area_turn_a90_pause_time) {
//        this.area_turn_a90_pause_time = area_turn_a90_pause_time;
//    }
//
//    public int getArea_ramp_finish_time() {
//        return area_ramp_finish_time;
//    }
//
//    public void setArea_ramp_finish_time(int area_ramp_finish_time) {
//        this.area_ramp_finish_time = area_ramp_finish_time;
//    }
//
//    public double getArea_ramp_flag_red_dist() {
//        return area_ramp_flag_red_dist;
//    }
//
//    public void setArea_ramp_flag_red_dist(double area_ramp_flag_red_dist) {
//        this.area_ramp_flag_red_dist = area_ramp_flag_red_dist;
//    }
//
//    public double getArea_ramp_edge_yellow_dist() {
//        return area_ramp_edge_yellow_dist;
//    }
//
//    public void setArea_ramp_edge_yellow_dist(double area_ramp_edge_yellow_dist) {
//        this.area_ramp_edge_yellow_dist = area_ramp_edge_yellow_dist;
//    }
//
//    public double getArea_ramp_edge_red_dist() {
//        return area_ramp_edge_red_dist;
//    }
//
//    public void setArea_ramp_edge_red_dist(double area_ramp_edge_red_dist) {
//        this.area_ramp_edge_red_dist = area_ramp_edge_red_dist;
//    }
//
//    public double getArea_ramp_slide_yellow_dist() {
//        return area_ramp_slide_yellow_dist;
//    }
//
//    public void setArea_ramp_slide_yellow_dist(double area_ramp_slide_yellow_dist) {
//        this.area_ramp_slide_yellow_dist = area_ramp_slide_yellow_dist;
//    }
//
//    public double getArea_ramp_slide_red_dist() {
//        return area_ramp_slide_red_dist;
//    }
//
//    public void setArea_ramp_slide_red_dist(double area_ramp_slide_red_dist) {
//        this.area_ramp_slide_red_dist = area_ramp_slide_red_dist;
//    }
}
app/src/main/java/safeluck/drive/evaluation/bean/CommonSetting.java
New file
@@ -0,0 +1,74 @@
package safeluck.drive.evaluation.bean;
/**
 * DriveJudge
 * Created by lzw on 2020/10/26. 13:49:28
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public class CommonSetting {
    /**
     * road_slide_yellow_distance : 0.1
     * road_slide_red_distance : 0.3
     * road_pause_criteria : 2000
     * crash_dotted_line_cumulative_time : 10
     * continuous_change_lane_min_time : 10
     * change_lane_limit_distance : 100
     */
    private double road_slide_yellow_distance;
    private double road_slide_red_distance;
    private int road_pause_criteria;
    private int crash_dotted_line_cumulative_time;
    private int continuous_change_lane_min_time;
    private int change_lane_limit_distance;
    public double getRoad_slide_yellow_distance() {
        return road_slide_yellow_distance;
    }
    public void setRoad_slide_yellow_distance(double road_slide_yellow_distance) {
        this.road_slide_yellow_distance = road_slide_yellow_distance;
    }
    public double getRoad_slide_red_distance() {
        return road_slide_red_distance;
    }
    public void setRoad_slide_red_distance(double road_slide_red_distance) {
        this.road_slide_red_distance = road_slide_red_distance;
    }
    public int getRoad_pause_criteria() {
        return road_pause_criteria;
    }
    public void setRoad_pause_criteria(int road_pause_criteria) {
        this.road_pause_criteria = road_pause_criteria;
    }
    public int getCrash_dotted_line_cumulative_time() {
        return crash_dotted_line_cumulative_time;
    }
    public void setCrash_dotted_line_cumulative_time(int crash_dotted_line_cumulative_time) {
        this.crash_dotted_line_cumulative_time = crash_dotted_line_cumulative_time;
    }
    public int getContinuous_change_lane_min_time() {
        return continuous_change_lane_min_time;
    }
    public void setContinuous_change_lane_min_time(int continuous_change_lane_min_time) {
        this.continuous_change_lane_min_time = continuous_change_lane_min_time;
    }
    public int getChange_lane_limit_distance() {
        return change_lane_limit_distance;
    }
    public void setChange_lane_limit_distance(int change_lane_limit_distance) {
        this.change_lane_limit_distance = change_lane_limit_distance;
    }
}
app/src/main/java/safeluck/drive/evaluation/bean/CorneringLampSetting.java
New file
@@ -0,0 +1,24 @@
package safeluck.drive.evaluation.bean;
/**
 * DriveJudge
 * Created by lzw on 2020/10/26. 13:59:39
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public class CorneringLampSetting {
    /**
     * turn_signal_min_advance : 3
     */
    private int turn_signal_min_advance;
    public int getTurn_signal_min_advance() {
        return turn_signal_min_advance;
    }
    public void setTurn_signal_min_advance(int turn_signal_min_advance) {
        this.turn_signal_min_advance = turn_signal_min_advance;
    }
}
app/src/main/java/safeluck/drive/evaluation/bean/OverTakeMeetingSetting.java
New file
@@ -0,0 +1,24 @@
package safeluck.drive.evaluation.bean;
/**
 * DriveJudge
 * Created by lzw on 2020/10/26. 13:59:39
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public class OverTakeMeetingSetting {
    /**
     * overtake_limit_distance : 150
     */
    private int overtake_limit_distance;
    public int getOvertake_limit_distance() {
        return overtake_limit_distance;
    }
    public void setOvertake_limit_distance(int overtake_limit_distance) {
        this.overtake_limit_distance = overtake_limit_distance;
    }
}
app/src/main/java/safeluck/drive/evaluation/bean/SideStopSetting.java
New file
@@ -0,0 +1,74 @@
package safeluck.drive.evaluation.bean;
/**
 * DriveJudge
 * Created by lzw on 2020/10/26. 13:59:39
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public class SideStopSetting {
    /**
     * road_total_distance : 3000
     * road_max_speed : 3
     * stop_car_open_door_allow_time : 15
     * stop_car_limit_distance : 150
     * stop_car_edge_red_distance : 0.5
     * stop_car_edge_yellow_distance : 0.3
     */
    private int road_total_distance;
    private int road_max_speed;
    private int stop_car_open_door_allow_time;
    private int stop_car_limit_distance;
    private double stop_car_edge_red_distance;
    private double stop_car_edge_yellow_distance;
    public int getRoad_total_distance() {
        return road_total_distance;
    }
    public void setRoad_total_distance(int road_total_distance) {
        this.road_total_distance = road_total_distance;
    }
    public int getRoad_max_speed() {
        return road_max_speed;
    }
    public void setRoad_max_speed(int road_max_speed) {
        this.road_max_speed = road_max_speed;
    }
    public int getStop_car_open_door_allow_time() {
        return stop_car_open_door_allow_time;
    }
    public void setStop_car_open_door_allow_time(int stop_car_open_door_allow_time) {
        this.stop_car_open_door_allow_time = stop_car_open_door_allow_time;
    }
    public int getStop_car_limit_distance() {
        return stop_car_limit_distance;
    }
    public void setStop_car_limit_distance(int stop_car_limit_distance) {
        this.stop_car_limit_distance = stop_car_limit_distance;
    }
    public double getStop_car_edge_red_distance() {
        return stop_car_edge_red_distance;
    }
    public void setStop_car_edge_red_distance(double stop_car_edge_red_distance) {
        this.stop_car_edge_red_distance = stop_car_edge_red_distance;
    }
    public double getStop_car_edge_yellow_distance() {
        return stop_car_edge_yellow_distance;
    }
    public void setStop_car_edge_yellow_distance(double stop_car_edge_yellow_distance) {
        this.stop_car_edge_yellow_distance = stop_car_edge_yellow_distance;
    }
}
app/src/main/java/safeluck/drive/evaluation/bean/StartCarSetting.java
New file
@@ -0,0 +1,45 @@
package safeluck.drive.evaluation.bean;
/**
 * DriveJudge
 * Created by lzw on 2020/10/26. 13:59:39
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public class StartCarSetting {
    /**
     * start_car_limit_distance : 10
     * open_door_drive_allow_distance : 1.1
     * start_car_max_rpm : 2500
     */
    private int start_car_limit_distance;
    private double open_door_drive_allow_distance;
    private int start_car_max_rpm;
    public int getStart_car_limit_distance() {
        return start_car_limit_distance;
    }
    public void setStart_car_limit_distance(int start_car_limit_distance) {
        this.start_car_limit_distance = start_car_limit_distance;
    }
    public double getOpen_door_drive_allow_distance() {
        return open_door_drive_allow_distance;
    }
    public void setOpen_door_drive_allow_distance(double open_door_drive_allow_distance) {
        this.open_door_drive_allow_distance = open_door_drive_allow_distance;
    }
    public int getStart_car_max_rpm() {
        return start_car_max_rpm;
    }
    public void setStart_car_max_rpm(int start_car_max_rpm) {
        this.start_car_max_rpm = start_car_max_rpm;
    }
}
app/src/main/java/safeluck/drive/evaluation/bean/StationSetting.java
New file
@@ -0,0 +1,44 @@
package safeluck.drive.evaluation.bean;
/**
 * DriveJudge
 * Created by lzw on 2020/10/26. 13:59:39
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public class StationSetting {
    /**
     * cross_school_max_speed : 30
     * crossing_break_valid_distance : 30
     * crossing_stop_valid_distance : 3.5
     */
    private int cross_school_max_speed;
    private int crossing_break_valid_distance;
    private double crossing_stop_valid_distance;
    public int getCross_school_max_speed() {
        return cross_school_max_speed;
    }
    public void setCross_school_max_speed(int cross_school_max_speed) {
        this.cross_school_max_speed = cross_school_max_speed;
    }
    public int getCrossing_break_valid_distance() {
        return crossing_break_valid_distance;
    }
    public void setCrossing_break_valid_distance(int crossing_break_valid_distance) {
        this.crossing_break_valid_distance = crossing_break_valid_distance;
    }
    public double getCrossing_stop_valid_distance() {
        return crossing_stop_valid_distance;
    }
    public void setCrossing_stop_valid_distance(double crossing_stop_valid_distance) {
        this.crossing_stop_valid_distance = crossing_stop_valid_distance;
    }
}
app/src/main/java/safeluck/drive/evaluation/bean/StraightLineSetting.java
New file
@@ -0,0 +1,34 @@
package safeluck.drive.evaluation.bean;
/**
 * DriveJudge
 * Created by lzw on 2020/10/26. 13:59:39
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public class StraightLineSetting {
    /**
     * straight_limit_distance : 100
     * straight_max_offset : 0.3
     */
    private int straight_limit_distance;
    private double straight_max_offset;
    public int getStraight_limit_distance() {
        return straight_limit_distance;
    }
    public void setStraight_limit_distance(int straight_limit_distance) {
        this.straight_limit_distance = straight_limit_distance;
    }
    public double getStraight_max_offset() {
        return straight_max_offset;
    }
    public void setStraight_max_offset(double straight_max_offset) {
        this.straight_max_offset = straight_max_offset;
    }
}
app/src/main/java/safeluck/drive/evaluation/bean/SubDecGearSetting.java
New file
@@ -0,0 +1,34 @@
package safeluck.drive.evaluation.bean;
/**
 * DriveJudge
 * Created by lzw on 2020/10/26. 13:59:39
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public class SubDecGearSetting {
    /**
     * shift_limit_distance : 120
     * shift_hold_time : 3
     */
    private int shift_limit_distance;
    private int shift_hold_time;
    public int getShift_limit_distance() {
        return shift_limit_distance;
    }
    public void setShift_limit_distance(int shift_limit_distance) {
        this.shift_limit_distance = shift_limit_distance;
    }
    public int getShift_hold_time() {
        return shift_hold_time;
    }
    public void setShift_hold_time(int shift_hold_time) {
        this.shift_hold_time = shift_hold_time;
    }
}
app/src/main/java/safeluck/drive/evaluation/fragment/ArcGisMapFragment.java
@@ -221,6 +221,7 @@
String url ;
    private void addTrailheadsLayer() {
        if (!TextUtils.isEmpty(url)){
            Log.i(TAG,"map_url="+url);
            final ArcGISMapImageLayer mapImageLayer = new ArcGISMapImageLayer(url);
            // create an empty map instance
            ArcGISMap map = new ArcGISMap();
app/src/main/java/safeluck/drive/evaluation/fragment/rulefragments/FragmentSetting0.java
@@ -7,13 +7,27 @@
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import com.anyun.exam.lib.AYSdk;
import com.google.gson.Gson;
import java.util.Arrays;
import java.util.List;
import me.yokeyword.fragmentation.SupportFragment;
import safeluck.drive.evaluation.Constant;
import safeluck.drive.evaluation.R;
import safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText;
import safeluck.drive.evaluation.util.FileUtil;
import safeluck.drive.evaluation.util.Utils;
import safeluck.drive.evaluation.viewmodels.GearRelateSet;
import safeluck.drive.evaluation.viewmodels.GearRelateSetViewModel;
/**
 * Created by YoKeyword on 16/2/7.
@@ -21,7 +35,23 @@
public class FragmentSetting0 extends SupportFragment {
    private static final String ARG_NUMBER = "arg_number";
    private static final String TAG = FragmentSetting0.class.getSimpleName();
    private TextEditText textEditText;
    private Gson gson = new Gson();
    private TextEditText textEditText_gear_n_allow_time;
    private TextEditText textEditText_same_gear_min_time;
    private TextEditText textEditText_gear_speed_error_cumulative_time;
    private TextEditText textEditText_gear_speed_1;
    private TextEditText textEditText_gear_speed_1_r;
    private TextEditText textEditText_gear_speed_2;
    private TextEditText textEditText_gear_speed_2_r;
    private TextEditText textEditText_gear_speed_3;
    private TextEditText textEditText_gear_speed_3_r;
    private TextEditText textEditText_gear_speed_4;
    private TextEditText textEditText_gear_speed_4_r;
    private TextEditText textEditText_gear_speed_5;
    private TextEditText textEditText_gear_speed_5_r;
    private GearRelateSet mgearRelateSet;
    private GearRelateSetViewModel gearRelateSetViewModel ;
    private int mNumber;
@@ -46,14 +76,168 @@
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_gear_setting, container, false);
        View view = inflater.inflate(R.layout.fragment_gear_setting_1, container, false);
        initView(view);
        gearRelateSetViewModel = ViewModelProviders.of(this).get(GearRelateSetViewModel.class);
        gearRelateSetViewModel.getGearRelateSet().observe(this, new Observer<GearRelateSet>() {
            @Override
            public void onChanged(GearRelateSet gearRelateSet) {
                if (gearRelateSet != null){
                    Toast.makeText(_mActivity, gearRelateSet.toString(), Toast.LENGTH_SHORT).show();
                    mgearRelateSet = gearRelateSet;
                    setDatas();
                }
            }
        });
        return view;
    }
    private void setDatas() {
        if (mgearRelateSet != null){
            textEditText_gear_n_allow_time .setInput(String.valueOf(mgearRelateSet.getGear_n_allow_time()));
            textEditText_gear_speed_error_cumulative_time.setInput(String.valueOf(mgearRelateSet.getGear_speed_error_cumulative_time()));
            textEditText_same_gear_min_time.setInput(String.valueOf(mgearRelateSet.getSame_gear_min_time()));
            List<List<Integer>> gear_speed_table = mgearRelateSet.getGear_speed_table();
            for (int i = 0; i < gear_speed_table.size(); i++) {
                List<Integer> integers = gear_speed_table.get(i);
                Log.i(TAG,FileUtil.ListToString(integers));
                switch (i){
                    case 0:
                        textEditText_gear_speed_1.setInput(String.valueOf(integers.get(0)));
                        textEditText_gear_speed_1_r.setInput(String.valueOf(integers.get(1)));
                        break;
                    case 1:
                        textEditText_gear_speed_2.setInput(String.valueOf(integers.get(0)));
                        textEditText_gear_speed_2_r.setInput(String.valueOf(integers.get(1)));
                        break;
                    case 2:
                        textEditText_gear_speed_3.setInput(String.valueOf(integers.get(0)));
                        textEditText_gear_speed_3_r.setInput(String.valueOf(integers.get(1)));
                        break;
                    case 3:
                        textEditText_gear_speed_4.setInput(String.valueOf(integers.get(0)));
                        textEditText_gear_speed_4_r.setInput(String.valueOf(integers.get(1)));
                        break;
                    case 4:
                        textEditText_gear_speed_5.setInput(String.valueOf(integers.get(0)));
                        textEditText_gear_speed_5_r.setInput(String.valueOf(integers.get(1)));
                        break;
                }
            }
        }
    }
    private void initView(View view) {
//        textEditText = view.findViewById(R.id.textet1);
//        textEditText.getInput();
        textEditText_gear_n_allow_time = view.findViewById(R.id.road_gear_n_time);
        textEditText_same_gear_min_time = view.findViewById(R.id.road_op_gear_err_time);
        textEditText_gear_speed_error_cumulative_time = view.findViewById(R.id.road_gear_speed_err_time);
        textEditText_gear_speed_1  = view.findViewById(R.id.tedit_1_gear_);
        textEditText_gear_speed_1_r  = view.findViewById(R.id.tedit_1_gea_r);
        textEditText_gear_speed_2  = view.findViewById(R.id.tedit_2_gear_);
        textEditText_gear_speed_2_r  = view.findViewById(R.id.tedit_2_gea_r);
        textEditText_gear_speed_3  = view.findViewById(R.id.tedit_3_gear_);
        textEditText_gear_speed_3_r  = view.findViewById(R.id.tedit_3_gea_r);
        textEditText_gear_speed_4  = view.findViewById(R.id.tedit_4_gear_);
        textEditText_gear_speed_4_r  = view.findViewById(R.id.tedit_4_gea_r);
        textEditText_gear_speed_5  = view.findViewById(R.id.tedit_5_gear_);
        textEditText_gear_speed_5_r  = view.findViewById(R.id.tedit_5_gea_r);
        view.findViewById(R.id.btn_setting_save).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String strN_allowTimeStr  = textEditText_gear_n_allow_time.getInput();
                String same_gear_min_timeStr  = textEditText_same_gear_min_time.getInput();
                String gear_speed_error_cumulative_timeStr  = textEditText_gear_speed_error_cumulative_time.getInput();
                String gear1_beginStr = textEditText_gear_speed_1.getInput();
                String gear2_beginStr = textEditText_gear_speed_2.getInput();
                String gear3_beginStr = textEditText_gear_speed_3.getInput();
                String gear4_beginStr = textEditText_gear_speed_4.getInput();
                String gear5_beginStr = textEditText_gear_speed_5.getInput();
                String gear1_endStr = textEditText_gear_speed_1_r.getInput();
                String gear2_endStr = textEditText_gear_speed_2_r.getInput();
                String gear3_endStr = textEditText_gear_speed_3_r.getInput();
                String gear4_endStr = textEditText_gear_speed_4_r.getInput();
                String gear5_endStr = textEditText_gear_speed_5_r.getInput();
                if (Utils.isDigital(strN_allowTimeStr)){
                    mgearRelateSet.setGear_n_allow_time(Integer.parseInt(strN_allowTimeStr));
                }  if (Utils.isDigital(same_gear_min_timeStr)){
                    mgearRelateSet.setSame_gear_min_time(Integer.parseInt(same_gear_min_timeStr));
                }  if (Utils.isDigital(gear_speed_error_cumulative_timeStr)){
                    mgearRelateSet.setGear_speed_error_cumulative_time(Integer.parseInt(gear_speed_error_cumulative_timeStr));
                }
                if (mgearRelateSet.getGear_speed_table() != null){
                    if (Utils.isDigital(gear1_beginStr)){
                        mgearRelateSet.getGear_speed_table().get(0).set(0,Integer.parseInt(gear1_beginStr));
                    }           if (Utils.isDigital(gear1_endStr)){
                        mgearRelateSet.getGear_speed_table().get(0).set(1,Integer.parseInt(gear1_endStr));
                    }
                    if (Utils.isDigital(gear2_beginStr)){
                        mgearRelateSet.getGear_speed_table().get(1).set(0,Integer.parseInt(gear2_beginStr));
                    }           if (Utils.isDigital(gear2_endStr)){
                        mgearRelateSet.getGear_speed_table().get(1).set(1,Integer.parseInt(gear2_endStr));
                    }
                    if (Utils.isDigital(gear3_beginStr)){
                        mgearRelateSet.getGear_speed_table().get(2).set(0,Integer.parseInt(gear3_beginStr));
                    }           if (Utils.isDigital(gear3_endStr)){
                        mgearRelateSet.getGear_speed_table().get(2).set(1,Integer.parseInt(gear3_endStr));
                    }
                    if (Utils.isDigital(gear4_beginStr)){
                        mgearRelateSet.getGear_speed_table().get(3).set(0,Integer.parseInt(gear4_beginStr));
                    }           if (Utils.isDigital(gear4_endStr)){
                        mgearRelateSet.getGear_speed_table().get(3).set(1,Integer.parseInt(gear4_endStr));
                    }
                    if (Utils.isDigital(gear5_beginStr)){
                        mgearRelateSet.getGear_speed_table().get(4).set(0,Integer.parseInt(gear5_beginStr));
                    }           if (Utils.isDigital(gear5_endStr)){
                        mgearRelateSet.getGear_speed_table().get(4).set(1,Integer.parseInt(gear5_endStr));
                    }
                }
                gearRelateSetViewModel.saveGearRelatedSetting(mgearRelateSet);
                AYSdk.getInstance().sendCmd(Constant.ID_judge_args,gson.toJson(mgearRelateSet));
                Toast.makeText(_mActivity, "保存成功", Toast.LENGTH_SHORT).show();
            }
        });
    }
}
app/src/main/java/safeluck/drive/evaluation/fragment/rulefragments/FragmentSetting1.java
@@ -7,12 +7,23 @@
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import com.anyun.exam.lib.AYSdk;
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.AreaSetting;
import safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText;
import safeluck.drive.evaluation.util.Utils;
import safeluck.drive.evaluation.viewmodels.AreaSettingViewModel;
/**
 * DriveJudge
@@ -20,10 +31,31 @@
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public class FragmentSetting1 extends SupportFragment {
public class FragmentSetting1 extends SupportFragment implements View.OnClickListener {
    private static final String ARG_NUMBER = "arg_number";
    private static final String TAG = FragmentSetting1.class.getSimpleName();
    private Gson gson = new Gson();
    AreaSetting areaSetting;
    AreaSettingViewModel areaSettingViewModel;
    private TextEditText release_start_key,curve_pause_time,daoku_pause_time,daoku_finish_time;
    private TextEditText park_pasue_time;//侧方停车中途停车时间
    private TextEditText park_finish_time;//侧方停车完成时间
    private TextEditText angle_90_pause_time,ramp_finish_time;
    //坡起超出桩杆距离
    private TextEditText ramp_beyond_stick_dis;
    //坡起边线黄牌距离
    private TextEditText ramp_beyond_edge_dis_yellow;
    //坡起边线红牌距离
    private TextEditText ramp_beyond_edge_dis_red;
    //坡起车辆后溜黄牌距离
    private TextEditText back_of_vehicle_yellow;
    private TextEditText back_of_vehicle_red;
    private Button btn_save;
    private int mNumber;
@@ -48,14 +80,156 @@
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.layout_fragment_parkover, container, false);
        View view = inflater.inflate(R.layout.layout_fragment_changkao, container, false);
        initView(view);
        areaSettingViewModel = ViewModelProviders.of(this).get(AreaSettingViewModel.class);
        areaSettingViewModel.getAreaSetting().observe(this, new Observer<AreaSetting>() {
            @Override
            public void onChanged(AreaSetting mareaSetting) {
                if (mareaSetting != null){
                    areaSetting =mareaSetting;
                    setDatas();
                }else{
                    Log.i(TAG,"observe AreaSetting==null");
                }
            }
        });
        return view;
    }
    private void initView(View view) {
    private void setDatas() {
        if (areaSetting != null){
            Log.i(TAG,"设置数据");
            curve_pause_time.setInput(String.valueOf(areaSetting.getCurve_pause_criteria()));
            release_start_key.setInput(String.valueOf(areaSetting.getHold_start_key_limit_time()));
            daoku_pause_time.setInput(String.valueOf(areaSetting.getPark_bottom_pause_criteria()));
            daoku_finish_time.setInput(String.valueOf(areaSetting.getPark_edge_limit_time()));
            park_finish_time.setInput(String.valueOf(areaSetting.getPark_edge_limit_time()));
            park_pasue_time.setInput(String.valueOf(areaSetting.getPark_edge_pause_criteria()));
            angle_90_pause_time.setInput(String.valueOf(areaSetting.getTurn_a90_pause_criteria()));
            ramp_finish_time.setInput(String.valueOf(areaSetting.getRamp_start_car_limit_time()));
            ramp_beyond_edge_dis_red.setInput(String.valueOf(areaSetting.getRamp_edge_red_distance()));
            ramp_beyond_edge_dis_yellow.setInput(String.valueOf(areaSetting.getRamp_edge_yellow_distance()));
            ramp_beyond_stick_dis.setInput(String.valueOf(areaSetting.getRamp_stoppoint_red_distance()));
            back_of_vehicle_red.setInput(String.valueOf(areaSetting.getRamp_slide_red_distance()));
            back_of_vehicle_yellow.setInput(String.valueOf(areaSetting.getRamp_slide_yellow_distance()));
        }
    }
    private void initView(View view) {
        btn_save = view.findViewById(R.id.btn_setting_save);
        btn_save.setOnClickListener(this);
        curve_pause_time = view.findViewById(R.id.area_curve_pause_time);
        release_start_key = view.findViewById(R.id.area_release_start_key);
        daoku_pause_time = view.findViewById(R.id.area_park_pause_time);
        daoku_finish_time = view.findViewById(R.id.area_park_finish_time);
        park_finish_time = view.findViewById(R.id.area_park2_finish_time);
        park_pasue_time = view.findViewById(R.id.area_park2_pause_time);
        angle_90_pause_time = view.findViewById(R.id.area_turn_a90_pause_time);
        ramp_finish_time = view.findViewById(R.id.area_ramp_finish_time);
        ramp_beyond_edge_dis_red = view.findViewById(R.id.area_ramp_edge_red_dist);
        ramp_beyond_edge_dis_yellow = view.findViewById(R.id.area_ramp_edge_yellow_dist);
        ramp_beyond_stick_dis = view.findViewById(R.id.area_ramp_flag_red_dist);
        back_of_vehicle_red = view.findViewById(R.id.area_ramp_slide_red_dist);
        back_of_vehicle_yellow = view.findViewById(R.id.area_ramp_slide_yellow_dist);
    }
    private boolean canWirteJsonToFile = true;
    @Override
    public void onClick(View v) {
        AreaSetting areaSetting = new AreaSetting();
        String curve_pause_str = curve_pause_time.getInput();
        String release_start_key_str = release_start_key.getInput();
        String daoku_pause_time_str = daoku_pause_time.getInput();
        String daoku_finish_time_str = daoku_pause_time.getInput();
        String park_finish_time_str = park_finish_time.getInput();
        String park_pasue_time_str = park_pasue_time.getInput();
        String angle_90_pause_time_str = angle_90_pause_time.getInput();
        String ramp_finish_time_str = ramp_finish_time.getInput();
        String ramp_beyond_edge_dis_red_str = ramp_beyond_edge_dis_red.getInput();
        String ramp_beyond_edge_dis_yellow_str = ramp_beyond_edge_dis_yellow.getInput();
        String ramp_beyond_stick_dis_str = ramp_beyond_stick_dis.getInput();
        String back_of_vehicle_red_str = back_of_vehicle_red.getInput();
        String back_of_vehicle_yellow_str = back_of_vehicle_yellow.getInput();
        if (Utils.isDigital(curve_pause_str)){
            areaSetting.setCurve_pause_criteria(Integer.parseInt(curve_pause_str));
        }else{
            Toast.makeText(_mActivity, "曲线中途停车判定输入不正确,请检查", Toast.LENGTH_SHORT).show();
        }
        if (Utils.isDigital(release_start_key_str)){
            areaSetting.setHold_start_key_limit_time(Integer.parseInt(release_start_key_str));
        }else{
            Toast.makeText(_mActivity, "松开点火开关判定输入不正确,请检查", Toast.LENGTH_SHORT).show();
        }
        if (Utils.isDigital(daoku_pause_time_str)){
            areaSetting.setPark_bottom_pause_criteria(Integer.parseInt(daoku_pause_time_str));
        }else{
            Toast.makeText(_mActivity, "倒库中途停车判定输入不正确,请检查", Toast.LENGTH_SHORT).show();
        }
        if (Utils.isDigital(daoku_finish_time_str)){
            areaSetting.setPark_bottom_limit_time(Integer.parseInt(daoku_finish_time_str));
        }else{
            Toast.makeText(_mActivity, "倒库完成时间输入不正确,请检查", Toast.LENGTH_SHORT).show();
        }
        if (Utils.isDigital(park_finish_time_str)){
            areaSetting.setPark_edge_limit_time(Integer.parseInt(park_finish_time_str));
        }else{
            Toast.makeText(_mActivity, "侧方停车完成时间输入不正确,请检查", Toast.LENGTH_SHORT).show();
        }
        if (Utils.isDigital(park_pasue_time_str)){
            areaSetting.setPark_edge_pause_criteria(Integer.parseInt(park_pasue_time_str));
        }else{
            Toast.makeText(_mActivity, "侧方停车中途停车判定输入不正确,请检查", Toast.LENGTH_SHORT).show();
        }
        if (Utils.isDigital(angle_90_pause_time_str)){
            areaSetting.setTurn_a90_pause_criteria(Integer.parseInt(angle_90_pause_time_str));
        }else{
            Toast.makeText(_mActivity, "直角中途停车判定输入不正确,请检查", Toast.LENGTH_SHORT).show();
        }
        if (Utils.isDigital(ramp_finish_time_str)){
            areaSetting.setRamp_start_car_limit_time(Integer.parseInt(ramp_finish_time_str));
        }else{
            Toast.makeText(_mActivity, "坡起完成时间输入不正确,请检查", Toast.LENGTH_SHORT).show();
        }
        if (Utils.isNumber(ramp_beyond_edge_dis_red_str)){
            areaSetting.setRamp_edge_red_distance(Double.parseDouble(ramp_beyond_edge_dis_red_str));
        }else{
            Toast.makeText(_mActivity, "倒库中途停车判定输入不正确,请检查", Toast.LENGTH_SHORT).show();
        }
        if (Utils.isNumber(ramp_beyond_edge_dis_yellow_str)){
            areaSetting.setRamp_edge_yellow_distance(Double.parseDouble(ramp_beyond_edge_dis_yellow_str));
        }else{
            Toast.makeText(_mActivity, "倒库完成时间输入不正确,请检查", Toast.LENGTH_SHORT).show();
        }
        if (Utils.isNumber(ramp_beyond_stick_dis_str)){
            areaSetting.setRamp_stoppoint_red_distance(Double.parseDouble(ramp_beyond_stick_dis_str));
        }else{
            Toast.makeText(_mActivity, "侧方停车完成时间输入不正确,请检查", Toast.LENGTH_SHORT).show();
        }
        if (Utils.isNumber(back_of_vehicle_red_str)){
            areaSetting.setRamp_slide_red_distance(Double.parseDouble(back_of_vehicle_red_str));
        }else{
            Toast.makeText(_mActivity, "侧方停车中途停车判定输入不正确,请检查", Toast.LENGTH_SHORT).show();
        }
        if (Utils.isNumber(back_of_vehicle_yellow_str)){
            areaSetting.setRamp_slide_yellow_distance(Double.parseDouble(back_of_vehicle_yellow_str));
        }else{
            Toast.makeText(_mActivity, "侧方停车中途停车判定输入不正确,请检查", Toast.LENGTH_SHORT).show();
        }
        if (canWirteJsonToFile){
            areaSettingViewModel.saveAreaSetting(areaSetting);
            AYSdk.getInstance().sendCmd(Constant.ID_judge_args,gson.toJson(areaSetting));
        }
    }
}
app/src/main/java/safeluck/drive/evaluation/fragment/rulefragments/FragmentSetting2.java
@@ -5,11 +5,22 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import com.anyun.exam.lib.AYSdk;
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.CommonSetting;
import safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText;
import safeluck.drive.evaluation.util.Utils;
import safeluck.drive.evaluation.viewmodels.CommonSettingViewModel;
/**
 * DriveJudge
@@ -20,7 +31,16 @@
public class FragmentSetting2 extends SupportFragment {
    private static final String ARG_NUMBER = "arg_number";
    private static final String TAG = FragmentSetting2.class.getSimpleName();
    private Gson gson = new Gson();
    private CommonSetting mCommonSetting;
    private CommonSettingViewModel commonSettingViewModel;
    private TextEditText te_road_pause_time;
    private TextEditText te_crash_dotted_line_time;
    private TextEditText te_slide_yellow_distance;
    private TextEditText te_slide_red_distance;
    private TextEditText te_lane_min_time;
    private TextEditText te_change_lane_dis;
    private int mNumber;
@@ -45,14 +65,83 @@
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.layout_common_judge, container, false);
        View view = inflater.inflate(R.layout.layout_common_judge_1, container, false);
        initView(view);
        commonSettingViewModel = ViewModelProviders.of(this).get(CommonSettingViewModel.class);
        commonSettingViewModel.getCommonSetting().observe(this, new Observer<CommonSetting>() {
            @Override
            public void onChanged(CommonSetting commonSetting) {
                if (commonSetting != null){
                    mCommonSetting = commonSetting;
                    setDatas();
                }
            }
        });
        return view;
    }
    private void setDatas() {
        if (mCommonSetting != null){
            te_change_lane_dis.setInput(String.valueOf(mCommonSetting.getChange_lane_limit_distance()));
            te_crash_dotted_line_time.setInput(String.valueOf(mCommonSetting.getCrash_dotted_line_cumulative_time()));
            te_lane_min_time.setInput(String.valueOf(mCommonSetting.getContinuous_change_lane_min_time()));
            te_road_pause_time.setInput(String.valueOf(mCommonSetting.getRoad_pause_criteria()));
            te_slide_red_distance.setInput(String.valueOf(mCommonSetting.getRoad_slide_red_distance()));
            te_slide_yellow_distance.setInput(String.valueOf(mCommonSetting.getRoad_slide_yellow_distance()));
        }
    }
    private void initView(View view) {
    te_change_lane_dis = view.findViewById(R.id.road_change_lane_dist);
    te_crash_dotted_line_time = view.findViewById(R.id.road_crash_dotted_line_time);
    te_lane_min_time = view.findViewById(R.id.road_lane_min_time);
    te_road_pause_time = view.findViewById(R.id.road_pause_time);
    te_slide_red_distance = view.findViewById(R.id.road_slide_red_distance);
    te_slide_yellow_distance = view.findViewById(R.id.road_slide_yellow_distance);
    view.findViewById(R.id.btn_setting_save).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String change_lane_dis_str = te_change_lane_dis.getInput();
            String crash_dotted_line_time_str = te_crash_dotted_line_time.getInput();
            String lane_min_time_str = te_lane_min_time.getInput();
            String road_pause_time_str = te_road_pause_time.getInput();
            String slide_red_distance_str = te_slide_red_distance.getInput();
            String slide_yellow_distance_str = te_slide_yellow_distance.getInput();
            if (mCommonSetting != null){
                if (Utils.isDigital(change_lane_dis_str)){
                     mCommonSetting.setChange_lane_limit_distance(Integer.parseInt(change_lane_dis_str));
                }
                if (Utils.isDigital(crash_dotted_line_time_str)){
                    mCommonSetting.setCrash_dotted_line_cumulative_time(Integer.parseInt(crash_dotted_line_time_str));
                }
                if (Utils.isDigital(lane_min_time_str)){
                    mCommonSetting.setContinuous_change_lane_min_time(Integer.parseInt(lane_min_time_str));
                }
                if (Utils.isDigital(road_pause_time_str)){
                    mCommonSetting.setRoad_pause_criteria(Integer.parseInt(road_pause_time_str));
                }
                if (Utils.isNumber(slide_red_distance_str)){
                    mCommonSetting.setRoad_slide_red_distance(Double.parseDouble(slide_red_distance_str));
                }
                if (Utils.isNumber(slide_yellow_distance_str)){
                    mCommonSetting.setRoad_slide_yellow_distance(Double.parseDouble(slide_yellow_distance_str));
                }
                commonSettingViewModel.saveCommonSetting(mCommonSetting);
                AYSdk.getInstance().sendCmd(Constant.ID_judge_args,gson.toJson(mCommonSetting));
                Toast.makeText(_mActivity, "通用设置成功", Toast.LENGTH_SHORT).show();
            }
        }
    });
    }
}
app/src/main/java/safeluck/drive/evaluation/fragment/rulefragments/FragmentSetting3.java
@@ -5,11 +5,24 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import com.anyun.exam.lib.AYSdk;
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.CommonSetting;
import safeluck.drive.evaluation.bean.StartCarSetting;
import safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText;
import safeluck.drive.evaluation.util.Utils;
import safeluck.drive.evaluation.viewmodels.CommonSettingViewModel;
import safeluck.drive.evaluation.viewmodels.StartCarSettingViewModel;
/**
 * DriveJudge
@@ -21,8 +34,15 @@
    private static final String ARG_NUMBER = "arg_number";
    private static final String TAG = FragmentSetting3.class.getSimpleName();
    private Gson gson = new Gson();
    private int mNumber;
    private StartCarSetting mStartCarSetting;
    private StartCarSettingViewModel startCarSettingViewModel;
    private TextEditText te_start_car_max_rpm;
    private TextEditText te_start_car_limit_distance;
    private TextEditText te_open_door_drive_allow_distance;
    public static FragmentSetting3 newInstance(String number) {
        FragmentSetting3 fragment = new FragmentSetting3();
@@ -45,14 +65,57 @@
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.layout_fragment_parkover, container, false);
        View view = inflater.inflate(R.layout.layout_fragment_start, container, false);
        initView(view);
        startCarSettingViewModel = ViewModelProviders.of(this).get(StartCarSettingViewModel.class);
        startCarSettingViewModel.getStartCarSetting().observe(this, new Observer<StartCarSetting>() {
            @Override
            public void onChanged(StartCarSetting commonSetting) {
                if (commonSetting != null){
                    mStartCarSetting = commonSetting;
                    setDatas();
                }
            }
        });
        return view;
    }
    private void setDatas() {
        te_open_door_drive_allow_distance.setInput(String.valueOf(mStartCarSetting.getOpen_door_drive_allow_distance()));
        te_start_car_limit_distance.setInput(String.valueOf(mStartCarSetting.getStart_car_limit_distance()));
        te_start_car_max_rpm.setInput(String.valueOf(mStartCarSetting.getStart_car_max_rpm()));
    }
    private void initView(View view) {
        te_open_door_drive_allow_distance = view.findViewById(R.id.road_start_open_door_dist);
        te_start_car_limit_distance = view.findViewById(R.id.road_start_dist);
        te_start_car_max_rpm = view.findViewById(R.id.road_start_max_rpm);
        view.findViewById(R.id.btn_setting_save).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String teOpenDoorDriveAllowDistanceInput = te_open_door_drive_allow_distance.getInput();
                String teStartCarLimitDistanceInput = te_start_car_limit_distance.getInput();
                String teStartCarMaxRpmInput = te_start_car_max_rpm.getInput();
                if (mStartCarSetting != null){
                    if (Utils.isNumber(teOpenDoorDriveAllowDistanceInput)){
                        mStartCarSetting.setOpen_door_drive_allow_distance(Double.parseDouble(teOpenDoorDriveAllowDistanceInput));
    }
                    if (Utils.isDigital(teStartCarLimitDistanceInput)){
                        mStartCarSetting.setStart_car_limit_distance(Integer.parseInt(teStartCarLimitDistanceInput));
                    }
                    if (Utils.isDigital(teStartCarMaxRpmInput)){
                        mStartCarSetting.setStart_car_max_rpm(Integer.parseInt(teStartCarMaxRpmInput));
                    }
                    startCarSettingViewModel.saveCommonSetting(mStartCarSetting);
                    AYSdk.getInstance().sendCmd(Constant.ID_judge_args,gson.toJson(mStartCarSetting));
                    Toast.makeText(_mActivity, "上车起步设置成功", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}
app/src/main/java/safeluck/drive/evaluation/fragment/rulefragments/FragmentSetting4.java
@@ -5,14 +5,29 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import com.anyun.exam.lib.AYSdk;
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.CommonSetting;
import safeluck.drive.evaluation.bean.StraightLineSetting;
import safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText;
import safeluck.drive.evaluation.util.Utils;
import safeluck.drive.evaluation.viewmodels.CommonSettingViewModel;
import safeluck.drive.evaluation.viewmodels.StraightLineSettingViewModel;
/**
 * DriveJudge
 *
 * 直线行驶设置
 * Created by lzw on 2020/9/14. 10:16:39
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
@@ -20,9 +35,15 @@
public class FragmentSetting4 extends SupportFragment {
    private static final String ARG_NUMBER = "arg_number";
    private static final String TAG = FragmentSetting4.class.getSimpleName();
    private Gson gson = new Gson();
    private int mNumber;
    private TextEditText te_straight_limit_distance;
    private TextEditText te_straight_max_offset;
    private StraightLineSetting mStrarightLineSetting;
    private StraightLineSettingViewModel straightLineSettingViewModel;
    public static FragmentSetting4 newInstance(String number) {
        FragmentSetting4 fragment = new FragmentSetting4();
@@ -45,14 +66,51 @@
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.layout_fragment_parkover, container, false);
        View view = inflater.inflate(R.layout.layout_fragment_straight_line, container, false);
        initView(view);
        straightLineSettingViewModel = ViewModelProviders.of(this).get(StraightLineSettingViewModel.class);
        straightLineSettingViewModel.getStraightLineSetting().observe(this, new Observer<StraightLineSetting>() {
            @Override
            public void onChanged(StraightLineSetting commonSetting) {
                if (commonSetting != null){
                    mStrarightLineSetting = commonSetting;
                    setDatas();
                }
            }
        });
        return view;
    }
    private void initView(View view) {
    te_straight_limit_distance = view.findViewById(R.id.straight_limit_distance);
        te_straight_max_offset = view.findViewById(R.id.straight_max_offset);
        view.findViewById(R.id.btn_setting_save).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String teStraightLimitDistanceInput = te_straight_limit_distance.getInput();
                String teStraightMaxOffsetInput = te_straight_max_offset.getInput();
                if (mStrarightLineSetting != null){
                    if (Utils.isDigital(teStraightLimitDistanceInput)){
                    mStrarightLineSetting.setStraight_limit_distance(Integer.parseInt(teStraightLimitDistanceInput));
                    }
                   if (Utils.isNumber(teStraightMaxOffsetInput)){
                    mStrarightLineSetting.setStraight_max_offset(Double.parseDouble(teStraightMaxOffsetInput));
                    }
                   straightLineSettingViewModel.saveCommonSetting(mStrarightLineSetting);
                    AYSdk.getInstance().sendCmd(Constant.ID_judge_args,gson.toJson(mStrarightLineSetting));
                    Toast.makeText(_mActivity, "直线行驶设置成功", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
    private void setDatas() {
        te_straight_limit_distance.setInput(String.valueOf(mStrarightLineSetting.getStraight_limit_distance()));
        te_straight_max_offset.setInput(String.valueOf(mStrarightLineSetting.getStraight_max_offset()));
    }
}
app/src/main/java/safeluck/drive/evaluation/fragment/rulefragments/FragmentSetting5.java
@@ -5,14 +5,29 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import com.anyun.exam.lib.AYSdk;
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.CommonSetting;
import safeluck.drive.evaluation.bean.StationSetting;
import safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText;
import safeluck.drive.evaluation.util.Utils;
import safeluck.drive.evaluation.viewmodels.CommonSettingViewModel;
import safeluck.drive.evaluation.viewmodels.StationSettingViewModel;
/**
 * DriveJudge
 *
 * 通过站点设置
 * Created by lzw on 2020/9/14. 10:16:39
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
@@ -20,7 +35,13 @@
public class FragmentSetting5 extends SupportFragment {
    private static final String ARG_NUMBER = "arg_number";
    private static final String TAG = FragmentSetting5.class.getSimpleName();
    private Gson gson = new Gson();
    private StationSetting mStationSetting;
    private StationSettingViewModel mStationSettingViewModel;
    private TextEditText te_cross_school_max_speed;
    private TextEditText te_crossing_break_valid_distance;
    private TextEditText te_crossing_stop_valid_distance;
    private int mNumber;
@@ -47,12 +68,50 @@
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.layout_fragment_stationsettin, container, false);
        initView(view);
        mStationSettingViewModel = ViewModelProviders.of(this).get(StationSettingViewModel.class);
        mStationSettingViewModel.getStationSetting().observe(this, new Observer<StationSetting>() {
            @Override
            public void onChanged(StationSetting commonSetting) {
                if (commonSetting != null){
                    mStationSetting = commonSetting;
                    setDatas();
                }
            }
        });
        return view;
    }
    private void initView(View view) {
        te_cross_school_max_speed = view.findViewById(R.id.cross_school_max_speed);
        te_crossing_break_valid_distance = view.findViewById(R.id.crossing_break_valid_distance);
        te_crossing_stop_valid_distance = view.findViewById(R.id.crossing_stop_valid_distance);
        view.findViewById(R.id.btn_setting_save).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String teCrossSchoolMaxSpeedInput = te_cross_school_max_speed.getInput();
                String teCrossingBreakValidDistanceInput = te_crossing_break_valid_distance.getInput();
                String teCrossingStopValidDistanceInput = te_crossing_stop_valid_distance.getInput();
                if (mStationSetting != null){
                    if (Utils.isDigital(teCrossingBreakValidDistanceInput)){
                        mStationSetting.setCrossing_break_valid_distance(Integer.parseInt(teCrossingBreakValidDistanceInput));
                    }  if (Utils.isDigital(teCrossSchoolMaxSpeedInput)){
                        mStationSetting.setCross_school_max_speed(Integer.parseInt(teCrossSchoolMaxSpeedInput));
                    }  if (Utils.isNumber(teCrossingStopValidDistanceInput)){
                        mStationSetting.setCrossing_stop_valid_distance(Double.parseDouble(teCrossingStopValidDistanceInput));
                    }
                    mStationSettingViewModel.saveCommonSetting(mStationSetting);
                    Toast.makeText(_mActivity, "通过站点设置成功", Toast.LENGTH_SHORT).show();
                    AYSdk.getInstance().sendCmd(Constant.ID_judge_args,gson.toJson(mStationSetting));
                }
            }
        });
    }
    private void setDatas() {
        te_cross_school_max_speed.setInput(String.valueOf(mStationSetting.getCross_school_max_speed()));
        te_crossing_break_valid_distance.setInput(String.valueOf(mStationSetting.getCrossing_break_valid_distance()));
        te_crossing_stop_valid_distance.setInput(String.valueOf(mStationSetting.getCrossing_stop_valid_distance()));
    }
}
app/src/main/java/safeluck/drive/evaluation/fragment/rulefragments/FragmentSetting6.java
@@ -5,11 +5,24 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import com.anyun.exam.lib.AYSdk;
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.CommonSetting;
import safeluck.drive.evaluation.bean.CorneringLampSetting;
import safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText;
import safeluck.drive.evaluation.util.Utils;
import safeluck.drive.evaluation.viewmodels.CommonSettingViewModel;
import safeluck.drive.evaluation.viewmodels.CorneringLampSettingViewModel;
/**
 * DriveJudge
@@ -21,8 +34,12 @@
    private static final String ARG_NUMBER = "arg_number";
    private static final String TAG = FragmentSetting6.class.getSimpleName();
    private Gson gson = new Gson();
    private int mNumber;
    private TextEditText te_turn_signal_min_advance;
    private CorneringLampSetting mCornerLampSetting;
    private CorneringLampSettingViewModel corneringLampSettingViewModel;
    public static FragmentSetting6 newInstance(String number) {
        FragmentSetting6 fragment = new FragmentSetting6();
@@ -47,12 +64,40 @@
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.layout_fragment_setlights, container, false);
        initView(view);
        corneringLampSettingViewModel = ViewModelProviders.of(this).get(CorneringLampSettingViewModel.class);
        corneringLampSettingViewModel.getCorneringLampSetting().observe(this, new Observer<CorneringLampSetting>() {
            @Override
            public void onChanged(CorneringLampSetting commonSetting) {
                if (commonSetting != null){
                    mCornerLampSetting = commonSetting;
                    setDatas();
                }
            }
        });
        return view;
    }
    private void initView(View view) {
        te_turn_signal_min_advance = view.findViewById(R.id.turn_signal_min_advance);
        view.findViewById(R.id.btn_setting_save).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String teTurnSignalMinAdvanceInput = te_turn_signal_min_advance.getInput();
                if (mCornerLampSetting != null){
                    if (Utils.isDigital(teTurnSignalMinAdvanceInput)){
                    mCornerLampSetting.setTurn_signal_min_advance(Integer.parseInt(teTurnSignalMinAdvanceInput));
                    Toast.makeText(_mActivity, "转向灯设置成功", Toast.LENGTH_SHORT).show();
                    corneringLampSettingViewModel.saveCommonSetting(mCornerLampSetting);
                        AYSdk.getInstance().sendCmd(Constant.ID_judge_args,gson.toJson(mCornerLampSetting));
                    }
                }
            }
        });
    }
    private void setDatas() {
        te_turn_signal_min_advance.setInput(String.valueOf(mCornerLampSetting.getTurn_signal_min_advance()));
    }
}
app/src/main/java/safeluck/drive/evaluation/fragment/rulefragments/FragmentSetting7.java
@@ -5,11 +5,24 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import com.anyun.exam.lib.AYSdk;
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.CommonSetting;
import safeluck.drive.evaluation.bean.OverTakeMeetingSetting;
import safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText;
import safeluck.drive.evaluation.util.Utils;
import safeluck.drive.evaluation.viewmodels.CommonSettingViewModel;
import safeluck.drive.evaluation.viewmodels.OverTakeAndMeetingSettingViewModel;
/**
 * DriveJudge
@@ -20,9 +33,13 @@
public class FragmentSetting7 extends SupportFragment {
    private static final String ARG_NUMBER = "arg_number";
    private static final String TAG = FragmentSetting7.class.getSimpleName();
    private Gson gson = new Gson();
    private OverTakeAndMeetingSettingViewModel overTakeAndMeetingSettingViewModel;
    private OverTakeMeetingSetting overTakeMeetingSetting;
    private int mNumber;
    private TextEditText te_overtake_limit_distance;
    public static FragmentSetting7 newInstance(String number) {
        FragmentSetting7 fragment = new FragmentSetting7();
@@ -47,12 +64,41 @@
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.layout_fragment_over_take, container, false);
        initView(view);
        overTakeAndMeetingSettingViewModel = ViewModelProviders.of(this).get(OverTakeAndMeetingSettingViewModel.class);
        overTakeAndMeetingSettingViewModel.getOverTakeMeetingSetting().observe(this, new Observer<OverTakeMeetingSetting>() {
            @Override
            public void onChanged(OverTakeMeetingSetting commonSetting) {
                if (commonSetting != null){
                    overTakeMeetingSetting = commonSetting;
                    setDatas();
                }
            }
        });
        return view;
    }
    private void initView(View view) {
        te_overtake_limit_distance = view.findViewById(R.id.overtake_limit_distance);
        view.findViewById(R.id.btn_setting_save).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String teOvertakeLimitDistanceInput = te_overtake_limit_distance.getInput();
                if (overTakeMeetingSetting != null){
                    if (Utils.isDigital(teOvertakeLimitDistanceInput)){
                        Toast.makeText(_mActivity, "超车设置成功", Toast.LENGTH_SHORT).show();
                    overTakeMeetingSetting.setOvertake_limit_distance(Integer.parseInt(teOvertakeLimitDistanceInput));
                        AYSdk.getInstance().sendCmd(Constant.ID_judge_args,gson.toJson(overTakeMeetingSetting));
                    }
                    overTakeAndMeetingSettingViewModel.saveCommonSetting(overTakeMeetingSetting);
    }
            }
        });
    }
    private void setDatas() {
        if (overTakeMeetingSetting != null){
            te_overtake_limit_distance.setInput(String.valueOf(overTakeMeetingSetting.getOvertake_limit_distance()));
        }
    }
}
app/src/main/java/safeluck/drive/evaluation/fragment/rulefragments/FragmentSetting8.java
@@ -5,11 +5,24 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import com.anyun.exam.lib.AYSdk;
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.CommonSetting;
import safeluck.drive.evaluation.bean.SubDecGearSetting;
import safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText;
import safeluck.drive.evaluation.util.Utils;
import safeluck.drive.evaluation.viewmodels.CommonSettingViewModel;
import safeluck.drive.evaluation.viewmodels.SubDecGearSettingViewModel;
/**
 * DriveJudge
@@ -21,8 +34,15 @@
    private static final String ARG_NUMBER = "arg_number";
    private static final String TAG = FragmentSetting8.class.getSimpleName();
    private Gson gson = new Gson();
    private int mNumber;
    private TextEditText te_shift_limit_distance;
    private TextEditText te_road_shift_hold_time;
    private SubDecGearSetting mSubGearSetting;
    private SubDecGearSettingViewModel subDecGearSettingViewModel;
    public static FragmentSetting8 newInstance(String number) {
        FragmentSetting8 fragment = new FragmentSetting8();
@@ -45,14 +65,50 @@
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_add_sub_gear_setting, container, false);
        View view = inflater.inflate(R.layout.fragment_add_sub_gear_setting_1, container, false);
        initView(view);
        subDecGearSettingViewModel = ViewModelProviders.of(this).get(SubDecGearSettingViewModel.class);
        subDecGearSettingViewModel.getSubDecGearSetting().observe(this, new Observer<SubDecGearSetting>() {
            @Override
            public void onChanged(SubDecGearSetting commonSetting) {
                if (commonSetting != null){
                    mSubGearSetting = commonSetting;
                    setDatas();
                }
            }
        });
        return view;
    }
    private void initView(View view) {
    te_shift_limit_distance = view.findViewById(R.id.shift_limit_distance);
    te_road_shift_hold_time =view.findViewById(R.id.road_shift_hold_time);
        view.findViewById(R.id.btn_setting_save).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String teRoadShiftHoldTimeInput = te_road_shift_hold_time.getInput();
                String teShiftLimitDistanceInput = te_shift_limit_distance.getInput();
                if (mSubGearSetting != null){
                    if (Utils.isDigital(teRoadShiftHoldTimeInput)){
                        mSubGearSetting.setShift_hold_time(Integer.parseInt(teRoadShiftHoldTimeInput));
                    }if (Utils.isDigital(teShiftLimitDistanceInput)){
                        mSubGearSetting.setShift_limit_distance(Integer.parseInt(teShiftLimitDistanceInput));
    }
                    subDecGearSettingViewModel.saveSubDecGearSetting(mSubGearSetting);
                    AYSdk.getInstance().sendCmd(Constant.ID_judge_args,gson.toJson(mSubGearSetting));
                    Toast.makeText(_mActivity, "加减档设置成功", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
    private void setDatas() {
        if (mSubGearSetting != null){
            te_shift_limit_distance.setInput(String.valueOf(mSubGearSetting.getShift_limit_distance()));
            te_road_shift_hold_time.setInput(String.valueOf(mSubGearSetting.getShift_hold_time()));
        }
    }
}
app/src/main/java/safeluck/drive/evaluation/fragment/rulefragments/FragmentSetting9.java
@@ -5,11 +5,24 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import com.anyun.exam.lib.AYSdk;
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.CommonSetting;
import safeluck.drive.evaluation.bean.SideStopSetting;
import safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText;
import safeluck.drive.evaluation.util.Utils;
import safeluck.drive.evaluation.viewmodels.CommonSettingViewModel;
import safeluck.drive.evaluation.viewmodels.SideStopSettingViewModel;
/**
 * DriveJudge
@@ -18,11 +31,20 @@
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public class FragmentSetting9 extends SupportFragment {
    private Gson gson = new Gson();
    private static final String ARG_NUMBER = "arg_number";
    private static final String TAG = FragmentSetting9.class.getSimpleName();
    private SideStopSetting mSideStopSetting;
    private SideStopSettingViewModel mSideStopSettingViewModel;
    private int mNumber;
    private TextEditText te_road_total_distance;
    private TextEditText te_road_max_speed;
    private TextEditText te_stop_car_open_door_allow_time;
    private TextEditText te_stop_car_limit_distance;
    private TextEditText te_stop_car_edge_red_distance;
    private TextEditText te_stop_car_edge_yellow_distance;
    public static FragmentSetting9 newInstance(String number) {
        FragmentSetting9 fragment = new FragmentSetting9();
@@ -45,14 +67,75 @@
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.layout_fragment_parkover, container, false);
        View view = inflater.inflate(R.layout.layout_fragment_parkover_1, container, false);
        initView(view);
        mSideStopSettingViewModel = ViewModelProviders.of(this).get(SideStopSettingViewModel.class);
        mSideStopSettingViewModel.getSideStopSetting().observe(this, new Observer<SideStopSetting>() {
            @Override
            public void onChanged(SideStopSetting commonSetting) {
                if (commonSetting != null){
                    mSideStopSetting = commonSetting;
                    setDatas();
                }
            }
        });
        return view;
    }
    private void initView(View view) {
         te_road_total_distance = view.findViewById(R.id.road_total_distance);
        te_road_max_speed = view.findViewById(R.id.road_max_speed);
        te_stop_car_open_door_allow_time = view.findViewById(R.id.stop_car_open_door_allow_time);
        te_stop_car_limit_distance = view.findViewById(R.id.stop_car_limit_distance);
        te_stop_car_edge_red_distance = view.findViewById(R.id.stop_car_edge_red_distance);
        te_stop_car_edge_yellow_distance = view.findViewById(R.id.stop_car_edge_yellow_distance);
        view.findViewById(R.id.btn_setting_save).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String teRoadMaxSpeedInput = te_road_max_speed.getInput();
                String teRoadTotalDistanceInput = te_road_total_distance.getInput();
                String teStopCarOpenDoorAllowTimeInput = te_stop_car_open_door_allow_time.getInput();
                String teStopCarLimitDistanceInput = te_stop_car_limit_distance.getInput();
                String teStopCarEdgeRedDistanceInput = te_stop_car_edge_red_distance.getInput();
                String teStopCarEdgeYellowDistanceInput = te_stop_car_edge_yellow_distance.getInput();
                if (mSideStopSetting!=null){
                    if (Utils.isDigital(teRoadTotalDistanceInput)){
                        mSideStopSetting.setRoad_total_distance(Integer.parseInt(teRoadTotalDistanceInput));
                    }
                              if (Utils.isDigital(teRoadMaxSpeedInput)){
                        mSideStopSetting.setRoad_max_speed(Integer.parseInt(teRoadMaxSpeedInput));
                    }
                              if (Utils.isDigital(teStopCarOpenDoorAllowTimeInput)){
                        mSideStopSetting.setStop_car_open_door_allow_time(Integer.parseInt(teStopCarOpenDoorAllowTimeInput));
                    }
                              if (Utils.isDigital(teStopCarLimitDistanceInput)){
                        mSideStopSetting.setStop_car_limit_distance(Integer.parseInt(teStopCarLimitDistanceInput));
                    }
                              if (Utils.isNumber(teStopCarEdgeRedDistanceInput)){
                        mSideStopSetting.setStop_car_edge_red_distance(Double.parseDouble(teStopCarEdgeRedDistanceInput));
                    }
                              if (Utils.isNumber(teStopCarEdgeYellowDistanceInput)){
                        mSideStopSetting.setStop_car_edge_yellow_distance(Double.parseDouble(teStopCarEdgeYellowDistanceInput));
    }
                    mSideStopSettingViewModel.saveSideStopSetting(mSideStopSetting);
                    Toast.makeText(_mActivity, "靠边停车设置", Toast.LENGTH_SHORT).show();
                    AYSdk.getInstance().sendCmd(Constant.ID_judge_args,gson.toJson(mSideStopSetting));
                }
            }
        });
    }
    private void setDatas() {
        if (mSideStopSetting != null){
            te_road_total_distance.setInput(String.valueOf(mSideStopSetting.getRoad_total_distance()));
            te_stop_car_open_door_allow_time.setInput(String.valueOf(mSideStopSetting.getStop_car_open_door_allow_time()));
            te_stop_car_limit_distance.setInput(String.valueOf(mSideStopSetting.getStop_car_limit_distance()));
            te_stop_car_edge_red_distance.setInput(String.valueOf(mSideStopSetting.getStop_car_edge_red_distance()));
            te_stop_car_edge_yellow_distance.setInput(String.valueOf(mSideStopSetting.getStop_car_edge_yellow_distance()));
            te_road_max_speed.setInput(String.valueOf(mSideStopSetting.getRoad_max_speed()));
        }
    }
}
app/src/main/java/safeluck/drive/evaluation/fragment/rulefragments/cview/TextEditText.java
@@ -79,4 +79,8 @@
        String edite = editText.getText().toString().trim();
        return edite;
    }
    public void setInput(String str){
        editText.setText(str.trim());
    }
}
app/src/main/java/safeluck/drive/evaluation/util/Utils.java
@@ -572,7 +572,16 @@
        Matcher matcher = pattern.matcher(str);
        return matcher.matches();
    }
    public static boolean isNumber(String str) {
        //采用正则表达式的方式来判断一个字符串是否为数字,这种方式判断面比较全
        //可以判断正负、整数小数
        boolean isInt = Pattern.compile("^-?[1-9]\\d*$").matcher(str).find();
        boolean isDouble = Pattern.compile("^-?([1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*|0?\\.0+|0)$").matcher(str).find();
        return isInt || isDouble;
    }
    public static long dateToLongSec(String utc) {
//        MyLog.i("dateToLongSec:"+utc);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
app/src/main/java/safeluck/drive/evaluation/viewmodels/AreaSettingViewModel.kt
New file
@@ -0,0 +1,47 @@
package safeluck.drive.evaluation.viewmodels
import android.app.Application
import androidx.lifecycle.*
import com.google.gson.Gson
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import safeluck.drive.evaluation.app
import safeluck.drive.evaluation.bean.AreaSetting
import safeluck.drive.evaluation.util.CThreadPoolExecutor
import safeluck.drive.evaluation.util.FileUtil
/**DriveJudge
 *
 * 场考设置
 * Created by lzw on 2020/10/9. 14:22:48
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
class AreaSettingViewModel() : ViewModel() {
    var gson = Gson()
    private val gearRelateSet:MutableLiveData<AreaSetting> by lazy {
        MutableLiveData<AreaSetting>().also {
            loadData()
        }
    }
    fun saveAreaSetting(gearRelateSet: AreaSetting){
        CThreadPoolExecutor.runInBackground {
            FileUtil.writeTxtFileToSD(app.getAppContext(),"area_setting.json",gson.toJson(gearRelateSet),"")
        }
    }
    private fun loadData(){
        CThreadPoolExecutor.runInBackground {
           var buffer =FileUtil.readTxtFileFromSD(app.getAppContext(),"area_setting.json",false)
            var g = gson.fromJson(buffer.toString(),AreaSetting::class.java)
            gearRelateSet.postValue(g)
        }
    }
    fun getAreaSetting():LiveData<AreaSetting> {
        return gearRelateSet
    }
}
app/src/main/java/safeluck/drive/evaluation/viewmodels/CommonSettingViewModel.kt
New file
@@ -0,0 +1,46 @@
package safeluck.drive.evaluation.viewmodels
import android.app.Application
import androidx.lifecycle.*
import com.google.gson.Gson
import safeluck.drive.evaluation.app
import safeluck.drive.evaluation.bean.AreaSetting
import safeluck.drive.evaluation.bean.CommonSetting
import safeluck.drive.evaluation.util.CThreadPoolExecutor
import safeluck.drive.evaluation.util.FileUtil
/**DriveJudge
 *
 * 场考设置
 * Created by lzw on 2020/10/9. 14:22:48
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
class CommonSettingViewModel() : ViewModel() {
    var gson = Gson()
    private val gearRelateSet:MutableLiveData<CommonSetting> by lazy {
        MutableLiveData<CommonSetting>().also {
            loadData()
        }
    }
    fun saveCommonSetting(gearRelateSet: CommonSetting){
        CThreadPoolExecutor.runInBackground {
            FileUtil.writeTxtFileToSD(app.getAppContext(),"common_setting.json",gson.toJson(gearRelateSet),"")
        }
    }
    private fun loadData(){
        CThreadPoolExecutor.runInBackground {
           var buffer =FileUtil.readTxtFileFromSD(app.getAppContext(),"common_setting.json",false)
            var g = gson.fromJson(buffer.toString(),CommonSetting::class.java)
            gearRelateSet.postValue(g)
        }
    }
    fun getCommonSetting():LiveData<CommonSetting> {
        return gearRelateSet
    }
}
app/src/main/java/safeluck/drive/evaluation/viewmodels/CorneringLampSettingViewModel.kt
New file
@@ -0,0 +1,45 @@
package safeluck.drive.evaluation.viewmodels
import android.app.Application
import androidx.lifecycle.*
import com.google.gson.Gson
import safeluck.drive.evaluation.app
import safeluck.drive.evaluation.bean.*
import safeluck.drive.evaluation.util.CThreadPoolExecutor
import safeluck.drive.evaluation.util.FileUtil
/**DriveJudge
 *
 * 转向灯设置
 * Created by lzw on 2020/10/9. 14:22:48
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
class CorneringLampSettingViewModel() : ViewModel() {
    var gson = Gson()
    private val gearRelateSet:MutableLiveData<CorneringLampSetting> by lazy {
        MutableLiveData<CorneringLampSetting>().also {
            loadData()
        }
    }
    fun saveCommonSetting(gearRelateSet: CorneringLampSetting){
        CThreadPoolExecutor.runInBackground {
            FileUtil.writeTxtFileToSD(app.getAppContext(),"cornerlamp_setting.json",gson.toJson(gearRelateSet),"")
        }
    }
    private fun loadData(){
        CThreadPoolExecutor.runInBackground {
           var buffer =FileUtil.readTxtFileFromSD(app.getAppContext(),"cornerlamp_setting.json",false)
            var g = gson.fromJson(buffer.toString(),CorneringLampSetting::class.java)
            gearRelateSet.postValue(g)
        }
    }
    fun getCorneringLampSetting():LiveData<CorneringLampSetting> {
        return gearRelateSet
    }
}
app/src/main/java/safeluck/drive/evaluation/viewmodels/GearRelateSet.java
New file
@@ -0,0 +1,57 @@
package safeluck.drive.evaluation.viewmodels;
import java.util.List;
/**
 * DriveJudge
 * Created by lzw on 2020/10/23. 16:35:25
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public class GearRelateSet {
    /**
     * gear_n_allow_time : 5
     * same_gear_min_time : 5
     * gear_speed_error_cumulative_time : 15
     * gear_speed_table : [[0,20],[5,30],[15,40],[25,10000],[35,10000]]
     */
    private int gear_n_allow_time;
    private int same_gear_min_time;
    private int gear_speed_error_cumulative_time;
    private List<List<Integer>> gear_speed_table;
    public int getGear_n_allow_time() {
        return gear_n_allow_time;
    }
    public void setGear_n_allow_time(int gear_n_allow_time) {
        this.gear_n_allow_time = gear_n_allow_time;
    }
    public int getSame_gear_min_time() {
        return same_gear_min_time;
    }
    public void setSame_gear_min_time(int same_gear_min_time) {
        this.same_gear_min_time = same_gear_min_time;
    }
    public int getGear_speed_error_cumulative_time() {
        return gear_speed_error_cumulative_time;
    }
    public void setGear_speed_error_cumulative_time(int gear_speed_error_cumulative_time) {
        this.gear_speed_error_cumulative_time = gear_speed_error_cumulative_time;
    }
    public List<List<Integer>> getGear_speed_table() {
        return gear_speed_table;
    }
    public void setGear_speed_table(List<List<Integer>> gear_speed_table) {
        this.gear_speed_table = gear_speed_table;
    }
}
app/src/main/java/safeluck/drive/evaluation/viewmodels/GearRelateSetViewModel.kt
New file
@@ -0,0 +1,44 @@
package safeluck.drive.evaluation.viewmodels
import android.app.Application
import androidx.lifecycle.*
import com.google.gson.Gson
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import safeluck.drive.evaluation.app
import safeluck.drive.evaluation.util.CThreadPoolExecutor
import safeluck.drive.evaluation.util.FileUtil
/**DriveJudge
 * Created by lzw on 2020/10/9. 14:22:48
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
class GearRelateSetViewModel() : ViewModel() {
    var gson = Gson()
    private val gearRelateSet:MutableLiveData<GearRelateSet> by lazy {
        MutableLiveData<GearRelateSet>().also {
            loadData()
        }
    }
    fun saveGearRelatedSetting(gearRelateSet: GearRelateSet){
        CThreadPoolExecutor.runInBackground {
            FileUtil.writeTxtFileToSD(app.getAppContext(),"Gear_Setting.json",gson.toJson(gearRelateSet),"")
        }
    }
    private fun loadData(){
        CThreadPoolExecutor.runInBackground {
           var buffer =FileUtil.readTxtFileFromSD(app.getAppContext(),"Gear_Setting.json",false)
            var g = gson.fromJson(buffer.toString(),GearRelateSet::class.java)
            gearRelateSet.postValue(g)
        }
    }
    fun getGearRelateSet():LiveData<GearRelateSet> {
        return gearRelateSet
    }
}
app/src/main/java/safeluck/drive/evaluation/viewmodels/OverTakeAndMeetingSettingViewModel.kt
New file
@@ -0,0 +1,48 @@
package safeluck.drive.evaluation.viewmodels
import android.app.Application
import androidx.lifecycle.*
import com.google.gson.Gson
import safeluck.drive.evaluation.app
import safeluck.drive.evaluation.bean.AreaSetting
import safeluck.drive.evaluation.bean.CommonSetting
import safeluck.drive.evaluation.bean.OverTakeMeetingSetting
import safeluck.drive.evaluation.bean.StartCarSetting
import safeluck.drive.evaluation.util.CThreadPoolExecutor
import safeluck.drive.evaluation.util.FileUtil
/**DriveJudge
 *
 * 场考设置
 * Created by lzw on 2020/10/9. 14:22:48
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
class OverTakeAndMeetingSettingViewModel() : ViewModel() {
    var gson = Gson()
    private val gearRelateSet:MutableLiveData<OverTakeMeetingSetting> by lazy {
        MutableLiveData<OverTakeMeetingSetting>().also {
            loadData()
        }
    }
    fun saveCommonSetting(gearRelateSet: OverTakeMeetingSetting){
        CThreadPoolExecutor.runInBackground {
            FileUtil.writeTxtFileToSD(app.getAppContext(),"overtake_setting.json",gson.toJson(gearRelateSet),"")
        }
    }
    private fun loadData(){
        CThreadPoolExecutor.runInBackground {
           var buffer =FileUtil.readTxtFileFromSD(app.getAppContext(),"overtake_setting.json",false)
            var g = gson.fromJson(buffer.toString(),OverTakeMeetingSetting::class.java)
            gearRelateSet.postValue(g)
        }
    }
    fun getOverTakeMeetingSetting():LiveData<OverTakeMeetingSetting> {
        return gearRelateSet
    }
}
app/src/main/java/safeluck/drive/evaluation/viewmodels/SideStopSettingViewModel.kt
New file
@@ -0,0 +1,47 @@
package safeluck.drive.evaluation.viewmodels
import android.app.Application
import androidx.lifecycle.*
import com.google.gson.Gson
import safeluck.drive.evaluation.app
import safeluck.drive.evaluation.bean.AreaSetting
import safeluck.drive.evaluation.bean.CommonSetting
import safeluck.drive.evaluation.bean.SideStopSetting
import safeluck.drive.evaluation.util.CThreadPoolExecutor
import safeluck.drive.evaluation.util.FileUtil
/**DriveJudge
 *
 * 场考设置
 * Created by lzw on 2020/10/9. 14:22:48
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
class SideStopSettingViewModel() : ViewModel() {
    var gson = Gson()
    private val gearRelateSet:MutableLiveData<SideStopSetting> by lazy {
        MutableLiveData<SideStopSetting>().also {
            loadData()
        }
    }
    fun saveSideStopSetting(gearRelateSet: SideStopSetting){
        CThreadPoolExecutor.runInBackground {
            FileUtil.writeTxtFileToSD(app.getAppContext(),"sidestop_setting.json",gson.toJson(gearRelateSet),"")
        }
    }
    private fun loadData(){
        CThreadPoolExecutor.runInBackground {
           var buffer =FileUtil.readTxtFileFromSD(app.getAppContext(),"sidestop_setting.json",false)
            var g = gson.fromJson(buffer.toString(),SideStopSetting::class.java)
            gearRelateSet.postValue(g)
        }
    }
    fun getSideStopSetting():LiveData<SideStopSetting> {
        return gearRelateSet
    }
}
app/src/main/java/safeluck/drive/evaluation/viewmodels/StartCarSettingViewModel.kt
New file
@@ -0,0 +1,47 @@
package safeluck.drive.evaluation.viewmodels
import android.app.Application
import androidx.lifecycle.*
import com.google.gson.Gson
import safeluck.drive.evaluation.app
import safeluck.drive.evaluation.bean.AreaSetting
import safeluck.drive.evaluation.bean.CommonSetting
import safeluck.drive.evaluation.bean.StartCarSetting
import safeluck.drive.evaluation.util.CThreadPoolExecutor
import safeluck.drive.evaluation.util.FileUtil
/**DriveJudge
 *
 * 场考设置
 * Created by lzw on 2020/10/9. 14:22:48
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
class StartCarSettingViewModel() : ViewModel() {
    var gson = Gson()
    private val gearRelateSet:MutableLiveData<StartCarSetting> by lazy {
        MutableLiveData<StartCarSetting>().also {
            loadData()
        }
    }
    fun saveCommonSetting(gearRelateSet: StartCarSetting){
        CThreadPoolExecutor.runInBackground {
            FileUtil.writeTxtFileToSD(app.getAppContext(),"startcar_setting.json",gson.toJson(gearRelateSet),"")
        }
    }
    private fun loadData(){
        CThreadPoolExecutor.runInBackground {
           var buffer =FileUtil.readTxtFileFromSD(app.getAppContext(),"startcar_setting.json",false)
            var g = gson.fromJson(buffer.toString(),StartCarSetting::class.java)
            gearRelateSet.postValue(g)
        }
    }
    fun getStartCarSetting():LiveData<StartCarSetting> {
        return gearRelateSet
    }
}
app/src/main/java/safeluck/drive/evaluation/viewmodels/StationSettingViewModel.kt
New file
@@ -0,0 +1,45 @@
package safeluck.drive.evaluation.viewmodels
import android.app.Application
import androidx.lifecycle.*
import com.google.gson.Gson
import safeluck.drive.evaluation.app
import safeluck.drive.evaluation.bean.*
import safeluck.drive.evaluation.util.CThreadPoolExecutor
import safeluck.drive.evaluation.util.FileUtil
/**DriveJudge
 *
 * 场考设置
 * Created by lzw on 2020/10/9. 14:22:48
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
class StationSettingViewModel() : ViewModel() {
    var gson = Gson()
    private val gearRelateSet:MutableLiveData<StationSetting> by lazy {
        MutableLiveData<StationSetting>().also {
            loadData()
        }
    }
    fun saveCommonSetting(gearRelateSet: StationSetting){
        CThreadPoolExecutor.runInBackground {
            FileUtil.writeTxtFileToSD(app.getAppContext(),"station_setting.json",gson.toJson(gearRelateSet),"")
        }
    }
    private fun loadData(){
        CThreadPoolExecutor.runInBackground {
           var buffer =FileUtil.readTxtFileFromSD(app.getAppContext(),"station_setting.json",false)
            var g = gson.fromJson(buffer.toString(),StationSetting::class.java)
            gearRelateSet.postValue(g)
        }
    }
    fun getStationSetting():LiveData<StationSetting> {
        return gearRelateSet
    }
}
app/src/main/java/safeluck/drive/evaluation/viewmodels/StraightLineSettingViewModel.kt
New file
@@ -0,0 +1,48 @@
package safeluck.drive.evaluation.viewmodels
import android.app.Application
import androidx.lifecycle.*
import com.google.gson.Gson
import safeluck.drive.evaluation.app
import safeluck.drive.evaluation.bean.AreaSetting
import safeluck.drive.evaluation.bean.CommonSetting
import safeluck.drive.evaluation.bean.StartCarSetting
import safeluck.drive.evaluation.bean.StraightLineSetting
import safeluck.drive.evaluation.util.CThreadPoolExecutor
import safeluck.drive.evaluation.util.FileUtil
/**DriveJudge
 *
 * 场考设置
 * Created by lzw on 2020/10/9. 14:22:48
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
class StraightLineSettingViewModel() : ViewModel() {
    var gson = Gson()
    private val gearRelateSet:MutableLiveData<StraightLineSetting> by lazy {
        MutableLiveData<StraightLineSetting>().also {
            loadData()
        }
    }
    fun saveCommonSetting(gearRelateSet: StraightLineSetting){
        CThreadPoolExecutor.runInBackground {
            FileUtil.writeTxtFileToSD(app.getAppContext(),"straightline_setting.json",gson.toJson(gearRelateSet),"")
        }
    }
    private fun loadData(){
        CThreadPoolExecutor.runInBackground {
           var buffer =FileUtil.readTxtFileFromSD(app.getAppContext(),"straightline_setting.json",false)
            var g = gson.fromJson(buffer.toString(),StraightLineSetting::class.java)
            gearRelateSet.postValue(g)
        }
    }
    fun getStraightLineSetting():LiveData<StraightLineSetting> {
        return gearRelateSet
    }
}
app/src/main/java/safeluck/drive/evaluation/viewmodels/SubDecGearSettingViewModel.kt
New file
@@ -0,0 +1,45 @@
package safeluck.drive.evaluation.viewmodels
import android.app.Application
import androidx.lifecycle.*
import com.google.gson.Gson
import safeluck.drive.evaluation.app
import safeluck.drive.evaluation.bean.*
import safeluck.drive.evaluation.util.CThreadPoolExecutor
import safeluck.drive.evaluation.util.FileUtil
/**DriveJudge
 *
 * 场考设置
 * Created by lzw on 2020/10/9. 14:22:48
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
class SubDecGearSettingViewModel() : ViewModel() {
    var gson = Gson()
    private val gearRelateSet:MutableLiveData<SubDecGearSetting> by lazy {
        MutableLiveData<SubDecGearSetting>().also {
            loadData()
        }
    }
    fun saveSubDecGearSetting(gearRelateSet: SubDecGearSetting){
        CThreadPoolExecutor.runInBackground {
            FileUtil.writeTxtFileToSD(app.getAppContext(),"subdecGear_setting.json",gson.toJson(gearRelateSet),"")
        }
    }
    private fun loadData(){
        CThreadPoolExecutor.runInBackground {
           var buffer =FileUtil.readTxtFileFromSD(app.getAppContext(),"subdecGear_setting.json",false)
            var g = gson.fromJson(buffer.toString(),SubDecGearSetting::class.java)
            gearRelateSet.postValue(g)
        }
    }
    fun getSubDecGearSetting():LiveData<SubDecGearSetting> {
        return gearRelateSet
    }
}
app/src/main/res/layout/fragment_add_sub_gear_setting_1.xml
New file
@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <ScrollView  android:layout_width="match_parent"
        android:layout_height="match_parent">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
            <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:txt_des_tvedit = "加减档项目行驶距离/米"
                android:id="@+id/shift_limit_distance"
                app:et_input="0.5"
                />
            <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:txt_des_tvedit = "加减档项目同一档位/秒"
                android:id="@+id/road_shift_hold_time"
                app:et_input="0.3"
                />
        </LinearLayout>
    </ScrollView>
    <Button
        android:id="@+id/btn_setting_save"
        android:layout_width="100dp"
        android:layout_height="@dimen/ui_margin_60dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginTop="32dp"
        android:layout_gravity="bottom|center"
        android:background="@drawable/btn_start_bg"
        android:textAllCaps="false"
        android:textColor="@android:color/white"
        android:textSize="@dimen/network_train_textsize32px"
        android:text="保存"/>
</FrameLayout>
app/src/main/res/layout/fragment_content.xml
@@ -20,17 +20,6 @@
        android:textSize="26sp"/>
-->
    <Button
    android:id="@+id/btn_next"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="16dp"
    android:layout_marginRight="16dp"
    android:layout_marginTop="32dp"
        android:background="@drawable/route_item_select_bg"
    android:textAllCaps="false"
        android:textColor="@android:color/white"
        android:textSize="@dimen/network_train_textsize32px"
    android:text="保存"/>
</LinearLayout>
app/src/main/res/layout/fragment_gear_setting.xml
@@ -110,5 +110,17 @@
        android:id="@+id/tedit_4_gea_r"
        />
    </LinearLayout>
    <Button
        android:id="@+id/btn_setting_save"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginTop="32dp"
        android:background="@drawable/route_item_select_bg"
        android:textAllCaps="false"
        android:textColor="@android:color/white"
        android:textSize="@dimen/network_train_textsize32px"
        android:text="保存"/>
</LinearLayout>
</ScrollView>
app/src/main/res/layout/fragment_gear_setting_1.xml
New file
@@ -0,0 +1,150 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout  xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
<ScrollView android:layout_height="match_parent"
    android:layout_width="match_parent">
<LinearLayout android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="@dimen/ui_margin_60dp"
        android:orientation="horizontal">
        <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            app:txt_des_tvedit = "1挡速度范围"
            android:layout_weight="1"
            app:et_input="0"
            android:id="@+id/tedit_1_gear_"
            /><safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:txt_des_tvedit = "到"
        android:layout_weight="1"
        app:et_input="20"
        android:id="@+id/tedit_1_gea_r"
        />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="@dimen/ui_margin_60dp"
        android:orientation="horizontal">
        <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            app:txt_des_tvedit = "2挡速度范围"
            android:layout_weight="1"
            app:et_input="5"
            android:id="@+id/tedit_2_gear_"
            /><safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:txt_des_tvedit = "到"
        android:layout_weight="1"
        app:et_input="30"
        android:id="@+id/tedit_2_gea_r"
        />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="@dimen/ui_margin_60dp"
        android:orientation="horizontal">
        <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            app:txt_des_tvedit = "3挡速度范围"
            android:layout_weight="1"
            app:et_input="15"
            android:id="@+id/tedit_3_gear_"
            /><safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:txt_des_tvedit = "到"
        android:layout_weight="1"
        app:et_input="40"
        android:id="@+id/tedit_3_gea_r"
        />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="@dimen/ui_margin_60dp"
        android:orientation="horizontal">
        <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            app:txt_des_tvedit = "4挡速度范围"
            android:layout_weight="1"
            app:et_input="25"
            android:id="@+id/tedit_4_gear_"
            /><safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:txt_des_tvedit = "到"
        android:layout_weight="1"
        app:et_input="50"
        android:id="@+id/tedit_4_gea_r"
        />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="@dimen/ui_margin_60dp"
        android:orientation="horizontal">
        <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            app:txt_des_tvedit = "5挡速度范围"
            android:layout_weight="1"
            app:et_input="25"
            android:id="@+id/tedit_5_gear_"
            /><safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:txt_des_tvedit = "到"
        android:layout_weight="1"
        app:et_input="50"
        android:id="@+id/tedit_5_gea_r"
        />
    </LinearLayout>
    <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:txt_des_tvedit = "允许档位不匹配/秒"
        android:id="@+id/road_gear_speed_err_time"
        app:et_input="3"
        />
    <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/road_op_gear_err_time"
        app:txt_des_tvedit = "挂同一挡最小间隔/秒"
        app:et_input="300"
        /><safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:txt_des_tvedit = "允许空档滑行时间/秒"
    app:et_input="120"
    android:id="@+id/road_gear_n_time"
    />
</LinearLayout>
</ScrollView>
<Button
android:id="@+id/btn_setting_save"
android:layout_width="100dp"
android:layout_height="@dimen/ui_margin_60dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginTop="32dp"
android:layout_gravity="bottom|center"
android:background="@drawable/btn_start_bg"
android:textAllCaps="false"
android:textColor="@android:color/white"
android:textSize="@dimen/network_train_textsize32px"
android:text="保存"/>
    </FrameLayout>
app/src/main/res/layout/layout_common_judge_1.xml
New file
@@ -0,0 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <ScrollView  android:layout_width="match_parent"
        android:layout_height="match_parent">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
            <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:txt_des_tvedit = "路考中途停车时限(毫秒)"
                android:id="@+id/road_pause_time"
                app:et_input="2000"
                />
            <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:txt_des_tvedit = "行驶中压虚线累计时间/秒"
                android:id="@+id/road_crash_dotted_line_time"
                app:et_input="2000"
                />    <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:txt_des_tvedit = "车辆行驶后滑黄牌距离/米"
            android:id="@+id/road_slide_yellow_distance"
            app:et_input="0.1"
            />  <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:txt_des_tvedit = "车辆行驶后滑红牌距离/米"
            android:id="@+id/road_slide_red_distance"
            app:et_input="0.1"
            /><safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:txt_des_tvedit = "连续变道最短时间/秒"
            android:id="@+id/road_lane_min_time"
            app:et_input="210"
            />
            <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:txt_des_tvedit = "变更车道行驶距离/米"
                android:id="@+id/road_change_lane_dist"
                app:et_input="30"
                />
        </LinearLayout>
    </ScrollView>
    <Button
        android:id="@+id/btn_setting_save"
        android:layout_width="100dp"
        android:layout_height="@dimen/ui_margin_60dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginTop="32dp"
        android:layout_gravity="bottom|center"
        android:background="@drawable/btn_start_bg"
        android:textAllCaps="false"
        android:textColor="@android:color/white"
        android:textSize="@dimen/network_train_textsize32px"
        android:text="保存"/>
</FrameLayout>
app/src/main/res/layout/layout_fragment_changkao.xml
New file
@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
    <FrameLayout
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
    <ScrollView  android:layout_width="match_parent"
        android:layout_height="match_parent">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
            <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:txt_des_tvedit = "松开点火开关时限(毫秒)"
                android:id="@+id/area_release_start_key"
                app:et_input="2000"
                />
            <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:txt_des_tvedit = "曲线中途停车判定(毫秒)"
                android:id="@+id/area_curve_pause_time"
                app:et_input="2000"
                />    <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:txt_des_tvedit = "倒库中途停车判定(毫秒)"
            android:id="@+id/area_park_pause_time"
            app:et_input="2000"
            /><safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:txt_des_tvedit = "倒库最长完成时间/秒"
            android:id="@+id/area_park_finish_time"
            app:et_input="210"
            />
            <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:txt_des_tvedit = "侧方中途停车判定(毫秒)"
                android:id="@+id/area_park2_pause_time"
                app:et_input="2000"
                />
            <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:txt_des_tvedit = "侧方最长完成时间/秒"
                android:id="@+id/area_park2_finish_time"
                app:et_input="90"
                />
            <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:txt_des_tvedit = "直角中途停车判定(毫秒)"
                android:id="@+id/area_turn_a90_pause_time"
                app:et_input="2000"
                />
            <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:txt_des_tvedit = "坡起最长完成时间/秒"
                android:id="@+id/area_ramp_finish_time"
                app:et_input="30"
                />
            <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:txt_des_tvedit = "坡起超出桩杆距离/米"
                android:id="@+id/area_ramp_flag_red_dist"
                app:et_input="0.5"
                />
            <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:txt_des_tvedit = "坡起边线黄牌距离/米"
                android:id="@+id/area_ramp_edge_yellow_dist"
                app:et_input="0.3"
                />
            <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:txt_des_tvedit = "坡起边线红牌距离/米"
                android:id="@+id/area_ramp_edge_red_dist"
                app:et_input="0.5"
                />
            <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:txt_des_tvedit = "坡起车辆后溜黄牌距离/米"
                android:id="@+id/area_ramp_slide_yellow_dist"
                app:et_input="0.1"
                />
            <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:txt_des_tvedit = "坡起车辆后溜红牌距离/米"
                android:id="@+id/area_ramp_slide_red_dist"
                app:et_input="0.3"
                />
        </LinearLayout>
    </ScrollView>
        <Button
            android:id="@+id/btn_setting_save"
            android:layout_width="100dp"
            android:layout_height="@dimen/ui_margin_60dp"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="16dp"
            android:layout_marginTop="32dp"
            android:layout_gravity="bottom|center"
            android:background="@drawable/btn_start_bg"
            android:textAllCaps="false"
            android:textColor="@android:color/white"
            android:textSize="@dimen/network_train_textsize32px"
            android:text="保存"/>
    </FrameLayout>
app/src/main/res/layout/layout_fragment_over_take.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:app="http://schemas.android.com/apk/res-auto"
<FrameLayout xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
@@ -9,8 +9,16 @@
        <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:txt_des_tvedit = "超车项目行驶距离/米"
            android:id="@+id/overtake_limit_distance"
            app:et_input="0.5"
            />
        <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:txt_des_tvedit = "超车时必须达到的速度"
            app:et_input="121"
            />
@@ -21,4 +29,18 @@
            app:txt_des_check = "超车完成后返回原车道"/>
    </LinearLayout>
</ScrollView>
    <Button
        android:id="@+id/btn_setting_save"
        android:layout_width="100dp"
        android:layout_height="@dimen/ui_margin_60dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginTop="32dp"
        android:layout_gravity="bottom|center"
        android:background="@drawable/btn_start_bg"
        android:textAllCaps="false"
        android:textColor="@android:color/white"
        android:textSize="@dimen/network_train_textsize32px"
        android:text="保存"/>
</FrameLayout>
app/src/main/res/layout/layout_fragment_parkover_1.xml
New file
@@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:txt_des_tvedit = "全程考试里程/米"
        android:id="@+id/road_total_distance"
        app:et_input="3000"
        />
    <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:txt_des_tvedit = "全程最高时速KM/H"
        android:id="@+id/road_max_speed"
        app:et_input="60"
        />
    <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:txt_des_tvedit = "下车时车门允许开启的时间/秒"
        android:id="@+id/stop_car_open_door_allow_time"
        app:et_input="17"
        />
    <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:txt_des_tvedit = "靠边停车行驶距离限制/米"
        android:id="@+id/stop_car_limit_distance"
        app:et_input="150"
        />    <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:txt_des_tvedit = "靠边停车边沿到线距离(红牌)/米"
    android:id="@+id/stop_car_edge_red_distance"
        app:et_input="3000"
        /><safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:txt_des_tvedit = "靠边停车边沿到线距离(黄牌)/米"
    android:id="@+id/stop_car_edge_yellow_distance"
        app:et_input="17"
        />
</LinearLayout>
    <Button
        android:id="@+id/btn_setting_save"
        android:layout_width="100dp"
        android:layout_height="@dimen/ui_margin_60dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginTop="32dp"
        android:layout_gravity="bottom|center"
        android:background="@drawable/btn_start_bg"
        android:textAllCaps="false"
        android:textColor="@android:color/white"
        android:textSize="@dimen/network_train_textsize32px"
        android:text="保存"/>
</FrameLayout>
app/src/main/res/layout/layout_fragment_setlights.xml
@@ -1,13 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
<FrameLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/turn_signal_min_advance"
        app:txt_des_tvedit = "打转向灯后多少毫秒转弯或起步"
        app:et_input="3000"
        />
@@ -43,3 +48,18 @@
</LinearLayout>
    <Button
        android:id="@+id/btn_setting_save"
        android:layout_width="100dp"
        android:layout_height="@dimen/ui_margin_60dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginTop="32dp"
        android:layout_gravity="bottom|center"
        android:background="@drawable/btn_start_bg"
        android:textAllCaps="false"
        android:textColor="@android:color/white"
        android:textSize="@dimen/network_train_textsize32px"
        android:text="保存"/>
</FrameLayout>
app/src/main/res/layout/layout_fragment_start.xml
New file
@@ -0,0 +1,61 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <ScrollView  android:layout_width="match_parent"
        android:layout_height="match_parent">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
            <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:txt_des_tvedit = "起步行驶距离/米"
                android:id="@+id/road_start_dist"
                app:et_input="2000"
                />
            <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:txt_des_tvedit = "起步阶段最大转速/RPM"
                android:id="@+id/road_start_max_rpm"
                app:et_input="90"
                />
            <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:txt_des_tvedit = "起步阶段开门行驶距离/米"
                android:id="@+id/road_start_open_door_dist"
                app:et_input="2000"
                />
        </LinearLayout>
    </ScrollView>
    <Button
        android:id="@+id/btn_setting_save"
        android:layout_width="100dp"
        android:layout_height="@dimen/ui_margin_60dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginTop="32dp"
        android:layout_gravity="bottom|center"
        android:background="@drawable/btn_start_bg"
        android:textAllCaps="false"
        android:textColor="@android:color/white"
        android:textSize="@dimen/network_train_textsize32px"
        android:text="保存"/>
</FrameLayout>
app/src/main/res/layout/layout_fragment_stationsettin.xml
@@ -1,15 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
<FrameLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:txt_des_tvedit = "学校/车站/横道区域最高速度"
        app:et_input="25"
        android:id="@+id/cross_school_max_speed"
        app:txt_des_tvedit = "学校/车站/横道区域最高速度KM/H"
        app:et_input="30"
        />
    <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:txt_des_tvedit = "通过学校/车站/横道,距离检查点的有效距离(米)"
        android:id="@+id/crossing_break_valid_distance"
        app:et_input="30"
        />
    <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:txt_des_tvedit = "停止线外需停车时,距停止线有效距离(米)"
        android:id="@+id/crossing_stop_valid_distance"
        app:et_input="3.0"
        />
    <safeluck.drive.evaluation.fragment.rulefragments.cview.TextCheckBox
@@ -19,3 +38,18 @@
</LinearLayout>
    <Button
        android:id="@+id/btn_setting_save"
        android:layout_width="100dp"
        android:layout_height="@dimen/ui_margin_60dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginTop="32dp"
        android:layout_gravity="bottom|center"
        android:background="@drawable/btn_start_bg"
        android:textAllCaps="false"
        android:textColor="@android:color/white"
        android:textSize="@dimen/network_train_textsize32px"
        android:text="保存"/>
</FrameLayout>
app/src/main/res/layout/layout_fragment_straight_line.xml
New file
@@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <ScrollView  android:layout_width="match_parent"
        android:layout_height="match_parent">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
            <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:txt_des_tvedit = "直线行驶测试的距离/米"
                android:id="@+id/straight_limit_distance"
                app:et_input="30"
                />
            <safeluck.drive.evaluation.fragment.rulefragments.cview.TextEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:txt_des_tvedit = "直线行驶偏移量/米"
                android:id="@+id/straight_max_offset"
                app:et_input="0.5"
                />
        </LinearLayout>
    </ScrollView>
    <Button
        android:id="@+id/btn_setting_save"
        android:layout_width="100dp"
        android:layout_height="@dimen/ui_margin_60dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginTop="32dp"
        android:layout_gravity="bottom|center"
        android:background="@drawable/btn_start_bg"
        android:textAllCaps="false"
        android:textColor="@android:color/white"
        android:textSize="@dimen/network_train_textsize32px"
        android:text="保存"/>
</FrameLayout>
app/src/main/res/values/strings.xml
@@ -60,7 +60,8 @@
    <string-array name="array_exam_rule_menu">
        <item>档位相关设置</item>
        <item>常用参数设置</item>
        <item>场地考试设置</item>
<!--        <item>常用参数设置</item>-->
        <item>通用评判设置</item>
        <item>上车起步设置</item>
        <item>直线行驶设置</item>
@@ -73,13 +74,13 @@
    </string-array>
<string-array name="array_large_item_menu">
    <item>灯光设置</item>
<!--    <item>灯光设置</item>-->
    <item>规则设置</item>
    <item>扣分设置</item>
<!--    <item>扣分设置</item>
    <item>指令设置</item>
    <item>系统设置</item>
    <item>教学系统设置</item>
    <item>档位学习</item>
    <item>档位学习</item>-->
</string-array>