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不判断是否有相同的index
            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: ");
    }
}