| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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 |
| | |
| | | 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; |
| | | |
| | |
| | | String icson;//返回的ic卡信息 json |
| | | private Random random = new Random(); |
| | | private List<SimulateNightBean.QuestionBean> tempQs= new ArrayList<>(); |
| | | |
| | | |
| | | |
| | | |
| | | private Handler mHandler = new Handler(new Handler.Callback() { |
| | |
| | | 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 { |
| | |
| | | |
| | | 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: |
| | |
| | | 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: |
| | |
| | | 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: |
| | |
| | | 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: |
| | |
| | | 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); |
| | | } |
| | | |
| | |
| | | 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(); |
| | |
| | | |
| | | 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(); |
| | |
| | | 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); |
| | |
| | | } |
| | | |
| | | 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; |
| | |
| | | |
| | | } |
| | | |
| | | 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); |
| | |
| | | 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); |
| | |
| | | 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)); |
| | | |
| | |
| | | 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(); |
| | |
| | | jkMessage0202.ID = ExamPlatformData.getInstance().getID(); |
| | | |
| | | jkMessage0202.exam_id = ExamPlatformData.getInstance().getExam_id(); |
| | | failedProjViewModel.deleteAll(); |
| | | |
| | | if (myDialogFragment == null){ |
| | | myDialogFragment = new MyDialogFragment(); |
| | |
| | | @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); |
| | | } |
| | |
| | | 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)); |
| | |
| | | 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])); |
| | | } |
| | |
| | | } |
| | | }); |
| | | |
| | | iv_head.getDrawable().setLevel(1); |
| | | //清空sns |
| | | sns.clear(); |
| | | |
| | | |
| | | |
| | | |
| | | |
| | |
| | | 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给平台 结束考试 |