| | |
| | | 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; |
| | |
| | | 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; |
| | | |
| | | |
| | | /** |
| | |
| | | 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(); |
| | | } |
| | |
| | | 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; |
| | | } |
| | | |
| | | |
| | |
| | | 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() { |
| | |
| | | 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.checkBox1.getTag(); |
| | | signalConfigBean.setOne(isChecked); |
| | | signalConfigViewModel.updateHightlevel(isChecked?1:0,position*2); |
| | | |
| | | } |
| | | }); |
| | | convertView.setTag(viewHolder); |
| | |
| | | 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()); |
| | |
| | | |
| | | 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); |
| | |
| | | } |
| | | } |
| | | |
| | | @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: "); |
| | | } |
| | | } |