From b13afc751dbbce24753d008f1f87d2c5e133a4ad Mon Sep 17 00:00:00 2001
From: lmw <125975490@qq.com>
Date: 星期二, 09 七月 2024 15:19:26 +0800
Subject: [PATCH] fix bug

---
 app/src/main/java/com/dollearn/student/ui/home/QAFragment.kt |  132 ++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 116 insertions(+), 16 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..7035674 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 }
@@ -46,6 +58,7 @@
     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 +70,7 @@
 
     private var answerList = arrayListOf<String>() //右侧答案语音
 
+    private var nowVoiceView: View? = null
 
     override fun onFirstVisibleToUser() {
         player.setOnAudioStatusUpdateListener(this)
@@ -66,6 +80,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 +91,14 @@
                             (requireActivity() as QAActivity).next()
                         }
                     }
+                    PLAY_RIGHT->{
+                        rightPlaying = true
+                        player.startPlayMusic(requireContext(),rightVoice)
+                    }
+                    PLAY_ERROR->{
+                        errorPlaying = true
+                        player.startPlayMusic(requireContext(),errorVoice)
+                    }
                 }
             }
         }
@@ -83,27 +106,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 +143,26 @@
                 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()
+                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 +170,68 @@
                 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()
+                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 +250,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 +346,8 @@
 
     override fun onStartPlay() {
         playing = true
+        if (rightPlaying||errorPlaying)
+            return
         v1Views[voiceIndex].gone()
         v2Views[voiceIndex].gone()
         playingViews[voiceIndex].visible()
@@ -296,8 +371,33 @@
         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()
     }
 }
\ No newline at end of file

--
Gitblit v1.7.1