From a036ac0c6c8d87f36e68f88f05231c3be23fcc4b Mon Sep 17 00:00:00 2001
From: lmw <125975490@qq.com>
Date: 星期四, 01 八月 2024 13:32:55 +0800
Subject: [PATCH] 修改bug

---
 app/src/main/java/com/dollearn/student/ui/home/QAFragment.kt |  146 +++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 129 insertions(+), 17 deletions(-)

diff --git a/app/src/main/java/com/dollearn/student/ui/home/QAFragment.kt b/app/src/main/java/com/dollearn/student/ui/home/QAFragment.kt
index 187f0a4..ab2bb3c 100644
--- a/app/src/main/java/com/dollearn/student/ui/home/QAFragment.kt
+++ b/app/src/main/java/com/dollearn/student/ui/home/QAFragment.kt
@@ -15,9 +15,12 @@
 import cn.sinata.xldutils.fragment.BaseFragment
 import cn.sinata.xldutils.gone
 import cn.sinata.xldutils.invisible
+import cn.sinata.xldutils.utils.SPUtils
+import cn.sinata.xldutils.utils.myToast
 import cn.sinata.xldutils.visible
 import com.dollearn.student.R
 import com.dollearn.student.utils.AudioUtils
+import com.dollearn.student.utils.Const
 import com.dollearn.student.utils.extention.clickDelay
 import kotlinx.android.synthetic.main.fragment_q_a.*
 import org.jetbrains.anko.support.v4.dip
@@ -30,6 +33,15 @@
     private var handler: Handler? = null
     private val PLAY_VOICE = 1
     private val TO_NEXT = 2
+
+    private val PLAY_ERROR = 3
+    private val PLAY_RIGHT = 4
+
+    private val errorVoice by lazy { SPUtils.instance().getString(Const.EV) }
+    private val rightVoice by lazy { SPUtils.instance().getString(Const.RV) }
+
+    private var rightPlaying = false
+    private var errorPlaying = false
 
     private val player by lazy { AudioUtils() }
     private val group by lazy { arguments?.getInt("group")?:0 }
@@ -45,7 +57,7 @@
     private val voiceViews by lazy { arrayListOf(cl_voice_1,cl_voice_2,cl_voice_3,cl_voice_4) } //语音蓝条
     private val v1Views by lazy { arrayListOf(iv1_1,iv1_2,iv1_3,iv1_4,iv1_answer_1,iv1_answer_2,iv1_answer_3) }
     private val v2Views by lazy { arrayListOf(iv2_1,iv2_2,iv2_3,iv2_4,iv2_answer_1,iv2_answer_2,iv2_answer_3) }
-    private val v3Views by lazy { arrayListOf(iv3_1,iv3_2,iv3_3,iv3_4) }
+    private val resultViews by lazy { arrayListOf(iv_right_1,iv_right_2,iv_right_3,iv_right_4) }
     private val playingViews by lazy { arrayListOf(iv_playing_1,iv_playing_2,iv_playing_3,iv_playing_4,iv_playing_answer_1,iv_playing_answer_2,iv_playing_answer_3) }
 
     private var voiceIndex = -1 //点击播放的声音序号 0-3取值
@@ -57,6 +69,7 @@
 
     private var answerList = arrayListOf<String>() //右侧答案语音
 
+    private var nowVoiceView: View? = null
 
     override fun onFirstVisibleToUser() {
         player.setOnAudioStatusUpdateListener(this)
@@ -66,6 +79,7 @@
                 super.handleMessage(msg)
                 when(msg.what){
                     PLAY_VOICE->{
+                        playing = true
                         if (voiceIndex in 0..3)
                             player.startPlayMusic(requireContext(),list[voiceIndex].correct)
                         else
@@ -76,6 +90,14 @@
                             (requireActivity() as QAActivity).next()
                         }
                     }
+                    PLAY_RIGHT->{
+                        rightPlaying = true
+                        player.startPlayMusic(requireContext(),rightVoice)
+                    }
+                    PLAY_ERROR->{
+                        errorPlaying = true
+                        player.startPlayMusic(requireContext(),errorVoice)
+                    }
                 }
             }
         }
@@ -83,27 +105,36 @@
         iv_2.setImageURI(list[1].img)
         iv_3.setImageURI(list[2].img)
         iv_4.setImageURI(list[3].img)
-        showVoiceUi()
-
+        recover()
         rl_check_1.clickDelay {
             if (playing)
                 return@clickDelay
             if (list[questionIndex].completed) //已作答
                 return@clickDelay
+            if (!rl_check_1.isSelected||!rl_check_2.isSelected||!rl_check_3.isSelected){
+                myToast("请先听完")
+                return@clickDelay
+            }
             act.totalCount++
             if (list[questionIndex].correct == answerList[0]){
                 act.rightCount++
                 Log.e(TAG,"选择正确")
                 transAnimation(cl_answer_1,voiceViews[questionIndex])
-                list[questionIndex].completed = true
-                cl_answer_1.callOnClick()
+                resultViews[questionIndex].visible()
+                resultViews[questionIndex].postDelayed({
+                    resultViews[questionIndex].gone()
+                },3000)
+                nowVoiceView = voiceViews[questionIndex]
+                handler?.sendEmptyMessage(PLAY_RIGHT)
             }else{
+                recoverAnswer()
+                handler?.sendEmptyMessage(PLAY_ERROR)
                 dot_1.visible()
                 iv_error_1.visible()
                 dot_1.postDelayed({
                     dot_1.gone()
                     iv_error_1.gone()
-                },500)
+                },3000)
             }
         }
         rl_check_2.clickDelay {
@@ -111,20 +142,30 @@
                 return@clickDelay
             if (list[questionIndex].completed) //已作答
                 return@clickDelay
+            if (!rl_check_1.isSelected||!rl_check_2.isSelected||!rl_check_3.isSelected){
+                myToast("请先听完")
+                return@clickDelay
+            }
             act.totalCount++
             if (list[questionIndex].correct == answerList[1]){
                 act.rightCount++
                 Log.e(TAG,"选择正确")
                 transAnimation(cl_answer_2,voiceViews[questionIndex])
-                list[questionIndex].completed = true
-                cl_answer_2.callOnClick()
+                resultViews[questionIndex].visible()
+                resultViews[questionIndex].postDelayed({
+                    resultViews[questionIndex].gone()
+                },3000)
+                nowVoiceView = voiceViews[questionIndex]
+                handler?.sendEmptyMessage(PLAY_RIGHT)
             }else{
+                recoverAnswer()
+                handler?.sendEmptyMessage(PLAY_ERROR)
                 dot_2.visible()
                 iv_error_2.visible()
                 dot_2.postDelayed({
                     dot_2.gone()
                     iv_error_2.gone()
-                },500)
+                },3000)
             }
         }
         rl_check_3.clickDelay {
@@ -132,42 +173,72 @@
                 return@clickDelay
             if (list[questionIndex].completed) //已作答
                 return@clickDelay
+            if (!rl_check_1.isSelected||!rl_check_2.isSelected||!rl_check_3.isSelected){
+                myToast("请先听完")
+                return@clickDelay
+            }
             act.totalCount++
             if (list[questionIndex].correct == answerList[2]){
                 act.rightCount++
                 Log.e(TAG,"选择正确")
                 transAnimation(cl_answer_3,voiceViews[questionIndex])
-                list[questionIndex].completed = true
-                cl_answer_3.callOnClick()
+                resultViews[questionIndex].visible()
+                resultViews[questionIndex].postDelayed({
+                    resultViews[questionIndex].gone()
+                },3000)
+                nowVoiceView = voiceViews[questionIndex]
+                handler?.sendEmptyMessage(PLAY_RIGHT)
             }else{
+                recoverAnswer()
+                handler?.sendEmptyMessage(PLAY_ERROR)
                 dot_3.visible()
                 iv_error_3.visible()
                 dot_3.postDelayed({
                     dot_3.gone()
                     iv_error_3.gone()
-                },500)
+                },3000)
             }
         }
     }
 
 
-
+    /**
+     * 恢复答案和题目ui
+     */
     fun recover(){
+        showVoiceUi()
+        list.forEach { it.completed = false }
+        recoverAnswer()
+    }
 
+    /**
+     * 只恢复答案ui
+     */
+    private fun recoverAnswer(){
+        rl_check_1.isSelected = false
+        rl_check_2.isSelected = false
+        rl_check_3.isSelected = false
+        if (list.filter { it.completed }.isEmpty()){
+            voiceViews[2].isEnabled = false
+            voiceViews[3].isEnabled = false
+        }else{
+            voiceViews[2].isEnabled = true
+            voiceViews[3].isEnabled = true
+        }
     }
 
     private fun showVoiceUi(){
         list.forEachIndexed { index, subject ->
             if (subject.isQuestion == 1){
-                v3Views[index].setImageResource(R.mipmap.voice_question)
                 voiceViews[index].visible()
             }else{
-                v3Views[index].setImageResource(R.mipmap.voice_answer)
                 voiceViews[index].invisible()
             }
             voiceViews[index].clickDelay {
-                voiceIndex = index
-                handler?.sendEmptyMessage(PLAY_VOICE)
+                if (!playing){
+                    voiceIndex = index
+                    handler?.sendEmptyMessage(PLAY_VOICE)
+                }
             }
         }
     }
@@ -186,6 +257,15 @@
             layoutChanged = true
         }
         questionIndex = position
+        if (questionIndex == 0||questionIndex == 2){
+            iv2_answer_1.setImageResource(R.mipmap.voice_question)
+            iv2_answer_2.setImageResource(R.mipmap.voice_question)
+            iv2_answer_3.setImageResource(R.mipmap.voice_question)
+        }else{
+            iv2_answer_1.setImageResource(R.mipmap.voice_answer)
+            iv2_answer_2.setImageResource(R.mipmap.voice_answer)
+            iv2_answer_3.setImageResource(R.mipmap.voice_answer)
+        }
         rl_check_1.visible()
         rl_check_2.visible()
         rl_check_3.visible()
@@ -273,6 +353,8 @@
 
     override fun onStartPlay() {
         playing = true
+        if (rightPlaying||errorPlaying)
+            return
         v1Views[voiceIndex].gone()
         v2Views[voiceIndex].gone()
         playingViews[voiceIndex].visible()
@@ -296,8 +378,38 @@
         v1Views[voiceIndex].visible()
         v2Views[voiceIndex].visible()
         playingViews[voiceIndex].gone()
+        if (!errorPlaying&&!rightPlaying&&!list[questionIndex].completed){
+            if (voiceIndex == 4){
+                rl_check_1.isSelected = true
+            }
+            if (voiceIndex == 5){
+                rl_check_2.isSelected = true
+            }
+            if (voiceIndex == 6){
+                rl_check_3.isSelected = true
+            }
+        }
+
         if (list.filter { it.completed }.size == 2){ //全部作答,3秒后下一题
             handler?.sendEmptyMessageDelayed(TO_NEXT,3000)
         }
+        if (errorPlaying)
+            errorPlaying = false
+        if (rightPlaying){
+            rightPlaying = false
+            nowVoiceView?.callOnClick()
+            list[questionIndex].completed = true
+            recoverAnswer()
+        }
+    }
+
+    override fun onPause() {
+        super.onPause()
+        player.stopPlayMusic()
+    }
+
+    override fun onDestroy() {
+        super.onDestroy()
+        handler?.removeCallbacksAndMessages(null)
     }
 }
\ No newline at end of file

--
Gitblit v1.7.1