| | |
| | | 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; |
| | | |
| | | |
| | | /** |
| | |
| | | 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; |
| | |
| | | } |
| | | |
| | | 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(); |
| | | } |
| | | |
| | | } |
| | | }); |
| | | |
| | |
| | | |
| | | |
| | | } |
| | | private Gson gson = new Gson(); |
| | | |
| | | |
| | | |
| | |
| | | |
| | | } |
| | | }); |
| | | 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); |
| | | } |
| | | |
| | | } |
| | | } |
| | | }); |
| | | |
| | | |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | @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: "); |
| | | } |
| | | } |