lmw
2024-07-17 98faa1d5d540a7e4de4086ea11df3fd61b5c7ab9
app/src/main/java/com/dollearn/student/ui/home/SuperListenActivity.kt
@@ -8,7 +8,6 @@
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
import com.dollearn.student.dialog.CountdownDialog
@@ -26,15 +25,20 @@
import kotlinx.android.synthetic.main.activity_super_listen.*
import kotlinx.android.synthetic.main.fragmetn_look_img.*
import org.greenrobot.eventbus.EventBus
import kotlin.math.abs
import kotlin.math.max
import kotlin.math.min
import kotlin.math.sqrt
class SuperListenActivity : TransparentStatusBarActivity(), AudioUtils.OnAudioStatusUpdateListener {
    override fun setContentView() = R.layout.activity_super_listen
    private val week by lazy {
        intent.getIntExtra("week",0)
        intent.getIntExtra("week", 0)
    }
    private val season by lazy {
        intent.getIntExtra("season",0)
        intent.getIntExtra("season", 0)
    }
    var data:GameBean? = null
    var index = 0
@@ -77,7 +81,19 @@
    override fun initClick() {
        tv_exit.setOnClickListener {
            if (tv_exit.text == "提交"){
                ResultActivity.startResult(this,0,0,0,6,list.size,rightCount,list.filter { it.right }.sumBy { 1 },time,data!!.data.id,difficulty)
                ResultActivity.startResult(
                    this,
                    0,
                    0,
                    0,
                    6,
                    list.size,
                    rightCount,
                    list.filter { it.right }.sumBy { 1 },
                    time,
                    data!!.data.id,
                    difficulty
                )
                finish()
            }else
                onBackPressed()
@@ -86,23 +102,24 @@
    override fun initView() {
        tv_sort.postDelayed({
             val difficultyDialog = DifficultyDialog()
            difficultyDialog.setCallback(object :DifficultyDialog.OnClickCallback{
            val difficultyDialog = DifficultyDialog()
            difficultyDialog.setCallback(object : DifficultyDialog.OnClickCallback {
                override fun onOk(d: Int) {
                    difficulty = d
                    HttpManager.gameHearing(season,week,difficulty).request(this@SuperListenActivity){_,data->
                        difficultyDialog.dismissAllowingStateLoss()
                        this@SuperListenActivity.data = data
                        refreshUi()
                    }
                    HttpManager.gameHearing(season, week, difficulty)
                        .request(this@SuperListenActivity) { _, data ->
                            difficultyDialog.dismissAllowingStateLoss()
                            this@SuperListenActivity.data = data
                            refreshUi()
                        }
                }
                override fun onCancel() {
                    finish()
                }
            })
            difficultyDialog.show(supportFragmentManager,"dif")
        },500)
            difficultyDialog.show(supportFragmentManager, "dif")
        }, 500)
        player.setOnAudioStatusUpdateListener(this)
        player.stopPlayMusic()
@@ -110,39 +127,39 @@
            override fun handleMessage(msg: Message) {
                super.handleMessage(msg)
                when(msg.what){
                    STUDY_TIME->{
                    STUDY_TIME -> {
                        time++
                        sendEmptyMessageDelayed(STUDY_TIME,1000)
                        sendEmptyMessageDelayed(STUDY_TIME, 1000)
                    }
                    PLAY_VOICE->{
                        if (index<voiceList.size)
                            player.startPlayMusic(this@SuperListenActivity,voiceList[index])
                    PLAY_VOICE -> {
                        if (index < voiceList.size)
                            player.startPlayMusic(this@SuperListenActivity, voiceList[index])
                    }
                    COUNT_DOWN->{
                        if (!playing){
                            countTime --
                    COUNT_DOWN -> {
                        if (!playing) {
                            countTime--
                            state = 2
                        }
                        tv_tip.text = "请在${countTime}s内选择答案!"
                        if ( countTime == 0){
                        if (countTime == 0) {
                            index++
                            startGame()
                        }else{
                            sendEmptyMessageDelayed(COUNT_DOWN,1000)
                        } else {
                            sendEmptyMessageDelayed(COUNT_DOWN, 1000)
                        }
                    }
                    PLAY_RIGHT->{
                    PLAY_RIGHT -> {
                        rightPlaying = true
                        player.startPlayMusic(this@SuperListenActivity,rightVoice)
                        player.startPlayMusic(this@SuperListenActivity, rightVoice)
                    }
                    PLAY_ERROR->{
                    PLAY_ERROR -> {
                        errorPlaying = true
                        player.startPlayMusic(this@SuperListenActivity,errorVoice)
                        player.startPlayMusic(this@SuperListenActivity, errorVoice)
                    }
                }
            }
        }
        handler?.sendEmptyMessageDelayed(STUDY_TIME,1000)
        handler?.sendEmptyMessageDelayed(STUDY_TIME, 1000)
    }
    private fun refreshUi() {
@@ -150,15 +167,15 @@
        tv_sort.visible()
        tv_exit.visible()
        tv_tip.text = "准备听题"
        rv_list.layoutManager = GridLayoutManager(this,5)
        list.clear()
        list.addAll(data?.subjectList?: arrayListOf())
        list.addAll(data?.subjectList ?: arrayListOf())
        initRecycler(list.size)
        voiceList.clear()
        voiceList.addAll(list.map { it.correct }) //声音顺序
        Log.e(TAG,"声音顺序:${voiceList.joinToString(",,,") { it }}")
        Log.e(TAG, "声音顺序:${voiceList.joinToString(",,,") { it }}")
        list.shuffle() //图片随机顺序
        rv_list.adapter = adapter
        Log.e(TAG,"图片打乱后顺序:${list.joinToString(",,,") { it.name }}")
        Log.e(TAG, "图片打乱后顺序:${list.joinToString(",,,") { it.name }}")
        TIME = data!!.data.time.toInt()
        val countdownDialog = CountdownDialog()
        countdownDialog.callback = object :StringCallback{
@@ -167,18 +184,45 @@
                startGame()
            }
        }
        countdownDialog.show(supportFragmentManager,"timer")
        countdownDialog.show(supportFragmentManager, "timer")
    }
    /**
     * 需要计算行列数
     */
    private fun initRecycler(total: Int){
        var bestRows = 1
        var bestColumns: Int = total
        var i = 1
        while (i <= sqrt(total.toDouble())) {
            val rows = i
            val columns: Int = if (total%i>0) (total / i)+1 else total / i
            // Calculate the absolute difference between rows and columns
            val diff = abs(rows - columns)
            // Update the best rows and columns if this pair has a smaller difference
            if (diff < abs(bestRows - bestColumns)) {
                bestRows = rows
                bestColumns = columns
            }
            i++
        }
        Log.e(TAG,"总数:$total,计算得到行数:${min(bestColumns,bestRows)},列数:${max(bestColumns,bestRows)}")
        val lineHeight = rv_list.height.toDouble() / min(bestColumns, bestRows)
        Log.e(TAG,"高度:${rv_list.height},计算得到行高:${lineHeight}")
        rv_list.layoutManager = GridLayoutManager(this, max(bestColumns,bestRows))
        adapter.height = lineHeight.toInt()
        adapter.notifyDataSetChanged()
    }
    fun startGame() {
        if (index < voiceList.size){
            Log.e(TAG,"开始答题:index=${index}")
            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,if (index == 0) 200 else 3000)
            handler?.sendEmptyMessageDelayed(PLAY_VOICE, if (index == 0) 200 else 3000)
        }else{
            tv_sort.visibility = View.INVISIBLE
            tv_tip.text = ""
@@ -202,7 +246,7 @@
        if (!data!!.subjectList[data!!.subjectList.map { it.correct }.indexOf(voiceList[index])].completed){//首次播放
            state = 1
            tv_tip.text = "请在${countTime}s内选择答案!"
            handler?.sendEmptyMessageDelayed(COUNT_DOWN,1000)
            handler?.sendEmptyMessageDelayed(COUNT_DOWN, 1000)
        }
        iv1.gone()
        iv2.gone()
@@ -222,14 +266,15 @@
            errorPlaying = false
        if (rightPlaying){
            rightPlaying = false
            val subject = data!!.subjectList[data!!.subjectList.map { it.correct }.indexOf(voiceList[index])] //当前音频对应题目
            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){_,_->
        HttpManager.exitGameOrStory(time).request(this){ _, _->
            super.onBackPressed()
        }
    }