DebugFragment.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. package com.sunzee.ui.fragment;
  2. import android.annotation.SuppressLint;
  3. import android.app.ProgressDialog;
  4. import android.os.Bundle;
  5. import android.support.annotation.NonNull;
  6. import android.support.annotation.Nullable;
  7. import android.support.v7.widget.GridLayoutManager;
  8. import android.support.v7.widget.LinearLayoutManager;
  9. import android.support.v7.widget.RecyclerView;
  10. import android.util.Log;
  11. import android.view.LayoutInflater;
  12. import android.view.View;
  13. import android.view.ViewGroup;
  14. import android.widget.CheckBox;
  15. import com.hboxs.serialport.SerialPortDevice;
  16. import com.hboxs.serialport.SerialPortManager;
  17. import com.hboxs.serialport.frame.ResponseFrame;
  18. import com.hboxs.serialport.message.Message;
  19. import com.hboxs.serialport.util.AsciiUtils;
  20. import com.sunzee.R;
  21. import com.sunzee.adapter.DebugParameterAdapter;
  22. import com.sunzee.adapter.DebugParameterXAdapter;
  23. import com.sunzee.adapter.DebugParameterYAdapter;
  24. import com.sunzee.base.BaseApplication;
  25. import com.sunzee.base.MvpFragment;
  26. import com.sunzee.mvp.debug.DebugPresenter;
  27. import com.sunzee.mvp.debug.DebugView;
  28. import com.sunzee.thread.debugparameter.ThreadPoolDebugParameter;
  29. import com.sunzee.utils.CustomDecoration;
  30. import com.sunzee.utils.PreventSpeedClickUtil;
  31. import com.sunzee.utils.ToastUtil;
  32. import com.sunzee.utils.UiUtil;
  33. import org.greenrobot.eventbus.EventBus;
  34. import org.greenrobot.eventbus.Subscribe;
  35. import org.greenrobot.eventbus.ThreadMode;
  36. import java.util.ArrayList;
  37. import java.util.List;
  38. /**
  39. * 调试页界面 fragment
  40. */
  41. public class DebugFragment extends MvpFragment<DebugPresenter> implements DebugView {
  42. private RecyclerView mRvDebugList;
  43. private DebugParameterAdapter mDebugParameterAdapter;
  44. private ThreadPoolDebugParameter mPoolDebugParameter = new ThreadPoolDebugParameter();
  45. private RecyclerView mRvDebugListX;
  46. private RecyclerView mRvDebugListY;
  47. private DebugParameterXAdapter mDebugParameterXAdapter;
  48. private DebugParameterYAdapter mDebugParameterYAdapter;
  49. @Nullable
  50. @Override
  51. public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
  52. View inflate = inflater.inflate(R.layout.fragment_debug, container, false);
  53. initView(inflate);
  54. initEvent();
  55. return inflate;
  56. }
  57. @Override
  58. public void onStart() {
  59. super.onStart();
  60. EventBus.getDefault().register(this);
  61. showLoading();
  62. mPoolDebugParameter.stopAll();
  63. mPoolDebugParameter.startALLRead();
  64. }
  65. @Override
  66. public void onDestroyView() {
  67. if (mPoolDebugParameter != null) {
  68. mPoolDebugParameter.stopAll();
  69. }
  70. Log.d(TAG, "onDestroyView: ");
  71. EventBus.getDefault().unregister(this);
  72. super.onDestroyView();
  73. }
  74. private static final String TAG = "DebugFragment";
  75. private void initEvent() {
  76. mDebugParameterAdapter.setItemListener(new DebugParameterAdapter.ItemParaClickListener() {
  77. @Override
  78. public void onItemListener(View view, int position, String address) {
  79. showLoading();
  80. //点击的时候就开始写入
  81. //final String address = paraAddress[position];
  82. CheckBox checkBox = (CheckBox) view;
  83. if (!checkBox.isChecked()) {
  84. mPoolDebugParameter.stopRst();
  85. mPoolDebugParameter.startRst(address);
  86. } else {
  87. mPoolDebugParameter.stopSet();
  88. mPoolDebugParameter.startSet(address);
  89. }
  90. }
  91. });
  92. }
  93. private void initView(View inflate) {
  94. mRvDebugList = inflate.findViewById(R.id.rv_degbuglist);
  95. mDebugParameterAdapter = new DebugParameterAdapter();
  96. GridLayoutManager layoutManager = new GridLayoutManager(BaseApplication.getContext(), 9, GridLayoutManager.HORIZONTAL, false);
  97. mRvDebugList.setAdapter(mDebugParameterAdapter);
  98. mRvDebugList.setLayoutManager(layoutManager);
  99. mRvDebugListX = inflate.findViewById(R.id.rv_x);
  100. mRvDebugListY = inflate.findViewById(R.id.rv_y);
  101. LinearLayoutManager layoutManagerx = new LinearLayoutManager(BaseApplication.getContext());
  102. LinearLayoutManager layoutManagery = new LinearLayoutManager(BaseApplication.getContext());
  103. mRvDebugListX.setLayoutManager(layoutManagerx);
  104. mRvDebugListX.addItemDecoration(new CustomDecoration(BaseApplication.getContext(), LinearLayoutManager.VERTICAL, 2));
  105. mRvDebugListY.setLayoutManager(layoutManagery);
  106. mRvDebugListY.addItemDecoration(new CustomDecoration(BaseApplication.getContext(), LinearLayoutManager.VERTICAL, 2));
  107. mDebugParameterXAdapter = new DebugParameterXAdapter();
  108. mDebugParameterYAdapter = new DebugParameterYAdapter();
  109. mRvDebugListX.setItemViewCacheSize(23);
  110. mRvDebugListY.setItemViewCacheSize(24);
  111. mRvDebugListX.setAdapter(mDebugParameterXAdapter);
  112. mRvDebugListY.setAdapter(mDebugParameterYAdapter);
  113. }
  114. @Subscribe(threadMode = ThreadMode.MAIN)
  115. public void event(Message messageEvent) {
  116. switch (messageEvent.getType()) {
  117. case connected:
  118. break;
  119. case sendError:
  120. break;
  121. case ack:
  122. mPoolDebugParameter.stopRst();
  123. mPoolDebugParameter.stopSet();
  124. Log.d(TAG, "event: 写入成功");
  125. hideLoading();
  126. break;
  127. case nak:
  128. break;
  129. case disconnected:
  130. SerialPortDevice device = new SerialPortDevice("/dev/ttyS2", "9600");
  131. SerialPortManager.getInstance().open(device);
  132. break;
  133. case response:
  134. ResponseFrame responseFrame = (ResponseFrame) messageEvent.getContent();
  135. String name = messageEvent.getName();
  136. if ("M600".equals(name)) {
  137. return;
  138. }
  139. if (responseFrame.isValidSum()) {
  140. String result = AsciiUtils.asciiByteArray2HexStr(responseFrame.getData());
  141. mvpPresenter.setData(messageEvent, responseFrame, result, mPoolDebugParameter);
  142. break;
  143. }
  144. }
  145. }
  146. @Override
  147. public void getDataSuccess() {
  148. getValue(mPoolDebugParameter.getValues());
  149. }
  150. @Override
  151. public void setXStatu(ArrayList<String> list2) {
  152. for (int i = 0; i < list2.size(); i++) {
  153. getXValue(list2, i, i, mRvDebugListX);
  154. }
  155. }
  156. @Override
  157. public void setYStatu(ArrayList<String> list2) {
  158. Log.d(TAG, "setYStatu: " + list2);
  159. for (int i = 0; i < list2.size(); i++) {
  160. getYValue(list2, i, i, mRvDebugListY);
  161. }
  162. }
  163. /**
  164. * 改变对应的状态
  165. *
  166. * @param lis 读取lpc返回值列表
  167. * @param index lis对应的值
  168. * @param position 要改变的图片的位置
  169. */
  170. private void getXValue(final List<String> lis, final int index, int position, RecyclerView recyclerView) {
  171. //通过RecyclerView getChildAt();是不能正确获取item的view的,前几个获取可能还是正常的,往后滑后面的获取就不正常了
  172. //View view = recyclerView.getChildAt(position+1);
  173. View view = recyclerView.getLayoutManager().findViewByPosition(position + 1);
  174. if (view == null) {
  175. Log.d("空1", "getXYValue: p=" + position + " index=" + index);
  176. } else {
  177. DebugParameterXAdapter.ViewHolder viewHolder = (DebugParameterXAdapter.ViewHolder) recyclerView.getChildViewHolder(view);
  178. if (lis.get(index).equals("1")) {
  179. viewHolder.ivState.setImageDrawable(UiUtil.getDrawableRes(R.drawable.shape_circle_oragnge));
  180. } else {
  181. viewHolder.ivState.setImageDrawable(UiUtil.getDrawableRes(R.drawable.shape_circle));
  182. }
  183. }
  184. }
  185. /**
  186. * 改变对应的状态
  187. *
  188. * @param lis 读取lpc返回值列表
  189. * @param index lis对应的值
  190. * @param position 要改变的图片的位置
  191. */
  192. private void getYValue(final List<String> lis, final int index, int position, RecyclerView recyclerView) {
  193. View view = recyclerView.getLayoutManager().findViewByPosition(position + 1);
  194. if (view == null) {
  195. Log.d("空1", "getXYValue: p=" + position + " index=" + index);
  196. } else {
  197. DebugParameterYAdapter.ViewHolder viewHolder = (DebugParameterYAdapter.ViewHolder) recyclerView.getChildViewHolder(view);
  198. if (lis.get(index).equals("1")) {
  199. viewHolder.ivState.setImageDrawable(UiUtil.getDrawableRes(R.drawable.shape_circle_oragnge));
  200. } else {
  201. viewHolder.ivState.setImageDrawable(UiUtil.getDrawableRes(R.drawable.shape_circle));
  202. }
  203. }
  204. }
  205. /**
  206. * 改变对应的状态
  207. *
  208. * @param value
  209. */
  210. @SuppressLint("ResourceAsColor")
  211. private void getValue(ArrayList<String> value) {
  212. //311-318
  213. for (int i = 0; i < value.size(); i++) {
  214. View view = mRvDebugList.getChildAt(i);
  215. if (null != mRvDebugList.getChildViewHolder(view)) {
  216. DebugParameterAdapter.ViewHolder viewHolder = (DebugParameterAdapter.ViewHolder) mRvDebugList.getChildViewHolder(view);
  217. if (i==1||i ==0) {
  218. viewHolder.cbManual.setChecked(!viewHolder.cbManual.isChecked());
  219. continue;
  220. }
  221. if (!value.get(i).equals("0")) {
  222. //当它为选择状态时,无需设置,避免闪硕
  223. if (!viewHolder.cbManual.isChecked()) {
  224. viewHolder.cbManual.setChecked(true);
  225. }
  226. } else {
  227. if (viewHolder.cbManual.isChecked()) {
  228. viewHolder.cbManual.setChecked(false);
  229. }
  230. }
  231. }
  232. }
  233. }
  234. @Override
  235. protected DebugPresenter createPresenter() {
  236. return new DebugPresenter(this);
  237. }
  238. @Override
  239. public void showLoading() {
  240. showProgressDialog();
  241. }
  242. @Override
  243. public void hideLoading() {
  244. dismissProgressDialog();
  245. }
  246. public ProgressDialog progressDialog;
  247. public ProgressDialog showProgressDialog() {
  248. progressDialog = new ProgressDialog(mActivity);
  249. progressDialog.setMessage("加载中");
  250. progressDialog.show();
  251. return progressDialog;
  252. }
  253. public void dismissProgressDialog() {
  254. if (progressDialog != null && progressDialog.isShowing()) {
  255. // progressDialog.hide();会导致android.view.WindowLeaked
  256. progressDialog.dismiss();
  257. }
  258. }
  259. }