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/fragment/SignalConfigFragment.java |  269 +++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 215 insertions(+), 54 deletions(-)

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: ");
+    }
 }

--
Gitblit v1.8.0