From 507242abe645ce3017118dfbcadaa7d0cfada053 Mon Sep 17 00:00:00 2001
From: lizhanwei <Dana_Lee1016@126.com>
Date: 星期四, 12 三月 2020 16:11:15 +0800
Subject: [PATCH] "联网考试“去掉由程序主动结束考试;可以一直考试;修改地图,可以一次性加载场考所有地图,然后车移动到某个项目地图,单独显示项目地图;修改map.json;信号配置,只在ExamStatusOutWorker里面收到ndk_start的时候进行发送;

---
 app/src/main/java/safeluck/drive/evaluation/MainActivity.java                            |   35 +--
 app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusViewModel.java      |    9 +
 app/src/main/assets/map.json                                                             |    8 
 app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusOutWorker.kt        |   41 ++++
 app/src/main/res/layout/layout_net_train.xml                                             |    2 
 app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java                  |   15 +
 app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigViewModel.java |    2 
 app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java           |    7 
 app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java                    |  372 +++++++++++++++++++++++++++++++++++++----
 app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusDao.java            |    2 
 app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusWorkRepo.java       |    9 +
 app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigDao.java       |    2 
 12 files changed, 440 insertions(+), 64 deletions(-)

diff --git a/app/src/main/assets/map.json b/app/src/main/assets/map.json
index 705fd4d..8d37d90 100644
--- a/app/src/main/assets/map.json
+++ b/app/src/main/assets/map.json
@@ -2,7 +2,7 @@
   "id": 863,
   "item": 1,
   "point": [{
-    "x-y": [-5.3706, 30.3648, -4.9011, 29.4905, -4.1911, 29.8586, -3.7009, 28.7631, -2.5941, 29.2631, -3.0647, 30.3601, -2.3782, 30.7019, -2.9159, 31.6925]
+    "x-y": [-9.3806, 37.3791, -8.9130, 36.4974, -8.1991, 36.8640, -7.6962, 35.7786, -6.6023, 36.2578, -7.0759, 37.3599, -6.4065, 37.7090, -6.8984, 38.6962]
   }
   ]
 },
@@ -10,7 +10,7 @@
     "id": 864,
     "item": 3,
     "point": [{
-      "x-y": [-5.3806, 30.3791, -4.9130, 29.4974, -4.1991, 29.8640, -3.6962, 28.7786, -2.6023, 29.2578, -3.0759, 30.3599, -2.4065, 30.7090, -2.8984, 31.6962]
+      "x-y": [-5.3806, 37.3791, -4.9130, 36.4974, -4.1991, 36.8640, -3.6962, 35.7786, -2.6023, 36.2578, -3.0759, 37.3599, -2.4065, 37.7090, -2.8984, 38.6962]
     }
     ]
   },
@@ -18,7 +18,7 @@
     "id": 865,
     "item": 2,
     "point": [{
-      "x-y": [-2.4065,30.709,-3.0759,30.3599,-2.6023,29.2578,-2.9669,29.0981,-3.4503,30.1946,-3.8247,30.0293,-3.3316,28.9383,-3.6962,28.7786,-4.1991,29.864]
+      "x-y": [-1.9065, 30.7090, -2.5759, 30.3599, -2.1023, 29.2578, -2.4669, 29.0981, -2.9503, 30.1946, -3.3247, 30.0293, -2.8316, 28.9383, -3.1962, 28.7786, -3.6991, 29.8640]
     }
     ]
   },
@@ -26,7 +26,7 @@
     "id": 866,
     "item": 5,
     "point": [{
-      "x-y": [-2.8984, 31.6962, -2.4065, 30.7090, -3.0759, 30.3599, -2.6023, 29.2578, -3.6962, 28.7786,-4.6667 ,30.7457]
+      "x-y": [1.1016, 31.6962, 1.5935, 30.7090, 0.9241, 30.3599, 1.3977, 29.2578, 0.3038, 28.7786, -0.6667, 30.7457]
     }
     ]
   },
diff --git a/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusDao.java b/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusDao.java
index 5ceb35b..d6f81e8 100644
--- a/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusDao.java
+++ b/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusDao.java
@@ -19,6 +19,8 @@
 
     @Query("update exam_status set enter =:enter where map_id =:mapid")
     void updateEnter(int enter,int mapid);
+    @Query("update exam_status set result =:result where map_id =:mapid")
+    void updateItemResult(int result,int mapid);
     @Query("update exam_status set startExam =:startexam")
     void updateStartExam(int startexam);
 
diff --git a/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusOutWorker.kt b/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusOutWorker.kt
index 09f4e2a..9e20043 100644
--- a/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusOutWorker.kt
+++ b/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusOutWorker.kt
@@ -2,20 +2,37 @@
 
 import android.content.Context
 import android.util.Log
+import android.widget.Toast
 import androidx.work.Data
 import androidx.work.Worker
 import androidx.work.WorkerParameters
 import com.anyun.exam.lib.AYSdk
 import com.anyun.exam.lib.MyLog
+import com.google.gson.Gson
 import org.json.JSONException
 import org.json.JSONObject
 import safeluck.drive.evaluation.DB.Constant
 import safeluck.drive.evaluation.DB.WorkRoomDataBase
+import safeluck.drive.evaluation.DB.signalConfigdb.SingalConfig
+import safeluck.drive.evaluation.bean.SignalConfigRemote
 
 class ExamStatusOutWorker(context: Context, workerParams: WorkerParameters) : Worker(context, workerParams) {
     val TAG:String = "ExamStatusOutWorker"
+    private var signalConfiglist: MutableList<SignalConfigRemote> = ArrayList()
+    private val gson = Gson()
+    private var singalConfigs :List<SingalConfig> = ArrayList()
     override fun doWork(): Result {
         val examType =WorkRoomDataBase.getWorkRoomDataBase(applicationContext).examStatusDao.startExamInt;
+        singalConfigs = WorkRoomDataBase.getWorkRoomDataBase(applicationContext).signalConfigDao._getSignalConfigs()
+        for (i in singalConfigs.indices) {
+            val signalConfigRemote = SignalConfigRemote()
+            signalConfigRemote.func_id = i
+            signalConfigRemote.gpio_num = singalConfigs.get(i).getIndex()
+            signalConfigRemote.level = singalConfigs.get(i).getHighLevel()
+            signalConfiglist.add(signalConfigRemote)
+        }
+        var indexs = WorkRoomDataBase.getWorkRoomDataBase(applicationContext).signalConfigDao.allIndexs
+        sendSignalConfigsToRemote(indexs)
         MyLog.i("鏌ュ埌鐨勮�冭瘯type="+examType)
         val data = Data.Builder().putInt(Constant.EXAM_STATUS_TYPE,examType).build()
         if (examType != safeluck.drive.evaluation.Constant.NONE_BEEN_START_EXAM) {
@@ -32,4 +49,28 @@
         return Result.success(data)
     }
 
+    private fun sendSignalConfigsToRemote(indexs: List<Int>) {
+        if (signalConfiglist.size > 0) {
+            if (listContainsSameValue(indexs)) {
+                Log.i(TAG, "sendSignalConfigsToRemote: 鏈夌浉鍚岀殑index锛屼笉鑳藉彂閫�" + gson.toJson(signalConfiglist))
+            } else {
+                AYSdk.getInstance().sendCmd(safeluck.drive.evaluation.Constant.SEND_CONFIG_SIGNAL, gson.toJson(signalConfiglist))
+            }
+        }
+    }
+
+    private fun listContainsSameValue(indexs: List<Int>): Boolean {
+        for (i in indexs.indices) { //鍙互榛樿鏄�0  0涓嶅垽鏂槸鍚︽湁鐩稿悓鐨刬ndex
+            if (indexs[i] == 0) {
+                continue
+            }
+            for (j in i + 1 until indexs.size) {
+                if (indexs[i] === indexs[j]) {
+                    return true
+                }
+            }
+        }
+        return false
+    }
+
 }
\ No newline at end of file
diff --git a/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusViewModel.java b/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusViewModel.java
index 1ef2a68..fd52cf7 100644
--- a/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusViewModel.java
+++ b/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusViewModel.java
@@ -46,4 +46,13 @@
                 ", startExam=" + startExam +
                 '}';
     }
+
+    /**
+     * 鏇存柊Exam_status琛ㄧ殑result
+     * @param i  result 1=鎴愬姛锛�0-澶辫触
+     * @param map_id
+     */
+    public void updateItemExamResult(int i, int map_id) {
+        examStatusWorkRepo.updateItemResult(i,map_id);
+    }
 }
diff --git a/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusWorkRepo.java b/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusWorkRepo.java
index b584aaa..2199a40 100644
--- a/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusWorkRepo.java
+++ b/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusWorkRepo.java
@@ -53,4 +53,13 @@
     public LiveData<Integer> getStartExam() {
         return startExam;
     }
+
+    public void updateItemResult(final int i, final int map_id) {
+        WorkRoomDataBase.dataBaseWriteExecutor.execute(new Runnable() {
+            @Override
+            public void run() {
+                examStatusDao.updateItemResult(i,map_id);
+            }
+        });
+    }
 }
diff --git a/app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigDao.java b/app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigDao.java
index 1f3cabf..52f779d 100644
--- a/app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigDao.java
+++ b/app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigDao.java
@@ -26,6 +26,8 @@
     List<Integer> getAllIndexs();
 
     @Query("select * from signal_config")
+    List<SingalConfig> _getSignalConfigs();
+    @Query("select * from signal_config")
     LiveData<List<SingalConfig>> getSignalConfigs();
 
     @Insert(onConflict = OnConflictStrategy.REPLACE)
diff --git a/app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigViewModel.java b/app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigViewModel.java
index cccb148..b58f86b 100644
--- a/app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigViewModel.java
+++ b/app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigViewModel.java
@@ -22,6 +22,8 @@
         workRepo.insertSignalConig(singalConfig);
     }
 
+
+
     public LiveData<List<SingalConfig>> getSignalConfigs(){
         return signalConfigs;
     }
diff --git a/app/src/main/java/safeluck/drive/evaluation/MainActivity.java b/app/src/main/java/safeluck/drive/evaluation/MainActivity.java
index 3987355..3eca6b0 100644
--- a/app/src/main/java/safeluck/drive/evaluation/MainActivity.java
+++ b/app/src/main/java/safeluck/drive/evaluation/MainActivity.java
@@ -104,7 +104,6 @@
             if (msgCode == Constant.NDK_START){
                 MyLog.i(TAG,"NDK_start,鍙戦�丷TK閰嶇疆");
                 sendRtkConfigInfo();
-                sendSignalConfigsToRemote();
                 sendMcuUprgrade();
             }
         }
@@ -214,23 +213,23 @@
         });
 
 
-        signalConfigViewModel = ViewModelProviders.of(this).get(SignalConfigViewModel.class);
-        signalConfigViewModel.getSignalConfigs().observe(this, new Observer<List<SingalConfig>>() {
-            @Override
-            public void onChanged(List<SingalConfig> singalConfigs) {
-                signalConfiglist.clear();
-                MyLog.i(TAG, "淇″彿閰嶇疆鍙戠敓鍙樺寲");
-
-                for (int i = 0; i < singalConfigs.size(); i++) {
-                    SignalConfigRemote signalConfigRemote = new SignalConfigRemote();
-                    signalConfigRemote.setFunc_id(i);
-                    signalConfigRemote.setGpio_num(singalConfigs.get(i).getIndex());
-                    signalConfigRemote.setLevel(singalConfigs.get(i).getHighLevel());
-                    signalConfiglist.add(signalConfigRemote);
-                }
-                sendSignalConfigsToRemote();
-            }
-        });
+//        signalConfigViewModel = ViewModelProviders.of(this).get(SignalConfigViewModel.class);
+//        signalConfigViewModel.getSignalConfigs().observe(this, new Observer<List<SingalConfig>>() {
+//            @Override
+//            public void onChanged(List<SingalConfig> singalConfigs) {
+//                signalConfiglist.clear();
+//                MyLog.i(TAG, "淇″彿閰嶇疆鍙戠敓鍙樺寲");
+//
+//                for (int i = 0; i < singalConfigs.size(); i++) {
+//                    SignalConfigRemote signalConfigRemote = new SignalConfigRemote();
+//                    signalConfigRemote.setFunc_id(i);
+//                    signalConfigRemote.setGpio_num(singalConfigs.get(i).getIndex());
+//                    signalConfigRemote.setLevel(singalConfigs.get(i).getHighLevel());
+//                    signalConfiglist.add(signalConfigRemote);
+//                }
+//                sendSignalConfigsToRemote();
+//            }
+//        });
 
         mPermissionsManager = new PermissionManager(this) {
             @Override
diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java
index a58a499..3b3d097 100644
--- a/app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java
+++ b/app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java
@@ -8,6 +8,7 @@
 import android.graphics.Path;
 import android.os.Bundle;
 import android.os.Handler;
+import android.text.LoginFilter;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.LayoutInflater;
@@ -124,7 +125,7 @@
     private int map_id;
     private double gpsSpeed = 0;
 
-//    double map[][] = {{1, 1}, {10, 1}, {10, 10}, {1, 10}};
+    double allMap[][][];
     double map[][] = {{-2.4065, 30.7090}, {-3.0759, 30.3599}, { -2.6023, 29.2578}, {-3.3316,28.9383},{-3.8247,30.0293},
         {-3.4503,30.1946}, {-2.9669,29.0981}, { -3.6962, 28.7786}, {-4.1991, 29.8640}};
     double map_other[][] = {{-2.4065, 30.7090}, {-3.0759, 30.3599}, { -2.6023, 29.2578}, {-3.3316,28.9383},{-3.8247,30.0293},
@@ -208,7 +209,8 @@
         });
     }
 
-    public void DrawMap(List<Double> mainAnt, final double[][] map, final double[][] car, List<Integer>body, List<Integer> tire) {
+    public void DrawMap(List<Double> mainAnt, final double[][] map, final double[][] car,
+                        List<Integer>body, List<Integer> tire) {
         if (canvas2 == null || bmp == null) {
             return;
         }
@@ -416,10 +418,252 @@
 //            }
 //        });
     }
+    public void DrawMapAll(List<Double> mainAnt, final double[][][] map, final double[][] car,
+                        List<Integer>body, List<Integer> tire) {
+        if (canvas2 == null || bmp == null) {
+            return;
+        }
+        long scale_x,scale_y;
+//        _mActivity.runOnUiThread(new Runnable() {
+//            @Override
+//            public void run() {
+                double base_x = 300, base_y = 20;
+                double max_x = 0, min_x = 0, max_y = 0, min_y = 0;
+
+//                Log.d(TAG, "DrawMap map size " + map.length + " car size " + car.length);
+
+
+        for (int x = 0; x < map.length; x++) {
+            for (int j = 0; j < map[x].length; j++) {
+                if (x == 0&&j==0) {
+                    max_x = map[0][0][0];
+                    min_x = map[0][0][0];
+                    max_y = map[0][0][1];
+                    min_y = map[0][0][1];
+                } else {
+//                    Log.i(TAG,String.format("map[%d][%d][0]=%f",x,j,map[x][j][0]));
+//                    Log.i(TAG,String.format("map[%d][%d][1]=%f",x,j,map[x][j][1]));
+//                    Log.i(TAG,String.format("max_x=%f,max_y=%f,min_x=%f,min_y=%f",max_x,max_y,min_x,min_y));
+                    if (max_x < map[x][j][0]) {
+
+                        max_x = map[x][j][0];
+                    }
+                    if (min_x > map[x][j][0]) {
+                        min_x = map[x][j][0];
+                    }
+                    if (max_y < map[x][j][1]) {
+                        max_y = map[x][j][1];
+                    }
+                    if (min_y > map[x][j][1]) {
+                        min_y = map[x][j][1];
+                    }
+                }
+            }
+        }
+
+//        Log.d(TAG, "all 鍦板浘DrawMap max_x " + max_x + " max_y " + max_y + " min_x " + min_x + " min_y " + min_y);
+        if (map_other.length>9){
+            for (int i = 0; i < map_other.length; i++) {
+
+                if (max_x < map_other[i][0]) {
+                    max_x = map_other[i][0];
+                }
+                if (min_x > map_other[i][0]) {
+                    min_x = map_other[i][0];
+                }
+                if (max_y < map_other[i][1]) {
+                    max_y = map_other[i][1];
+                }
+                if (min_y > map_other[i][1]) {
+                    min_y = map_other[i][1];
+                }
+            }
+        }
+
+
+//        Log.d(TAG, "DrawMap鍙﹀涓�鏉℃洸绾� max_x " + max_x + " max_y " + max_y + " min_x " + min_x + " min_y " + min_y);
+
+        for (int i = 0; i < car.length; i++) {
+            if (max_x < car[i][0]) {
+                max_x = car[i][0];
+            }
+            if (min_x > car[i][0]) {
+                min_x = car[i][0];
+            }
+            if (max_y < car[i][1]) {
+                max_y = car[i][1];
+            }
+            if (min_y > car[i][1]) {
+                min_y = car[i][1];
+            }
+        }
+
+//        Log.d(TAG, "DrawMapAll 鍜岃溅姣攎ax_x " + max_x + " max_y " + max_y + " min_x " + min_x + " min_y " + min_y);
+
+        scale_x = Math.round((screen_width - base_x - 10) / (max_x - min_x));
+        scale_y = Math.round((screen_height - base_y - 10) / (max_y - min_y));
+
+        if (scale_x >= scale_y) {
+            scale_x = scale_y;
+        } else {
+            scale_y = scale_x;
+        }
+
+//        Log.d(TAG, "DrawMapAll scale_x " + scale_x + " scale_y " + scale_y);
+
+
+        canvas2.drawColor(Color.WHITE);
+
+        if (paint == null || canvas2==null){
+            return;
+        }
+        paint.setStyle(Paint.Style.FILL_AND_STROKE);
+        paint.setColor(Color.BLUE);
+
+        canvas2.drawCircle((float) (base_x + (mainAnt.get(0) - min_x) * scale_x), (float) (base_y + (0 - mainAnt.get(1) - min_y) * scale_y), 2, paint);
+
+        paint.setColor(Color.RED);
+        canvas2.drawCircle((float) (base_x + (car[tire.get(0)][0] - min_x) * scale_x), (float) (base_y + (car[tire.get(0)][1] - min_y) * scale_y), 2.5f, paint);
+        canvas2.drawCircle((float) (base_x + (car[tire.get(1)][0] - min_x) * scale_x), (float) (base_y + (car[tire.get(1)][1] - min_y) * scale_y), 2.5f, paint);
+        canvas2.drawCircle((float) (base_x + (car[tire.get(2)][0] - min_x) * scale_x), (float) (base_y + (car[tire.get(2)][1] - min_y) * scale_y), 2.5f, paint);
+        canvas2.drawCircle((float) (base_x + (car[tire.get(3)][0] - min_x) * scale_x), (float) (base_y + (car[tire.get(3)][1] - min_y) * scale_y), 2.5f, paint);
+
+
+
+        paint.setStyle(Paint.Style.STROKE);
+        paint.setColor(Color.BLACK);
+
+
+
+
+
+        Path path = new Path();
+
+        for (int k = 0; k < map.length; k++) {
+
+
+
+
+            Log.i(TAG, String.format("all DrawMap: map[%d].length=[%d]",k,map[k].length));
+            if (map[k].length < 9) {
+//                Log.d(TAG, String.format("map[%d][0][0]=%f,X=%f",k,map[k][0][0], (float) (base_x + (map[k][0][0] - min_x) * scale_x)) + String.format("map[%d][0][1]=%f,Y=%f",k,map[k][0][1], (float) (base_y + (map[k][0][1] - min_y) * scale_y)));
+                path.moveTo((float) (base_x + (map[k][0][0] - min_x) * scale_x), (float) (base_y + (map[k][0][1] - min_y) * scale_y));
+                for (int i = 1; i < map[k].length; i++) {
+//                    Log.i(TAG,String.format("map[%d][%d][0]=%f,to X=%f",k,i,map[k][i][0],(float) (base_x + (map[k][i][0] - min_x) * scale_x)));
+//                    Log.i(TAG,String.format("map[%d][%d][1]=%f,to Y=%f",k,i,map[k][i][1],(float) (base_y + (map[k][i][1] - min_y) * scale_y)));
+                    path.lineTo((float) (base_x + (map[k][i][0] - min_x) * scale_x), (float) (base_y + (map[k][i][1] - min_y) * scale_y));
+                }
+                path.close();
+            } else if (map[k].length == 9) {
+                path.moveTo((float) (base_x + (map[k][0][0] - min_x) * scale_x), (float) (base_y + (map[k][0][1] - min_y) * scale_y));
+                path.lineTo((float) (base_x + (map[k][8][0] - min_x) * scale_x), (float) (base_y + (map[k][8][1] - min_y) * scale_y));
+
+                path.moveTo((float) (base_x + (map[k][2][0] - min_x) * scale_x), (float) (base_y + (map[k][2][1] - min_y) * scale_y));
+                path.lineTo((float) (base_x + (map[k][1][0] - min_x) * scale_x), (float) (base_y + (map[k][1][1] - min_y) * scale_y));
+
+                path.moveTo((float) (base_x + (map[k][3][0] - min_x) * scale_x), (float) (base_y + (map[k][3][1] - min_y) * scale_y));
+                path.lineTo((float) (base_x + (map[k][4][0] - min_x) * scale_x), (float) (base_y + (map[k][4][1] - min_y) * scale_y));
+
+                path.moveTo((float) (base_x + (map[k][6][0] - min_x) * scale_x), (float) (base_y + (map[k][6][1] - min_y) * scale_y));
+                path.lineTo((float) (base_x + (map[k][5][0] - min_x) * scale_x), (float) (base_y + (map[k][5][1] - min_y) * scale_y));
+
+                path.moveTo((float) (base_x + (map[k][7][0] - min_x) * scale_x), (float) (base_y + (map[k][7][1] - min_y) * scale_y));
+                path.lineTo((float) (base_x + (map[k][8][0] - min_x) * scale_x), (float) (base_y + (map[k][8][1] - min_y) * scale_y));
+            } else {
+                path.moveTo((float) (base_x + (map[k][0][0] - min_x) * scale_x), (float) (base_y + (map[k][0][1] - min_y) * scale_y));
+                for (int i = 1; i < map[k].length; i++) {
+                    path.lineTo((float) (base_x + (map[k][i][0] - min_x) * scale_x), (float) (base_y + (map[k][i][1] - min_y) * scale_y));
+                }
+
+                if (map_other.length>9){
+                    path.moveTo((float) (base_x + (map_other[0][0] - min_x) * scale_x), (float) (base_y + (map_other[0][1] - min_y) * scale_y));
+                    for (int i = 1; i < map[k].length; i++) {
+                        path.lineTo((float) (base_x + (map_other[i][0] - min_x) * scale_x), (float) (base_y + (map_other[i][1] - min_y) * scale_y));
+                    }
+                }
+
+                for (int i = 0, j = 0; i < map[k].length && j < map_other.length; i++, j++) {
+                    path.moveTo((float) (base_x + (map[k][i][0] - min_x) * scale_x), (float) (base_y + (map[k][i][1] - min_y) * scale_y));
+                    path.lineTo((float) (base_x + (map_other[j][0] - min_x) * scale_x), (float) (base_y + (map_other[j][1] - min_y) * scale_y));
+                }
+
+            }
+
+
+        }
+
+        canvas2.drawPath(path, paint);
+
+                path.moveTo((float) (base_x + (car[body.get(0)][0] - min_x) * scale_x), (float) (base_y + (car[body.get(0)][1] - min_y) * scale_y));
+                for (int i = 1; i < body.size(); i++){
+//                    Log.d(TAG, "for 寰幆 DrawMap to X = " + (float) (base_x + (car[body.get(i)][0] - min_x) * scale_x)+ " Y = " + (float) (base_y + (car[body.get(i)][1] - min_y) * scale_y));
+                    Log.i(TAG,String.format("car[%d][0]=%f,to X =%f,car[%d][1]=%f,to Y=%f",i,car[body.get(i)][0],
+                            (float) (base_x + (car[body.get(i)][0] - min_x) * scale_x),i,car[body.get(i)][1],(float) (base_y + (car[body.get(i)][1] - min_y) * scale_y)));
+                    path.lineTo((float) (base_x + (car[body.get(i)][0] - min_x) * scale_x), (float) (base_y + (car[body.get(i)][1] - min_y) * scale_y));
+                }
+
+                path.close();
+
+                canvas2.drawPath(path, paint);
+
+
+                paint.setStyle(Paint.Style.FILL_AND_STROKE);
+
+                if (osdHeading != null) {
+                    Path pathText = new Path();
+                    pathText.moveTo(10, 170);
+                    pathText.lineTo(700, 170);
+                    canvas2.drawTextOnPath(osdHeading, pathText, 0, 0, paint);//閫嗘椂閽堢敓鎴�
+                }
+
+                if (osdMoveDirect != null) {
+                    Path pathText = new Path();
+                    pathText.moveTo(10, 30);
+                    pathText.lineTo(700, 30);
+                    canvas2.drawTextOnPath(osdMoveDirect, pathText, 0, 0, paint);//閫嗘椂閽堢敓鎴�
+                }
+
+                if (osdRtkSpeed != null) {
+                    Path pathText = new Path();
+                    pathText.moveTo(10, 240);
+                    pathText.lineTo(700, 240);
+                    canvas2.drawTextOnPath(osdRtkSpeed, pathText, 0, 0, paint);//閫嗘椂閽堢敓鎴�
+                }
+
+                if (osdQf != null) {
+                    Path pathText = new Path();
+                    pathText.moveTo(10, 120);
+                    pathText.lineTo(700, 120);
+                    canvas2.drawTextOnPath(osdQf, pathText, 0, 0, paint);//閫嗘椂閽堢敓鎴�
+                }
+
+        {
+            BigDecimal bd = new BigDecimal(gpsSpeed);
+            bd = bd.setScale(3, BigDecimal.ROUND_HALF_UP);
+
+            Path pathText = new Path();
+            pathText.moveTo(10, 70);
+            pathText.lineTo(700, 70);
+
+            canvas2.drawTextOnPath("GPS閫熷害:" + bd, pathText, 0, 0, paint);//閫嗘椂閽堢敓鎴�
+        }
+
+
+                // 鎻愪氦鐢诲竷
+                Canvas canvas = holder.lockCanvas();
+                if (canvas != null){
+
+                    canvas.drawBitmap(bmp, 0, 0, paint);
+                    holder.unlockCanvasAndPost(canvas);
+                }
+//            }
+//        });
+    }
 
     int line = 0;
     int map_line = 0;
     int map_line_other = 0;
+    int sanwei = 0;
     private StringBuffer stringBuffer = new StringBuffer();
     class MessageRemoteService{
         public int msgCode;
@@ -493,6 +737,7 @@
                     line = 0;
                     map_line = 0;
                     map_line_other = 0;
+                    sanwei = 0;
 
                     car = new double[points.size()/2][2];
 
@@ -553,52 +798,101 @@
                         examMaps = gson.fromJson(newmap.trim(),type);
                     }
 
+                if (map_id == -1){
+                    allMap =new double[examMaps.size()][][];
+                    for (int i = 0; i < examMaps.size(); i++) {
+                        ExamMap examMap = examMaps.get(i);
 
+                        List<ExamMap.PointBean> pointBeanList = examMap.getPoint();
 
-                        for (int i = 0; i < examMaps.size(); i++) {
-                            ExamMap examMap = examMaps.get(i);
-                            if (map_id == examMap.getId()){
-                                List<ExamMap.PointBean> pointBeanList = examMap.getPoint();
-
-                                for(int j=0; j<pointBeanList.size();j++){
-                                    List<Double> xys = pointBeanList.get(j).getXy();
-                                    if(j==0){
-                                        map = new double[xys.size()/2][2];
-
-                                        for (int k=0; k<xys.size();k++){
-                                            if ((k % 2) == 0) {
-                                                map[map_line][0] = xys.get(k);
-                                            } else {
-                                                double value = 0 - xys.get(k);
-                                                Log.i(TAG, "onCEvent: map鏂板��=" + value + " 浣嶇疆锛�" + k);
-                                                map[map_line][1] = value;
-                                                map_line++;
-                                            }
-                                        }
-                                    }else{
-                                        MyLog.i(TAG,"鏆傛椂鏀寔鏇茬嚎");
-                                        map_other = new double[xys.size()/2][2];
-                                        for (int k=0; k<xys.size();k++){
-                                            if ((k % 2) == 0) {
-                                                map_other[map_line_other][0] = xys.get(k);
-                                            } else {
-                                                double value = 0 - xys.get(k);
-                                                map_other[map_line_other][1] = value;
-                                                map_line_other++;
-                                            }
-                                        }
-                                        break;
+                        for(int j=0; j<pointBeanList.size();j++){
+                            List<Double> xys = pointBeanList.get(j).getXy();
+                            if(j==0){
+                                map = new double[xys.size()/2][2];
+                                allMap[sanwei] = new double[xys.size()/2][2];
+                                map_line = 0;
+                                for (int k=0; k<xys.size();k++){
+                                    if ((k % 2) == 0) {
+                                        map[map_line][0] = xys.get(k);
+                                    } else {
+                                        double value = 0 - xys.get(k);
+                                        map[map_line][1] = value;
+                                        map_line++;
                                     }
-
-
-
                                 }
-                                break;
+                                allMap[sanwei] = map.clone();
+                                sanwei++;
+
+                            }else{
+//                                MyLog.i(TAG,"all鏀寔鏇茬嚎");
+                                map_other = new double[xys.size()/2][2];
+                                for (int k=0; k<xys.size();k++){
+                                    if ((k % 2) == 0) {
+                                        map_other[map_line_other][0] = xys.get(k);
+                                    } else {
+                                        double value = 0 - xys.get(k);
+                                        map_other[map_line_other][1] = value;
+                                        map_line_other++;
+                                    }
+                                }
                             }
+
+
+
                         }
 
+
+                    }
+                    DrawMapAll(mainAnt,allMap,car,body,tire);
+                }else{
+                    for (int i = 0; i < examMaps.size(); i++) {
+                        ExamMap examMap = examMaps.get(i);
+                        if (map_id == examMap.getId()){
+                            List<ExamMap.PointBean> pointBeanList = examMap.getPoint();
+
+                            for(int j=0; j<pointBeanList.size();j++){
+                                List<Double> xys = pointBeanList.get(j).getXy();
+                                if(j==0){
+                                    map = new double[xys.size()/2][2];
+
+
+
+                                    for (int k=0; k<xys.size();k++){
+                                        if ((k % 2) == 0) {
+                                            map[map_line][0] = xys.get(k);
+                                        } else {
+                                            double value = 0 - xys.get(k);
+                                            Log.i(TAG, "onCEvent: map鏂板��=" + value + " 浣嶇疆锛�" + k);
+                                            map[map_line][1] = value;
+                                            map_line++;
+                                        }
+                                    }
+                                }else{
+                                    MyLog.i(TAG,"鏆傛椂鏀寔鏇茬嚎");
+                                    map_other = new double[xys.size()/2][2];
+                                    for (int k=0; k<xys.size();k++){
+                                        if ((k % 2) == 0) {
+                                            map_other[map_line_other][0] = xys.get(k);
+                                        } else {
+                                            double value = 0 - xys.get(k);
+                                            map_other[map_line_other][1] = value;
+                                            map_line_other++;
+                                        }
+                                    }
+                                    break;
+                                }
+
+
+
+                            }
+                            break;
+                        }
+                    }
+
                     DrawMap(mainAnt, map, car, body, tire);
                 }
+
+                }
             }
         }
     }
diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java
index aa3634f..21612d1 100644
--- a/app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java
+++ b/app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java
@@ -70,6 +70,8 @@
 import safeluck.drive.evaluation.util.Utils;
 import safeluck.drive.evaluation.worker.TimeWorker;
 
+import static androidx.work.PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS;
+
 /**
  * 鑱旂綉璁粌UI
  * MyApplication2
@@ -209,6 +211,7 @@
                                     return getResources().getColor(R.color.colorAccent);
                                 }else{
                                     ExamPlatformData.getInstance().getTTS().speak("鏇茬嚎琛岄┒鍚堟牸");
+                                    examStatusViewModel.updateItemExamResult(1,examStatus.getMap_id());
                                     return getResources().getColor(R.color.train_btn_return);
                                 }
                             case 5:
@@ -268,7 +271,7 @@
                     if (currTotalScore < Constant.PASSING_SCORE){
                         MyLog.i("浣庝簬80锛屼笉鍚堟牸"+currTotalScore);
                         ExamPlatformData.getInstance().getTTS().speak("鑰冭瘯涓嶅悎鏍�");
-                        stopExam();
+//                        stopExam();
                     }
                     MyLog.i("鐩戞祴鍒版湁澶辫触椤圭洰鍔犲叆锛岄�氱煡UI鏇存柊棰滆壊");
                     mHandler.obtainMessage(ADD_DATA).sendToTarget();
@@ -466,7 +469,7 @@
         tv_network_time = view.findViewById(R.id.network_time);
 
 
-        PeriodicWorkRequest periodicWorkRequest = new PeriodicWorkRequest.Builder(TimeWorker.class,30, TimeUnit.SECONDS).build();
+        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>() {
diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java
index cdb728b..e0031b7 100644
--- a/app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java
+++ b/app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java
@@ -1,10 +1,14 @@
 package safeluck.drive.evaluation.fragment;
 
+import android.app.AlarmManager;
+import android.app.PendingIntent;
 import android.content.Context;
+import android.content.Intent;
 import android.os.Bundle;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.core.app.AlarmManagerCompat;
 import androidx.lifecycle.Observer;
 import androidx.lifecycle.ViewModelProviders;
 import androidx.work.OneTimeWorkRequest;
@@ -12,6 +16,7 @@
 
 import android.os.Handler;
 import android.os.Message;
+import android.os.SystemClock;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.LayoutInflater;
@@ -74,6 +79,8 @@
 public class TrainFragment extends SupportFragment implements View.OnClickListener {
 
     private static final String TAG = TrainFragment.class.getSimpleName();
+    private static final int REQUEST_CODE = 1000;
+    private static final String ALARM_ACTION_CODE = "com.anyun.alermbroadcast";
 
     public static SupportFragment newInstance() {
         return new TrainFragment();
@@ -444,6 +451,14 @@
 
     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);
         av_park = view.findViewById(R.id.av2);
diff --git a/app/src/main/res/layout/layout_net_train.xml b/app/src/main/res/layout/layout_net_train.xml
index 4cf1317..dc13c9d 100644
--- a/app/src/main/res/layout/layout_net_train.xml
+++ b/app/src/main/res/layout/layout_net_train.xml
@@ -44,7 +44,7 @@
         <TextView
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:text="鍛煎彨璇锋眰"
+            android:text="缁撴潫鑰冭瘯"
             android:id="@+id/tv_stop"
             android:textColor="@android:color/white"
             android:padding="10dp"

--
Gitblit v1.8.0