SplashActivity.kt 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. package com.dlc.eboard.ui
  2. import android.Manifest
  3. import android.app.smdt.SmdtManagerNew
  4. import android.content.Intent
  5. import android.os.Bundle
  6. import android.view.LayoutInflater
  7. import androidx.appcompat.app.AlertDialog
  8. import com.blankj.utilcode.constant.TimeConstants
  9. import com.blankj.utilcode.util.LogUtils
  10. import com.blankj.utilcode.util.TimeUtils
  11. import com.dlc.eboard.BuildConfig
  12. import com.dlc.eboard.LabApp
  13. import com.dlc.eboard.common.CommonUtils
  14. import com.dlc.eboard.databinding.ActivitySplashBinding
  15. import com.dlc.eboard.sp.DeviceSp
  16. import com.dlc.eboard.ui.settings.PasswordDialog
  17. import com.dlc.eboard.ui.settings.SettingsActivity
  18. import com.dlc.eboard.utils.NetworkUtils
  19. import com.dlc.laboratory.ui.LabMainActivity
  20. import com.rc.core.log.RcLog
  21. import com.rc.core.ui.activity.RcBaseActivity
  22. import com.rc.core.util.ApkUpdater
  23. import com.rc.core.util.DeviceUtils
  24. import com.rc.httpcore.client.ApiRepository
  25. import com.tbruyelle.rxpermissions2.RxPermissions
  26. /**
  27. * info
  28. *
  29. * @author ReiChin_
  30. */
  31. class SplashActivity : RcBaseActivity<ActivitySplashBinding>() {
  32. override fun createViewBinding() = ActivitySplashBinding.inflate(LayoutInflater.from(this))
  33. override fun initViews(savedInstanceState: Bundle?) {
  34. val smdtManagerNew = SmdtManagerNew.getInstance(this)
  35. if (smdtManagerNew != null) {
  36. // 设置导航栏不可见
  37. if (1 == smdtManagerNew.disp_getNavigationBar()) {
  38. smdtManagerNew.disp_setNavigationBar(false)
  39. }
  40. // 设置状态栏不可见
  41. if (1 == smdtManagerNew.disp_getStatusBar()) {
  42. smdtManagerNew.disp_setStatusBar(false)
  43. }
  44. // 设置手势不可呼出导航栏
  45. if (1 == smdtManagerNew.disp_getGestureBar()) {
  46. smdtManagerNew.disp_setGestureBar(false)
  47. }
  48. // 设置手势不可呼出状态栏
  49. if (1 == smdtManagerNew.disp_getStatusBarDrag()) {
  50. smdtManagerNew.disp_setStatusBarDrag(false)
  51. }
  52. }
  53. RcLog.info(
  54. "versionName:${DeviceUtils.getVersionName(this)}, versionCode:${
  55. DeviceUtils.getVersionCode(
  56. this
  57. )
  58. }, androidSN:${DeviceUtils.getAndroidSN()}"
  59. )
  60. viewBinding.deviceId.text = "设备编号:${DeviceUtils.getAndroidSN()}"
  61. viewBinding.versionName.text = "版本号:${DeviceUtils.getVersionName(this)}"
  62. viewBinding.copyRight.setOnLongClickListener {
  63. PasswordDialog(this) {
  64. val intent = Intent(this, SettingsActivity::class.java)
  65. startActivity(intent)
  66. }.show()
  67. true
  68. }
  69. }
  70. override fun onPostCreate(savedInstanceState: Bundle?) {
  71. super.onPostCreate(savedInstanceState)
  72. requestPermission()
  73. }
  74. private fun requestPermission() {
  75. val disposable = RxPermissions(this)
  76. .request(
  77. Manifest.permission.WRITE_EXTERNAL_STORAGE,
  78. Manifest.permission.READ_EXTERNAL_STORAGE,
  79. Manifest.permission.CAMERA,
  80. Manifest.permission.READ_PHONE_STATE,
  81. Manifest.permission.RECORD_AUDIO,
  82. )
  83. .subscribe { granted ->
  84. if (granted) {
  85. // 登录获取token
  86. val isNetworkAvailable = NetworkUtils.isNetworkAvailable(this)
  87. if (isNetworkAvailable) {
  88. authLogin()
  89. } else {
  90. // 当前网络不可用
  91. showToast("当前网络不可用,请等待")
  92. }
  93. } else {
  94. AlertDialog.Builder(this)
  95. .setTitle("提示")
  96. .setMessage("您必须同意所有权限才可以继续使用")
  97. .setNegativeButton("确定") { _, _ ->
  98. requestPermission()
  99. }.show()
  100. }
  101. }
  102. addDisposable(disposable)
  103. }
  104. private var lastErrTime: Long = 0L
  105. /**
  106. * 登录获取token
  107. */
  108. private fun authLogin() {
  109. viewBinding.tips.text = "正在登录系统"
  110. val disposable = ApiRepository.authOneLogin()
  111. .subscribe({ success ->
  112. if (success) {
  113. // 没有新版本
  114. queryLabConfig()
  115. // queryAppVersion()
  116. } else {
  117. authLogin()
  118. }
  119. }, { throwable ->
  120. val nowTime = System.currentTimeMillis()
  121. if (0L == lastErrTime && nowTime - lastErrTime > 20000) {
  122. lastErrTime = nowTime
  123. //初始化进入后网络反应太慢 重新调用
  124. authLogin()
  125. }
  126. showNetError(throwable)
  127. })
  128. addDisposable(disposable)
  129. }
  130. private fun queryAppVersion() {
  131. viewBinding.tips.text = "版本检测中..."
  132. val disposable = ApiRepository.apkVersion(CommonUtils.getAndroidId())
  133. .subscribe({ data ->
  134. if (CommonUtils.stringParseInt(data.version) > DeviceUtils.getVersionCode(this)) {
  135. // 有新版本
  136. viewBinding.tips.text = "检测到新版本,开始更新"
  137. viewBinding.progress.text = "(0%)"
  138. // 显示版本更新
  139. downloadApk(data.apkFileUpload)
  140. } else {
  141. // 没有新版本
  142. queryLabConfig()
  143. }
  144. }, { throwable ->
  145. showNetError(throwable)
  146. // queryLabConfig()
  147. })
  148. addDisposable(disposable)
  149. }
  150. private fun downloadApk(downloadUrl: String) {
  151. callApkUpdateApi("2")
  152. ApkUpdater(this, BuildConfig.APPLICATION_ID, callback = object :
  153. ApkUpdater.DownloadCallback {
  154. override fun onProgress(progress: Int) {
  155. viewBinding.progress.text = "(${progress}%)"
  156. }
  157. override fun onFailed(errMsg: String?) {
  158. callApkUpdateApi("0")
  159. viewBinding.tips.text = "下载失败,请检查网络情况重新下载"
  160. }
  161. override fun onSuccess(apkFile: String) {
  162. callApkUpdateApi("1")
  163. }
  164. }).downloadApk(downloadUrl)
  165. }
  166. /*
  167. * state 0:升级失败; 1:升级成功; 2:升级中
  168. */
  169. private fun callApkUpdateApi(state: String) {
  170. val disposable = ApiRepository.onepcApkUpdate(CommonUtils.getAndroidId(), state)
  171. .subscribe({ }, { })
  172. addDisposable(disposable)
  173. }
  174. private fun queryLabConfig() {
  175. viewBinding.tips.text = "正在查询实验室配置"
  176. RcLog.info("============CommonUtils.getAndroidId()" + CommonUtils.getAndroidId())
  177. val disposable = ApiRepository.queryLabConfig(CommonUtils.getAndroidId())
  178. .subscribe({ data ->
  179. RcLog.info("===========" + data.authType)
  180. LabApp.sLabConfig = data
  181. queryLaboratoryInfo("1" == data.isStart, data.labId)
  182. }, { throwable ->
  183. // dismissLoading()
  184. throwable.printStackTrace()
  185. showNetError(throwable)
  186. })
  187. addDisposable(disposable)
  188. }
  189. private fun queryLaboratoryInfo(openEBoard: Boolean, labId: String) {
  190. val id = if (openEBoard) labId else CommonUtils.getAndroidId()
  191. val disposable = ApiRepository.laboratoryInfo(openEBoard, id)
  192. .subscribe({ data ->
  193. dismissLoading()
  194. DeviceSp.saveLaboratoryVo(this, data)
  195. startHomeActivity(openEBoard)
  196. }, { throwable ->
  197. dismissLoading()
  198. throwable.printStackTrace()
  199. showNetError(throwable)
  200. })
  201. addDisposable(disposable)
  202. }
  203. private fun startHomeActivity(openEBoard: Boolean) {
  204. val clazz = if (openEBoard) HomeActivity::class.java else LabMainActivity::class.java
  205. startActivity(Intent(this, clazz))
  206. finish()
  207. }
  208. override fun onDestroy() {
  209. super.onDestroy()
  210. }
  211. }