123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419 |
- package com.xkl.cdl.dialog
-
- import android.os.Bundle
- import android.view.Gravity
- import android.view.View
- import androidx.core.content.ContextCompat
- import com.suliang.common.AppConfig
- import com.suliang.common.base.BaseDialogFragment
- import com.suliang.common.extension.click
- import com.suliang.common.util.os.ScreenUtil
- import com.xkl.cdl.R
- import com.xkl.cdl.data.AppConstants
- import com.xkl.cdl.data.bean.LearnDialogBean
- import com.xkl.cdl.databinding.DialogLessonLearnBinding
- import kotlin.random.Random
-
- /**
- * author suliang
- * create 2022/4/2 15:47
- * Describe: 学习的通用弹窗
- */
- class LearnDialog private constructor() : BaseDialogFragment<DialogLessonLearnBinding>() {
-
- companion object {
- fun newInstance(params : LearnDialogBean) : LearnDialog {
- val args = Bundle()
- args.putParcelable(AppConfig.INTENT_1, params)
- val fragment = LearnDialog()
- fragment.arguments = args
- return fragment
- }
- }
-
- /** 事件动作 */
- lateinit var onDialogListener : (action : Int, dialog : LearnDialog) -> Unit
-
- //参数
- private lateinit var learnDialogBean : LearnDialogBean
-
-
- override fun onCreate(savedInstanceState : Bundle?) {
- super.onCreate(savedInstanceState)
- //取值获参
- learnDialogBean = requireArguments().getParcelable(AppConfig.INTENT_1)!!
- }
-
-
- override fun initFragment() {
-
- when (learnDialogBean.dialogType) {
- //测试开始弹窗
- AppConstants.DIALOG_TYPE_EXAM_START -> when(learnDialogBean.examType){
- //课时学前测试开始弹窗
- AppConstants.TEST_TYPE_BEFORE -> initLessonBeforeTestStart()
- //课时最后一个课时测试结束的下一步弹出此弹窗:学后总测试开始的弹窗
- AppConstants.TEST_TYPE_AFTER_TOTAL -> initCourseAfterTestStart()
- }
- //测试结束弹窗
- AppConstants.DIALOG_TYPE_EXAM_OVER -> when (learnDialogBean.examType) {
- //学前总测结束弹窗
- AppConstants.TEST_TYPE_BEFORE_TOTAL -> initCourseBeforeTotalTestOver()
- //课时学前测试结束弹窗
- AppConstants.TEST_TYPE_BEFORE-> initLessonBeforeTestOver()
- //课时后测试结束
- AppConstants.TEST_TYPE_AFTER -> initLessonAfterTestOver()
- //学后总测试结束弹窗
- AppConstants.TEST_TYPE_AFTER_TOTAL -> initCourseAfterTestOver()
- //作文知识点测试结束
- AppConstants.TEST_TYPE_COMPOSITION -> initCompositionExamLessonTestOver()
- }
- //学习结束弹窗
- AppConstants.DIALOG_TYPE_LEARNING_OVER -> initLessonLearningOver(false)
- /**课时列表点击课时完全完成*/
- AppConstants.DIALOG_TYPE_LESSON_ITEM_CLICK_ALL_OVER -> initLessonItemClickLessonOver()
- /** 课时列表item点击 */
- AppConstants.DIALOG_TYPE_LESSON_ITEM_CLICK_NOT_DOING_AFTER_TEST -> initLessonLearningOver(true)
- /** 作文课时item学习完成滴点击 */
- AppConstants.DIALOG_TYPE_LESSON_ITEM_CLICK_COMPOSITION_KNOWLEDGE_OVER -> initCompositionKnowledgeLearning(true)
- /** 作文课时学习中完成弹窗 */
- AppConstants.DIALOG_TYPE_LESSON_COMPOSITION_KNOWLEDGE_LEARNING_OVER -> initCompositionKnowledgeLearning(false)
- /** 复习完成 */
- AppConstants.DIALOG_TYPE_REVIEW_OVER -> initReviewOver()
- }
- }
-
- override fun onStart() {
- super.onStart()
- //设置dialog位置
- requireDialog().window?.let {
- it.attributes.run {
- y = ScreenUtil.getScreenHeight() / 5
- it.attributes = this
- }
- it.setGravity(Gravity.TOP)
- }
- }
-
- /** 初始化分数 */
- private fun initScore() {
- //插画
- when {
- learnDialogBean.score < AppConstants.TEST_SCORE_LEVEL_1 -> {
- binding.imgIv.setImageResource(R.mipmap.test_score_level_1)
- binding.tvScore.setTextColor(ContextCompat.getColor(requireContext(), R.color.gray_2))
- }
- learnDialogBean.score < AppConstants.TEST_SCORE_LEVEL_2 -> {
- binding.imgIv.setImageResource(R.mipmap.test_score_level_2)
- binding.tvScore.setTextColor(ContextCompat.getColor(requireContext(), R.color.red_2))
- }
- else -> {
- binding.imgIv.setImageResource(R.mipmap.test_score_level_3)
- binding.tvScore.setTextColor(ContextCompat.getColor(requireContext(), R.color.red_1))
- }
- }
- //分数
- binding.tvScore.text = "${learnDialogBean.score}分"
- }
-
- /** 设置成绩数量 */
- private fun initNumber() {
- binding.incStatisticsNumber.run {
- tvCorrectNumber.text = "${learnDialogBean.correctNumber}"
- tvErrorNumber.text = "${learnDialogBean.errorNumber}"
- }
- }
-
-
- /** 学前总测试 结束 */
- private fun initCourseBeforeTotalTestOver() {
- binding.run {
- tvScore.visibility = View.VISIBLE
- tvTip.visibility = View.VISIBLE
- tvTip1.visibility = View.VISIBLE
- tvTitle.visibility = View.VISIBLE
- incStatisticsNumber.root.visibility = View.VISIBLE
- tvTitle.text = "恭喜你,完成了学前总测试!"
- tvTip1.text = "学考乐已为您智能生成了个性化学习计划"
- tvRight.text = resources.getString(R.string.start_learn)
- tvRight.click {
- onDialogListener(AppConstants.ACTION_COURSE_TEST_START_LEARN, this@LearnDialog)
- }
- }
- initScore()
- initNumber()
- }
-
- /**
- * 课时学前测试开始开始前提示
- */
- private fun initLessonBeforeTestStart() {
- binding.run {
- ivClose.visibility = View.VISIBLE
- tvTitle.visibility = View.VISIBLE
- tvLessonName.visibility = View.VISIBLE
- tvCountTime.visibility = View.VISIBLE
- tvTitle.text = "课时学前测试"
- tvLessonName.text = learnDialogBean.chapter_lesson_name
- tvCountTime.text = learnDialogBean.showTimeCount
- tvRight.text = "开始测试"
- imgIv.setImageResource(if (Random.nextBoolean()) R.mipmap.boy_1 else R.mipmap.girl_1)
- //开始测试,进入课时学前测试界面
- binding.tvRight.click {
- onDialogListener(AppConstants.DIALOG_START_TEST, this@LearnDialog)
- }
- binding.ivClose.click { dismissAllowingStateLoss() }
- }
- }
-
- /**
- * 课时学前测试结束
- */
- private fun initLessonBeforeTestOver() {
- binding.run {
- imgIv.setImageResource(if (Random.nextBoolean()) R.mipmap.boy_2 else R.mipmap.girl_2)
- tvScore.visibility = View.VISIBLE
- tvTip.visibility = View.VISIBLE
- tvTitle.visibility = View.VISIBLE
- tvTip1.visibility = View.VISIBLE
- incStatisticsNumber.root.visibility = View.VISIBLE
- tvTitle.text = "恭喜你,完成了课时学前测试"
- tvTip1.setText(resources.getString(R.string.test_before_test_over_tip))
- tvRight.setText(resources.getString(R.string.start_learn))
- }
- initScore()
- initNumber()
- binding.tvRight.click {
- //开始学习
- onDialogListener(AppConstants.DIALOG_START_LEARN,this)
- }
- }
-
- /**
- * 课时学习中的学习完成
- * @param isShowCloseImg 是否需要显示关闭按钮
- */
- private fun initLessonLearningOver(isShowCloseImg:Boolean){
- initNumber()
- binding.run {
- imgIv.setImageResource(if (Random.nextBoolean()) R.mipmap.boy_2 else R.mipmap.girl_2)
- tvTitle.visibility = View.VISIBLE
- tvTitle.text = "恭喜你,本课时学习完成!"
- incStatisticsNumber.root.visibility = View.VISIBLE
- tvLearnOverTip.visibility = View.VISIBLE
- tvLearnOverForAfterCountTime.visibility = View.VISIBLE
- tvLearnOverForAfterCountTime.text = learnDialogBean.showTimeCount
- tvLeft.visibility = View.VISIBLE
- tvLeft.text = "重新学习"
- vSplit.visibility = View.VISIBLE
- tvRight.text = "开始测试"
- }
- binding.tvLeft.click { onDialogListener(AppConstants.DIALOG_LESSON_RELEARN, this) }
- binding.tvRight.click { onDialogListener(AppConstants.DIALOG_START_TEST, this) }
- if (isShowCloseImg){
- binding.ivClose.visibility = View.VISIBLE
- binding.ivClose.click { dismissAllowingStateLoss() }
- }
- }
-
-
- /**
- * 课时后测试结束
- */
- private fun initLessonAfterTestOver(){
- initNumber()
- initScore()
-
- binding.run {
- tvScore.visibility = View.VISIBLE
- tvTip.visibility = View.VISIBLE
- tvTitle.visibility = View.VISIBLE
- incStatisticsNumber.root.visibility = View.VISIBLE
- tvTop.visibility = View.VISIBLE
- tvLeft.visibility = View.VISIBLE
- vSplit.visibility = View.VISIBLE
- tvTitle.text = "恭喜你,完成了课时学后测试"
- tvTop.text = "重新学习"
- tvLeft.text = "再测一次"
- tvRight.text = "下一课时"
-
- // TODO: 2022/4/21 小游戏练习先搁置
- // tvTop1.visibility = View.VISIBLE
- // tvTop.text = "小游戏练习"
- }
-
- binding.tvTop.click {
- onDialogListener(AppConstants.DIALOG_LESSON_RELEARN, this)
- }
- binding.tvLeft.click {
- onDialogListener(AppConstants.DIALOG_LESSON_AFTER_TEST_AGAIN,this)
- }
- binding.tvRight.click {
- onDialogListener(AppConstants.DIALOG_LESSON_AFTER_TEST_NEXT,this)
- }
- }
- /**
- * 课程学后总测试开始前提示弹窗
- */
- private fun initCourseAfterTestStart() {
-
- binding.run {
-
- imgIv.setImageResource(if (Random.nextBoolean()) R.mipmap.boy_2 else R.mipmap.girl_2)
-
- tvLessonName.visibility = View.INVISIBLE //占布局,避免布局变形
-
- tvTitle.visibility = View.VISIBLE
- tvTitle.text = "恭喜你,本课程全部学习完成!"
-
- tvTip1.visibility = View.VISIBLE
- tvTip1.text = "我的学习效果是?快去学后总测试吧!"
-
- tvCountTime.visibility = View.VISIBLE
- tvCountTime.text = learnDialogBean.showTimeCount
-
- tvRight.text = "开始测试"
-
- //开始测试,进入课时学前测试界面
- binding.tvRight.click {
- onDialogListener(AppConstants.DIALOG_START_TEST, this@LearnDialog)
- }
- tvLeft.visibility = View.VISIBLE
- vSplit.visibility = View.VISIBLE
- tvLeft.text = "完成"
- binding.tvLeft.click {
- onDialogListener(AppConstants.DIALOG_OVER, this@LearnDialog)
- }
- }
- }
-
- /**
- * 课程学后总测试结束弹窗
- */
- private fun initCourseAfterTestOver(){
- initNumber()
- initScore()
- binding.run {
- tvScore.visibility = View.VISIBLE
- tvTip.visibility = View.VISIBLE
- tvTitle.visibility = View.VISIBLE
- tvTip1.visibility = View.VISIBLE
- incStatisticsNumber.root.visibility = View.VISIBLE
- tvTop.visibility = View.VISIBLE
-
- tvLeft.visibility = View.VISIBLE
- vSplit.visibility = View.VISIBLE
- tvTitle.text = "恭喜你,完成了学后总测试"
- tvTop.text = "继续学习"
- tvLeft.text = "再测一次"
- tvRight.text = "完成"
- }
-
- binding.tvTop.click {
- onDialogListener(AppConstants.DIALOG_OVER, this)
- }
- binding.tvLeft.click {
- onDialogListener(AppConstants.DIALOG_AFTER_TOTAL_TEST_AGAIN,this)
- }
- binding.tvRight.click {
- onDialogListener(AppConstants.DIALOG_OVER, this)
- }
- }
-
- /**
- * 课时列表item点击时课程已完全学习完成(学前测、学后测、学习都已完成)的提示弹窗
- * tv_title,inc_statistics_number,tv_learn_over_tip,tv_learn_over_for_after_count_time,tv_left,vSplit
- */
- private fun initLessonItemClickLessonOver(){
- initNumber()
- binding.run {
- imgIv.setImageResource(if (Random.nextBoolean()) R.mipmap.boy_2 else R.mipmap.girl_2)
- ivClose.visibility = View.VISIBLE
- tvTitle.visibility = View.VISIBLE
- tvTitle.text = "恭喜你,本课时学习完成!"
- incStatisticsNumber.root.visibility = View.VISIBLE
- tvLearnOverTip.visibility = View.VISIBLE
- tvLearnOverTip.text = "你可重新学习本课时,或重新进行课时学后测试"
- tvLearnOverForAfterCountTime.visibility = View.VISIBLE
- tvLearnOverForAfterCountTime.text = "(上次课时学后测试成绩:${learnDialogBean.score})"
- tvLeft.visibility = View.VISIBLE
- tvLeft.text = "重新学习"
- vSplit.visibility = View.VISIBLE
- tvRight.text = "课时学后测试"
- }
- binding.ivClose.click { dismissAllowingStateLoss() }
- binding.tvLeft.click { onDialogListener(AppConstants.DIALOG_LESSON_RELEARN, this) }
- binding.tvRight.click { onDialogListener(AppConstants.DIALOG_START_TEST, this) }
- }
-
-
-
- /**
- * 作文知识点课时学习完成
- * @param isShowCloseImg 是否需要显示关闭按钮
- */
- private fun initCompositionKnowledgeLearning(isShowCloseImg:Boolean){
- initNumber()
- binding.run {
- imgIv.setImageResource(if (Random.nextBoolean()) R.mipmap.boy_2 else R.mipmap.girl_2)
- tvTitle.visibility = View.VISIBLE
- tvTitle.text = "恭喜你,本课时学习完成!"
- incStatisticsNumber.root.visibility = View.VISIBLE
- tvLearnOverTip.visibility = View.VISIBLE
- tvLearnOverTip.text = "你可重新学习本课时,重新学习将清除原学习记录"
- tvLeft.visibility = View.VISIBLE
- tvLeft.text = "重新学习"
- vSplit.visibility = View.VISIBLE
- tvRight.text = "完成"
- }
- binding.tvLeft.click { onDialogListener(AppConstants.DIALOG_LESSON_RELEARN, this) }
- //学习中的完成,同时需要关闭学习页
- binding.tvRight.click { onDialogListener(AppConstants.DIALOG_OVER, this) }
- if (isShowCloseImg){
- binding.ivClose.visibility = View.VISIBLE
- binding.ivClose.click { dismissAllowingStateLoss() }
- }
- }
-
-
- /**
- * 作文知识点测试完成
- * tv_score,tv_tip,tv_title,inc_statistics_number,tv_left,vSplit
- */
- private fun initCompositionExamLessonTestOver() {
- initScore()
- initNumber()
- binding.run {
- imgIv.setImageResource(if (Random.nextBoolean()) R.mipmap.boy_2 else R.mipmap.girl_2)
- tvScore.visibility = View.VISIBLE
- tvTip.visibility = View.VISIBLE
- tvTitle.visibility = View.VISIBLE
- incStatisticsNumber.root.visibility = View.VISIBLE
- tvTitle.text = "恭喜你,完成了知识点测试!"
- tvLeft.visibility = View.VISIBLE
- tvLeft.text = "再测一次"
- tvRight.text = "完成"
- }
- binding.tvLeft.click { onDialogListener(AppConstants.DIALOG_START_TEST,this) }
- binding.tvRight.click { onDialogListener(AppConstants.DIALOG_OVER,this) }
- }
-
- /**
- * 复习完成 tv_title,tv_tip_1
- */
- private fun initReviewOver(){
- binding.run {
- imgIv.setImageResource(if (Random.nextBoolean()) R.mipmap.boy_2 else R.mipmap.girl_2)
- tvTitle.visibility = View.VISIBLE
- tvTitle.text = "智能复习已完成,太棒了!"
- tvTip1.visibility = View.VISIBLE
- tvTip1.text = when{
- learnDialogBean.errorNumber == 0 -> "我复习了${learnDialogBean.correctNumber}个词条"
- else -> "我复习了${learnDialogBean.correctNumber}个词条,词汇量增加了${learnDialogBean.errorNumber}"
- }
- tvRight.text = "完成"
- }
- binding.tvRight.click { onDialogListener(AppConstants.DIALOG_OVER,this) }
- }
-
- }
|