HomeActivity.kt 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525
  1. package com.yingyangfly.home.activity
  2. import android.annotation.SuppressLint
  3. import android.text.TextUtils
  4. import androidx.recyclerview.widget.GridLayoutManager
  5. import com.alibaba.android.arouter.facade.annotation.Route
  6. import com.yingyang.home.databinding.ActivityHomeBinding
  7. import com.yingyangfly.baselib.db.QuestionsBean
  8. import com.yingyangfly.baselib.dialog.TaskFragment
  9. import com.yingyangfly.baselib.dialog.TipsDialog
  10. import com.yingyangfly.baselib.ext.setOnSingleClickListener
  11. import com.yingyangfly.baselib.ext.show
  12. import com.yingyangfly.baselib.ext.toast
  13. import com.yingyangfly.baselib.guideview.Guide
  14. import com.yingyangfly.baselib.guideview.GuideBuilder
  15. import com.yingyangfly.baselib.mvvm.BaseMVVMActivity
  16. import com.yingyangfly.baselib.router.RouterUrlCommon
  17. import com.yingyangfly.baselib.utils.AppUtil
  18. import com.yingyangfly.baselib.utils.JumpUtil
  19. import com.yingyangfly.baselib.utils.User
  20. import com.yingyangfly.baselib.voice.PlayVoice
  21. import com.yingyangfly.home.adapter.GameAdapter
  22. import com.yingyangfly.home.component.ShowFunTimeViewComponent
  23. import com.yingyangfly.home.component.ShowHealthCounselingViewComponent
  24. import com.yingyangfly.home.component.ShowPlayPorpoiseViewComponent
  25. import com.yingyangfly.home.component.ShowProfessionalEvaluationViewComponent
  26. import com.yingyangfly.home.dialog.DownlaodAppFragment
  27. import com.yingyangfly.home.entity.Record
  28. /**
  29. * 新版首页
  30. */
  31. @Route(path = RouterUrlCommon.home)
  32. class HomeActivity : BaseMVVMActivity<ActivityHomeBinding, HomeViewModel>() {
  33. /**
  34. * 进行中的任务
  35. */
  36. private var currentTaskRecord: Record? = null
  37. private var taskList = mutableListOf<Record>()
  38. /**
  39. * 推荐游戏adapter
  40. */
  41. private var gameList = mutableListOf<Record>()
  42. private var isFirstPage = true
  43. //推荐游戏分页数据
  44. private var pageList = mutableListOf<Record>()
  45. private val gameAdapter by lazy { GameAdapter() }
  46. private var playVoice: PlayVoice? = null
  47. override fun initViews() {
  48. playVoice = PlayVoice()
  49. playVoice?.setContext(mContext)
  50. binding {
  51. rvGame.layoutManager = GridLayoutManager(this@HomeActivity, 2)
  52. rvGame.adapter = gameAdapter
  53. gameAdapter.onGameImageClickListener = {
  54. if (it.currentLevel == it.totalNum) {
  55. TipsDialog.TipDialogBuilder()
  56. .title("恭喜您")
  57. .content("当前游戏已通关,是否重新开始?")
  58. .leftBtnText("取消")
  59. .rightBtnText("确定")
  60. .leftClick({
  61. null
  62. }, true)
  63. .rightClick({
  64. jumpWebView(it, true)
  65. null
  66. }, true)
  67. .show(supportFragmentManager)
  68. } else {
  69. jumpWebView(it, false)
  70. }
  71. }
  72. }
  73. }
  74. override fun initListener() {
  75. binding {
  76. //用户头像
  77. imageSetting.setOnSingleClickListener {
  78. JumpUtil.jumpActivity(RouterUrlCommon.personalCenter, mContext)
  79. }
  80. //直播
  81. layoutLiveBroadcast.setOnSingleClickListener {
  82. JumpUtil.jumpActivity(RouterUrlCommon.liveBroadcastList, mContext)
  83. }
  84. //使用帮助
  85. layoutHelp.setOnSingleClickListener {
  86. JumpUtil.jumpActivity(RouterUrlCommon.help, mContext)
  87. }
  88. //消息通知
  89. layoutNotify.setOnSingleClickListener {
  90. JumpUtil.jumpActivity(RouterUrlCommon.messageList, mContext)
  91. }
  92. //服务套餐
  93. layoutServicePackage.setOnSingleClickListener {
  94. JumpUtil.jumpActivity(RouterUrlCommon.servicePackage, mContext)
  95. }
  96. //畅玩蓝豚
  97. tvPlayPorpoise.setOnSingleClickListener {
  98. JumpUtil.jumpActivity(RouterUrlCommon.freeTrain, mContext)
  99. }
  100. //专业测评
  101. tvProfessionalEvaluation.setOnSingleClickListener {
  102. loadMmseQuestions()
  103. }
  104. //健康咨询
  105. tvHealthCounseling.setOnSingleClickListener {
  106. "该功能正在开发中,敬请期待".toast()
  107. }
  108. //康复课堂
  109. tvfunTime.setOnSingleClickListener {
  110. JumpUtil.jumpActivity(RouterUrlCommon.leisureBrain, mContext)
  111. }
  112. //查看
  113. btnCheck.setOnSingleClickListener {
  114. JumpUtil.jumpActivity(RouterUrlCommon.trainData, mContext)
  115. }
  116. //下一页
  117. btnNextPage.setOnSingleClickListener {
  118. pageList.clear()
  119. if (isFirstPage) {
  120. btnNextPage.text = "上一页"
  121. isFirstPage = false
  122. pageList.addAll(gameList.subList(4, gameList.size))
  123. } else {
  124. btnNextPage.text = "下一页"
  125. isFirstPage = true
  126. pageList.addAll(gameList.subList(0, 4))
  127. }
  128. gameAdapter.setData(pageList)
  129. }
  130. //开始专属训练
  131. btnTask.setOnSingleClickListener {
  132. if (currentTaskRecord != null) {
  133. currentTaskRecord.let {
  134. val str =
  135. it?.gameUrl + "?gameCode=" + it?.gameCode + "&isFull=true&isSound=true&playClass=A" + "&userToken=" + User.getToken()
  136. JumpUtil.jumpActivityWithUrl(
  137. RouterUrlCommon.WEB_VIEW_INTERACTION_JS,
  138. str,
  139. mContext
  140. )
  141. }
  142. }
  143. }
  144. }
  145. }
  146. override fun initData() {
  147. }
  148. override fun onResume() {
  149. super.onResume()
  150. //获取app升级信息
  151. selectNewVersion()
  152. //获取脑力值和训练时长接口
  153. getCountTrain()
  154. //获取未读消息数量
  155. getCountMyMsg()
  156. }
  157. /**
  158. * 获取app升级信息
  159. */
  160. private fun selectNewVersion() {
  161. val versionCode = AppUtil.getVersionCode(mContext)
  162. viewModel.selectNewVersion(versionCode, fail = {
  163. launchTask()
  164. }, success = {
  165. if (it != null) {
  166. val downlaodAppFragment = DownlaodAppFragment()
  167. downlaodAppFragment.setDownloadUrl(mContext, it.versionUrl)
  168. downlaodAppFragment.show(supportFragmentManager, "downlaodAppFragment")
  169. } else {
  170. launchTask()
  171. }
  172. })
  173. }
  174. /**
  175. * 获取任务相关接口
  176. */
  177. private fun launchTask() {
  178. //获取任务列表
  179. getFindMyTask()
  180. if (TextUtils.equals("0", User.getFirstLogin())) {
  181. val taskDesn =
  182. "欢迎" + User.getName() + "使用未来蓝豚康复平台!为您提供专业的认知康复支持和训练。帮助您提升认知能力,重建自信。小豚期待与您一同启程!"
  183. showTaskDialog(taskDesn, "")
  184. } else {
  185. //获取任务状态弹窗
  186. getSelectHomePageMsg()
  187. }
  188. }
  189. /**
  190. * 查询首页任务提醒弹窗是否显示接口
  191. */
  192. private fun getSelectHomePageMsg() {
  193. viewModel.getSelectHomePageMsg("D", fail = {
  194. it.toast()
  195. }, success = {
  196. if (it != null) {
  197. showTaskDialog(it.msgDesn, it.id)
  198. }
  199. })
  200. }
  201. /**
  202. * 获取脑力值和训练时长接口
  203. */
  204. private fun getCountTrain() {
  205. viewModel.getCountTrain(fail = {
  206. it.toast()
  207. }, success = {
  208. if (it != null) {
  209. binding.data = it
  210. binding.tvBrainPowerValue.setEnableAnim(true)
  211. binding.tvBrainPowerValue.setNumberString(it.mentalPower)
  212. }
  213. })
  214. }
  215. /**
  216. * 获取未读消息数量
  217. */
  218. private fun getCountMyMsg() {
  219. viewModel.getCountMyMsg(fail = {
  220. it.toast()
  221. }, success = {
  222. if (it != null) {
  223. val num = it.toInt()
  224. binding.unReadLayout.show(num > 0)
  225. }
  226. })
  227. }
  228. /**
  229. * 查询是否有进行中的任务
  230. */
  231. private fun getFindMyTask() {
  232. viewModel.findMyCurrentTask(fail = {
  233. it.toast()
  234. }, success = {
  235. if (it.isNullOrEmpty().not()) {
  236. showLayout(false)
  237. it!![0].let {
  238. binding.task = it
  239. if (it.details.isNullOrEmpty().not()) {
  240. val index = it.currentTaskNum - 1
  241. currentTaskRecord = it.details[index]
  242. taskList.addAll(it.details)
  243. }
  244. if (it.currentTaskNum == it.totalTaskNum) {
  245. if (TextUtils.equals("0", it.status)) {
  246. //任务完成
  247. if (TextUtils.equals(User.getNowDay(), User.getTaskDialogStatus())
  248. .not()
  249. ) {
  250. User.saveTaskDialogStatus(User.getNowDay())
  251. showTipDialog()
  252. } else {
  253. showLayout(true)
  254. getGameList()
  255. }
  256. binding.btnTask.text = "继续专属训练"
  257. } else {
  258. binding.btnTask.text = if (it.currentTaskNum == 1) {
  259. "开始专属训练"
  260. } else {
  261. "继续专属训练"
  262. }
  263. showLayout(false)
  264. if (TextUtils.equals(User.getNowDay(), User.getTaskDialogStatus())
  265. .not()
  266. ) {
  267. User.saveTaskDialogStatus(User.getNowDay())
  268. playVoice?.speak(it.taskDesn)
  269. }
  270. }
  271. } else {
  272. binding.btnTask.text = if (it.currentTaskNum == 1) {
  273. "开始专属训练"
  274. } else {
  275. "继续专属训练"
  276. }
  277. if (TextUtils.equals(User.getNowDay(), User.getTaskDialogStatus()).not()) {
  278. User.saveTaskDialogStatus(User.getNowDay())
  279. playVoice?.speak(it.taskDesn)
  280. }
  281. }
  282. }
  283. } else {
  284. showLayout(true)
  285. getGameList()
  286. }
  287. })
  288. }
  289. /**
  290. * 训练完成弹窗页面
  291. */
  292. private fun showTipDialog() {
  293. TipsDialog.TipDialogBuilder()
  294. .title("恭喜您")
  295. .content("您完成了今天的专属训练!今天的训练报告已生成,快去查看吧!")
  296. .leftBtnText("稍后再看")
  297. .rightBtnText("立即查看")
  298. .leftClick({
  299. showLayout(true)
  300. getGameList()
  301. }, dimiss = true)
  302. .rightClick({
  303. JumpUtil.jumpActivity(RouterUrlCommon.trainData, mContext)
  304. }, dimiss = true)
  305. .show(supportFragmentManager)
  306. }
  307. /**
  308. * 欢迎/确定信息弹窗
  309. */
  310. private fun showTaskDialog(taskDesn: String, id: String) {
  311. val taskFragment = TaskFragment()
  312. taskFragment.setTaskDesn(taskDesn, id)
  313. taskFragment.onDialogClickListener = {
  314. if (id.isNullOrEmpty()) {
  315. if (TextUtils.equals("0", User.getFirstLogin())) {
  316. //第一次登录弹窗欢迎
  317. User.saveFirstLogin("1")
  318. binding.tvPlayPorpoise.post {
  319. showPlayPorpoiseView()
  320. }
  321. }
  322. } else {
  323. updateReadMsg(id)
  324. }
  325. }
  326. taskFragment.show(supportFragmentManager, "taskFragment")
  327. }
  328. /**
  329. * 修改未读消息状态
  330. */
  331. private fun updateReadMsg(id: String) {
  332. viewModel.updateReadMsg(id, fail = {
  333. getFindMyTask()
  334. }, success = {
  335. getFindMyTask()
  336. })
  337. }
  338. /**
  339. * 加载游戏数据
  340. */
  341. @SuppressLint("NotifyDataSetChanged")
  342. private fun getGameList() {
  343. gameList.clear()
  344. pageList.clear()
  345. viewModel.getGameList(fail = {
  346. it.toast()
  347. }, success = {
  348. if (it.isNullOrEmpty().not()) {
  349. gameList.clear()
  350. pageList.clear()
  351. gameList.addAll(it!!)
  352. binding.btnNextPage.show(it.size > 4)
  353. if (it.size > 4) {
  354. binding.btnNextPage.show(true)
  355. pageList.addAll(it.subList(0, 4))
  356. } else {
  357. binding.btnNextPage.show(false)
  358. pageList.addAll(it)
  359. }
  360. } else {
  361. binding.btnNextPage.show(false)
  362. }
  363. gameAdapter.setData(pageList)
  364. })
  365. }
  366. /**
  367. * 判断展示推荐游戏页面/待完成任务页面
  368. */
  369. private fun showLayout(isShow: Boolean) {
  370. binding {
  371. gameLayout.show(isShow)
  372. taskLayout.show(isShow.not())
  373. }
  374. }
  375. /**
  376. * 跳转游戏列表
  377. */
  378. private fun jumpWebView(bean: Record, isFull: Boolean) {
  379. val str =
  380. bean.gameUrl + "?gameCode=" + bean.gameCode + "&isFull=" + isFull + "&isSound=true&playClass=" + bean.playClass +
  381. "&userToken=" + User.getToken()
  382. JumpUtil.jumpActivityWithUrl(RouterUrlCommon.WEB_VIEW_INTERACTION_JS, str, this)
  383. }
  384. /**
  385. * 首次登陆添加引导窗
  386. */
  387. private fun showPlayPorpoiseView() {
  388. val builder = GuideBuilder()
  389. builder.setTargetView(binding.tvPlayPorpoise)
  390. .setAlpha(150)
  391. .setHighTargetCorner(20)
  392. .setHighTargetPadding(3)
  393. builder.setOnVisibilityChangedListener(object : GuideBuilder.OnVisibilityChangedListener {
  394. override fun onShown() {
  395. }
  396. override fun onDismiss() {
  397. //获取任务状态弹窗
  398. showProfessionalEvaluation()
  399. }
  400. })
  401. builder.addComponent(ShowPlayPorpoiseViewComponent())
  402. val guide: Guide = builder.createGuide()
  403. guide.show(this)
  404. }
  405. /**
  406. * 首次登陆添加引导窗
  407. */
  408. private fun showProfessionalEvaluation() {
  409. val builder = GuideBuilder()
  410. builder.setTargetView(binding.tvProfessionalEvaluation)
  411. .setAlpha(150)
  412. .setHighTargetCorner(20)
  413. .setHighTargetPadding(3)
  414. builder.setOnVisibilityChangedListener(object : GuideBuilder.OnVisibilityChangedListener {
  415. override fun onShown() {
  416. }
  417. override fun onDismiss() {
  418. showHealthCounseling()
  419. }
  420. })
  421. builder.addComponent(ShowProfessionalEvaluationViewComponent())
  422. val guide: Guide = builder.createGuide()
  423. guide.show(this)
  424. }
  425. /**
  426. * 首次登陆添加引导窗
  427. */
  428. private fun showHealthCounseling() {
  429. val builder = GuideBuilder()
  430. builder.setTargetView(binding.tvHealthCounseling)
  431. .setAlpha(150)
  432. .setHighTargetCorner(20)
  433. .setHighTargetPadding(3)
  434. builder.setOnVisibilityChangedListener(object : GuideBuilder.OnVisibilityChangedListener {
  435. override fun onShown() {
  436. }
  437. override fun onDismiss() {
  438. showFunTime()
  439. }
  440. })
  441. builder.addComponent(ShowHealthCounselingViewComponent())
  442. val guide: Guide = builder.createGuide()
  443. guide.show(this)
  444. }
  445. /**
  446. * 首次登陆添加引导窗
  447. */
  448. private fun showFunTime() {
  449. val builder = GuideBuilder()
  450. builder.setTargetView(binding.tvfunTime)
  451. .setAlpha(150)
  452. .setHighTargetCorner(20)
  453. .setHighTargetPadding(3)
  454. builder.setOnVisibilityChangedListener(object : GuideBuilder.OnVisibilityChangedListener {
  455. override fun onShown() {
  456. }
  457. override fun onDismiss() {
  458. //获取任务状态弹窗
  459. getSelectHomePageMsg()
  460. }
  461. })
  462. builder.addComponent(ShowFunTimeViewComponent())
  463. val guide: Guide = builder.createGuide()
  464. guide.show(this)
  465. }
  466. override fun onDestroy() {
  467. if (playVoice != null) {
  468. playVoice?.stop()
  469. }
  470. super.onDestroy()
  471. }
  472. /**
  473. * 获取mmse试题库接口
  474. */
  475. private fun loadMmseQuestions() {
  476. if (db != null) {
  477. val dao = db?.getQuestionsDao()
  478. dao?.deleteAll()
  479. val questionsList = mutableListOf<QuestionsBean>()
  480. viewModel.getQuestions("MMSE", fail = {
  481. it.toast()
  482. }, success = {
  483. if (it.isNullOrEmpty().not()) {
  484. questionsList.addAll(it!!)
  485. dao?.insertAll(questionsList)
  486. }
  487. JumpUtil.jumpActivity(RouterUrlCommon.mmseEvaluation, mContext)
  488. })
  489. }
  490. }
  491. }