lizhanwei
2020-05-14 8735b56eefde751618c819f5b331a56a62274a5c
app/src/main/java/safeluck/drive/evaluation/fragment/SignalConfigFragment.java
@@ -1,55 +1,41 @@
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.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
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.AppCompatSpinner;
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.WorkRoomDataBase;
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;
import safeluck.drive.evaluation.util.CThreadPoolExecutor;
/**
@@ -64,27 +50,14 @@
    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 ArrayAdapter adapter1;
    private ArrayAdapter adapter2;
    private String[] arr_strs;
    private  List<SignalConfigBean> signalConfiglist =new ArrayList<>();
    List<SignalConfigRemote> list = new ArrayList<>();//要发送给remoteservice的信号配置,有可能发不出去
    List<SingalConfig> list = new ArrayList<>();//要发送给remoteservice的信号配置,有可能发不出去
    private Toolbar mToobar;
    private ListView listView;
    private LinearLayout linearLayout;
@@ -102,48 +75,32 @@
    }
    private void initView(View view) {
        arr_strs = getResources().getStringArray(R.array.signals_name);
        mToobar = view.findViewById(R.id.toolbar);
        mToobar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_arrow_back_white_24dp,null));
        linearLayout = view.findViewById(R.id.ll_container);
        mToobar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                _mActivity.onBackPressed();
            }
        });
        mToobar.setTitle("信号配置");
        listView =new ListView(_mActivity);
        ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        ViewGroup.LayoutParams layoutParams1 = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        listView.setLayoutParams(layoutParams);
        linearLayout.addView(listView);
        listView =view.findViewById(R.id.lv_signalconf);
        listView.setDivider(null);
        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,"信号配置发生变化");
        signalConfigViewModel.getSignalConfigs().observe(this, 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);
                }
                for (int i = 0; i < singalConfigs.size(); i++) {
                    SingalConfig singalConfig = singalConfigs.get(i);
                    i++;
            for (int i = 0; i < singalConfigs.size(); i++) {
                SingalConfig singalConfig = singalConfigs.get(i);
                i++;
                if (i<singalConfigs.size()){
                    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();
                }
            }
        });
@@ -153,7 +110,6 @@
    }
private Gson gson = new Gson();
@@ -201,148 +157,170 @@
                    }
                });
                viewHolder.checkBox4.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                        SignalConfigBean signalConfigBean = (SignalConfigBean) viewHolder.checkBox4.getTag();
                        signalConfigBean.setFour(isChecked);
                    }
                });viewHolder.checkBox2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                        SignalConfigBean signalConfigBean = (SignalConfigBean) viewHolder.checkBox2.getTag();
                        signalConfigBean.setTwo(isChecked);
                    }
                });viewHolder.checkBox1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                viewHolder.checkBox1.setOnCheckedChangeListener((buttonView,isChecked)-> {
                        SignalConfigBean signalConfigBean = (SignalConfigBean) viewHolder.checkBox1.getTag();
                        signalConfigBean.setOne(isChecked);
                        signalConfigViewModel.updateHightlevel(isChecked?1:0,position*2);
                });
                viewHolder.checkBox1.setTag(signalConfiglist.get(position));
                viewHolder.checkBox3.setTag(signalConfiglist.get(position));
                adapter1 = new ArrayAdapter<String>(_mActivity,R.layout.spinner_item,arr_strs);
                adapter1.setDropDownViewResource(R.layout.dropdown_stytle);
                adapter2 = new ArrayAdapter<String>(_mActivity,R.layout.spinner_item,arr_strs);
                adapter2.setDropDownViewResource(R.layout.dropdown_stytle);
                viewHolder.editText1.setAdapter(adapter1);
                viewHolder.editText2.setAdapter(adapter2);
                viewHolder.editText1.setTag(position*2+1);
                viewHolder.editText2.setTag((2*(1+position)));
                viewHolder.editText1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                    @Override
                    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
                        int index = (int) viewHolder.editText1.getTag();
                        CThreadPoolExecutor.runInBackground(new Runnable() {
                            @Override
                            public void run() {
                                int indexPre = WorkRoomDataBase.getWorkRoomDataBase(_mActivity).getSignalConfigDao().getSignalName2Index(arr_strs[pos]);
                                int fun_id = WorkRoomDataBase.getWorkRoomDataBase(_mActivity).getSignalConfigDao().getFun_idBySignalName(arr_strs[pos]);
                                Log.i(TAG,String.format("Spinner1 index=%d,fun_id=%d对应的信号名称=%s,index" ,index,fun_id,arr_strs[pos]));
                                String siname=WorkRoomDataBase.getWorkRoomDataBase(_mActivity).getSignalConfigDao().getSignalName(index);
                                int fun_idpRe= WorkRoomDataBase.getWorkRoomDataBase(_mActivity).getSignalConfigDao().getFun_idBySignalName(siname);
                                Log.i(TAG,index+" "+siname+ " arr-Strs[pos]="+arr_strs[pos]+ " "+pos);
                                if (siname!=null&&siname.equals(arr_strs[pos])){
                                }else{
                                    Log.i(TAG,String.format("把%s信号的index=%d改为%d",siname,index,indexPre));
                                    Log.i(TAG,String.format("把%s信号的index=%d改为%d",arr_strs[pos],indexPre,index));
                                    WorkRoomDataBase.getWorkRoomDataBase(_mActivity).getSignalConfigDao().updateindex(indexPre,fun_idpRe);
                                    WorkRoomDataBase.getWorkRoomDataBase(_mActivity).getSignalConfigDao().updateindex(index,fun_id);
//                                signalConfigViewModel.updateindex(indexPre,getSigal2Pos(siname));
                                }
                                Log.i(TAG,String.format("Spinner1 index=%d,fun_id=%d对应的信号名称=%s,index" +
                                                "pre=%d,indexpreName=%s",index,pos
                                        ,arr_strs[pos],indexPre,siname));
//                                signalConfigViewModel.updateindex(index,pos);
                            }
                        });
                    }
                    @Override
                    public void onNothingSelected(AdapterView<?> parent) {
                    }
                });
                viewHolder.editText2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                    @Override
                    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
                        int index = (int) viewHolder.editText2.getTag();
                        CThreadPoolExecutor.runInBackground(new Runnable() {
                            @Override
                            public void run() {
                                int indexPre = WorkRoomDataBase.getWorkRoomDataBase(_mActivity).getSignalConfigDao().getSignalName2Index(arr_strs[pos]);
                                int fun_id = WorkRoomDataBase.getWorkRoomDataBase(_mActivity).getSignalConfigDao().getFun_idBySignalName(arr_strs[pos]);
                                Log.i(TAG,String.format("Spinner2 index=%d,fun_id=%d对应的信号名称=%s,index" ,index,fun_id,arr_strs[pos]));
                                String siname=WorkRoomDataBase.getWorkRoomDataBase(_mActivity).getSignalConfigDao().getSignalName(index);
                                int fun_idpRe= WorkRoomDataBase.getWorkRoomDataBase(_mActivity).getSignalConfigDao().getFun_idBySignalName(siname);
                                Log.i(TAG,index+" sp2 "+siname+ " arr-Strs[pos]="+arr_strs[pos]+ " "+pos);
                                if (siname!=null&&siname.equals(arr_strs[pos])){
                                }else{
                                    Log.i(TAG,String.format("sp2把%s信号的index=%d改为%d",siname,index,indexPre));
                                    Log.i(TAG,String.format("sp2把%s信号的index=%d改为%d",arr_strs[pos],indexPre,index));
                                    WorkRoomDataBase.getWorkRoomDataBase(_mActivity).getSignalConfigDao().updateindex(indexPre,fun_idpRe);
                                    WorkRoomDataBase.getWorkRoomDataBase(_mActivity).getSignalConfigDao().updateindex(index,fun_id);
//                                signalConfigViewModel.updateindex(indexPre,getSigal2Pos(siname));
                                }
                                Log.i(TAG,String.format("Spinner2 index=%d,fun_id=%d对应的信号名称=%s,index" +
                                                "pre=%d,indexpreName=%s",index,pos
                                        ,arr_strs[pos],indexPre,siname));
                            }
                        });
                    }
                    @Override
                    public void onNothingSelected(AdapterView<?> parent) {
                    }
                });
                convertView.setTag(viewHolder);
                viewHolder.checkBox1.setTag(signalConfiglist.get(position));
                viewHolder.checkBox2.setTag(signalConfiglist.get(position));
                viewHolder.checkBox3.setTag(signalConfiglist.get(position));
                viewHolder.checkBox4.setTag(signalConfiglist.get(position));
            }else {
                viewHolder = (ViewHolder) convertView.getTag();
                viewHolder.checkBox1.setTag(signalConfiglist.get(position));
                viewHolder.checkBox2.setTag(signalConfiglist.get(position));
                viewHolder.checkBox3.setTag(signalConfiglist.get(position));
                viewHolder.checkBox4.setTag(signalConfiglist.get(position));
                viewHolder.editText1.setTag(position*2+1);
                viewHolder.editText2.setTag((2*(1+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());
            viewHolder.textView1.setText(String.valueOf(position*2+1));
            viewHolder.textView2.setText(String.valueOf(2*(1+position)));
            viewHolder.editText1.setText(String.valueOf(signalConfigItem.getPort_one()));
            viewHolder.editText2.setText(String.valueOf(signalConfigItem.getPort_two()));
            CThreadPoolExecutor.runInBackground(new Runnable() {
                @Override
                public void run() {
                    String signName1=WorkRoomDataBase.getWorkRoomDataBase(getActivity()).getSignalConfigDao().getSignalName(position*2+1);
                    String s2=WorkRoomDataBase.getWorkRoomDataBase(getActivity()).getSignalConfigDao().getSignalName((position+1)*2);
                    getActivity().runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Log.i(TAG,"CThreadPoolExecutor position="+position+ " s1="+signName1+" s2="+s2);
                            viewHolder.editText1.setSelection(getSigal2Pos(signName1));
                            viewHolder.editText2.setSelection(getSigal2Pos(s2));
                        }
                    });
                }
            });
            viewHolder.checkBox1.setChecked(signalConfigItem.isOne());
            viewHolder.checkBox2.setChecked(signalConfigItem.isTwo());
            viewHolder.checkBox3.setChecked(signalConfigItem.isThree());
            viewHolder.checkBox4.setChecked(signalConfigItem.isFour());
            return convertView;
        }
         class ViewHolder{
            CheckBox checkBox1;
            CheckBox checkBox2;
            CheckBox checkBox3;
            CheckBox checkBox4;
            EditText editText1;
            EditText editText2;
            AppCompatSpinner editText1;
             AppCompatSpinner editText2;
            TextView textView1;
            TextView textView2;
            public ViewHolder(final View convertView) {
                checkBox1 = convertView.findViewById(R.id.signal_check_1);
                checkBox2 = convertView.findViewById(R.id.signal_check_2);
                checkBox3 = convertView.findViewById(R.id.signal_check_3);
                checkBox4 = convertView.findViewById(R.id.signal_check_4);
                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);
                            }
                        }
                    }
                });
@@ -352,23 +330,15 @@
        }
    }
    @Override
    public void onResume() {
        super.onResume();
        Log.i(TAG, "onResume: ");
    private int getSigal2Pos(String signalConfigItem) {
        for (int i = 0; i < arr_strs.length; i++) {
            if (arr_strs[i].equals(signalConfigItem)){
                return i;
            }else{
                continue;
            }
        }
        return -1;
    }
    @Override
    public void onStop() {
        super.onStop();
        Log.i(TAG, "onStop: ");
    }
    @Override
    public void onPause() {
        super.onPause();
        Log.i(TAG, "onPause: ");
    }
}