学考乐离线App
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

LearnDialog.kt 16KB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419
  1. package com.xkl.cdl.dialog
  2. import android.os.Bundle
  3. import android.view.Gravity
  4. import android.view.View
  5. import androidx.core.content.ContextCompat
  6. import com.suliang.common.AppConfig
  7. import com.suliang.common.base.BaseDialogFragment
  8. import com.suliang.common.extension.click
  9. import com.suliang.common.util.os.ScreenUtil
  10. import com.xkl.cdl.R
  11. import com.xkl.cdl.data.AppConstants
  12. import com.xkl.cdl.data.bean.LearnDialogBean
  13. import com.xkl.cdl.databinding.DialogLessonLearnBinding
  14. import kotlin.random.Random
  15. /**
  16. * author suliang
  17. * create 2022/4/2 15:47
  18. * Describe: 学习的通用弹窗
  19. */
  20. class LearnDialog private constructor() : BaseDialogFragment<DialogLessonLearnBinding>() {
  21. companion object {
  22. fun newInstance(params : LearnDialogBean) : LearnDialog {
  23. val args = Bundle()
  24. args.putParcelable(AppConfig.INTENT_1, params)
  25. val fragment = LearnDialog()
  26. fragment.arguments = args
  27. return fragment
  28. }
  29. }
  30. /** 事件动作 */
  31. lateinit var onDialogListener : (action : Int, dialog : LearnDialog) -> Unit
  32. //参数
  33. private lateinit var learnDialogBean : LearnDialogBean
  34. override fun onCreate(savedInstanceState : Bundle?) {
  35. super.onCreate(savedInstanceState)
  36. //取值获参
  37. learnDialogBean = requireArguments().getParcelable(AppConfig.INTENT_1)!!
  38. }
  39. override fun initFragment() {
  40. when (learnDialogBean.dialogType) {
  41. //测试开始弹窗
  42. AppConstants.DIALOG_TYPE_EXAM_START -> when(learnDialogBean.examType){
  43. //课时学前测试开始弹窗
  44. AppConstants.TEST_TYPE_BEFORE -> initLessonBeforeTestStart()
  45. //课时最后一个课时测试结束的下一步弹出此弹窗:学后总测试开始的弹窗
  46. AppConstants.TEST_TYPE_AFTER_TOTAL -> initCourseAfterTestStart()
  47. }
  48. //测试结束弹窗
  49. AppConstants.DIALOG_TYPE_EXAM_OVER -> when (learnDialogBean.examType) {
  50. //学前总测结束弹窗
  51. AppConstants.TEST_TYPE_BEFORE_TOTAL -> initCourseBeforeTotalTestOver()
  52. //课时学前测试结束弹窗
  53. AppConstants.TEST_TYPE_BEFORE-> initLessonBeforeTestOver()
  54. //课时后测试结束
  55. AppConstants.TEST_TYPE_AFTER -> initLessonAfterTestOver()
  56. //学后总测试结束弹窗
  57. AppConstants.TEST_TYPE_AFTER_TOTAL -> initCourseAfterTestOver()
  58. //作文知识点测试结束
  59. AppConstants.TEST_TYPE_COMPOSITION -> initCompositionExamLessonTestOver()
  60. }
  61. //学习结束弹窗
  62. AppConstants.DIALOG_TYPE_LEARNING_OVER -> initLessonLearningOver(false)
  63. /**课时列表点击课时完全完成*/
  64. AppConstants.DIALOG_TYPE_LESSON_ITEM_CLICK_ALL_OVER -> initLessonItemClickLessonOver()
  65. /** 课时列表item点击 */
  66. AppConstants.DIALOG_TYPE_LESSON_ITEM_CLICK_NOT_DOING_AFTER_TEST -> initLessonLearningOver(true)
  67. /** 作文课时item学习完成滴点击 */
  68. AppConstants.DIALOG_TYPE_LESSON_ITEM_CLICK_COMPOSITION_KNOWLEDGE_OVER -> initCompositionKnowledgeLearning(true)
  69. /** 作文课时学习中完成弹窗 */
  70. AppConstants.DIALOG_TYPE_LESSON_COMPOSITION_KNOWLEDGE_LEARNING_OVER -> initCompositionKnowledgeLearning(false)
  71. /** 复习完成 */
  72. AppConstants.DIALOG_TYPE_REVIEW_OVER -> initReviewOver()
  73. }
  74. }
  75. override fun onStart() {
  76. super.onStart()
  77. //设置dialog位置
  78. requireDialog().window?.let {
  79. it.attributes.run {
  80. y = ScreenUtil.getScreenHeight() / 5
  81. it.attributes = this
  82. }
  83. it.setGravity(Gravity.TOP)
  84. }
  85. }
  86. /** 初始化分数 */
  87. private fun initScore() {
  88. //插画
  89. when {
  90. learnDialogBean.score < AppConstants.TEST_SCORE_LEVEL_1 -> {
  91. binding.imgIv.setImageResource(R.mipmap.test_score_level_1)
  92. binding.tvScore.setTextColor(ContextCompat.getColor(requireContext(), R.color.gray_2))
  93. }
  94. learnDialogBean.score < AppConstants.TEST_SCORE_LEVEL_2 -> {
  95. binding.imgIv.setImageResource(R.mipmap.test_score_level_2)
  96. binding.tvScore.setTextColor(ContextCompat.getColor(requireContext(), R.color.red_2))
  97. }
  98. else -> {
  99. binding.imgIv.setImageResource(R.mipmap.test_score_level_3)
  100. binding.tvScore.setTextColor(ContextCompat.getColor(requireContext(), R.color.red_1))
  101. }
  102. }
  103. //分数
  104. binding.tvScore.text = "${learnDialogBean.score}分"
  105. }
  106. /** 设置成绩数量 */
  107. private fun initNumber() {
  108. binding.incStatisticsNumber.run {
  109. tvCorrectNumber.text = "${learnDialogBean.correctNumber}"
  110. tvErrorNumber.text = "${learnDialogBean.errorNumber}"
  111. }
  112. }
  113. /** 学前总测试 结束 */
  114. private fun initCourseBeforeTotalTestOver() {
  115. binding.run {
  116. tvScore.visibility = View.VISIBLE
  117. tvTip.visibility = View.VISIBLE
  118. tvTip1.visibility = View.VISIBLE
  119. tvTitle.visibility = View.VISIBLE
  120. incStatisticsNumber.root.visibility = View.VISIBLE
  121. tvTitle.text = "恭喜你,完成了学前总测试!"
  122. tvTip1.text = "学考乐已为您智能生成了个性化学习计划"
  123. tvRight.text = resources.getString(R.string.start_learn)
  124. tvRight.click {
  125. onDialogListener(AppConstants.ACTION_COURSE_TEST_START_LEARN, this@LearnDialog)
  126. }
  127. }
  128. initScore()
  129. initNumber()
  130. }
  131. /**
  132. * 课时学前测试开始开始前提示
  133. */
  134. private fun initLessonBeforeTestStart() {
  135. binding.run {
  136. ivClose.visibility = View.VISIBLE
  137. tvTitle.visibility = View.VISIBLE
  138. tvLessonName.visibility = View.VISIBLE
  139. tvCountTime.visibility = View.VISIBLE
  140. tvTitle.text = "课时学前测试"
  141. tvLessonName.text = learnDialogBean.chapter_lesson_name
  142. tvCountTime.text = learnDialogBean.showTimeCount
  143. tvRight.text = "开始测试"
  144. imgIv.setImageResource(if (Random.nextBoolean()) R.mipmap.boy_1 else R.mipmap.girl_1)
  145. //开始测试,进入课时学前测试界面
  146. binding.tvRight.click {
  147. onDialogListener(AppConstants.DIALOG_START_TEST, this@LearnDialog)
  148. }
  149. binding.ivClose.click { dismissAllowingStateLoss() }
  150. }
  151. }
  152. /**
  153. * 课时学前测试结束
  154. */
  155. private fun initLessonBeforeTestOver() {
  156. binding.run {
  157. imgIv.setImageResource(if (Random.nextBoolean()) R.mipmap.boy_2 else R.mipmap.girl_2)
  158. tvScore.visibility = View.VISIBLE
  159. tvTip.visibility = View.VISIBLE
  160. tvTitle.visibility = View.VISIBLE
  161. tvTip1.visibility = View.VISIBLE
  162. incStatisticsNumber.root.visibility = View.VISIBLE
  163. tvTitle.text = "恭喜你,完成了课时学前测试"
  164. tvTip1.setText(resources.getString(R.string.test_before_test_over_tip))
  165. tvRight.setText(resources.getString(R.string.start_learn))
  166. }
  167. initScore()
  168. initNumber()
  169. binding.tvRight.click {
  170. //开始学习
  171. onDialogListener(AppConstants.DIALOG_START_LEARN,this)
  172. }
  173. }
  174. /**
  175. * 课时学习中的学习完成
  176. * @param isShowCloseImg 是否需要显示关闭按钮
  177. */
  178. private fun initLessonLearningOver(isShowCloseImg:Boolean){
  179. initNumber()
  180. binding.run {
  181. imgIv.setImageResource(if (Random.nextBoolean()) R.mipmap.boy_2 else R.mipmap.girl_2)
  182. tvTitle.visibility = View.VISIBLE
  183. tvTitle.text = "恭喜你,本课时学习完成!"
  184. incStatisticsNumber.root.visibility = View.VISIBLE
  185. tvLearnOverTip.visibility = View.VISIBLE
  186. tvLearnOverForAfterCountTime.visibility = View.VISIBLE
  187. tvLearnOverForAfterCountTime.text = learnDialogBean.showTimeCount
  188. tvLeft.visibility = View.VISIBLE
  189. tvLeft.text = "重新学习"
  190. vSplit.visibility = View.VISIBLE
  191. tvRight.text = "开始测试"
  192. }
  193. binding.tvLeft.click { onDialogListener(AppConstants.DIALOG_LESSON_RELEARN, this) }
  194. binding.tvRight.click { onDialogListener(AppConstants.DIALOG_START_TEST, this) }
  195. if (isShowCloseImg){
  196. binding.ivClose.visibility = View.VISIBLE
  197. binding.ivClose.click { dismissAllowingStateLoss() }
  198. }
  199. }
  200. /**
  201. * 课时后测试结束
  202. */
  203. private fun initLessonAfterTestOver(){
  204. initNumber()
  205. initScore()
  206. binding.run {
  207. tvScore.visibility = View.VISIBLE
  208. tvTip.visibility = View.VISIBLE
  209. tvTitle.visibility = View.VISIBLE
  210. incStatisticsNumber.root.visibility = View.VISIBLE
  211. tvTop.visibility = View.VISIBLE
  212. tvLeft.visibility = View.VISIBLE
  213. vSplit.visibility = View.VISIBLE
  214. tvTitle.text = "恭喜你,完成了课时学后测试"
  215. tvTop.text = "重新学习"
  216. tvLeft.text = "再测一次"
  217. tvRight.text = "下一课时"
  218. // TODO: 2022/4/21 小游戏练习先搁置
  219. // tvTop1.visibility = View.VISIBLE
  220. // tvTop.text = "小游戏练习"
  221. }
  222. binding.tvTop.click {
  223. onDialogListener(AppConstants.DIALOG_LESSON_RELEARN, this)
  224. }
  225. binding.tvLeft.click {
  226. onDialogListener(AppConstants.DIALOG_LESSON_AFTER_TEST_AGAIN,this)
  227. }
  228. binding.tvRight.click {
  229. onDialogListener(AppConstants.DIALOG_LESSON_AFTER_TEST_NEXT,this)
  230. }
  231. }
  232. /**
  233. * 课程学后总测试开始前提示弹窗
  234. */
  235. private fun initCourseAfterTestStart() {
  236. binding.run {
  237. imgIv.setImageResource(if (Random.nextBoolean()) R.mipmap.boy_2 else R.mipmap.girl_2)
  238. tvLessonName.visibility = View.INVISIBLE //占布局,避免布局变形
  239. tvTitle.visibility = View.VISIBLE
  240. tvTitle.text = "恭喜你,本课程全部学习完成!"
  241. tvTip1.visibility = View.VISIBLE
  242. tvTip1.text = "我的学习效果是?快去学后总测试吧!"
  243. tvCountTime.visibility = View.VISIBLE
  244. tvCountTime.text = learnDialogBean.showTimeCount
  245. tvRight.text = "开始测试"
  246. //开始测试,进入课时学前测试界面
  247. binding.tvRight.click {
  248. onDialogListener(AppConstants.DIALOG_START_TEST, this@LearnDialog)
  249. }
  250. tvLeft.visibility = View.VISIBLE
  251. vSplit.visibility = View.VISIBLE
  252. tvLeft.text = "完成"
  253. binding.tvLeft.click {
  254. onDialogListener(AppConstants.DIALOG_OVER, this@LearnDialog)
  255. }
  256. }
  257. }
  258. /**
  259. * 课程学后总测试结束弹窗
  260. */
  261. private fun initCourseAfterTestOver(){
  262. initNumber()
  263. initScore()
  264. binding.run {
  265. tvScore.visibility = View.VISIBLE
  266. tvTip.visibility = View.VISIBLE
  267. tvTitle.visibility = View.VISIBLE
  268. tvTip1.visibility = View.VISIBLE
  269. incStatisticsNumber.root.visibility = View.VISIBLE
  270. tvTop.visibility = View.VISIBLE
  271. tvLeft.visibility = View.VISIBLE
  272. vSplit.visibility = View.VISIBLE
  273. tvTitle.text = "恭喜你,完成了学后总测试"
  274. tvTop.text = "继续学习"
  275. tvLeft.text = "再测一次"
  276. tvRight.text = "完成"
  277. }
  278. binding.tvTop.click {
  279. onDialogListener(AppConstants.DIALOG_OVER, this)
  280. }
  281. binding.tvLeft.click {
  282. onDialogListener(AppConstants.DIALOG_AFTER_TOTAL_TEST_AGAIN,this)
  283. }
  284. binding.tvRight.click {
  285. onDialogListener(AppConstants.DIALOG_OVER, this)
  286. }
  287. }
  288. /**
  289. * 课时列表item点击时课程已完全学习完成(学前测、学后测、学习都已完成)的提示弹窗
  290. * tv_title,inc_statistics_number,tv_learn_over_tip,tv_learn_over_for_after_count_time,tv_left,vSplit
  291. */
  292. private fun initLessonItemClickLessonOver(){
  293. initNumber()
  294. binding.run {
  295. imgIv.setImageResource(if (Random.nextBoolean()) R.mipmap.boy_2 else R.mipmap.girl_2)
  296. ivClose.visibility = View.VISIBLE
  297. tvTitle.visibility = View.VISIBLE
  298. tvTitle.text = "恭喜你,本课时学习完成!"
  299. incStatisticsNumber.root.visibility = View.VISIBLE
  300. tvLearnOverTip.visibility = View.VISIBLE
  301. tvLearnOverTip.text = "你可重新学习本课时,或重新进行课时学后测试"
  302. tvLearnOverForAfterCountTime.visibility = View.VISIBLE
  303. tvLearnOverForAfterCountTime.text = "(上次课时学后测试成绩:${learnDialogBean.score})"
  304. tvLeft.visibility = View.VISIBLE
  305. tvLeft.text = "重新学习"
  306. vSplit.visibility = View.VISIBLE
  307. tvRight.text = "课时学后测试"
  308. }
  309. binding.ivClose.click { dismissAllowingStateLoss() }
  310. binding.tvLeft.click { onDialogListener(AppConstants.DIALOG_LESSON_RELEARN, this) }
  311. binding.tvRight.click { onDialogListener(AppConstants.DIALOG_START_TEST, this) }
  312. }
  313. /**
  314. * 作文知识点课时学习完成
  315. * @param isShowCloseImg 是否需要显示关闭按钮
  316. */
  317. private fun initCompositionKnowledgeLearning(isShowCloseImg:Boolean){
  318. initNumber()
  319. binding.run {
  320. imgIv.setImageResource(if (Random.nextBoolean()) R.mipmap.boy_2 else R.mipmap.girl_2)
  321. tvTitle.visibility = View.VISIBLE
  322. tvTitle.text = "恭喜你,本课时学习完成!"
  323. incStatisticsNumber.root.visibility = View.VISIBLE
  324. tvLearnOverTip.visibility = View.VISIBLE
  325. tvLearnOverTip.text = "你可重新学习本课时,重新学习将清除原学习记录"
  326. tvLeft.visibility = View.VISIBLE
  327. tvLeft.text = "重新学习"
  328. vSplit.visibility = View.VISIBLE
  329. tvRight.text = "完成"
  330. }
  331. binding.tvLeft.click { onDialogListener(AppConstants.DIALOG_LESSON_RELEARN, this) }
  332. //学习中的完成,同时需要关闭学习页
  333. binding.tvRight.click { onDialogListener(AppConstants.DIALOG_OVER, this) }
  334. if (isShowCloseImg){
  335. binding.ivClose.visibility = View.VISIBLE
  336. binding.ivClose.click { dismissAllowingStateLoss() }
  337. }
  338. }
  339. /**
  340. * 作文知识点测试完成
  341. * tv_score,tv_tip,tv_title,inc_statistics_number,tv_left,vSplit
  342. */
  343. private fun initCompositionExamLessonTestOver() {
  344. initScore()
  345. initNumber()
  346. binding.run {
  347. imgIv.setImageResource(if (Random.nextBoolean()) R.mipmap.boy_2 else R.mipmap.girl_2)
  348. tvScore.visibility = View.VISIBLE
  349. tvTip.visibility = View.VISIBLE
  350. tvTitle.visibility = View.VISIBLE
  351. incStatisticsNumber.root.visibility = View.VISIBLE
  352. tvTitle.text = "恭喜你,完成了知识点测试!"
  353. tvLeft.visibility = View.VISIBLE
  354. tvLeft.text = "再测一次"
  355. tvRight.text = "完成"
  356. }
  357. binding.tvLeft.click { onDialogListener(AppConstants.DIALOG_START_TEST,this) }
  358. binding.tvRight.click { onDialogListener(AppConstants.DIALOG_OVER,this) }
  359. }
  360. /**
  361. * 复习完成 tv_title,tv_tip_1
  362. */
  363. private fun initReviewOver(){
  364. binding.run {
  365. imgIv.setImageResource(if (Random.nextBoolean()) R.mipmap.boy_2 else R.mipmap.girl_2)
  366. tvTitle.visibility = View.VISIBLE
  367. tvTitle.text = "智能复习已完成,太棒了!"
  368. tvTip1.visibility = View.VISIBLE
  369. tvTip1.text = when{
  370. learnDialogBean.errorNumber == 0 -> "我复习了${learnDialogBean.correctNumber}个词条"
  371. else -> "我复习了${learnDialogBean.correctNumber}个词条,词汇量增加了${learnDialogBean.errorNumber}"
  372. }
  373. tvRight.text = "完成"
  374. }
  375. binding.tvRight.click { onDialogListener(AppConstants.DIALOG_OVER,this) }
  376. }
  377. }