WindowFragment.java 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. package xn.xxp.home.window;
  2. import android.graphics.Bitmap;
  3. import android.graphics.Color;
  4. import android.graphics.drawable.GradientDrawable;
  5. import android.os.Bundle;
  6. import android.text.TextUtils;
  7. import android.util.Log;
  8. import android.view.LayoutInflater;
  9. import android.view.ViewGroup;
  10. import androidx.annotation.NonNull;
  11. import androidx.annotation.Nullable;
  12. import androidx.core.content.ContextCompat;
  13. import androidx.recyclerview.widget.LinearLayoutManager;
  14. import com.blankj.utilcode.util.LogUtils;
  15. import com.blankj.utilcode.util.ThreadUtils;
  16. import com.bumptech.glide.Glide;
  17. import org.greenrobot.eventbus.EventBus;
  18. import org.greenrobot.eventbus.Subscribe;
  19. import org.greenrobot.eventbus.ThreadMode;
  20. import java.util.ArrayList;
  21. import java.util.List;
  22. import core.ui.fragment.RcBaseFragment;
  23. import http.client.ApiRepository;
  24. import http.vo.response.LaboratoryVo;
  25. import http.vo.response.SafeClassify;
  26. import io.reactivex.rxjava3.functions.Consumer;
  27. import xn.xxp.R;
  28. import xn.xxp.databinding.FragmentWindowBinding;
  29. import xn.xxp.app.LabApp;
  30. import xn.xxp.mqtt.event.UpdateUiEvent;
  31. import xn.xxp.room.RoomTool;
  32. import xn.xxp.room.bean.DeviceConfig;
  33. import xn.xxp.room.bean.LabConfig;
  34. import xn.xxp.utils.Constants;
  35. import xn.xxp.utils.QrTool;
  36. import xn.xxp.utils.Tool;
  37. public class WindowFragment extends RcBaseFragment<FragmentWindowBinding> {
  38. private FragmentWindowBinding binding;
  39. private WindowVerticalAdapter windowVerticalAdapter;
  40. private WindowTextlAdapter windowTextlAdapter;
  41. private DeviceConfig deviceConfig;
  42. private LabConfig labConfig;
  43. @NonNull
  44. @Override
  45. protected FragmentWindowBinding createViewBinding(@NonNull LayoutInflater inflater, @Nullable ViewGroup container) {
  46. return binding = FragmentWindowBinding.inflate(inflater, container, false);
  47. }
  48. @Override
  49. protected void initViews(@Nullable Bundle savedInstanceState) {
  50. EventBus.getDefault().register(this);
  51. deviceConfig = RoomTool.getInstance().deviceConfigDao().getDeviceConfig();
  52. labConfig = RoomTool.getInstance().labConfigDao().getLabConfig();
  53. initData();
  54. }
  55. private void initData() {
  56. if (null == LabApp.laboratory) {
  57. showToast("暂无实验室信息,即将重新获取");
  58. Tool.INSTANCE.reStartApp("暂无实验室信息,即将重新获取");
  59. return;
  60. }
  61. initLaboratoryInfo(LabApp.laboratory);
  62. }
  63. @Override
  64. public void onDestroy() {
  65. super.onDestroy();
  66. EventBus.getDefault().unregister(this);
  67. }
  68. @Subscribe(threadMode = ThreadMode.MAIN)
  69. public void updateUiEvent(UpdateUiEvent updateUiEvent) {
  70. // 中部更新
  71. if (Constants.MqttConfig.Topic.MIDDLE_INFO.equals(updateUiEvent.getType())) {
  72. addDisposable(ApiRepository.INSTANCE.laboratoryInfo(true, String.valueOf(labConfig.getLabId())).subscribe(new Consumer<LaboratoryVo>() {
  73. @Override
  74. public void accept(LaboratoryVo laboratoryVo) throws Exception {
  75. LabApp.laboratory = laboratoryVo;
  76. initData();
  77. }
  78. }, throwable -> {
  79. LogUtils.e(Log.getStackTraceString(throwable));
  80. showNetError(throwable);
  81. }));
  82. }
  83. }
  84. private void initLaboratoryInfo(LaboratoryVo lab) {
  85. // 实验室安全分级
  86. GradientDrawable dangerShapeDrawable = (GradientDrawable) ContextCompat.getDrawable(requireContext(), R.drawable.shape_rect_round_20px_ll);
  87. dangerShapeDrawable.setColor(TextUtils.isEmpty(lab.dangerColor) ? Color.parseColor("#FF15CA48") : Color.parseColor(lab.dangerColor));
  88. binding.dangerLL.setBackground(dangerShapeDrawable);
  89. binding.dangerLevelTV.setText(TextUtils.isEmpty(lab.dangerLevel) ? "安全分级" : lab.dangerLevel);
  90. binding.dangerTypeTV.setText(TextUtils.isEmpty(lab.dangerName) ? "安全分类" : lab.dangerName);
  91. // 单位名称
  92. binding.unitNameTV.setText(TextUtils.isEmpty(lab.deptName) ? "" : lab.deptName);
  93. // 实验室名称
  94. binding.labNameTV.setText(TextUtils.isEmpty(lab.subName) ? "" : lab.subName);
  95. String adminNamePhone = "";
  96. if (!TextUtils.isEmpty(lab.adminName) && !TextUtils.isEmpty(lab.adminPhone)){
  97. adminNamePhone = lab.adminName+"("+lab.adminPhone+")";
  98. }else if (!TextUtils.isEmpty(lab.adminName) && TextUtils.isEmpty(lab.adminPhone)){
  99. adminNamePhone = lab.adminName;
  100. }else if (TextUtils.isEmpty(lab.adminName) && !TextUtils.isEmpty(lab.adminPhone)){
  101. adminNamePhone = lab.adminPhone;
  102. }else if (TextUtils.isEmpty(lab.adminName) && TextUtils.isEmpty(lab.adminPhone)){
  103. adminNamePhone = "";
  104. }
  105. // 实验室负责人
  106. binding.labLeaderTV.setText(adminNamePhone);
  107. // 楼宇
  108. binding.buildingNameTV.setText(TextUtils.isEmpty(lab.buildName) ? "" : lab.buildName);
  109. // 房间号
  110. binding.roomNOTV.setText(TextUtils.isEmpty(lab.room) ? "" : lab.room);
  111. // 实验室负责人电话
  112. String safetyLiaisonPhone = "";
  113. if (!TextUtils.isEmpty(lab.safetyLiaisonName) && !TextUtils.isEmpty(lab.safetyLiaisonPhone)){
  114. safetyLiaisonPhone = lab.safetyLiaisonName+"("+lab.safetyLiaisonPhone+")";
  115. }else if (!TextUtils.isEmpty(lab.safetyLiaisonName) && TextUtils.isEmpty(lab.safetyLiaisonPhone)){
  116. safetyLiaisonPhone = lab.safetyLiaisonName;
  117. }else if (TextUtils.isEmpty(lab.safetyLiaisonName) && !TextUtils.isEmpty(lab.safetyLiaisonPhone)){
  118. safetyLiaisonPhone = lab.safetyLiaisonPhone;
  119. }else if (TextUtils.isEmpty(lab.safetyLiaisonName) && TextUtils.isEmpty(lab.safetyLiaisonPhone)){
  120. safetyLiaisonPhone = "";
  121. }
  122. //安全联络员名字电话
  123. binding.leaderPhoneTV.setText(safetyLiaisonPhone);
  124. //binding.safetyLiaisonNameTV.setText(TextUtils.isEmpty(lab.safetyLiaisonName) ? "" : lab.safetyLiaisonName);
  125. // 实验室二维码
  126. if (!TextUtils.isEmpty(lab.qrCodeUrl)) {
  127. ThreadUtils.executeByCached(new ThreadUtils.SimpleTask<Bitmap>() {
  128. @Override
  129. public Bitmap doInBackground() throws Throwable {
  130. return QrTool.generateQRCode(lab.qrCodeUrl, 175);
  131. }
  132. @Override
  133. public void onSuccess(Bitmap result) {
  134. if (null != result) {
  135. Glide.with(requireContext()).asBitmap().load(result).error(R.mipmap.img_error).into(binding.labQrIV);
  136. }
  137. }
  138. });
  139. }
  140. List<SafeClassify> safeClassifyList = lab.safeClassifyList;
  141. List<SafeClassify> imageSafeClassifyList = new ArrayList<>();
  142. List<SafeClassify> textSsafeClassifyList = new ArrayList<>();
  143. for (int i = 0; i < safeClassifyList.size(); i++) {
  144. SafeClassify safeClassify = safeClassifyList.get(i);
  145. if (safeClassify.classifyType == 1) {
  146. textSsafeClassifyList.add(safeClassify);
  147. } else if (safeClassify.classifyType == 2) {
  148. imageSafeClassifyList.add(safeClassify);
  149. }
  150. }
  151. // 图标布局
  152. if (null == windowVerticalAdapter) {
  153. windowVerticalAdapter = new WindowVerticalAdapter(requireContext(), imageSafeClassifyList);
  154. LinearLayoutManager verticalImageLayoutManager = new LinearLayoutManager(requireContext());
  155. binding.safeClassifyImageRV.setLayoutManager(verticalImageLayoutManager);
  156. binding.safeClassifyImageRV.setAdapter(windowVerticalAdapter);
  157. } else {
  158. windowVerticalAdapter.update(imageSafeClassifyList);
  159. }
  160. // 文字布局
  161. if (null == windowTextlAdapter) {
  162. windowTextlAdapter = new WindowTextlAdapter(requireContext(), textSsafeClassifyList);
  163. LinearLayoutManager verticalTextLayoutManager = new LinearLayoutManager(requireContext());
  164. binding.safeClassifyTextRV.setLayoutManager(verticalTextLayoutManager);
  165. binding.safeClassifyTextRV.setAdapter(windowTextlAdapter);
  166. } else {
  167. windowTextlAdapter.update(textSsafeClassifyList);
  168. }
  169. }
  170. }