From de1edc7ad9dec23564e13c600683a2140965661e Mon Sep 17 00:00:00 2001
From: lizhanwei <Dana_Lee1016@126.com>
Date: 星期一, 16 三月 2020 13:44:48 +0800
Subject: [PATCH] 优化app.java代码,防止RTK配置发两次;MCU协处理器升级以Worker的形势进行,防止多个入口升级,升级之后会删除dfu.bin,加入dfu.bin不存在的话给出提示;

---
 app/src/main/java/safeluck/drive/evaluation/Constant.java                         |    2 
 app/src/main/java/safeluck/drive/evaluation/app.java                              |   12 ++
 app/src/main/java/safeluck/drive/evaluation/MainActivity.java                     |   34 --------
 app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusOutWorker.kt |    2 
 app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java           |   14 ---
 app/src/main/java/safeluck/drive/evaluation/worker/MCUUpgradeWorker.kt            |   36 +++++++++
 im_lib/src/main/java/com/safeluck/aykj/message/BinMessageBase.java                |    2 
 app/src/main/java/safeluck/drive/evaluation/viewmodels/TimeViewModel.kt           |   39 +++++++++
 app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java    |   15 ---
 app/src/main/java/safeluck/drive/evaluation/fragment/SetArgumentsFragment.java    |   32 ++++---
 10 files changed, 107 insertions(+), 81 deletions(-)

diff --git a/app/src/main/java/safeluck/drive/evaluation/Constant.java b/app/src/main/java/safeluck/drive/evaluation/Constant.java
index 4b9d253..f91b4ad 100644
--- a/app/src/main/java/safeluck/drive/evaluation/Constant.java
+++ b/app/src/main/java/safeluck/drive/evaluation/Constant.java
@@ -92,4 +92,6 @@
     public static int DaoLu = 4;
     @NotNull
     public static final String TIME_MINUTE = "show_time_minute";
+    @NotNull
+    public static final String MCU_UPGRADE_FAIL_RESASON = "mcu_upgrade_fail_reason";
 }
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 31824e3..fca1875 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
@@ -35,7 +35,7 @@
         }
         var indexs = WorkRoomDataBase.getWorkRoomDataBase(applicationContext).signalConfigDao.allIndexs
         sendSignalConfigsToRemote(indexs)
-        MyLog.i("鏌ュ埌鐨勮�冭瘯type="+examType)
+        MyLog.i(TAG,"鏌ュ埌鐨勮�冭瘯type="+examType)
         val data = Data.Builder().putInt(Constant.EXAM_STATUS_TYPE,examType).build()
         if (examType != safeluck.drive.evaluation.Constant.NONE_BEEN_START_EXAM) {
             try {
diff --git a/app/src/main/java/safeluck/drive/evaluation/MainActivity.java b/app/src/main/java/safeluck/drive/evaluation/MainActivity.java
index f7124bb..3526318 100644
--- a/app/src/main/java/safeluck/drive/evaluation/MainActivity.java
+++ b/app/src/main/java/safeluck/drive/evaluation/MainActivity.java
@@ -77,15 +77,12 @@
     private Gson gson = new Gson();
     String[] PERMISSIONS = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA};
     RTKConfigViewModel rtkConfigViewModel;
-    private boolean onlySendOnceRTKConfig = true;
 
 
     private ICEventListener icEventListener = new ICEventListener() {
         @Override
         public void onCEvent(String topic, int msgCode, int resultCode, Object obj) {
-            if (msgCode == Constant.FETCH_RTK_PLATFORM_INFO) {
-//              sendRtkConfigInfo();
-            }
+
             if (msgCode == Constant.RTK_PLATFORM_REGISTER_STATUS) {
                 try {
                     JSONObject jsonObject = new JSONObject((String) obj);
@@ -103,11 +100,7 @@
                     e.printStackTrace();
                 }
             }
-            if (msgCode == Constant.NDK_START){
-                MyLog.i(TAG,"NDK_start");
-//                sendRtkConfigInfo();
-                sendMcuUprgrade();
-            }
+
         }
     };
     private List<SignalConfigRemote> signalConfiglist = new ArrayList<>();
@@ -136,27 +129,6 @@
 
     }
 
-//    private void sendRtkConfigInfo() {
-//        if (mRTKConfig != null) {
-//            String rtkjson = gson.toJson(mRTKConfig);
-//
-//            //鍘婚櫎id瀛楁
-//            JSONObject jsonObject = null;
-//            try {
-//                jsonObject = new JSONObject(rtkjson);
-//            } catch (JSONException e) {
-//                e.printStackTrace();
-//            }
-//            jsonObject.remove("_id");
-//            rtkjson = null;
-//            rtkjson = jsonObject.toString();
-//            MyLog.i(TAG, "RTK閰嶇疆淇℃伅锛�" + rtkjson);
-//            AYSdk.getInstance().sendCmd(Constant.PUSH_RTK_PLATFORM_INFO, rtkjson);
-//        } else {
-//            MyLog.d(TAG, "RTKConfig鏈彇鍒版暟鎹�");
-//            onlySendOnceRTKConfig = true;
-//        }
-//    }
 public ExamPlatformModel examPlatformModel;
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -267,7 +239,6 @@
             loadRootFragment(R.id.fl_container, HomeFragment.newInstance());
         }
 
-        CEventCenter.onBindEvent(true, icEventListener, Constant.BIND_RTKCONFIG_TOPIC);//鍙戦�乺tk閰嶇疆娑堟伅
         CEventCenter.onBindEvent(true, icEventListener, Constant.BIND_CONNECT_RTK_TOPIC);//鏀跺埌rtk杩炴帴 鐧诲綍缁撴灉
 
     }
@@ -275,7 +246,6 @@
     @Override
     protected void onDestroy() {
         super.onDestroy();
-        CEventCenter.onBindEvent(false, icEventListener, Constant.BIND_RTKCONFIG_TOPIC);
 
         CEventCenter.onBindEvent(false, icEventListener, Constant.BIND_CONNECT_RTK_TOPIC);
         Log.i(TAG, "onDestroy: ");
diff --git a/app/src/main/java/safeluck/drive/evaluation/app.java b/app/src/main/java/safeluck/drive/evaluation/app.java
index f6cea14..f3c0e31 100644
--- a/app/src/main/java/safeluck/drive/evaluation/app.java
+++ b/app/src/main/java/safeluck/drive/evaluation/app.java
@@ -64,6 +64,7 @@
 import safeluck.drive.evaluation.util.FileUtil;
 import safeluck.drive.evaluation.util.SPUtils;
 import safeluck.drive.evaluation.util.SystemUtil;
+import safeluck.drive.evaluation.worker.MCUUpgradeWorker;
 
 /**
  * MyApplication2
@@ -159,11 +160,12 @@
                 sendVechileInfo();
                 sendMapInfo();
                 OneTimeWorkRequest examStatausOutWorker = OneTimeWorkRequest.from(ExamStatusOutWorker.class);
-                WorkManager.getInstance(getApplicationContext()).enqueue(examStatausOutWorker);
+                OneTimeWorkRequest mcuUpgradeWorker = OneTimeWorkRequest.from(MCUUpgradeWorker.class);
+                WorkManager.getInstance(getApplicationContext()).beginWith(examStatausOutWorker).then(mcuUpgradeWorker).enqueue();
 
 
 
-                CEventCenter.dispatchEvent(Constant.BIND_CONNECT_RTK_TOPIC,cmd,0,json);
+//                CEventCenter.dispatchEvent(Constant.BIND_CONNECT_RTK_TOPIC,cmd,0,json);
                 break;
             case Constant.RTK_PLATFORM_REGISTER_STATUS:
                 CEventCenter.dispatchEvent(Constant.BIND_CONNECT_RTK_TOPIC,cmd,0,json);
@@ -182,7 +184,7 @@
 
                 break;
             case Constant.FETCH_RTK_PLATFORM_INFO:
-                CEventCenter.dispatchEvent(Constant.BIND_RTKCONFIG_TOPIC,cmd,0,"");
+//                CEventCenter.dispatchEvent(Constant.BIND_RTKCONFIG_TOPIC,cmd,0,"");
                 break;
             case Constant.JUDGE_INFO:
 
@@ -294,6 +296,10 @@
                 if (sn.equalsIgnoreCase(lastSn)){
 
                 }else{
+                    if (TextUtils.isEmpty(lastSn)){
+                        lastSn =sn;
+                        return;
+                    }
                     lastSn = sn;
                     Data data = new Data.Builder().putString(safeluck.drive.evaluation.DB.Constant.RTK_CONFIG_UPDATE_JSON,sn).build();
                     OneTimeWorkRequest rtkConfigUpdateWorker= new OneTimeWorkRequest.Builder(RTKConfigUpdateWorker.class).setInputData(data).build();
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 b51e494..898d708 100644
--- a/app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java
+++ b/app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java
@@ -460,21 +460,6 @@
         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));
diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/SetArgumentsFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/SetArgumentsFragment.java
index e08042c..9e6f492 100644
--- a/app/src/main/java/safeluck/drive/evaluation/fragment/SetArgumentsFragment.java
+++ b/app/src/main/java/safeluck/drive/evaluation/fragment/SetArgumentsFragment.java
@@ -20,6 +20,9 @@
 import androidx.lifecycle.ViewModelProviders;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
+import androidx.work.Data;
+import androidx.work.OneTimeWorkRequest;
+import androidx.work.WorkInfo;
 import androidx.work.WorkManager;
 
 import com.anyun.exam.lib.AYSdk;
@@ -56,6 +59,7 @@
 import safeluck.drive.evaluation.util.CThreadPoolExecutor;
 import safeluck.drive.evaluation.util.FileUtil;
 import safeluck.drive.evaluation.util.SPUtils;
+import safeluck.drive.evaluation.worker.MCUUpgradeWorker;
 
 /**
  * 璁剧疆鎵�鏈夊弬鏁�
@@ -188,21 +192,19 @@
             case R.id.btn_mcu_upgrade:
 
 
-
-                try {
-                    byte[] datas = FileUtil.readLocalFile(getActivity(),"dfu.bin");
-                    if (datas != null){
-                        Log.i(TAG, ByteUtil.byte2hex(datas));
-
-                        String strs = new String(datas, Charset.forName("ISO-8859-1"));
-                        Log.i(TAG, "onClick: datas.legnth=="+strs.getBytes("ISO-8859-1").length);
-                        AYSdk.getInstance().sendCmd(Constant.UPGRADE_MCU_CONTENT_FILE, strs);
-                    }else{
-                        MyLog.i(TAG,"mcu鍗囩骇鏂囦欢涓嶅瓨鍦�");
-                    }
-                } catch (IOException e) {
-                    e.printStackTrace();
-                }
+                OneTimeWorkRequest mcuUpgradeWorkReq = OneTimeWorkRequest.from(MCUUpgradeWorker.class);
+                WorkManager.getInstance(_mActivity.getApplicationContext()).enqueue(mcuUpgradeWorkReq);
+                WorkManager.getInstance(_mActivity.getApplicationContext()).getWorkInfoByIdLiveData(mcuUpgradeWorkReq.getId())
+                        .observe(this, new Observer<WorkInfo>() {
+                            @Override
+                            public void onChanged(WorkInfo workInfo) {
+                                if (workInfo.getState()== WorkInfo.State.FAILED){
+                                    Data data = workInfo.getOutputData();
+                                    String str = data.getString(Constant.MCU_UPGRADE_FAIL_RESASON);
+                                    Toast.makeText(_mActivity, str, Toast.LENGTH_SHORT).show();
+                                }
+                            }
+                        });
                 break;
             case R.id.btn_save_platform:
                 Toast.makeText(_mActivity, "淇濆瓨鎴愬姛", Toast.LENGTH_SHORT).show();
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 f237d16..917fc2c 100644
--- a/app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java
+++ b/app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java
@@ -467,20 +467,6 @@
         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));
diff --git a/app/src/main/java/safeluck/drive/evaluation/viewmodels/TimeViewModel.kt b/app/src/main/java/safeluck/drive/evaluation/viewmodels/TimeViewModel.kt
index 15a0f42..a521a1a 100644
--- a/app/src/main/java/safeluck/drive/evaluation/viewmodels/TimeViewModel.kt
+++ b/app/src/main/java/safeluck/drive/evaluation/viewmodels/TimeViewModel.kt
@@ -1,2 +1,41 @@
 package safeluck.drive.evaluation.viewmodels
 
+import android.util.Log
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+import safeluck.drive.evaluation.util.Utils
+
+class TimeViewModel : ViewModel() {
+    val TAG:String = "TimeViewModel"
+    private var time:MutableLiveData<String> = MutableLiveData<String>()
+    private var flag=true
+    fun getLiveDataTime():LiveData<String> {
+        loadTime();
+        return time
+    }
+
+    private fun loadTime() {
+
+        Thread(Runnable {
+            while (flag){
+                try {
+                    Thread.sleep(10 * 1000.toLong())
+                } catch (e: InterruptedException) {
+                    e.printStackTrace()
+                }
+                Log.i(TAG,"10s鏃堕棿鍒�")
+                time.postValue(Utils.getHHmm())
+            }
+
+
+        }).start()
+    }
+
+    override fun onCleared() {
+        Log.i(TAG,"onCleared")
+        flag = false;
+    }
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/safeluck/drive/evaluation/worker/MCUUpgradeWorker.kt b/app/src/main/java/safeluck/drive/evaluation/worker/MCUUpgradeWorker.kt
new file mode 100644
index 0000000..6f293b2
--- /dev/null
+++ b/app/src/main/java/safeluck/drive/evaluation/worker/MCUUpgradeWorker.kt
@@ -0,0 +1,36 @@
+package safeluck.drive.evaluation.worker
+
+import android.content.Context
+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 safeluck.drive.evaluation.Constant
+import safeluck.drive.evaluation.util.FileUtil
+import java.io.IOException
+import java.nio.charset.Charset
+
+class MCUUpgradeWorker(context: Context, workerParams: WorkerParameters) : Worker(context, workerParams){
+    override fun doWork(): Result {
+        MyLog.i("鍗囩骇鍗曠墖鏈�")
+
+        try {
+            val datas = FileUtil.readLocalFile(applicationContext, "dfu.bin")
+            if (datas != null) {
+                val strs = String(datas, Charset.forName("ISO-8859-1"))
+                AYSdk.getInstance().sendCmd(Constant.UPGRADE_MCU_CONTENT_FILE, strs)
+                FileUtil.deleteFile("",Constant.MCU_FILE_NAME);
+            } else {
+
+                MyLog.i( "mcu鍗囩骇鏂囦欢涓嶅瓨鍦�")
+                var data = Data.Builder().putString(Constant.MCU_UPGRADE_FAIL_RESASON,"mcu鍗囩骇鏂囦欢涓嶅瓨鍦�").build()
+                return Result.failure(data);
+            }
+        } catch (e: IOException) {
+            e.printStackTrace()
+        }
+        return Result.success()
+    }
+
+}
\ No newline at end of file
diff --git a/im_lib/src/main/java/com/safeluck/aykj/message/BinMessageBase.java b/im_lib/src/main/java/com/safeluck/aykj/message/BinMessageBase.java
index a363991..6a75fe0 100644
--- a/im_lib/src/main/java/com/safeluck/aykj/message/BinMessageBase.java
+++ b/im_lib/src/main/java/com/safeluck/aykj/message/BinMessageBase.java
@@ -62,7 +62,7 @@
                 }
                 //鍔ㄦ�侀暱搴︼紝鍘绘帀鍏朵粬鎵�鏈夊瓧娈电殑闀垮害锛屽墿浣欑殑涓烘瀛楁闀垮害
                 if (fieldDefine.getFieldLen() > 0) {
-                    System.out.println(fieldDefine.field.getName() + "闀垮害=" + fieldDefine.getFieldLen() * 2);
+//                    System.out.println(fieldDefine.field.getName() + "闀垮害=" + fieldDefine.getFieldLen() * 2);
                     used += (fieldDefine.getFieldLen() * 2);
                 }
 

--
Gitblit v1.8.0