123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- package com.dlc.exam.ui
- import android.content.ComponentName
- import android.content.Intent
- import android.content.ServiceConnection
- import android.os.*
- import android.view.LayoutInflater
- import android.view.View
- import androidx.viewbinding.ViewBinding
- import com.dlc.exam.BuildConfig
- import com.dlc.exam.ExamApp
- import com.dlc.exam.common.CommonUtils
- import com.dlc.exam.databinding.ActivityMainBinding
- import com.dlc.exam.iflytek.VoiceItsManager
- import com.dlc.exam.mqtt.MqttService
- import com.dlc.exam.mqtt.event.UpdateEvent
- import com.dlc.exam.ui.certificate.CertificateManagementActivity
- import com.dlc.exam.ui.common.BaseCountDownActivity
- import com.dlc.exam.ui.exam.SafetyExamHomeActivity
- import com.dlc.exam.ui.learn.SafetyLearnActivity
- import com.dlc.exam.ui.login.LoginActivity
- import com.dlc.exam.ui.login.ViolationHandlingDialog
- import com.dlc.exam.ui.me.PersonalCenterActivity
- import com.dlc.exam.ui.mock.SelectedMockTypeActivity
- import com.dlc.exam.ui.score.QueryScoreActivity
- import com.dlc.exam.ui.settings.PasswordDialog
- import com.dlc.exam.ui.settings.SettingsActivity
- import com.dlc.exam.ui.widget.TitleBar
- import com.rc.core.log.RcLog
- import com.rc.core.util.ApkUpdater
- import com.rc.core.util.DeviceUtils
- import com.rc.httpcore.HttpClient
- import com.rc.httpcore.client.ApiRepository
- import org.greenrobot.eventbus.EventBus
- import org.greenrobot.eventbus.Subscribe
- import org.greenrobot.eventbus.ThreadMode
- /**
- * 首页
- *
- * @author ReiChin_
- */
- class MainActivity : BaseCountDownActivity<ActivityMainBinding>(), TitleBar.TitleListener {
- override fun createViewBinding() = ActivityMainBinding.inflate(LayoutInflater.from(this))
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- VoiceItsManager.initIts(this)
- VoiceItsManager.speakVoice("欢迎使用实验室安全学习与考试系统")
- EventBus.getDefault().register(this)
- bindService(Intent(this, MqttService::class.java), mConnection, BIND_AUTO_CREATE)
- }
- override fun onDestroy() {
- VoiceItsManager.release()
- EventBus.getDefault().unregister(this)
- unbindService(mConnection)
- super.onDestroy()
- }
- private val mConnection: ServiceConnection = object : ServiceConnection {
- override fun onServiceConnected(name: ComponentName, service: IBinder) {
- service as MqttService.MqttBinder
- service.initMqtt()
- }
- override fun onServiceDisconnected(name: ComponentName) {
- }
- }
- override fun onResume() {
- if (null == ExamApp.sLearnLoginVo) {
- viewBinding.titleBar.showLogoutView(false)
- viewBinding.titleBar.setUsername("未登录")
- }
- super.onResume()
- }
- override fun initListener() {
- viewBinding.titleBar.setTitleListener(this)
- viewBinding.titleBar.setOnLongClickListener {
- PasswordDialog(this) {
- val intent = Intent(this, SettingsActivity::class.java)
- startActivity(intent)
- }.show()
- true
- }
- // 安全考试
- viewBinding.safetyExam.setOnClickListener { dispatchMenuClicked(SafetyExamHomeActivity::class.java) }
- // 证书管理
- viewBinding.certificateManagement.setOnClickListener {
- dispatchMenuClicked(
- CertificateManagementActivity::class.java
- )
- }
- // 安全学习
- viewBinding.safetyLearn.setOnClickListener { dispatchMenuClicked(SafetyLearnActivity::class.java) }
- // 模拟练习
- viewBinding.mockTest.setOnClickListener { dispatchMenuClicked(SelectedMockTypeActivity::class.java) }
- // 成绩查询
- viewBinding.examScore.setOnClickListener { dispatchMenuClicked(QueryScoreActivity::class.java) }
- }
- private fun dispatchMenuClicked(menuClass: Class<out BaseCountDownActivity<out ViewBinding>>) {
- mMenuClass = menuClass
- if (isLogin()) {
- val intent = Intent(this, mMenuClass)
- startActivity(intent)
- }
- }
- private fun isLogin(): Boolean {
- if (null != ExamApp.sLearnLoginVo) {
- return true
- }
- // showToast("请先登录")
- if (HttpClient.token==null) {
- authLogin()
- } else {
- startLoginActivity()
- }
- return false
- }
- /*
- * 登录获取token
- */
- private fun authLogin() {
- showLoading("加载中...")
- val disposable = ApiRepository.authOneLogin()
- .subscribe({ success ->
- dismissLoading()
- if (success) {
- startLoginActivity()
- }
- }, { throwable ->
- dismissLoading()
- showNetError(throwable)
- })
- addDisposable(disposable)
- }
- private fun startLoginActivity() {
- val intent = Intent(this, LoginActivity::class.java)
- startActivityForResult(intent, 100)
- }
- private var mMenuClass: Class<out BaseCountDownActivity<out ViewBinding>>? = null
- override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
- super.onActivityResult(requestCode, resultCode, data)
- if (100 == requestCode) {
- if (RESULT_OK == resultCode) {
- // 登录成功
- queryTodoViolation()
- viewBinding.titleBar.showLogoutView(true)
- viewBinding.titleBar.setUsername(ExamApp.sLearnLoginVo!!.nickName)
- }
- }
- }
- private fun queryTodoViolation() {
- showLoading("查询中...")
- val disposable = ApiRepository.existTodoViolation()
- .subscribe({
- // 有待处理的违规,弹出提示框
- dismissLoading()
- ViolationHandlingDialog(this) { hand ->
- if (hand) {
- // 处理
- startActivity(Intent(this, PersonalCenterActivity::class.java))
- } else {
- // 不处理
- mMenuClass?.let {
- startActivity(Intent(this, it))
- }
- }
- }.show()
- }, {
- dismissLoading()
- // 没有待处理的违规
- mMenuClass?.let {
- startActivity(Intent(this, it))
- }
- })
- addDisposable(disposable)
- }
- @Subscribe(threadMode = ThreadMode.MAIN)
- fun onUpdateEventEvent(event: UpdateEvent) {
- if (CommonUtils.stringParseInt(event.data.version) > DeviceUtils.getVersionCode(this)) {
- // 显示版本更新
- downloadApk(event.data.apkUploadFile)
- }
- }
- private var apkDownloading = false
- private fun downloadApk(downloadUrl: String) {
- if (apkDownloading) return
- apkDownloading = true
- callApkUpdateApi("2")
- ApkUpdater(applicationContext, BuildConfig.APPLICATION_ID, callback = object :
- ApkUpdater.DownloadCallback {
- override fun onProgress(progress: Int) {
- }
- override fun onFailed(errMsg: String?) {
- apkDownloading = false
- callApkUpdateApi("0")
- }
- override fun onSuccess(apkFile: String) {
- apkDownloading = false
- callApkUpdateApi("1")
- }
- }).downloadApk(downloadUrl)
- }
- /*
- * state 0:升级失败; 1:升级成功; 2:升级中
- */
- private fun callApkUpdateApi(state: String) {
- val disposable = ApiRepository.onepcApkUpdate(CommonUtils.getAndroidId(this), state)
- .subscribe({ }, { })
- addDisposable(disposable)
- }
- override fun onHomeViewClicked(view: View) {
- }
- override fun onLogoutViewClicked(view: View) {
- callLogoutApi {
- showToast("已退出登录")
- ExamApp.sLearnLoginVo = null
- HttpClient.token = null
- viewBinding.titleBar.showLogoutView(false)
- viewBinding.titleBar.setUsername("未登录")
- }
- }
- override fun onBackViewClicked(view: View) {
- RcLog.info(" HttpClient.token=====返回=="+ HttpClient.token)
- }
- override fun onUserViewClicked(view: View) {
- mMenuClass = null
- if (isLogin()) {
- val intent = Intent(this, PersonalCenterActivity::class.java)
- startActivity(intent)
- }
- }
- }
|