lmw
2024-07-09 b13afc751dbbce24753d008f1f87d2c5e133a4ad
app/src/main/java/com/dollearn/student/ui/home/SuperListenActivity.kt
@@ -7,6 +7,7 @@
import android.view.View
import androidx.recyclerview.widget.GridLayoutManager
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
@@ -19,6 +20,7 @@
import com.dollearn.student.ui.TransparentStatusBarActivity
import com.dollearn.student.ui.home.adapter.GameAdapter
import com.dollearn.student.utils.AudioUtils
import com.dollearn.student.utils.Const
import com.dollearn.student.utils.interfaces.StringCallback
import kotlinx.android.synthetic.main.activity_super_listen.*
import kotlinx.android.synthetic.main.fragmetn_look_img.*
@@ -26,71 +28,58 @@
class SuperListenActivity : TransparentStatusBarActivity(), AudioUtils.OnAudioStatusUpdateListener {
    override fun setContentView() = R.layout.activity_super_listen
    private val week by lazy {
        intent.getIntExtra("week",0)
    }
    private val season by lazy {
        intent.getIntExtra("season",0)
    }
    private var data:GameBean? = null
    private var index = 0
    private var handler:Handler? = null
    var data:GameBean? = null
    var index = 0
    var handler:Handler? = null
    private var difficulty = 0 //难度
    private val TAG = "Listen====>"
    val TAG = "Listen====>"
    private val list = arrayListOf<Subject>()
    val list = arrayListOf<Subject>()
    private val adapter = GameAdapter(list)
    private val PLAY_VOICE = 1
    private val COUNT_DOWN = 2
    val PLAY_VOICE = 1
    val COUNT_DOWN = 2
    private val STUDY_TIME = 3
    val PLAY_RIGHT = 4
    val PLAY_ERROR = 5
    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 voiceList = arrayListOf<String>() //声音按顺序播放
    val voiceList = arrayListOf<String>() //声音按顺序播放
    private var TIME = 10 //每题答题时间
    private var countTime = 10 //倒计时计数
    private var countTime = 0 //倒计时计数
    var totalCount = 0 //总答题次数
    var rightCount = 0 //正确答题次数
    var time = 0 //学习秒数
    var playing = false
    var state = 0 //0:准备听题 1:听题中 2:请作答 3:结束答题
    override fun initClick() {
        adapter.setOnItemClickListener { view, position ->
            Log.e(TAG,"点击图片:${list[position].name}")
            Log.e(TAG,"音频position:${index}")
            Log.e(TAG,"音频路径:${voiceList[index]}")
            val subject = data!!.subjectList[data!!.subjectList.map { it.correct }.indexOf(voiceList[index])] //当前音频对应题目
            Log.e(TAG,"正确答案:${subject.name}")
            totalCount++
            handler?.removeMessages(COUNT_DOWN) //选择答案后,停止倒计时
            if (list[position].id == subject.id){
                rightCount++
                subject.completed = true
                subject.right = true
                handler?.sendEmptyMessage(PLAY_VOICE)
                adapter.notifyItemChanged(position)
            }else{
                subject.completed = true
                subject.right = false
                index++
                startGame()
            }
        }
        tv_exit.setOnClickListener {
            if (tv_exit.text == "提交"){
                ResultActivity.startResult(this,0,0,0,6,totalCount,rightCount,list.filter { it.right }.sumBy { 1 },time,data!!.data.id)
                ResultActivity.startResult(this,0,0,0,6,totalCount,rightCount,list.filter { it.right }.sumBy { 1 },time,data!!.data.id,difficulty)
                finish()
            }else
                finish()
                onBackPressed()
        }
    }
@@ -129,7 +118,10 @@
                            player.startPlayMusic(this@SuperListenActivity,voiceList[index])
                    }
                    COUNT_DOWN->{
                        if (!playing){
                        countTime --
                            state = 2
                        }
                        tv_tip.text = "请在${countTime}s内选择答案!"
                        if ( countTime == 0){
                            index++
@@ -138,9 +130,18 @@
                            sendEmptyMessageDelayed(COUNT_DOWN,1000)
                        }
                    }
                    PLAY_RIGHT->{
                        rightPlaying = true
                        player.startPlayMusic(this@SuperListenActivity,rightVoice)
                    }
                    PLAY_ERROR->{
                        errorPlaying = true
                        player.startPlayMusic(this@SuperListenActivity,errorVoice)
                }
            }
        }
        }
        handler?.sendEmptyMessageDelayed(STUDY_TIME,1000)
    }
    private fun refreshUi() {
@@ -153,7 +154,7 @@
        list.shuffle() //图片随机顺序
        rv_list.adapter = adapter
        Log.e(TAG,"图片打乱后顺序:${list.joinToString(",,,") { it.name }}")
        TIME = data!!.data.time.toInt()
        val countdownDialog = CountdownDialog()
        countdownDialog.callback = object :StringCallback{
            override fun onResult(rst: String) {
@@ -164,17 +165,19 @@
        countdownDialog.show(supportFragmentManager,"timer")
    }
    private fun startGame() {
    fun startGame() {
        if (index < voiceList.size){
            Log.e(TAG,"开始答题:index=${index}")
            tv_sort.text = (index+1).toString()
            handler?.removeMessages(COUNT_DOWN)
            countTime = TIME //重置答题时间
            tv_tip.text = "准备听题"
            state = 0
            handler?.sendEmptyMessageDelayed(PLAY_VOICE,3000)
        }else{
            tv_sort.visibility = View.INVISIBLE
            tv_tip.text = ""
            state = 3
            tv_end.text = "已完成全部问题"
            tv_exit.text = "提交"
            handler?.removeMessages(STUDY_TIME)
@@ -188,7 +191,11 @@
    }
    override fun onStartPlay() {
        playing = true
        if (errorPlaying||rightPlaying)
            return
        if (!data!!.subjectList[data!!.subjectList.map { it.correct }.indexOf(voiceList[index])].completed){//首次播放
            state = 1
            tv_tip.text = "请在${countTime}s内选择答案!"
            handler?.sendEmptyMessageDelayed(COUNT_DOWN,1000)
        }
@@ -198,6 +205,7 @@
    }
    override fun onFinishPlay() {
        playing = false
        iv1.visible()
        iv2.visible()
        iv_playing.gone()
@@ -205,6 +213,29 @@
            index++
            startGame()
        }
        if (errorPlaying)
            errorPlaying = false
        if (rightPlaying){
            rightPlaying = false
            val subject = data!!.subjectList[data!!.subjectList.map { it.correct }.indexOf(voiceList[index])] //当前音频对应题目
            subject.completed = true
            handler?.sendEmptyMessage(PLAY_VOICE)
        }
    }
    override fun onBackPressed() {
        HttpManager.exitGameOrStory(time).request(this){_,_->
            super.onBackPressed()
        }
    }
    override fun onDestroy() {
        super.onDestroy()
        handler?.removeCallbacksAndMessages(null)
    }
    override fun onPause() {
        super.onPause()
        player.stopPlayMusic()
    }
}