FragmentTopInfo.kt 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. package com.cr.pages
  2. import android.graphics.drawable.Drawable
  3. import android.os.Bundle
  4. import android.view.LayoutInflater
  5. import android.view.View
  6. import android.view.ViewGroup
  7. import androidx.fragment.app.Fragment
  8. import androidx.fragment.app.activityViewModels
  9. import com.cr.cruav.R
  10. import com.cr.data.CrUtil
  11. import com.cr.data.DEFAULT_STR
  12. import com.cr.data.Level
  13. import com.cr.viewmodel.*
  14. import dji.v5.utils.common.ContextUtil
  15. import kotlinx.android.synthetic.main.frag_top_info.*
  16. /**
  17. * 操作系统:MAC系统
  18. * 创建者:王成
  19. * 创建日期:2023/3/8 15:52
  20. * 描述:大疆顶部信息视图
  21. */
  22. open class FragmentTopInfo : Fragment() {
  23. // define: 2023/3/9 APP注册信息
  24. private val msdkRegisterVm: CrMSDKRegisterVM by activityViewModels()
  25. // define: 2023/3/9 MSDK版本信息
  26. private val msdkInfoVm: CrMSDKInfoVM by activityViewModels()
  27. // define: 2023/3/9 遥控器信息
  28. private val remoteControlVm: CrRemoteControlVM by activityViewModels()
  29. // define: 2023/3/9 飞行器信息
  30. private val flightControlVm: CrFlightControlVM by activityViewModels()
  31. // define: 2023/3/14 链路信息
  32. private val linkVm: CrLinkVM by activityViewModels()
  33. // define: 2023/3/9 遥控器电量标志符号
  34. private var remoteControlBatteryIcon: MutableMap<Level, Drawable?> = mutableMapOf(
  35. Level.LEVEL1 to ContextUtil.getContext().getDrawable(R.drawable.dji_battery_rem1),
  36. Level.LEVEL2 to ContextUtil.getContext().getDrawable(R.drawable.dji_battery_rem2),
  37. Level.LEVEL3 to ContextUtil.getContext().getDrawable(R.drawable.dji_battery_rem3),
  38. Level.LEVEL4 to ContextUtil.getContext().getDrawable(R.drawable.dji_battery_rem4),
  39. )
  40. // define: 2023/3/9 飞行器电池电量标志符号
  41. private var flightControlBatteryIcon: MutableMap<Level, Drawable?> = mutableMapOf(
  42. Level.LEVEL1 to ContextUtil.getContext().getDrawable(R.drawable.dji_battery_air1),
  43. Level.LEVEL2 to ContextUtil.getContext().getDrawable(R.drawable.dji_battery_air2),
  44. Level.LEVEL3 to ContextUtil.getContext().getDrawable(R.drawable.dji_battery_air3),
  45. Level.LEVEL4 to ContextUtil.getContext().getDrawable(R.drawable.dji_battery_air4),
  46. )
  47. // define: 2023/3/14 链路质量标志
  48. private var linkSignalQualityIcon:MutableMap<Level,Drawable?> = mutableMapOf(
  49. Level.LEVEL1 to ContextUtil.getContext().getDrawable(R.drawable.dji_link_symbol1),
  50. Level.LEVEL2 to ContextUtil.getContext().getDrawable(R.drawable.dji_link_symbol3),
  51. Level.LEVEL3 to ContextUtil.getContext().getDrawable(R.drawable.dji_link_symbol4),
  52. Level.LEVEL4 to ContextUtil.getContext().getDrawable(R.drawable.dji_link_symbol6),
  53. )
  54. /**
  55. * 覆写创建视图方法
  56. * @param inflater LayoutInflater
  57. * @param container ViewGroup?
  58. * @param savedInstanceState Bundle?
  59. * @return View?
  60. */
  61. override fun onCreateView(
  62. inflater: LayoutInflater,
  63. container: ViewGroup?,
  64. savedInstanceState: Bundle?
  65. ): View? {
  66. return inflater.inflate(R.layout.frag_top_info, container, false)
  67. }
  68. /**
  69. * 覆写视图创建完成方法
  70. * @param view View
  71. * @param savedInstanceState Bundle?
  72. */
  73. override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
  74. super.onViewCreated(view, savedInstanceState)
  75. }
  76. /**
  77. * 由后台转前台显示
  78. */
  79. override fun onResume() {
  80. super.onResume()
  81. // todo: 2023/3/9 初始化订阅
  82. initObserver()
  83. }
  84. /**
  85. * 初始化订阅
  86. */
  87. private fun initObserver() {
  88. // todo: 2023/3/9 订阅App注册信息
  89. msdkRegisterVm.registerInfo.observe(requireActivity()) {
  90. dji_sdk_version.text = it.registerInfo
  91. }
  92. // todo: 2023/3/9 订阅MSDK版本信息
  93. msdkInfoVm.msdkInfo.observe(requireActivity()) {
  94. if (msdkRegisterVm.registerInfo.value?.isRegister == true) {
  95. dji_sdk_version.text = it.SDKVersion
  96. }
  97. }
  98. observerRemoteControl()
  99. observerFlightControl()
  100. observerLink()
  101. }
  102. /**
  103. * 订阅遥控器信息
  104. */
  105. private fun observerRemoteControl() {
  106. // todo: 2023/3/9 订阅遥控器信息
  107. remoteControlVm.remoteControlInfo.observe(requireActivity()) {
  108. it?.let {
  109. if (msdkRegisterVm.registerInfo.value?.isRegister == true) {
  110. dji_rc_connection.text = it.connectionInfo
  111. dji_rc_battery_value.text =
  112. resources.getString(R.string.value_battery_percent, it.batteryPercent)
  113. dji_rc_battery_symbol.setImageDrawable(
  114. remoteControlBatteryIcon[CrUtil.getLevel(
  115. it.batteryPercent
  116. )]
  117. )
  118. }
  119. }
  120. }
  121. }
  122. /**
  123. * 订阅飞行器信息
  124. */
  125. private fun observerFlightControl() {
  126. flightControlVm.flightControlInfo.observe(requireActivity()) {
  127. it?.let {
  128. if (msdkRegisterVm.registerInfo.value?.isRegister == true) {
  129. dji_product_connection.text = it.productName
  130. if (it.batteryPercent > 0) {
  131. dji_battery_value.text =
  132. resources.getString(R.string.value_battery_percent, it.batteryPercent)
  133. } else {
  134. dji_battery_value.text = DEFAULT_STR
  135. }
  136. dji_battery_symbol.setImageDrawable(flightControlBatteryIcon[CrUtil.getLevel(it.batteryPercent)])
  137. dji_gps_count.text = it.gpsCount
  138. dji_imu_state.text = it.imuState
  139. dji_compass.text = it.compassState
  140. if(!it.isConnection){
  141. linkVm.reset()
  142. }
  143. }
  144. }
  145. }
  146. }
  147. /**
  148. * 订阅链路
  149. */
  150. private fun observerLink(){
  151. linkVm.linkInfo.observe(requireActivity()){
  152. if (msdkRegisterVm.registerInfo.value?.isRegister == true) {
  153. dji_link_symbol.setImageDrawable(linkSignalQualityIcon[CrUtil.getLinkSignalQuality(it.signalQuality)])
  154. dji_link_value.text = it.frequencyBand
  155. }
  156. }
  157. }
  158. }