FragmentSet.kt 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. package com.cr.pages
  2. import android.os.Bundle
  3. import android.view.LayoutInflater
  4. import android.view.View
  5. import android.view.ViewGroup
  6. import androidx.fragment.app.Fragment
  7. import androidx.fragment.app.FragmentActivity
  8. import androidx.viewpager2.adapter.FragmentStateAdapter
  9. import androidx.viewpager2.widget.ViewPager2
  10. import com.cr.adapter.CrPageAdapter
  11. import com.cr.adapter.SettingAdapter
  12. import com.cr.cruav.CrApplication
  13. import com.cr.cruav.R
  14. import com.cr.data.CrUtil
  15. import com.cr.dialog.DialogNormal
  16. import com.cr.event.BarAction
  17. import com.cr.event.EventFragmentBarAction
  18. import com.cr.models.CompletionModel
  19. import com.cr.models.ICompletion
  20. import com.cr.models.SettingAction
  21. import dji.v5.common.callback.CommonCallbacks
  22. import dji.v5.common.error.IDJIError
  23. import dji.v5.manager.account.LoginState
  24. import dji.v5.manager.account.UserAccountManager
  25. /**
  26. * 操作系统:MAC系统
  27. * 创建者:王成
  28. * 创建日期:2023/4/10 17:45
  29. * 描述:设置管理页面
  30. */
  31. class FragmentSet : CrNavigationFragment() {
  32. // define: 2023/4/11 定义变量
  33. private var adapter:CrPageAdapter? = null
  34. // define: 2023/4/11 定义页面
  35. private var pageMain:FragmentSetMain? = null // define: 2023/9/12 主页面
  36. private var pageSetIpAndCom:FragmentSetIpAndCom? = null // define: 2023/9/12 设置Ip和端口页面
  37. private var pageDownloadData:FragmentSetDataDownload? = null // define: 2023/9/12 下载数据页面
  38. private var pageSimulator:FragmentSimulator?= null // define: 2023/9/12 模拟器页面
  39. // define: 2023/4/11 定义控件
  40. private var viewPager: ViewPager2?=null
  41. /**
  42. * 创建视图
  43. * @param inflater LayoutInflater 视图管理器
  44. * @param container ViewGroup? 视图组
  45. * @param savedInstanceState Bundle?
  46. * @return View?
  47. */
  48. override fun onCreateView(
  49. inflater: LayoutInflater,
  50. container: ViewGroup?,
  51. savedInstanceState: Bundle?
  52. ): View? {
  53. // todo: 2023/4/11 设置动画方向
  54. setAnimationDirection(AnimationDirection.RIGHT)
  55. self = this
  56. mainView = inflater.inflate(R.layout.frag_set,null)
  57. // todo: 2023/4/10 设置导航栏
  58. setBar(R.id.nv)
  59. // todo: 2023/4/11 挂载控件
  60. joinControls()
  61. // todo: 2023/4/11 初始化页面
  62. initPages()
  63. return mainView
  64. }
  65. /**
  66. * 初始化导航栏
  67. */
  68. private fun initBar(){
  69. nvBar?.crSetTitle(R.string.nv_title_set)
  70. nvBar?.crSetVisible(backIsVisible = false, dismissIsVisible = true)
  71. showPage(pageMain!!)
  72. }
  73. /**
  74. * 初始化页面
  75. */
  76. private fun initPages(){
  77. adapter = CrPageAdapter(this.requireActivity())
  78. // todo: 2023/4/11 初始化主页面
  79. pageMain = FragmentSetMain()
  80. pageMain?.setCallback(mainListener)
  81. adapter?.addFragment(pageMain!!)
  82. // todo: 2023/4/11 初始化设置Ip和Com页面
  83. pageSetIpAndCom = FragmentSetIpAndCom()
  84. pageSetIpAndCom?.setAnimationDirection(AnimationDirection.RIGHT)
  85. adapter?.addFragment(pageSetIpAndCom!!)
  86. // todo: 2023/4/11 初始化数据下载页面
  87. pageDownloadData = FragmentSetDataDownload()
  88. adapter?.addFragment(pageDownloadData!!)
  89. // todo: 2023/8/15 初始化模拟器页面
  90. pageSimulator = FragmentSimulator()
  91. pageSimulator?.setAnimationDirection(AnimationDirection.RIGHT)
  92. adapter?.addFragment(pageSimulator!!)
  93. // todo: 2023/4/11 设置监听
  94. viewPager?.adapter = adapter
  95. // todo: 2023/4/11 初始化导航栏和页面
  96. initBar()
  97. }
  98. /**
  99. * 显示页面
  100. * @param fragment CrFragment
  101. */
  102. private fun showPage(fragment: CrNavigationFragment){
  103. var fragments = adapter?.getFragments()
  104. for(i in 0 until fragments!!.size){
  105. if(fragments?.get(i) == fragment){
  106. fragment.nvBar?.visibility = View.GONE
  107. viewPager?.currentItem = i
  108. // fragment?.initPage()
  109. break
  110. }
  111. }
  112. }
  113. /**
  114. * 菜单点击监听
  115. */
  116. private var mainListener = object:SettingAdapter.SettingListener{
  117. // todo: 2023/4/11 动作监听
  118. override fun onAction(action: SettingAction) {
  119. when(action){
  120. SettingAction.SA_SET_IP_COM->{
  121. showPage(pageSetIpAndCom!!)
  122. nvBar?.crSetVisible(backIsVisible = true, dismissIsVisible = false)
  123. nvBar?.crSetTitle(R.string.nv_title_set_ip_and_com)
  124. }
  125. SettingAction.SA_DOWNLOAD_DATA->{
  126. showPage(pageDownloadData!!)
  127. nvBar?.crSetVisible(backIsVisible = true, dismissIsVisible = false)
  128. nvBar?.crSetTitle(R.string.nv_title_download)
  129. }
  130. SettingAction.SA_DJI_LOGIN->{
  131. // todo: 2023/8/15 登录大疆账号
  132. setLoginDjiUserAccount()
  133. }
  134. SettingAction.SA_SIMULATOR->{
  135. // todo: 2023/8/15 大疆模拟器页面
  136. showPage(pageSimulator!!)
  137. nvBar?.crSetVisible(backIsVisible = true, dismissIsVisible = false)
  138. nvBar?.crSetTitle(R.string.nv_title_simulator)
  139. }
  140. }
  141. }
  142. // todo: 2023/4/11 开关监听
  143. override fun onSwitch(action: SettingAction, isChecked: Boolean) {
  144. }
  145. }
  146. /**
  147. * 设置登录大疆账号
  148. */
  149. private fun setLoginDjiUserAccount(){
  150. // todo: 2023/8/15 获取大疆账号
  151. var loginUser = UserAccountManager.getInstance().loginInfo
  152. if(loginUser.loginState == LoginState.LOGGED_IN){
  153. var message = "当前登录账号[${loginUser.account}],是否重新登录?"
  154. showConfirm(message, arrayOf("重新登录","取消"),object:ICompletion<String>{
  155. override fun onCompletion(completion: CompletionModel<String>) {
  156. if(completion.isSuccess == true){
  157. // todo: 2023/8/15 先退出当前账号
  158. UserAccountManager.getInstance().logOutDJIUserAccount(object:CommonCallbacks.CompletionCallback{
  159. // todo: 2023/8/15 退出成功
  160. override fun onSuccess() {
  161. loginDjiUserAccount()
  162. }
  163. // todo: 2023/8/15 退出失败
  164. override fun onFailure(error: IDJIError) {
  165. showError("退出失败:${error.description()}")
  166. }
  167. })
  168. }
  169. }
  170. })
  171. }else{
  172. // todo: 2023/8/15 如果是未登录或登录已过期 则直接调出登录页面
  173. loginDjiUserAccount()
  174. }
  175. }
  176. /**
  177. * 登录大疆账号
  178. */
  179. private fun loginDjiUserAccount(){
  180. // todo: 2023/8/14 登录大疆账号
  181. UserAccountManager.getInstance().logInDJIUserAccount(self!!.activity,false,null)
  182. }
  183. /**
  184. * 挂载控件
  185. */
  186. override fun joinControls() {
  187. viewPager = mainView?.findViewById(R.id.frag_set_pages)
  188. viewPager?.isUserInputEnabled = false
  189. }
  190. /**
  191. * 重写关闭事件
  192. */
  193. override fun dismiss() {
  194. CrApplication.getEventBus().post(EventFragmentBarAction(self!!,BarAction.ACTION_DISMISS))
  195. }
  196. /**
  197. * 重写回退事件
  198. */
  199. override fun onGotoBack() {
  200. initBar()
  201. }
  202. }