package com.dollearn.student.ui.home
|
|
import android.os.Handler
|
import android.os.Looper
|
import android.os.Message
|
import android.util.Log
|
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
|
import com.dollearn.student.dialog.CountdownDialog
|
import com.dollearn.student.dialog.DifficultyDialog
|
import com.dollearn.student.network.HttpManager
|
import com.dollearn.student.network.entity.GameBean
|
import com.dollearn.student.network.entity.Subject
|
import com.dollearn.student.network.request
|
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.event.EmptyEvent
|
import com.dollearn.student.utils.interfaces.StringCallback
|
import kotlinx.android.synthetic.main.activity_super_listen.*
|
import kotlinx.android.synthetic.main.fragmetn_look_img.*
|
import org.greenrobot.eventbus.EventBus
|
|
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)
|
}
|
var data:GameBean? = null
|
var index = 0
|
var handler:Handler? = null
|
|
private var difficulty = 0 //难度
|
|
val TAG = "Listen====>"
|
|
val list = arrayListOf<Subject>()
|
private val adapter = GameAdapter(list)
|
|
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() }
|
|
val voiceList = arrayListOf<String>() //声音按顺序播放
|
|
private var TIME = 10 //每题答题时间
|
private var countTime = 0 //倒计时计数
|
|
var rightCount = 0 //正确答题次数
|
var time = 0 //学习秒数
|
|
var playing = false
|
|
var state = 0 //0:准备听题 1:听题中 2:请作答 3:结束答题
|
|
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)
|
finish()
|
}else
|
onBackPressed()
|
}
|
}
|
|
override fun initView() {
|
tv_sort.postDelayed({
|
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()
|
}
|
}
|
|
override fun onCancel() {
|
finish()
|
}
|
})
|
difficultyDialog.show(supportFragmentManager,"dif")
|
},500)
|
|
player.setOnAudioStatusUpdateListener(this)
|
player.stopPlayMusic()
|
handler = object : Handler(Looper.getMainLooper()){
|
override fun handleMessage(msg: Message) {
|
super.handleMessage(msg)
|
when(msg.what){
|
STUDY_TIME->{
|
time++
|
sendEmptyMessageDelayed(STUDY_TIME,1000)
|
}
|
PLAY_VOICE->{
|
if (index<voiceList.size)
|
player.startPlayMusic(this@SuperListenActivity,voiceList[index])
|
}
|
COUNT_DOWN->{
|
if (!playing){
|
countTime --
|
state = 2
|
}
|
tv_tip.text = "请在${countTime}s内选择答案!"
|
if ( countTime == 0){
|
index++
|
startGame()
|
}else{
|
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() {
|
cl_voice.visible()
|
tv_sort.visible()
|
tv_exit.visible()
|
tv_tip.text = "准备听题"
|
rv_list.layoutManager = GridLayoutManager(this,5)
|
list.clear()
|
list.addAll(data?.subjectList?: arrayListOf())
|
voiceList.clear()
|
voiceList.addAll(list.map { it.correct }) //声音顺序
|
Log.e(TAG,"声音顺序:${voiceList.joinToString(",,,") { it }}")
|
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) {
|
index = 0
|
startGame()
|
}
|
}
|
countdownDialog.show(supportFragmentManager,"timer")
|
}
|
|
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,if (index == 0) 200 else 3000)
|
}else{
|
tv_sort.visibility = View.INVISIBLE
|
tv_tip.text = ""
|
state = 3
|
tv_end.text = "已完成全部问题"
|
tv_exit.text = "提交"
|
handler?.removeMessages(STUDY_TIME)
|
}
|
}
|
|
override fun onUpdate(db: Double, time: Long) {
|
}
|
|
override fun onStop(filePath: String?) {
|
}
|
|
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)
|
}
|
iv1.gone()
|
iv2.gone()
|
iv_playing.visible()
|
}
|
|
override fun onFinishPlay() {
|
playing = false
|
iv1.visible()
|
iv2.visible()
|
iv_playing.gone()
|
if (data!!.subjectList[data!!.subjectList.map { it.correct }.indexOf(voiceList[index])].completed){ //当前题目已作答,3秒后进入下一题
|
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)
|
EventBus.getDefault().post(EmptyEvent(Const.EventCode.STOP_TIMER))
|
}
|
|
override fun onPause() {
|
super.onPause()
|
player.stopPlayMusic()
|
}
|
}
|