123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- package com.cr.pages
- import android.graphics.drawable.Drawable
- import android.os.Bundle
- import android.view.LayoutInflater
- import android.view.View
- import android.view.ViewGroup
- import android.widget.ImageView
- import android.widget.TextView
- import androidx.fragment.app.Fragment
- import androidx.fragment.app.activityViewModels
- import androidx.lifecycle.LifecycleOwner
- import com.cr.cruav.CrApplication
- import com.cr.cruav.R
- import com.cr.data.CrUtil
- import com.cr.data.DEFAULT_STR
- import com.cr.data.Level
- import com.cr.viewmodel.*
- import dji.v5.utils.common.ContextUtil
- import kotlinx.android.synthetic.main.frag_top_info.*
- /**
- * 操作系统:MAC系统
- * 创建者:王成
- * 创建日期:2023/3/8 15:52
- * 描述:大疆顶部信息视图
- */
- open class FragmentTopInfo : CrFragment() {
- // define: 2023/3/9 APP注册信息
- private val msdkRegisterVm: CrMSDKRegisterVM by activityViewModels()
- // define: 2023/3/9 MSDK版本信息
- private val msdkInfoVm: CrMSDKInfoVM by activityViewModels()
- // define: 2023/3/9 遥控器信息
- private val remoteControlVm: CrRemoteControlVM by activityViewModels()
- // define: 2023/3/9 飞行器信息
- private val flightControlVm: CrFlightControlVM by activityViewModels()
- // define: 2023/3/14 链路信息
- private val linkVm: CrLinkVM by activityViewModels()
- // define: 2023/3/9 遥控器电量标志符号
- private var remoteControlBatteryIcon: MutableMap<Level, Drawable?> = mutableMapOf(
- Level.LEVEL1 to ContextUtil.getContext().getDrawable(R.drawable.dji_battery_rem1),
- Level.LEVEL2 to ContextUtil.getContext().getDrawable(R.drawable.dji_battery_rem2),
- Level.LEVEL3 to ContextUtil.getContext().getDrawable(R.drawable.dji_battery_rem3),
- Level.LEVEL4 to ContextUtil.getContext().getDrawable(R.drawable.dji_battery_rem4),
- )
- // define: 2023/3/9 飞行器电池电量标志符号
- private var flightControlBatteryIcon: MutableMap<Level, Drawable?> = mutableMapOf(
- Level.LEVEL1 to ContextUtil.getContext().getDrawable(R.drawable.dji_battery_air1),
- Level.LEVEL2 to ContextUtil.getContext().getDrawable(R.drawable.dji_battery_air2),
- Level.LEVEL3 to ContextUtil.getContext().getDrawable(R.drawable.dji_battery_air3),
- Level.LEVEL4 to ContextUtil.getContext().getDrawable(R.drawable.dji_battery_air4),
- )
- // define: 2023/3/14 链路质量标志
- private var linkSignalQualityIcon:MutableMap<Level,Drawable?> = mutableMapOf(
- Level.LEVEL1 to ContextUtil.getContext().getDrawable(R.drawable.dji_link_symbol1),
- Level.LEVEL2 to ContextUtil.getContext().getDrawable(R.drawable.dji_link_symbol3),
- Level.LEVEL3 to ContextUtil.getContext().getDrawable(R.drawable.dji_link_symbol4),
- Level.LEVEL4 to ContextUtil.getContext().getDrawable(R.drawable.dji_link_symbol6),
- )
- // todo: 2023/8/17 定义控件
- private var lblSDKVersion:TextView?=null // define: 2023/9/14 SDK版本信息
- private var lblGPSCount:TextView?= null // define: 2023/9/14 GPS卫星数量
- private var lblRCConnection:TextView?=null // define: 2023/9/14 遥控器连接状态
- private var lblProductName:TextView?=null // define: 2023/9/14 连接产品名称
- private var lblIMUState:TextView?=null // define: 2023/9/14 IMU状态
- private var lblLongitude:TextView?=null // define: 2023/9/14 当前经度
- private var lblLatitude:TextView?=null // define: 2023/9/14 当前纬度
- private var lblSignal:TextView?= null // define: 2023/9/14 信号质量
- private var imgSignal:ImageView?=null // define: 2023/9/14 信号质量图
- private var lblRCBattery:TextView?=null // define: 2023/9/14 遥控器电池电量
- private var imgRCBattery:ImageView?=null // define: 2023/9/14 遥控器电池电量图
- private var lblFCBattery:TextView?=null // define: 2023/9/14 飞行器电池电量
- private var imgFCBattery:ImageView?=null // define: 2023/9/14 飞行器电池电量符号
- private var lblCompassState:TextView?=null // define: 2023/9/14 指南针状态
- /**
- * 覆写创建视图方法
- * @param inflater LayoutInflater
- * @param container ViewGroup?
- * @param savedInstanceState Bundle?
- * @return View?
- */
- override fun onCreateView(
- inflater: LayoutInflater,
- container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View? {
- self = this
- mainView = inflater.inflate(R.layout.frag_top_info, container, false)
- // todo: 2023/8/17 挂载控件
- joinControls()
- // todo: 2023/8/17 订阅
- initObserver()
- return mainView
- }
- /**
- * 关联控件
- */
- override fun joinControls() {
- mainView?.let {
- lblSDKVersion = it.findViewById(R.id.dji_sdk_version)
- lblGPSCount = it.findViewById(R.id.dji_gps_count)
- lblIMUState = it.findViewById(R.id.dji_imu_state)
- lblRCConnection = it.findViewById(R.id.dji_rc_connection)
- lblProductName = it.findViewById(R.id.dji_product_connection)
- lblLongitude = it.findViewById(R.id.dji_gps_longitude)
- lblLatitude = it.findViewById(R.id.dji_gps_latitude)
- lblSignal = it.findViewById(R.id.dji_link_value)
- imgSignal = it.findViewById(R.id.dji_link_symbol)
- lblRCBattery = it.findViewById(R.id.dji_rc_battery_value)
- imgRCBattery = it.findViewById(R.id.dji_rc_battery_symbol)
- lblFCBattery = it.findViewById(R.id.dji_battery_value)
- imgFCBattery = it.findViewById(R.id.dji_battery_symbol)
- lblCompassState = it.findViewById(R.id.dji_compass)
- }
- }
- /**
- * 覆写视图创建完成方法
- * @param view View
- * @param savedInstanceState Bundle?
- */
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- super.onViewCreated(view, savedInstanceState)
- }
- /**
- * 由后台转前台显示
- */
- override fun onResume() {
- super.onResume()
- }
- /**
- * 初始化订阅
- */
- private fun initObserver() {
- // todo: 2023/3/9 订阅App注册信息
- msdkRegisterVm.registerInfo.observe(viewLifecycleOwner) {
- lblSDKVersion?.text = it.registerInfo
- }
- // todo: 2023/3/9 订阅MSDK版本信息
- msdkInfoVm.msdkInfo.observe(viewLifecycleOwner) {
- if (msdkRegisterVm.registerInfo.value?.isRegister == true) {
- lblSDKVersion?.text = it.SDKVersion
- }
- }
- // todo: 2023/8/17 订阅遥控器
- observerRemoteControl()
- // todo: 2023/8/17 订阅飞行器
- observerFlightControl()
- // todo: 2023/8/17 订阅链路
- observerLink()
- }
- /**
- * 订阅遥控器信息
- */
- private fun observerRemoteControl() {
- // todo: 2023/3/9 订阅遥控器信息
- remoteControlVm.remoteControlInfo.observe(viewLifecycleOwner) {
- it?.let {
- if (msdkRegisterVm.registerInfo.value?.isRegister == true) {
- lblRCConnection?.text = it.connectionInfo
- if(it.batteryPercent>0){
- lblRCBattery?.text =
- resources.getString(R.string.value_battery_percent, it.batteryPercent)
- }else{
- lblRCBattery?.text = DEFAULT_STR
- }
- imgRCBattery?.setImageDrawable(
- remoteControlBatteryIcon[CrUtil.getLevel(
- it.batteryPercent
- )]
- )
- }
- }
- }
- }
- /**
- * 订阅飞行器信息
- */
- private fun observerFlightControl() {
- flightControlVm.flightControlInfo.observe(viewLifecycleOwner) {
- it?.let {
- if (msdkRegisterVm.registerInfo.value?.isRegister == true) {
- lblProductName?.text = it.productName
- if (it.batteryPercent > 0) {
- lblFCBattery?.text =
- resources.getString(R.string.value_battery_percent, it.batteryPercent)
- } else {
- lblFCBattery?.text = DEFAULT_STR
- }
- imgFCBattery?.setImageDrawable(flightControlBatteryIcon[CrUtil.getLevel(it.batteryPercent)])
- lblGPSCount?.text = it.gpsCount
- lblIMUState?.text = it.imuState
- lblCompassState?.text = it.compassState
- // todo: 2023/8/15 更新经纬度
- lblLongitude?.text = it.longitudeStr
- lblLatitude?.text = it.latitudeStr
- if(!it.isConnection){
- linkVm.reset()
- }
- }
- }
- }
- }
- /**
- * 订阅链路
- */
- private fun observerLink(){
- linkVm.linkInfo.observe(viewLifecycleOwner){
- if (msdkRegisterVm.registerInfo.value?.isRegister == true) {
- it?.let {
- imgSignal?.setImageDrawable(linkSignalQualityIcon[CrUtil.getLinkSignalQuality(it.signalQuality)])
- lblSignal?.text = it.frequencyBand
- }
- }
- }
- }
- }
|