MainActivity.kt 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. package com.dlc.exam.ui
  2. import android.content.ComponentName
  3. import android.content.Intent
  4. import android.content.ServiceConnection
  5. import android.os.*
  6. import android.view.LayoutInflater
  7. import android.view.View
  8. import androidx.viewbinding.ViewBinding
  9. import com.dlc.exam.BuildConfig
  10. import com.dlc.exam.ExamApp
  11. import com.dlc.exam.common.CommonUtils
  12. import com.dlc.exam.databinding.ActivityMainBinding
  13. import com.dlc.exam.iflytek.VoiceItsManager
  14. import com.dlc.exam.mqtt.MqttService
  15. import com.dlc.exam.mqtt.event.UpdateEvent
  16. import com.dlc.exam.ui.certificate.CertificateManagementActivity
  17. import com.dlc.exam.ui.common.BaseCountDownActivity
  18. import com.dlc.exam.ui.exam.SafetyExamHomeActivity
  19. import com.dlc.exam.ui.learn.SafetyLearnActivity
  20. import com.dlc.exam.ui.login.LoginActivity
  21. import com.dlc.exam.ui.login.ViolationHandlingDialog
  22. import com.dlc.exam.ui.me.PersonalCenterActivity
  23. import com.dlc.exam.ui.mock.SelectedMockTypeActivity
  24. import com.dlc.exam.ui.score.QueryScoreActivity
  25. import com.dlc.exam.ui.settings.PasswordDialog
  26. import com.dlc.exam.ui.settings.SettingsActivity
  27. import com.dlc.exam.ui.widget.TitleBar
  28. import com.rc.core.log.RcLog
  29. import com.rc.core.util.ApkUpdater
  30. import com.rc.core.util.DeviceUtils
  31. import com.rc.httpcore.HttpClient
  32. import com.rc.httpcore.client.ApiRepository
  33. import org.greenrobot.eventbus.EventBus
  34. import org.greenrobot.eventbus.Subscribe
  35. import org.greenrobot.eventbus.ThreadMode
  36. /**
  37. * 首页
  38. *
  39. * @author ReiChin_
  40. */
  41. class MainActivity : BaseCountDownActivity<ActivityMainBinding>(), TitleBar.TitleListener {
  42. override fun createViewBinding() = ActivityMainBinding.inflate(LayoutInflater.from(this))
  43. override fun onCreate(savedInstanceState: Bundle?) {
  44. super.onCreate(savedInstanceState)
  45. VoiceItsManager.initIts(this)
  46. VoiceItsManager.speakVoice("欢迎使用实验室安全学习与考试系统")
  47. EventBus.getDefault().register(this)
  48. bindService(Intent(this, MqttService::class.java), mConnection, BIND_AUTO_CREATE)
  49. }
  50. override fun onDestroy() {
  51. VoiceItsManager.release()
  52. EventBus.getDefault().unregister(this)
  53. unbindService(mConnection)
  54. super.onDestroy()
  55. }
  56. private val mConnection: ServiceConnection = object : ServiceConnection {
  57. override fun onServiceConnected(name: ComponentName, service: IBinder) {
  58. service as MqttService.MqttBinder
  59. service.initMqtt()
  60. }
  61. override fun onServiceDisconnected(name: ComponentName) {
  62. }
  63. }
  64. override fun onResume() {
  65. if (null == ExamApp.sLearnLoginVo) {
  66. viewBinding.titleBar.showLogoutView(false)
  67. viewBinding.titleBar.setUsername("未登录")
  68. }
  69. super.onResume()
  70. }
  71. override fun initListener() {
  72. viewBinding.titleBar.setTitleListener(this)
  73. viewBinding.titleBar.setOnLongClickListener {
  74. PasswordDialog(this) {
  75. val intent = Intent(this, SettingsActivity::class.java)
  76. startActivity(intent)
  77. }.show()
  78. true
  79. }
  80. // 安全考试
  81. viewBinding.safetyExam.setOnClickListener { dispatchMenuClicked(SafetyExamHomeActivity::class.java) }
  82. // 证书管理
  83. viewBinding.certificateManagement.setOnClickListener {
  84. dispatchMenuClicked(
  85. CertificateManagementActivity::class.java
  86. )
  87. }
  88. // 安全学习
  89. viewBinding.safetyLearn.setOnClickListener { dispatchMenuClicked(SafetyLearnActivity::class.java) }
  90. // 模拟练习
  91. viewBinding.mockTest.setOnClickListener { dispatchMenuClicked(SelectedMockTypeActivity::class.java) }
  92. // 成绩查询
  93. viewBinding.examScore.setOnClickListener { dispatchMenuClicked(QueryScoreActivity::class.java) }
  94. }
  95. private fun dispatchMenuClicked(menuClass: Class<out BaseCountDownActivity<out ViewBinding>>) {
  96. mMenuClass = menuClass
  97. if (isLogin()) {
  98. val intent = Intent(this, mMenuClass)
  99. startActivity(intent)
  100. }
  101. }
  102. private fun isLogin(): Boolean {
  103. if (null != ExamApp.sLearnLoginVo) {
  104. return true
  105. }
  106. // showToast("请先登录")
  107. if (HttpClient.token==null) {
  108. authLogin()
  109. } else {
  110. startLoginActivity()
  111. }
  112. return false
  113. }
  114. /*
  115. * 登录获取token
  116. */
  117. private fun authLogin() {
  118. showLoading("加载中...")
  119. val disposable = ApiRepository.authOneLogin()
  120. .subscribe({ success ->
  121. dismissLoading()
  122. if (success) {
  123. startLoginActivity()
  124. }
  125. }, { throwable ->
  126. dismissLoading()
  127. showNetError(throwable)
  128. })
  129. addDisposable(disposable)
  130. }
  131. private fun startLoginActivity() {
  132. val intent = Intent(this, LoginActivity::class.java)
  133. startActivityForResult(intent, 100)
  134. }
  135. private var mMenuClass: Class<out BaseCountDownActivity<out ViewBinding>>? = null
  136. override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
  137. super.onActivityResult(requestCode, resultCode, data)
  138. if (100 == requestCode) {
  139. if (RESULT_OK == resultCode) {
  140. // 登录成功
  141. queryTodoViolation()
  142. viewBinding.titleBar.showLogoutView(true)
  143. viewBinding.titleBar.setUsername(ExamApp.sLearnLoginVo!!.nickName)
  144. }
  145. }
  146. }
  147. private fun queryTodoViolation() {
  148. showLoading("查询中...")
  149. val disposable = ApiRepository.existTodoViolation()
  150. .subscribe({
  151. // 有待处理的违规,弹出提示框
  152. dismissLoading()
  153. ViolationHandlingDialog(this) { hand ->
  154. if (hand) {
  155. // 处理
  156. startActivity(Intent(this, PersonalCenterActivity::class.java))
  157. } else {
  158. // 不处理
  159. mMenuClass?.let {
  160. startActivity(Intent(this, it))
  161. }
  162. }
  163. }.show()
  164. }, {
  165. dismissLoading()
  166. // 没有待处理的违规
  167. mMenuClass?.let {
  168. startActivity(Intent(this, it))
  169. }
  170. })
  171. addDisposable(disposable)
  172. }
  173. @Subscribe(threadMode = ThreadMode.MAIN)
  174. fun onUpdateEventEvent(event: UpdateEvent) {
  175. if (CommonUtils.stringParseInt(event.data.version) > DeviceUtils.getVersionCode(this)) {
  176. // 显示版本更新
  177. downloadApk(event.data.apkUploadFile)
  178. }
  179. }
  180. private var apkDownloading = false
  181. private fun downloadApk(downloadUrl: String) {
  182. if (apkDownloading) return
  183. apkDownloading = true
  184. callApkUpdateApi("2")
  185. ApkUpdater(applicationContext, BuildConfig.APPLICATION_ID, callback = object :
  186. ApkUpdater.DownloadCallback {
  187. override fun onProgress(progress: Int) {
  188. }
  189. override fun onFailed(errMsg: String?) {
  190. apkDownloading = false
  191. callApkUpdateApi("0")
  192. }
  193. override fun onSuccess(apkFile: String) {
  194. apkDownloading = false
  195. callApkUpdateApi("1")
  196. }
  197. }).downloadApk(downloadUrl)
  198. }
  199. /*
  200. * state 0:升级失败; 1:升级成功; 2:升级中
  201. */
  202. private fun callApkUpdateApi(state: String) {
  203. val disposable = ApiRepository.onepcApkUpdate(CommonUtils.getAndroidId(this), state)
  204. .subscribe({ }, { })
  205. addDisposable(disposable)
  206. }
  207. override fun onHomeViewClicked(view: View) {
  208. }
  209. override fun onLogoutViewClicked(view: View) {
  210. callLogoutApi {
  211. showToast("已退出登录")
  212. ExamApp.sLearnLoginVo = null
  213. HttpClient.token = null
  214. viewBinding.titleBar.showLogoutView(false)
  215. viewBinding.titleBar.setUsername("未登录")
  216. }
  217. }
  218. override fun onBackViewClicked(view: View) {
  219. RcLog.info(" HttpClient.token=====返回=="+ HttpClient.token)
  220. }
  221. override fun onUserViewClicked(view: View) {
  222. mMenuClass = null
  223. if (isLogin()) {
  224. val intent = Intent(this, PersonalCenterActivity::class.java)
  225. startActivity(intent)
  226. }
  227. }
  228. }