app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java
@@ -12,6 +12,8 @@
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import androidx.work.OneTimeWorkRequest;
import androidx.work.PeriodicWorkRequest;
import androidx.work.WorkInfo;
import androidx.work.WorkManager;
import android.os.Handler;
@@ -41,6 +43,7 @@
import java.util.Date;
import java.util.List;
import java.util.Random;
import java.util.concurrent.TimeUnit;
import me.yokeyword.fragmentation.SupportFragment;
import safeluck.drive.evaluation.Constant;
@@ -69,6 +72,9 @@
import safeluck.drive.evaluation.platformMessage.JKMessage0203;
import safeluck.drive.evaluation.platformMessage.JKMessage0204;
import safeluck.drive.evaluation.util.Utils;
import safeluck.drive.evaluation.worker.TimeWorker;
import static androidx.work.PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS;
/**单机训练UI
 * MyApplication2
@@ -100,7 +106,7 @@
    private int item_id;//扣分分数总和
    private ExamStatusViewModel examStatusViewModel;
    private static final int ADD_DATA = 1;
    private TextView tv_speed,tv_total_score,tv_sat_num,tv_name,tv_id,tv_work_platform;
    private TextView tv_speed,tv_total_score,tv_sat_num,tv_name,tv_id,tv_work_platform,tv_network_time;
    private double speed=0.0;
    private ImageView iv_rtk_status,iv_head;
@@ -111,8 +117,6 @@
    String icson;//返回的ic卡信息 json
    private Random random = new Random();
    private List<SimulateNightBean.QuestionBean> tempQs=  new ArrayList<>();
    private Handler mHandler = new Handler(new Handler.Callback() {
@@ -128,7 +132,7 @@
                av_zhijiao.setColor(aaa(safeluck.drive.evaluation.DB.Constant.EXAM_MAP_TYPE_ANGLE));
            }
            if (msg.what == SPEED_DATA){
                tv_speed.setText(getResources().getString(R.string.speed,speed));
                tv_speed.setText(_mActivity.getApplicationContext().getResources().getString(R.string.speed,speed));
            }
            if (msg.what == Constant.IC_ID){
                try {
@@ -187,7 +191,13 @@
                                    return getResources().getColor(R.color.colorAccent);
                                }else{
                                    ExamPlatformData.getInstance().getTTS().speak("倒车入库合格");
                                    if (examStatus.getResult() ==1){
                                        MyLog.i("已经播放过倒车入库合格");
                                    }else{
                                        ExamPlatformData.getInstance().getTTS().speak("倒车入库合格");
                                        examStatusViewModel.updateItemExamResult(1,examStatus.getMap_id());
                                    }
                                    return getResources().getColor(R.color.train_btn_return);
                                }
                            case 2:
@@ -195,7 +205,13 @@
                                    MyLog.i("该项考试失败,type="+type);
                                    return getResources().getColor(R.color.colorAccent);
                                }else{
                                    ExamPlatformData.getInstance().getTTS().speak("坡道定点停车和起步合格");
                                    if (examStatus.getResult() ==1){
                                        MyLog.i("已经播放过坡道定点停车和起步合格合格");
                                    }else{
                                        ExamPlatformData.getInstance().getTTS().speak("坡道定点停车和起步合格");
                                        examStatusViewModel.updateItemExamResult(1,examStatus.getMap_id());
                                    }
                                    return getResources().getColor(R.color.train_btn_return);
                                }
                            case 3:
@@ -203,7 +219,13 @@
                                    MyLog.i("该项考试失败,type="+type);
                                    return getResources().getColor(R.color.colorAccent);
                                }else{
                                    ExamPlatformData.getInstance().getTTS().speak("侧方停车合格");
                                    if (examStatus.getResult() ==1){
                                        MyLog.i("已经播放过侧方停车合格");
                                    }else{
                                        ExamPlatformData.getInstance().getTTS().speak("侧方停车合格");
                                        examStatusViewModel.updateItemExamResult(1,examStatus.getMap_id());
                                    }
                                    return getResources().getColor(R.color.train_btn_return);
                                }
                            case 4:
@@ -211,7 +233,13 @@
                                    MyLog.i("该项考试失败,type="+type);
                                    return getResources().getColor(R.color.colorAccent);
                                }else{
                                    ExamPlatformData.getInstance().getTTS().speak("曲线行驶合格");
                                    if (examStatus.getResult() ==1){
                                        MyLog.i("已经播放过曲线行驶合格");
                                    }else{
                                        ExamPlatformData.getInstance().getTTS().speak("曲线行驶合格");
                                        examStatusViewModel.updateItemExamResult(1,examStatus.getMap_id());
                                    }
                                    return getResources().getColor(R.color.train_btn_return);
                                }
                            case 5:
@@ -219,8 +247,13 @@
                                    MyLog.i("该项考试失败,type="+type);
                                    return getResources().getColor(R.color.colorAccent);
                                }else{
                                    MyLog.i("该项考试成功,type="+type);
                                    ExamPlatformData.getInstance().getTTS().speak("直角转弯合格");
                                    if (examStatus.getResult() ==1){
                                        MyLog.i("已经播放过直角转弯合格");
                                    }else{
                                        ExamPlatformData.getInstance().getTTS().speak("直角转弯合格");
                                        examStatusViewModel.updateItemExamResult(1,examStatus.getMap_id());
                                    }
                                    return getResources().getColor(R.color.train_btn_return);
                                }
@@ -270,8 +303,8 @@
                    MyLog.i("当前得分:"+currTotalScore);
                    if (currTotalScore < Constant.PASSING_SCORE){
                        MyLog.i("低于80,不合格"+currTotalScore);
                        ExamPlatformData.getInstance().getTTS().speak("考试不合格");
                        stopExam();
//                        ExamPlatformData.getInstance().getTTS().speak("考试不合格");
//                        stopExam();
                    }
                    MyLog.i("监测到有失败项目加入,通知UI更新颜色");
                    mHandler.obtainMessage(ADD_DATA).sendToTarget();
@@ -346,7 +379,7 @@
        return view;
    }
    private List<Integer> sns =new ArrayList<>();
    private void sendJKMessage0203(List<FailedProj_select> failedProj_selects) {
        JKMessage0203 jkMessage0203 = new JKMessage0203();
        jkMessage0203.phone =  ExamPlatformData.getInstance().getPhone();
@@ -361,7 +394,7 @@
                        failedProj_selects.get(i).getScore_deducting()==100?"不合格":"扣"+
                                failedProj_selects.get(i).getScore_deducting()+"分"));
                MyLog.i("没有相同的sn,发送"+failedProj_selects.get(i).getSn());
                sns.add(failedProj_selects.get(i).getSn());
                ExamPlatformData.getInstance().addSn(failedProj_selects.get(i).getSn());
                String utc =   failedProj_selects.get(i).getUtc();
                if (!TextUtils.isEmpty(utc)&&utc.length()>12){
                    utc =utc.substring(0,12);
@@ -385,11 +418,11 @@
    }
    private boolean hasSnEqulas(int failedProjSn){
        if (sns.size() > 0){
            for (int j = 0; j < sns.size(); j++) {
                MyLog.i("已存在的sn"+sns.get(j));
                if (sns.get(j) == failedProjSn){
                    MyLog.i("sn相同,不发"+sns.get(j));
        if (ExamPlatformData.getInstance().getSns().size() > 0){
            for (int j = 0; j < ExamPlatformData.getInstance().getSns().size(); j++) {
                MyLog.i("已存在的sn"+ExamPlatformData.getInstance().getSns().get(j));
                if (ExamPlatformData.getInstance().getSns().get(j) == failedProjSn){
                    MyLog.i("sn相同,不发"+ExamPlatformData.getInstance().getSns().get(j));
                    return true;
                }else{
                    continue;
@@ -401,63 +434,9 @@
    }
    private int whatPaintColor(ExamStatus examStat) {
        int map_id = examStat.getMap_id();
        int status = examStat.getEnter();
        MyLog.i(TAG, "whatPaintColor: map_id="+map_id+" status="+status);
        switch (status) {
            case 0://考试完成
                switch (map_id) {
                    case 1://倒库
                        if (item_conents.contains("倒车入库")) {
                            return getResources().getColor(R.color.colorAccent);
                        }else{
                            return getResources().getColor(R.color.train_btn_return);
                        }
                    case 2:
                        if (item_conents.contains("坡道定点停车和起步")) {
                            return getResources().getColor(R.color.colorAccent);
                        }else{
                            return getResources().getColor(R.color.train_btn_return);
                        }
                    case 3:
                        if (item_conents.contains("侧方停车")) {
                            return getResources().getColor(R.color.colorAccent);
                        }else{
                            return getResources().getColor(R.color.train_btn_return);
                        }
                    case 4:
                        if (item_conents.contains("曲线行驶")) {
                            return getResources().getColor(R.color.colorAccent);
                        }else{
                            return getResources().getColor(R.color.train_btn_return);
                        }
                    case 5:
                        if (item_conents.contains("直角转弯")) {
                            return getResources().getColor(R.color.colorAccent);
                        }else{
                            return getResources().getColor(R.color.train_btn_return);
                        }
                }
            case 1://进入考场项目
                MyLog.i("pink 进入某个考场项目");
                return getResources().getColor(R.color.pink);
            case 2://待考
                return getResources().getColor(R.color.examing);
        }
        return getResources().getColor(R.color.examing);
    }
    private void initView(View view) {
        Intent intent = new Intent(ALARM_ACTION_CODE);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(_mActivity.getApplicationContext(),
                REQUEST_CODE, intent,
                PendingIntent.FLAG_CANCEL_CURRENT);
        AlarmManager alarmManager = (AlarmManager) _mActivity.getApplicationContext().getSystemService(Context.ALARM_SERVICE);
        alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(),pendingIntent);
        view.findViewById(R.id.iv_head).setOnClickListener(this);
        av_curve = view.findViewById(R.id.av3);
@@ -474,6 +453,25 @@
        tv_sat_num = view.findViewById(R.id.tv_sat_num);
        tv_speed = view.findViewById(R.id.tv_speed);
        tv_total_score = view.findViewById(R.id.tv_total_score);
        tv_network_time = view.findViewById(R.id.network_time);
        PeriodicWorkRequest periodicWorkRequest = new PeriodicWorkRequest.Builder(TimeWorker.class,MIN_PERIODIC_INTERVAL_MILLIS, TimeUnit.MICROSECONDS).build();
        WorkManager.getInstance(getContext().getApplicationContext()).enqueue(periodicWorkRequest);
        WorkManager.getInstance(getContext().getApplicationContext()).getWorkInfoByIdLiveData(periodicWorkRequest.getId())
                .observe(this, new Observer<WorkInfo>() {
                    @Override
                    public void onChanged(WorkInfo workInfo) {
                        if (workInfo!= null&&workInfo.getState().isFinished()){
                            String time = workInfo.getOutputData().getString(Constant.TIME_MINUTE);
                            MyLog.i("Time="+time);
                            tv_network_time.setText(time);
                        }
                    }
                });
        tv_network_time.setText(Utils.getHHmm());
        tv_speed.setText(getResources().getString(R.string.speed,speed));
        view.findViewById(R.id.btn_return).setOnClickListener(this);
@@ -500,8 +498,10 @@
        mScoreAdapter = new ScoreAdapter(_mActivity);
        mListView.setAdapter(mScoreAdapter);
        btn_start_exam = view.findViewById(R.id.btn_start);
        btn_start_exam.setText("开始训练");
        btn_start_exam.setOnClickListener(this);
        tv_stop = view.findViewById(R.id.tv_stop);
        tv_stop.setText("结束训练");
        tv_stop.setOnClickListener(this);
        mListView.addHeaderView(LayoutInflater.from(_mActivity).inflate(R.layout.layout_score_item, null));
@@ -514,10 +514,7 @@
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_start:
                OneTimeWorkRequest examStatusInitWork = OneTimeWorkRequest.from(ExamStatusInitWorker.class);
                WorkManager.getInstance(_mActivity).enqueue(examStatusInitWork);
                item_id = 0;
                currTotalScore = 100;
                //TODO 发送JKMessage0202 给平台,开始考试
                final JKMessage0202 jkMessage0202 = new JKMessage0202();
                jkMessage0202.phone = ExamPlatformData.getInstance().getPhone();
@@ -525,7 +522,6 @@
                jkMessage0202.ID = ExamPlatformData.getInstance().getID();
                jkMessage0202.exam_id = ExamPlatformData.getInstance().getExam_id();
                failedProjViewModel.deleteAll();
                if (myDialogFragment == null){
                    myDialogFragment = new MyDialogFragment();
@@ -535,10 +531,13 @@
                    @Override
                    public void changKao() {
                        exam_type = 2;
                        iv_head.getDrawable().setLevel(1);
                        examStatusViewModel.updateStartExam(exam_type);
                        sendExamJson(1,exam_type);
                        ExamPlatformData.getInstance().getTTS().speak("开始考试");
                        ExamPlatformData.getInstance().getTTS().speak("开始训练");
                        jkMessage0202.curr_exam = 0;
                        ExamPlatformData.getInstance().setTrainingMode(true);//设置为训练模式
                        MessageProcessor.getInstance().sendMessage(jkMessage0202);
                    }
@@ -551,8 +550,10 @@
                        if (simulateNightBean == null){
                            simulateNightBean = new SimulateNightBean();
                        }
                        iv_head.getDrawable().setLevel(1);
                        simulateNightBean.setExam(0);
                        ExamPlatformData.getInstance().getTTS().speak("开始训练");
                        ExamPlatformData.getInstance().setTrainingMode(true);//设置为训练模式
                        final List<SimulateNightBean.QuestionBean> list = ExamPlatformData.getInstance().getSimulate_light_tips();
                        simulateNightBean.setQuestion(list.subList(list.size()-2,list.size()-1));
                        AYSdk.getInstance().sendCmd(0x8012,gson.toJson(simulateNightBean));
@@ -561,7 +562,7 @@
                        MessageProcessor.getInstance().sendMessage(jkMessage0202);
                        tempQs.add(list.get(0));
                        int [] a = Utils.getRandomInts(4,12);
                        int [] a =Utils.getRandomInts(4,12);
                        for (int i = 0; i < a.length; i++) {
                            tempQs.add(list.get(a[i]));
                        }
@@ -578,9 +579,8 @@
                    }
                });
                iv_head.getDrawable().setLevel(1);
                //清空sns
                sns.clear();
@@ -627,11 +627,22 @@
    private void stopExam() {
        MyLog.i(TAG,"结束考试");
        //清空sns
        ExamPlatformData.getInstance().clearSns();
        //设置训练模式为false
        ExamPlatformData.getInstance().setTrainingMode(false);
        //恢复初始数据
        OneTimeWorkRequest examStatusInitWork = OneTimeWorkRequest.from(ExamStatusInitWorker.class);
        WorkManager.getInstance(_mActivity).enqueue(examStatusInitWork);
        item_id = 0;
        currTotalScore = 100;
        failedProjViewModel.deleteAll();
        tv_total_score.setText(String.valueOf(currTotalScore));
        iv_head.getDrawable().setLevel(0);
        ExamPlatformData.getInstance().getTTS().speak("结束考试");
        ExamPlatformData.getInstance().getTTS().speak("结束训练");
        examStatusViewModel.updateStartExam(Constant.NONE_BEEN_START_EXAM);
        sendExamJson(0,0);//结束考试 exstart=0
        //TODO 发送JKMessage0204给平台 结束考试