From 43b244f4c5450ce650190ec5f6e4c54b43d11acb Mon Sep 17 00:00:00 2001
From: lizhanwei <Dana_Lee1016@126.com>
Date: 星期日, 16 二月 2020 16:58:48 +0800
Subject: [PATCH] 1.增减Sharedpreference文件读写封装类;2.增加信号配置数据库(需要卸载重新安装app);3.增加发送信号配置命令(0x8008)

---
 app/src/main/java/safeluck/drive/evaluation/Constant.java                                 |    2 
 app/src/main/java/safeluck/drive/evaluation/util/SPUtils.java                             |  196 ++++++++++++
 app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigWorkRepo.java   |   66 ++++
 app/src/main/java/safeluck/drive/evaluation/util/Utils.java                               |    5 
 app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigInitWorker.java |   49 +++
 app/src/main/assets/signal_config_file.json                                               |  115 +++++++
 app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigDao.java        |   33 ++
 app/src/main/java/safeluck/drive/evaluation/app.java                                      |    3 
 app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SingalConfig.java           |   56 +++
 app/src/main/java/safeluck/drive/evaluation/bean/SignalConfigRemote.java                  |   41 ++
 app/src/main/java/safeluck/drive/evaluation/fragment/SignalConfigFragment.java            |  269 +++++++++++++---
 app/src/main/java/safeluck/drive/evaluation/DB/WorkRoomDataBase.java                      |    9 
 app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigViewModel.java  |   43 ++
 app/src/main/java/safeluck/drive/evaluation/fragment/TcpFragment.java                     |   14 
 14 files changed, 843 insertions(+), 58 deletions(-)

diff --git a/app/src/main/assets/signal_config_file.json b/app/src/main/assets/signal_config_file.json
new file mode 100644
index 0000000..0e54036
--- /dev/null
+++ b/app/src/main/assets/signal_config_file.json
@@ -0,0 +1,115 @@
+[
+
+  {
+    "signalName": "瀹夊叏甯�",
+    "index":1,
+    "id":0,
+    "highLevel":2,
+    "mainBoard":2
+  },
+  {
+    "signalName": "宸﹁浆鍚�",
+    "index":2,
+    "id":1,
+    "highLevel":2,
+    "mainBoard":2
+  },
+  {
+    "signalName": "鍙宠浆鍚�",
+    "index":3,
+    "id":2,
+    "highLevel":2,
+    "mainBoard":2
+  },
+  {
+    "signalName": "鎵嬪埞",
+    "index":4,
+    "id":3,
+    "highLevel":2,
+    "mainBoard":2
+  },
+  {
+    "signalName": "鑴氬埞",
+    "index":5,
+    "id":4,
+    "highLevel":2,
+    "mainBoard":2
+  },
+  {
+    "signalName": "杩戝厜鐏�",
+    "index":6,
+    "id":5,
+    "highLevel":2,
+    "mainBoard":2
+  },
+  {
+    "signalName": "杩滃厜鐏�",
+    "index":7,
+    "id":6,
+    "highLevel":2,
+    "mainBoard":2
+  },
+  {
+    "signalName": "闂ㄩ攣",
+    "index":8,
+    "id":7,
+    "highLevel":2,
+    "mainBoard":2
+  },
+  {
+    "signalName": "绌烘尅",
+    "index":9,
+    "id":8,
+    "highLevel":2,
+    "mainBoard":2
+  },
+  {
+    "signalName": "1妗�",
+    "index":10,
+    "id":9,
+    "highLevel":2,
+    "mainBoard":2
+  },
+  {
+    "signalName": "2妗�",
+    "index":11,
+    "id":10,
+    "highLevel":2,
+    "mainBoard":2
+  },
+  {
+    "signalName": "3妗�",
+    "index":12,
+    "id":11,
+    "highLevel":2,
+    "mainBoard":2
+  },
+  {
+    "signalName": "4妗�",
+    "index":13,
+    "id":12,
+    "highLevel":2,
+    "mainBoard":2
+  },
+  {
+    "signalName": "5妗�",
+    "index":14,
+    "id":13,
+    "highLevel":2,
+    "mainBoard":2
+  },
+  {
+    "signalName": "鍊掓。",
+    "index":15,
+    "id":14,
+    "highLevel":2,
+    "mainBoard":2
+  },
+  {
+    "signalName": "START浣�",
+    "index":1,
+    "id":15,
+    "highLevel":0,
+    "mainBoard":2
+  }
+]
\ No newline at end of file
diff --git a/app/src/main/java/safeluck/drive/evaluation/Constant.java b/app/src/main/java/safeluck/drive/evaluation/Constant.java
index 9679ed8..cfd1242 100644
--- a/app/src/main/java/safeluck/drive/evaluation/Constant.java
+++ b/app/src/main/java/safeluck/drive/evaluation/Constant.java
@@ -73,5 +73,7 @@
     public static final String BIND_DEBUG_TXT = "BIND_DEBUG_TXT";
     public static final int UPGRADE_MCU_CONTENT_FILE = 0x8100;
     public static final String MCU_FILE_NAME = "dfu.bin";
+    public static final int MCU_SN = 8;
+    public static final int SEND_CONFIG_SIGNAL = 0x8008;
     public static String exam_enter_exitdata="exam_enter_exitdata";
 }
diff --git a/app/src/main/java/safeluck/drive/evaluation/DB/WorkRoomDataBase.java b/app/src/main/java/safeluck/drive/evaluation/DB/WorkRoomDataBase.java
index e7893da..82e3040 100644
--- a/app/src/main/java/safeluck/drive/evaluation/DB/WorkRoomDataBase.java
+++ b/app/src/main/java/safeluck/drive/evaluation/DB/WorkRoomDataBase.java
@@ -35,6 +35,9 @@
 import safeluck.drive.evaluation.DB.rtktb.RTKConfig;
 import safeluck.drive.evaluation.DB.rtktb.RTKConfigDao;
 import safeluck.drive.evaluation.DB.rtktb.RTKConfigWork;
+import safeluck.drive.evaluation.DB.signalConfigdb.SignalConfigDao;
+import safeluck.drive.evaluation.DB.signalConfigdb.SignalConfigInitWorker;
+import safeluck.drive.evaluation.DB.signalConfigdb.SingalConfig;
 
 
 /**
@@ -43,7 +46,7 @@
  * 閭锛�632393724@qq.com
  * All Rights Saved! Chongqing AnYun Tech co. LTD
  */
-@Database(entities = {Student.class, CriteriaForI.class, FailedProj.class, CriteriaForII.class, RTKConfig.class, GPSInfo.class, AppStatus.class, ExamStatus.class},version = 1,exportSchema = false)
+@Database(entities = {Student.class, CriteriaForI.class, FailedProj.class, CriteriaForII.class, RTKConfig.class, GPSInfo.class, AppStatus.class, ExamStatus.class, SingalConfig.class},version = 1,exportSchema = false)
 public abstract class WorkRoomDataBase extends RoomDatabase {
     private static final String TAG = "WorkRoomDataBase";
     public abstract StudentDao getstudentDao();
@@ -86,6 +89,7 @@
                                     OneTimeWorkRequest RTKConfigWorkRequest = OneTimeWorkRequest.from(RTKConfigWork.class);
                                     OneTimeWorkRequest appStatusInitWork = OneTimeWorkRequest.from(AppStatusInitWork.class);
                                     OneTimeWorkRequest examStatusInitWorker = OneTimeWorkRequest.from(ExamStatusInitWorker.class);
+                                    OneTimeWorkRequest signalConigInitWorker = OneTimeWorkRequest.from(SignalConfigInitWorker.class);
                                     Log.i(TAG, "onCreate: 鍒涘缓鏁版嵁搴撳悗寤虹珛鏁版嵁琛ㄦ彃鍏ユ暟鎹�");
                                     WorkManager.getInstance(mContext).enqueue(oneTimeWorkRequest);
                                     WorkManager.getInstance(mContext).enqueue(oneTimeWorkRequest1);
@@ -94,6 +98,7 @@
                                     WorkManager.getInstance(mContext).enqueue(RTKConfigWorkRequest);
                                     WorkManager.getInstance(mContext).enqueue(appStatusInitWork);
                                     WorkManager.getInstance(mContext).enqueue(examStatusInitWorker);
+                                    WorkManager.getInstance(mContext).enqueue(signalConigInitWorker);
                                 }
 
                                 @Override
@@ -117,4 +122,6 @@
     public abstract AppStatusDao getAppStatusDao();
 
     public abstract ExamStatusDao getExamStatusDao();
+
+    public abstract SignalConfigDao getSignalConfigDao();
 }
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
new file mode 100644
index 0000000..1f3cabf
--- /dev/null
+++ b/app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigDao.java
@@ -0,0 +1,33 @@
+package safeluck.drive.evaluation.DB.signalConfigdb;
+
+import androidx.lifecycle.LiveData;
+import androidx.room.Dao;
+import androidx.room.Insert;
+import androidx.room.OnConflictStrategy;
+import androidx.room.Query;
+
+import java.util.List;
+@Dao
+public interface SignalConfigDao {
+    @Insert
+    void insert(SingalConfig singalConfig );
+    //璁剧疆id淇″彿鐨勫搴旂殑鐗╃悊绱㈠紩
+    @Query("update signal_config set `index`=:mindex where id =:id ")
+    void updateindex(int mindex,int id);
+    //璁剧疆id淇″彿鐨勫搴旂殑楂樼數骞虫湁鏃犳晥
+    @Query("update signal_config set `highLevel`=:hightLevel where id =:id ")
+    void updateHightlevel(int hightLevel,int id);
+    //璁剧疆id淇″彿鐨勫搴旂殑涓绘澘鏈夋棤鏁�
+    @Query("update signal_config set `mainBoard`=:mainBoard where id =:id ")
+    void updateMainBoard(int mainBoard,int id);
+
+    //鏌ヨ鎵�鏈変俊鍙峰搴旂殑鐗╃悊鎵�寮�
+    @Query("select `index` from signal_config")
+    List<Integer> getAllIndexs();
+
+    @Query("select * from signal_config")
+    LiveData<List<SingalConfig>> getSignalConfigs();
+
+    @Insert(onConflict = OnConflictStrategy.REPLACE)
+    void insertAll(List<SingalConfig> mstus);
+}
diff --git a/app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigInitWorker.java b/app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigInitWorker.java
new file mode 100644
index 0000000..63b07e4
--- /dev/null
+++ b/app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigInitWorker.java
@@ -0,0 +1,49 @@
+package safeluck.drive.evaluation.DB.signalConfigdb;
+
+import android.content.Context;
+
+import androidx.annotation.NonNull;
+import androidx.work.Worker;
+import androidx.work.WorkerParameters;
+
+import com.anyun.exam.lib.MyLog;
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
+import com.google.gson.stream.JsonReader;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.lang.reflect.Type;
+import java.util.List;
+
+import safeluck.drive.evaluation.DB.WorkRoomDataBase;
+
+public class SignalConfigInitWorker extends Worker {
+    private static final String TAG = "SignalConfigInitWorker";
+    public SignalConfigInitWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
+        super(context, workerParams);
+    }
+
+    @NonNull
+    @Override
+    public Result doWork() {
+        MyLog.i(TAG,"淇″彿閰嶇疆琛ㄥ垵濮嬪寲");
+
+        try {
+            InputStream inputStream = getApplicationContext().getAssets().open("signal_config_file.json");
+            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
+            JsonReader jsonReader = new JsonReader(inputStreamReader);
+
+            Gson gson = new Gson();
+            Type type = new TypeToken<List<SingalConfig>>(){}.getType();
+
+            List<SingalConfig> mstus=gson.fromJson(jsonReader,   type);
+            WorkRoomDataBase.getWorkRoomDataBase(getApplicationContext()).getSignalConfigDao().insertAll(mstus);
+        } catch (IOException e) {
+            e.printStackTrace();
+            return Result.failure();
+        }
+        return Result.success();
+    }
+}
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
new file mode 100644
index 0000000..cccb148
--- /dev/null
+++ b/app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigViewModel.java
@@ -0,0 +1,43 @@
+package safeluck.drive.evaluation.DB.signalConfigdb;
+
+import android.app.Application;
+
+import androidx.annotation.NonNull;
+import androidx.lifecycle.AndroidViewModel;
+import androidx.lifecycle.LiveData;
+
+import java.util.List;
+
+public class SignalConfigViewModel extends AndroidViewModel {
+    private LiveData<List<SingalConfig>> signalConfigs;
+    private SignalConfigWorkRepo workRepo;
+
+    public SignalConfigViewModel(@NonNull Application application) {
+        super(application);
+        workRepo = new SignalConfigWorkRepo(application);
+        signalConfigs = workRepo.getSignalConfigs();
+    }
+
+    public void insertSignalConfig(final SingalConfig singalConfig){
+        workRepo.insertSignalConig(singalConfig);
+    }
+
+    public LiveData<List<SingalConfig>> getSignalConfigs(){
+        return signalConfigs;
+    }
+
+    public void updateindex(final int index, final int id){
+       workRepo.updateindex(index,id);
+    }
+    public void updateHightlevel(final int highLevel, final int id){
+        workRepo.updateHightlevel(highLevel,id);
+    }
+    public void updateMainBoard(final int mainboard, final int id){
+        workRepo.updateMainBoard(mainboard,id);
+    }
+    public List<Integer> getAllIndexs(){
+
+        return workRepo.getAllIndexs();
+    }
+
+}
diff --git a/app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigWorkRepo.java b/app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigWorkRepo.java
new file mode 100644
index 0000000..6a9abaa
--- /dev/null
+++ b/app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigWorkRepo.java
@@ -0,0 +1,66 @@
+package safeluck.drive.evaluation.DB.signalConfigdb;
+
+import android.app.Application;
+
+import androidx.lifecycle.LiveData;
+
+import java.util.List;
+
+import safeluck.drive.evaluation.DB.WorkRoomDataBase;
+
+public class SignalConfigWorkRepo {
+    private  SignalConfigDao dao;
+    private LiveData<List<SingalConfig>> signalConfigs;
+
+    protected SignalConfigWorkRepo(Application application) {
+        dao = WorkRoomDataBase.getWorkRoomDataBase(application).getSignalConfigDao();
+        signalConfigs = dao.getSignalConfigs();
+
+    }
+
+    protected void insertSignalConig(final SingalConfig singalConfig){
+        WorkRoomDataBase.dataBaseWriteExecutor.execute(new Runnable() {
+            @Override
+            public void run() {
+                dao.insert(singalConfig);
+            }
+        });
+    }
+
+    protected LiveData<List<SingalConfig>> getSignalConfigs(){
+        return signalConfigs;
+    }
+
+    protected void updateindex(final int index, final int id){
+        WorkRoomDataBase.dataBaseWriteExecutor.execute(new Runnable() {
+            @Override
+            public void run() {
+                dao.updateindex(index,id);
+            }
+        });
+    }
+    protected void updateHightlevel(final int highLevel, final int id){
+        WorkRoomDataBase.dataBaseWriteExecutor.execute(new Runnable() {
+            @Override
+            public void run() {
+                dao.updateHightlevel(highLevel,id);
+            }
+        });
+    }
+    protected void updateMainBoard(final int mainboard, final int id){
+        WorkRoomDataBase.dataBaseWriteExecutor.execute(new Runnable() {
+            @Override
+            public void run() {
+                dao.updateMainBoard(mainboard,id);
+            }
+        });
+    }
+
+    /**
+     * 鏌ヨ鎵�鏈変俊鍙峰搴旂殑鐗╃悊绱㈠紩
+     * @return
+     */
+    protected List<Integer> getAllIndexs(){
+        return    dao.getAllIndexs();
+    }
+}
diff --git a/app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SingalConfig.java b/app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SingalConfig.java
new file mode 100644
index 0000000..07143b5
--- /dev/null
+++ b/app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SingalConfig.java
@@ -0,0 +1,56 @@
+package safeluck.drive.evaluation.DB.signalConfigdb;
+
+import androidx.room.Entity;
+import androidx.room.PrimaryKey;
+
+@Entity(tableName = "signal_config")
+public class SingalConfig {
+    private String signalName;
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    @PrimaryKey
+    private int id;
+    private int index;
+    private int highLevel;//1-楂樼數骞虫湁鏁�
+    private int mainBoard;//1-涓绘澘鏈夋晥
+
+
+    public String getSignalName() {
+        return signalName;
+    }
+
+    public void setSignalName(String signalName) {
+        this.signalName = signalName;
+    }
+
+    public int getIndex() {
+        return index;
+    }
+
+    public void setIndex(int index) {
+        this.index = index;
+    }
+
+    public int getHighLevel() {
+        return highLevel;
+    }
+
+    public void setHighLevel(int highLevel) {
+        this.highLevel = highLevel;
+    }
+
+    public int getMainBoard() {
+        return mainBoard;
+    }
+
+    public void setMainBoard(int mainBoard) {
+        this.mainBoard = mainBoard;
+    }
+}
diff --git a/app/src/main/java/safeluck/drive/evaluation/app.java b/app/src/main/java/safeluck/drive/evaluation/app.java
index 488a002..b1c19f2 100644
--- a/app/src/main/java/safeluck/drive/evaluation/app.java
+++ b/app/src/main/java/safeluck/drive/evaluation/app.java
@@ -3,6 +3,7 @@
 import android.app.Application;
 import android.os.Environment;
 import android.text.TextUtils;
+import android.util.Log;
 import android.widget.Toast;
 
 
@@ -225,6 +226,8 @@
             case Constant.DEBUG_TXT:
                 CEventCenter.dispatchEvent(Constant.BIND_DEBUG_TXT,cmd,0,json);
                 break;
+            case Constant.MCU_SN:
+                break;
 
         }
 
diff --git a/app/src/main/java/safeluck/drive/evaluation/bean/SignalConfigRemote.java b/app/src/main/java/safeluck/drive/evaluation/bean/SignalConfigRemote.java
new file mode 100644
index 0000000..00a4c6d
--- /dev/null
+++ b/app/src/main/java/safeluck/drive/evaluation/bean/SignalConfigRemote.java
@@ -0,0 +1,41 @@
+package safeluck.drive.evaluation.bean;
+
+public class SignalConfigRemote {
+    /**
+     * gpio_num : 0
+     * level : 1
+     * func_id : 2
+     */
+
+    private int gpio_num;
+    private int level;
+    private int func_id;
+
+    public int getGpio_num() {
+        return gpio_num;
+    }
+
+    public void setGpio_num(int gpio_num) {
+        this.gpio_num = gpio_num;
+    }
+
+    public int getLevel() {
+        return level;
+    }
+
+    public void setLevel(int level) {
+        this.level = level;
+    }
+
+    public int getFunc_id() {
+        return func_id;
+    }
+
+    public void setFunc_id(int func_id) {
+        this.func_id = func_id;
+    }
+
+
+
+
+}
diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/SignalConfigFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/SignalConfigFragment.java
index 98b53e5..3261a80 100644
--- a/app/src/main/java/safeluck/drive/evaluation/fragment/SignalConfigFragment.java
+++ b/app/src/main/java/safeluck/drive/evaluation/fragment/SignalConfigFragment.java
@@ -1,14 +1,20 @@
 package safeluck.drive.evaluation.fragment;
 
 import android.content.Context;
+import android.os.AsyncTask;
 import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
 import android.text.Editable;
+import android.text.InputType;
+import android.text.TextUtils;
 import android.text.TextWatcher;
 import android.util.Log;
 import android.view.KeyEvent;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.inputmethod.EditorInfo;
 import android.widget.BaseAdapter;
 
 import android.widget.CheckBox;
@@ -17,18 +23,33 @@
 import android.widget.LinearLayout;
 import android.widget.ListView;
 import android.widget.TextView;
+import android.widget.Toast;
 
 import androidx.annotation.NonNull;
 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.anyun.exam.lib.MyLog;
+import com.google.gson.Gson;
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 import me.yokeyword.fragmentation.SupportFragment;
+import safeluck.drive.evaluation.Constant;
+import safeluck.drive.evaluation.DB.signalConfigdb.SignalConfigViewModel;
+import safeluck.drive.evaluation.DB.signalConfigdb.SingalConfig;
 import safeluck.drive.evaluation.R;
 import safeluck.drive.evaluation.bean.SignalConfigBean;
+import safeluck.drive.evaluation.bean.SignalConfigRemote;
+import safeluck.drive.evaluation.util.Utils;
 
 
 /**
@@ -40,11 +61,35 @@
 public class SignalConfigFragment extends SupportFragment {
 
 
+    private static final int INDEX  = 1;
+    private static final int HIGHLEVEL = 2;
+    private static final int MAINBOARD = 3;
+    private  Handler handler = new Handler(){
+        @Override
+        public void handleMessage(Message msg) {
+            super.handleMessage(msg);
+            int id = msg.arg1;
+            int sig = msg.arg2;
+            switch (msg.what){
+                case INDEX:
+                    signalConfigViewModel.updateindex(sig,id);
+                    break;
+                case HIGHLEVEL:
+                    break;
+                case MAINBOARD:
+                    break;
+            }
+        }
+    };
+
+
     private  List<SignalConfigBean> signalConfiglist =new ArrayList<>();
+    List<SignalConfigRemote> list = new ArrayList<>();//瑕佸彂閫佺粰remoteservice鐨勪俊鍙烽厤缃紝鏈夊彲鑳藉彂涓嶅嚭鍘�
     private Toolbar mToobar;
     private ListView listView;
     private LinearLayout linearLayout;
     private static final String TAG = SignalConfigFragment.class.getSimpleName();
+    SignalConfigViewModel signalConfigViewModel;
     public static SupportFragment newInstance(){
         return new SignalConfigFragment();
     }
@@ -73,24 +118,83 @@
         listView.setLayoutParams(layoutParams);
         linearLayout.addView(listView);
         listView.setDivider(null);
-        MySignalsAdapter mySignalsAdapter = new MySignalsAdapter(_mActivity);
-        signalConfiglist .add(new SignalConfigBean("鍠囧彮","鍙岄棯",true,false,true,false,1,2));
-        signalConfiglist .add(new SignalConfigBean("瀹夊叏甯�","鑴氬埞",false,true,true,false,3,4));
-        signalConfiglist .add(new SignalConfigBean("鐔勭伀","缁曡溅1",false,true,true,false,5,6));
-        signalConfiglist .add(new SignalConfigBean("闂ㄩ攣","缁曡溅2",false,true,true,false,7,8));
-        signalConfiglist .add(new SignalConfigBean("鎵嬪埞","绂诲悎",true,false,true,false,9,10));
-        signalConfiglist .add(new SignalConfigBean("宸﹁浆鍚�","1妗�",false,true,true,false,11,12));
-        signalConfiglist .add(new SignalConfigBean("鍙宠浆鍚�","2妗�",false,true,true,false,13,14));
-        signalConfiglist .add(new SignalConfigBean("杩戝厜鐏�","3妗�",false,true,true,false,15,16));
-        signalConfiglist .add(new SignalConfigBean("杩滃厜鐏�","4妗�",false,true,true,false,17,18));
-        signalConfiglist .add(new SignalConfigBean("闆剧伅","闆ㄥ埛",false,true,true,false,19,20));
-        signalConfiglist .add(new SignalConfigBean("绀哄鐏�","鏃�",false,true,true,false,21,22));
+        final MySignalsAdapter mySignalsAdapter = new MySignalsAdapter(_mActivity);
+
+         signalConfigViewModel = ViewModelProviders.of(this).get(SignalConfigViewModel.class);
+        signalConfigViewModel.getSignalConfigs().observe(this, new Observer<List<SingalConfig>>() {
+            @Override
+            public void onChanged(List<SingalConfig> singalConfigs) {
+                list.clear();
+                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());
+                    list.add(signalConfigRemote);
+                }
+                sendSignalConfigsToRemote();
+                for (int i = 0; i < singalConfigs.size(); i++) {
+
+                    SingalConfig singalConfig = singalConfigs.get(i);
+                    i++;
+                    SingalConfig singalConfig1 = singalConfigs.get(i);
+                    signalConfiglist .add(new SignalConfigBean(singalConfig.getSignalName(),singalConfig1.getSignalName(),singalConfig.getHighLevel()==1?true:false,singalConfig.getMainBoard()==1?true:false,
+                            singalConfig1.getHighLevel()==1?true:false,singalConfig1.getMainBoard()==1?true:false,singalConfig.getIndex(),singalConfig1.getIndex()));
+                    mySignalsAdapter.notifyDataSetChanged();
+                }
+            }
+        });
+
 
 
         listView.setAdapter(mySignalsAdapter);
-        mySignalsAdapter.notifyDataSetChanged();
 
 
+    }
+private Gson gson = new Gson();
+    private void sendSignalConfigsToRemote() {
+      new AsyncTask<Void, Void, List<Integer>>(
+
+        ) {
+            @Override
+            protected List<Integer> doInBackground(Void... voids) {
+                return   signalConfigViewModel.getAllIndexs();
+            }
+
+            @Override
+            protected void onPostExecute(List<Integer> indexs) {
+                if (listContainsSameValue(indexs)){
+                    Log.i(TAG, "sendSignalConfigsToRemote: 鏈夌浉鍚岀殑index锛屼笉鑳藉彂閫�"+gson.toJson(list));
+                    Toast.makeText(_mActivity, "涓嶈兘鏈夌浉鍚岀殑鐗╃悊鎵�寮曪紒", Toast.LENGTH_SHORT).show();
+                }else{
+                    AYSdk.getInstance().sendCmd(Constant.SEND_CONFIG_SIGNAL,gson.toJson(list));
+                }
+            }
+        }.execute();
+
+
+
+    }
+
+
+
+    private boolean listContainsSameValue(List<Integer> indexs) {
+        for (int i = 0; i < indexs.size(); i++) {
+            //鍙互榛樿鏄�0  0涓嶅垽鏂槸鍚︽湁鐩稿悓鐨刬ndex
+            if (indexs.get(i) == 0){
+                continue;
+            }
+           for (int j=i+1;j<indexs.size();j++){
+
+               if (indexs.get(i) == indexs.get(j)){
+                   return true;
+               }
+           }
+        }
+        return false;
     }
 
 
@@ -125,51 +229,15 @@
                 viewHolder = new ViewHolder(convertView);
 
 
-                viewHolder.editText1.addTextChangedListener(new TextWatcher() {
-                    @Override
-                    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
-
-                    }
-
-                    @Override
-                    public void onTextChanged(CharSequence s, int start, int before, int count) {
-
-                    }
-
-                    @Override
-                    public void afterTextChanged(Editable s) {
-                        Log.i(TAG, "et1 afterTextChanged: "+s.toString());
-                        String str = s.toString();
-                        int a = Integer.parseInt(str);
-                        signalConfiglist.get(position).setPort_one(a);
-                    }
-                });
-                viewHolder.editText2.addTextChangedListener(new TextWatcher() {
-                    @Override
-                    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
-
-                    }
-
-                    @Override
-                    public void onTextChanged(CharSequence s, int start, int before, int count) {
-
-                    }
-
-                    @Override
-                    public void afterTextChanged(Editable s) {
-                        Log.i(TAG, "et2 afterTextChanged: "+s.toString());
-                        String str = s.toString();
-                        int a = Integer.parseInt(str);
-                        signalConfiglist.get(position).setPort_two(a);
-                    }
-                });
-
 
                 viewHolder.checkBox3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                     @Override
                     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                         SignalConfigBean signalConfigBean = (SignalConfigBean) viewHolder.checkBox3.getTag();
+
                         signalConfigBean.setThree(isChecked);
+                        signalConfigViewModel.updateHightlevel(isChecked?1:0,position*2+1);
+
                     }
                 });
                 viewHolder.checkBox4.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@@ -177,6 +245,7 @@
                     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                         SignalConfigBean signalConfigBean = (SignalConfigBean) viewHolder.checkBox4.getTag();
                         signalConfigBean.setFour(isChecked);
+
                     }
                 });viewHolder.checkBox2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                     @Override
@@ -189,6 +258,8 @@
                     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                         SignalConfigBean signalConfigBean = (SignalConfigBean) viewHolder.checkBox1.getTag();
                         signalConfigBean.setOne(isChecked);
+                        signalConfigViewModel.updateHightlevel(isChecked?1:0,position*2);
+
                     }
                 });
                 convertView.setTag(viewHolder);
@@ -203,8 +274,11 @@
                 viewHolder.checkBox3.setTag(signalConfiglist.get(position));
                 viewHolder.checkBox4.setTag(signalConfiglist.get(position));
             }
-            viewHolder.editText1.setTag(position);
-            viewHolder.editText2.setTag(position);
+            viewHolder.editText1.setTag(position*2);
+            viewHolder.editText2.setTag((position*2+1));
+
+
+
             final SignalConfigBean signalConfigItem = getItem(position);
             viewHolder.textView1.setText(signalConfigItem.getSignal_name_first());
             viewHolder.textView2.setText(signalConfigItem.getSignal_name_second());
@@ -240,6 +314,76 @@
 
                 editText1 = convertView.findViewById(R.id.et_signal1_port);
                 editText2 = convertView.findViewById(R.id.et_signal2_port);
+                editText1.setInputType(EditorInfo.TYPE_CLASS_NUMBER);
+                editText2.setInputType(EditorInfo.TYPE_CLASS_NUMBER);
+                editText1.setImeOptions(EditorInfo.IME_ACTION_DONE);
+                editText2.setImeOptions(EditorInfo.IME_ACTION_DONE);
+                editText1.setSingleLine();
+                editText2.setSingleLine();
+
+
+                editText1.addTextChangedListener(new TextWatcher() {
+                    @Override
+                    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+
+                    }
+
+                    @Override
+                    public void onTextChanged(CharSequence s, int start, int before, int count) {
+
+                    }
+
+                    @Override
+                    public void afterTextChanged(Editable s) {
+                        int pos = (int) editText1.getTag();
+                        String str = s.toString();
+                        if (!TextUtils.isEmpty(str)&& Utils.isDigital(str)){
+                            int a = Integer.parseInt(str);
+                            if (a== list.get(pos).getGpio_num()){
+
+                            }else{
+                                handler.removeMessages(INDEX);
+                                Message message = Message.obtain();
+                                message.what = INDEX;
+                                message.arg1 = pos;
+                                message.arg2 = a;
+                                handler.sendMessageDelayed(message,1500);
+                            }
+                        }
+                    }
+                });
+                editText2.addTextChangedListener(new TextWatcher() {
+                    @Override
+                    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+
+                    }
+
+                    @Override
+                    public void onTextChanged(CharSequence s, int start, int before, int count) {
+                    }
+
+                    @Override
+                    public void afterTextChanged(Editable s) {
+                        int pos = (int) editText2.getTag();
+                        String str = s.toString();
+                        if (!TextUtils.isEmpty(str)&& Utils.isDigital(str)){
+                            int a = Integer.parseInt(str);
+                            if (a== list.get(pos).getGpio_num()){
+
+                            }else{
+                                handler.removeMessages(INDEX);
+                                Message message = Message.obtain();
+                                message.what = INDEX;
+                                message.arg1 = pos;
+                                message.arg2 = a;
+                                handler.sendMessageDelayed(message,1500);
+                            }
+
+                        }
+                    }
+                });
+
+
 
                 textView1 = convertView.findViewById(R.id.tv_signal_1);
                 textView2 = convertView.findViewById(R.id.tv_signal_2);
@@ -247,6 +391,23 @@
         }
     }
 
+    @Override
+    public void onResume() {
+        super.onResume();
+        Log.i(TAG, "onResume: ");
 
+    }
 
+    @Override
+    public void onStop() {
+        super.onStop();
+        Log.i(TAG, "onStop: ");
+
+    }
+
+    @Override
+    public void onPause() {
+        super.onPause();
+        Log.i(TAG, "onPause: ");
+    }
 }
diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/TcpFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/TcpFragment.java
index 9fef302..0279ebc 100644
--- a/app/src/main/java/safeluck/drive/evaluation/fragment/TcpFragment.java
+++ b/app/src/main/java/safeluck/drive/evaluation/fragment/TcpFragment.java
@@ -21,6 +21,7 @@
 import androidx.work.OneTimeWorkRequest;
 import androidx.work.WorkManager;
 
+import com.anyun.exam.lib.util.ByteUtil;
 import com.anyun.exam.lib.util.Speaker;
 import com.google.android.material.textfield.TextInputEditText;
 
@@ -42,9 +43,11 @@
 import safeluck.drive.evaluation.DB.failitems.FailedProj_select;
 import safeluck.drive.evaluation.DB.gps.GpsInfoWorker;
 import safeluck.drive.evaluation.R;
+import safeluck.drive.evaluation.bean.RegisterMessage;
 import safeluck.drive.evaluation.im.IMSClientBootstrap;
 import safeluck.drive.evaluation.im.MessageProcessor;
 import safeluck.drive.evaluation.tcp.ConnectThread;
+import safeluck.drive.evaluation.util.Utils;
 
 /**
  * MyApplication2
@@ -124,7 +127,8 @@
 
                 String userId = "100002";
                 String token = "token_" + userId;
-                String hosts = "[{\"host\":\"192.168.10.234\", \"port\":8855}]";
+                String hosts = "[{\"host\":\"47.93.80.84\", \"port\":12125}]";
+//                String hosts = "[{\"host\":\"192.168.31.77\", \"port\":12125}]";
 
                 IMSClientBootstrap.getInstance().init(userId,token,hosts,1);
                 break;
@@ -142,8 +146,12 @@
                 //娓呴櫎app_status 琛�
 //                OneTimeWorkRequest oneTimeWorkRequest = new OneTimeWorkRequest.Builder(AppStatusInitWork.class).build();
 //                WorkManager.getInstance(_mActivity).enqueue(oneTimeWorkRequest);
-
-
+                RegisterMessage registerMessage = new RegisterMessage((short)0x802);
+                registerMessage.setCityid((short) 1);
+                registerMessage.setProviceId((short)23);
+                registerMessage.setImei("460123874561");
+                registerMessage.setModel("123");
+                registerMessage.setSn("2019101500000001");
                 break;
         }
     }
diff --git a/app/src/main/java/safeluck/drive/evaluation/util/SPUtils.java b/app/src/main/java/safeluck/drive/evaluation/util/SPUtils.java
new file mode 100644
index 0000000..128f312
--- /dev/null
+++ b/app/src/main/java/safeluck/drive/evaluation/util/SPUtils.java
@@ -0,0 +1,196 @@
+package safeluck.drive.evaluation.util;
+
+
+
+        import java.lang.reflect.InvocationTargetException;
+        import java.lang.reflect.Method;
+        import java.util.Map;
+
+        import android.content.Context;
+        import android.content.SharedPreferences;
+
+public class SPUtils
+{
+    /**
+     * 淇濆瓨鍦ㄦ墜鏈洪噷闈㈢殑鏂囦欢鍚�
+     */
+    public static final String FILE_NAME = "share_data";
+
+    /**
+     * 淇濆瓨鏁版嵁鐨勬柟娉曪紝鎴戜滑闇�瑕佹嬁鍒颁繚瀛樻暟鎹殑鍏蜂綋绫诲瀷锛岀劧鍚庢牴鎹被鍨嬭皟鐢ㄤ笉鍚岀殑淇濆瓨鏂规硶
+     *
+     * @param context
+     * @param key
+     * @param object
+     */
+    public static void put(Context context, String key, Object object)
+    {
+
+        SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
+                Context.MODE_PRIVATE);
+        SharedPreferences.Editor editor = sp.edit();
+
+        if (object instanceof String)
+        {
+            editor.putString(key, (String) object);
+        } else if (object instanceof Integer)
+        {
+            editor.putInt(key, (Integer) object);
+        } else if (object instanceof Boolean)
+        {
+            editor.putBoolean(key, (Boolean) object);
+        } else if (object instanceof Float)
+        {
+            editor.putFloat(key, (Float) object);
+        } else if (object instanceof Long)
+        {
+            editor.putLong(key, (Long) object);
+        } else
+        {
+            editor.putString(key, object.toString());
+        }
+
+        SharedPreferencesCompat.apply(editor);
+    }
+
+    /**
+     * 寰楀埌淇濆瓨鏁版嵁鐨勬柟娉曪紝鎴戜滑鏍规嵁榛樿鍊煎緱鍒颁繚瀛樼殑鏁版嵁鐨勫叿浣撶被鍨嬶紝鐒跺悗璋冪敤鐩稿浜庣殑鏂规硶鑾峰彇鍊�
+     *
+     * @param context
+     * @param key
+     * @param defaultObject
+     * @return
+     */
+    public static Object get(Context context, String key, Object defaultObject)
+    {
+        SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
+                Context.MODE_PRIVATE);
+
+        if (defaultObject instanceof String)
+        {
+            return sp.getString(key, (String) defaultObject);
+        } else if (defaultObject instanceof Integer)
+        {
+            return sp.getInt(key, (Integer) defaultObject);
+        } else if (defaultObject instanceof Boolean)
+        {
+            return sp.getBoolean(key, (Boolean) defaultObject);
+        } else if (defaultObject instanceof Float)
+        {
+            return sp.getFloat(key, (Float) defaultObject);
+        } else if (defaultObject instanceof Long)
+        {
+            return sp.getLong(key, (Long) defaultObject);
+        }
+
+        return null;
+    }
+
+    /**
+     * 绉婚櫎鏌愪釜key鍊煎凡缁忓搴旂殑鍊�
+     * @param context
+     * @param key
+     */
+    public static void remove(Context context, String key)
+    {
+        SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
+                Context.MODE_PRIVATE);
+        SharedPreferences.Editor editor = sp.edit();
+        editor.remove(key);
+        SharedPreferencesCompat.apply(editor);
+    }
+
+    /**
+     * 娓呴櫎鎵�鏈夋暟鎹�
+     * @param context
+     */
+    public static void clear(Context context)
+    {
+        SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
+                Context.MODE_PRIVATE);
+        SharedPreferences.Editor editor = sp.edit();
+        editor.clear();
+        SharedPreferencesCompat.apply(editor);
+    }
+
+    /**
+     * 鏌ヨ鏌愪釜key鏄惁宸茬粡瀛樺湪
+     * @param context
+     * @param key
+     * @return
+     */
+    public static boolean contains(Context context, String key)
+    {
+        SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
+                Context.MODE_PRIVATE);
+        return sp.contains(key);
+    }
+
+    /**
+     * 杩斿洖鎵�鏈夌殑閿�煎
+     *
+     * @param context
+     * @return
+     */
+    public static Map<String, ?> getAll(Context context)
+    {
+        SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
+                Context.MODE_PRIVATE);
+        return sp.getAll();
+    }
+
+    /**
+     * 鍒涘缓涓�涓В鍐砈haredPreferencesCompat.apply鏂规硶鐨勪竴涓吋瀹圭被
+     *
+     * @author zhy
+     *
+     */
+    private static class SharedPreferencesCompat
+    {
+        private static final Method sApplyMethod = findApplyMethod();
+
+        /**
+         * 鍙嶅皠鏌ユ壘apply鐨勬柟娉�
+         *
+         * @return
+         */
+        @SuppressWarnings({ "unchecked", "rawtypes" })
+        private static Method findApplyMethod()
+        {
+            try
+            {
+                Class clz = SharedPreferences.Editor.class;
+                return clz.getMethod("apply");
+            } catch (NoSuchMethodException e)
+            {
+            }
+
+            return null;
+        }
+
+        /**
+         * 濡傛灉鎵惧埌鍒欎娇鐢╝pply鎵ц锛屽惁鍒欎娇鐢╟ommit
+         *
+         * @param editor
+         */
+        public static void apply(SharedPreferences.Editor editor)
+        {
+            try
+            {
+                if (sApplyMethod != null)
+                {
+                    sApplyMethod.invoke(editor);
+                    return;
+                }
+            } catch (IllegalArgumentException e)
+            {
+            } catch (IllegalAccessException e)
+            {
+            } catch (InvocationTargetException e)
+            {
+            }
+            editor.commit();
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/safeluck/drive/evaluation/util/Utils.java b/app/src/main/java/safeluck/drive/evaluation/util/Utils.java
index f6054f2..6231097 100644
--- a/app/src/main/java/safeluck/drive/evaluation/util/Utils.java
+++ b/app/src/main/java/safeluck/drive/evaluation/util/Utils.java
@@ -99,4 +99,9 @@
         }
         return temp;
     }
+
+    public static boolean isDigital(String str) {
+        String regx= "^\\d+";
+        return str.matches(regx);
+    }
 }

--
Gitblit v1.8.0