From 442124baa483f8d1c4aaca7ff81e15dd3f122363 Mon Sep 17 00:00:00 2001
From: 罗明文 <125975490@qq.com>
Date: 星期四, 22 五月 2025 13:14:36 +0800
Subject: [PATCH] save

---
 app/src/main/java/com/dollearn/student/ui/home/ChooseVoiceFragment.kt |  292 +++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 199 insertions(+), 93 deletions(-)

diff --git a/app/src/main/java/com/dollearn/student/ui/home/ChooseVoiceFragment.kt b/app/src/main/java/com/dollearn/student/ui/home/ChooseVoiceFragment.kt
index 7c1086e..87021c0 100644
--- a/app/src/main/java/com/dollearn/student/ui/home/ChooseVoiceFragment.kt
+++ b/app/src/main/java/com/dollearn/student/ui/home/ChooseVoiceFragment.kt
@@ -9,12 +9,17 @@
 import androidx.core.os.bundleOf
 import cn.sinata.xldutils.fragment.BaseFragment
 import cn.sinata.xldutils.gone
+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.event.EmptyEvent
 import com.dollearn.student.utils.extention.clickDelay
 import kotlinx.android.synthetic.main.fragment_choose_voice.*
+import org.greenrobot.eventbus.EventBus
+import org.greenrobot.eventbus.Subscribe
 import org.jetbrains.anko.backgroundResource
 import org.jetbrains.anko.support.v4.toast
 
@@ -27,6 +32,15 @@
 
     private val PLAY_VOICE = 1
     private val TO_NEXT = 10
+
+    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 var voiceList = arrayListOf<String>() //本题音频,每题有3个音频
     private val player by lazy { AudioUtils() }
@@ -41,13 +55,24 @@
     private var playing = false //播放中,不能有任何操作
 
     private val nameViews by lazy { arrayListOf(tv_1,tv_2,tv_3,tv_4) }
+    private val bgs by lazy { arrayListOf(cl_1,cl_2,cl_3,cl_4) }
     private val endViews by lazy { arrayListOf(cl_voice_end_1,cl_voice_end_2,cl_voice_end_3,cl_voice_end_4) }
 
     private val act by lazy { (requireActivity() as ChooseVoiceActivity) }
 
+    private var nowVoiceView:View? = null
+
+//    private val isShowText by lazy { SPUtils.instance().getBoolean(Const.IS_SHOW_TEXT,true) }
+    private val isShowText = false
+
+    private var isAutoPlaying = false //true 自动播放流程
+
+    var right = true //true进入下一题为全对,false 一旦答错过就置为false,此时进入下一题,本题算做错误
+
     override fun onFirstVisibleToUser() {
         player.setOnAudioStatusUpdateListener(this)
         player.stopPlayMusic()
+        EventBus.getDefault().register(this)
         handler = object : Handler(Looper.getMainLooper()){
             override fun handleMessage(msg: Message) {
                 super.handleMessage(msg)
@@ -59,6 +84,14 @@
                         if (isAdded&&!playing)
                             (requireActivity() as ChooseVoiceActivity).next()
                     }
+                    PLAY_RIGHT->{
+                        rightPlaying = true
+                        player.startPlayMusic(requireContext(),rightVoice)
+                    }
+                    PLAY_ERROR->{
+                        errorPlaying = true
+                        player.startPlayMusic(requireContext(),errorVoice)
+                    }
                 }
             }
         }
@@ -69,8 +102,9 @@
             iv_3.setImageURI(originList[2].img)
             iv_4.setImageURI(originList[3].img)
         }
-        showSubImage()
         initClick()
+        showSubImage()
+
     }
 
     private fun initClick() {
@@ -96,59 +130,84 @@
         }
 
         rl_check_1.clickDelay {
-            if (playing)
+            if (playing||data!!.subjectList[group].filter { it.completed }.size == data!!.subjectList[group].size)
                 return@clickDelay
-            dot_1.visible()
-            act.totalCount++
-            if (voiceList[0] == data!!.subjectList[group][currentIndex].correct){
-                act.rightCount++
-                data!!.subjectList[group][currentIndex].completed = true
-                motion.transitionToEnd()
-                cl_voice1.callOnClick()
-            }else{
-                iv_error_1.visible()
-                dot_1.postDelayed({
-                    iv_error_1.gone()
-                    dot_1.gone()
-                },2000)
-            }
+            if (rl_check_2.visibility == View.VISIBLE&&rl_check_3.visibility == View.VISIBLE){
+                dot_1.visible()
+                act.totalCount++
+                if (voiceList[0] == data!!.subjectList[group][currentIndex].correct){
+                    act.rightCount++
+                    motion.transitionToEnd()
+                    nowVoiceView = cl_voice1
+                    handler?.sendEmptyMessage(PLAY_RIGHT)
+                }else{
+                    right = false
+                    handler?.sendEmptyMessage(PLAY_ERROR)
+                    iv_error_1.visible()
+                    dot_1.postDelayed({
+                        iv_error_1.gone()
+                        dot_1.gone()
+                        rl_check_1.gone()
+                        rl_check_2.gone()
+                        rl_check_3.gone()
+                    },2000)
+                }
+            }else
+                myToast("请听完题")
         }
 
         rl_check_2.clickDelay {
-            if (playing)
+            if (playing||data!!.subjectList[group].filter { it.completed }.size == data!!.subjectList[group].size)
                 return@clickDelay
-            dot_2.visible()
-            act.totalCount++
-            if (voiceList[1] == data!!.subjectList[group][currentIndex].correct){
-                act.rightCount++
-                data!!.subjectList[group][currentIndex].completed = true
-                motion.transitionToEnd()
-                cl_voice2.callOnClick()
-            }else{
-                iv_error_2.visible()
-                dot_1.postDelayed({
-                    dot_2.gone()
-                    iv_error_2.gone()
-                },2000)
-            }
+            if (rl_check_1.visibility == View.VISIBLE&&rl_check_3.visibility == View.VISIBLE) {
+                dot_2.visible()
+                act.totalCount++
+                if (voiceList[1] == data!!.subjectList[group][currentIndex].correct){
+                    act.rightCount++
+                    motion.transitionToEnd()
+                    nowVoiceView = cl_voice2
+                    handler?.sendEmptyMessage(PLAY_RIGHT)
+                }else{
+
+                    handler?.sendEmptyMessage(PLAY_ERROR)
+                    iv_error_2.visible()
+                    dot_1.postDelayed({
+                        dot_2.gone()
+                        iv_error_2.gone()
+                        rl_check_1.gone()
+                        rl_check_2.gone()
+                        rl_check_3.gone()
+                    },2000)
+                }
+            }else
+                myToast("请听完题")
+
         }
         rl_check_3.clickDelay {
-            if (playing)
+            if (playing||data!!.subjectList[group].filter { it.completed }.size == data!!.subjectList[group].size)
                 return@clickDelay
-            dot_3.visible()
-            act.totalCount++
-            if (voiceList[2] == data!!.subjectList[group][currentIndex].correct){
-                data!!.subjectList[group][currentIndex].completed = true
-                act.rightCount++
-                motion.transitionToEnd()
-                cl_voice3.callOnClick()
-            }else{
-                iv_error_3.visible()
-                dot_1.postDelayed({
-                    iv_error_3.gone()
-                    dot_3.gone()
-                },2000)
-            }
+            if (rl_check_2.visibility == View.VISIBLE&&rl_check_3.visibility == View.VISIBLE) {
+                dot_3.visible()
+                act.totalCount++
+                if (voiceList[2] == data!!.subjectList[group][currentIndex].correct){
+                    act.rightCount++
+                    nowVoiceView = cl_voice3
+                    handler?.sendEmptyMessage(PLAY_RIGHT)
+                    motion.transitionToEnd()
+                }else{
+                    handler?.sendEmptyMessage(PLAY_ERROR)
+                    iv_error_3.visible()
+                    dot_1.postDelayed({
+                        iv_error_3.gone()
+                        dot_3.gone()
+                        rl_check_1.gone()
+                        rl_check_2.gone()
+                        rl_check_3.gone()
+                    },2000)
+                }
+            }else
+                myToast("请听完题")
+
         }
 
         cl_voice_end_1.clickDelay {
@@ -198,15 +257,19 @@
         val shuffledList = list.shuffled()
         voiceList.clear()
         voiceList.addAll(shuffledList)
-        nameViews.forEachIndexed { index, textView ->
-            if (index == currentIndex){
-                textView.text = originList[index].name
-                textView.backgroundResource = R.color.textColor99
-            }else{
-                textView.text = ""
-                textView.backgroundResource = R.color.page_bg
+            nameViews.forEachIndexed { index, textView ->
+                if (index == currentIndex){
+                    bgs[index].backgroundResource = R.drawable.bg_orange_8dp
+                    if (isShowText){
+                        textView.text = originList[index].name
+                        textView.backgroundResource = R.color.textColor99
+                    }
+                }else{
+                    bgs[index].backgroundResource = R.drawable.bg_white_8dp_padding
+                    textView.text = ""
+                    textView.backgroundResource = R.color.page_bg
+                }
             }
-        }
         //设置动画飞行路径 3对4
         val rightVoiceIndex = voiceList.indexOf(imageNow.correct)
         var start = 0
@@ -252,11 +315,28 @@
 
             override fun onTransitionCompleted(p0: MotionLayout?, p1: Int) {
                 endViews[currentIndex].visible()
+
             }
 
             override fun onTransitionTrigger(p0: MotionLayout?, p1: Int, p2: Boolean, p3: Float) {
             }
         })
+
+        if (act.fragments[act.vp.currentItem] == this&&act.recoverd){ //自动播放
+            isAutoPlaying = true
+            cl_voice1.callOnClick()
+        }
+
+    }
+
+    @Subscribe
+    fun onEvent(e:EmptyEvent){
+        if (e.code == Const.EventCode.RECOVERD){
+            if (act.fragments[act.vp.currentItem] == this){ //自动播放
+                isAutoPlaying = true
+                cl_voice1.callOnClick()
+            }
+        }
     }
 
     /**
@@ -264,6 +344,7 @@
      */
     fun recover(){
         Log.e(TAG,"回到上一题,恢复答题前的状态")
+        right = true
         motion.progress = 0f
         currentIndex = 0
         endViews.forEach { it.gone() }
@@ -292,40 +373,42 @@
 
     override fun onStartPlay() {
         playing = true
-        if (voiceIndex == 0){
-            iv1_1.gone()
-            iv2_1.gone()
-            iv_playing_1.visible()
-        }
-        if (voiceIndex == 1){
-            iv1_2.gone()
-            iv2_2.gone()
-            iv_playing_2.visible()
-        }
-        if (voiceIndex == 2){
-            iv1_3.gone()
-            iv2_3.gone()
-            iv_playing_3.visible()
-        }
-        if (voiceIndex == 3){
-            iv1_1_end.gone()
-            iv2_1_end.gone()
-            iv_playing_1_end.visible()
-        }
-        if (voiceIndex == 4){
-            iv1_2_end.gone()
-            iv2_2_end.gone()
-            iv_playing_2_end.visible()
-        }
-        if (voiceIndex == 5){
-            iv1_3_end.gone()
-            iv2_3_end.gone()
-            iv_playing_3_end.visible()
-        }
-        if (voiceIndex == 6){
-            iv1_4_end.gone()
-            iv2_4_end.gone()
-            iv_playing_4_end.visible()
+        if (!errorPlaying&&!rightPlaying){
+            if (voiceIndex == 0){
+                iv1_1.gone()
+                iv2_1.gone()
+                iv_playing_1.visible()
+            }
+            if (voiceIndex == 1){
+                iv1_2.gone()
+                iv2_2.gone()
+                iv_playing_2.visible()
+            }
+            if (voiceIndex == 2){
+                iv1_3.gone()
+                iv2_3.gone()
+                iv_playing_3.visible()
+            }
+            if (voiceIndex == 3){
+                iv1_1_end.gone()
+                iv2_1_end.gone()
+                iv_playing_1_end.visible()
+            }
+            if (voiceIndex == 4){
+                iv1_2_end.gone()
+                iv2_2_end.gone()
+                iv_playing_2_end.visible()
+            }
+            if (voiceIndex == 5){
+                iv1_3_end.gone()
+                iv2_3_end.gone()
+                iv_playing_3_end.visible()
+            }
+            if (voiceIndex == 6){
+                iv1_4_end.gone()
+                iv2_4_end.gone()
+                iv_playing_4_end.visible()
+            }
         }
     }
 
@@ -336,18 +419,22 @@
             iv1_1.visible()
             iv2_1.visible()
             iv_playing_1.gone()
-        }
-        if (voiceIndex == 1){
+            if (isAutoPlaying)
+                cl_voice2.callOnClick()
+        }else if (voiceIndex == 1){
             rl_check_2.visible()
             iv1_2.visible()
             iv2_2.visible()
             iv_playing_2.gone()
-        }
-        if (voiceIndex == 2){
+            if (isAutoPlaying)
+                cl_voice3.callOnClick()
+        }else if (voiceIndex == 2){
             rl_check_3.visible()
             iv1_3.visible()
             iv2_3.visible()
             iv_playing_3.gone()
+            if (isAutoPlaying)
+                isAutoPlaying = false
         }
         if (voiceIndex == 3){
             iv1_1_end.visible()
@@ -373,11 +460,30 @@
         if (data!!.subjectList[group][currentIndex].completed){ //本题已答对
             Log.e(TAG,"选对答案后的播放结束3秒后进入下一图")
             if (currentIndex == 3){
-                handler?.sendEmptyMessageDelayed(TO_NEXT,3000)
+                handler?.sendEmptyMessageDelayed(TO_NEXT,500)//万俊杰:缩短为0.5秒
             }else{
                 currentIndex++
                 showSubImage()
             }
         }
+
+        if (rightPlaying){
+            rightPlaying = false
+            data!!.subjectList[group][currentIndex].completed = true
+            nowVoiceView?.callOnClick()
+        }
+        if (errorPlaying)
+            errorPlaying = false
+    }
+
+    override fun onPause() {
+        super.onPause()
+        player.stopPlayMusic()
+    }
+
+    override fun onDestroy() {
+        super.onDestroy()
+        EventBus.getDefault().unregister(this)
+        handler?.removeCallbacksAndMessages(null)
     }
 }
\ No newline at end of file

--
Gitblit v1.7.1