| | |
| | | import androidx.core.os.bundleOf |
| | | import androidx.fragment.app.Fragment |
| | | import androidx.fragment.app.FragmentPagerAdapter |
| | | import androidx.recyclerview.widget.LinearLayoutManager |
| | | import androidx.viewpager.widget.ViewPager |
| | | import cn.sinata.xldutils.gone |
| | | import cn.sinata.xldutils.visible |
| | | import com.dollearn.student.R |
| | | import com.dollearn.student.dialog.TipDialog |
| | | import com.dollearn.student.network.HttpManager |
| | | import com.dollearn.student.network.entity.SortBean |
| | | import com.dollearn.student.network.entity.SubjectBean |
| | | import com.dollearn.student.network.request |
| | | import com.dollearn.student.ui.TransparentStatusBarActivity |
| | | import com.dollearn.student.ui.home.adapter.IndexAdapter |
| | | import com.dollearn.student.utils.Const |
| | | import com.dollearn.student.utils.event.EmptyEvent |
| | | import kotlinx.android.synthetic.main.activity_listen.* |
| | | import org.greenrobot.eventbus.EventBus |
| | | |
| | | class ChooseVoiceActivity:TransparentStatusBarActivity() { |
| | | override fun setContentView() = R.layout.activity_listen |
| | |
| | | intent.getIntExtra("season",0) |
| | | } |
| | | val data by lazy { intent.getParcelableExtra<SubjectBean>("data") } |
| | | private val fragments = arrayListOf<Fragment>() |
| | | val fragments = arrayListOf<Fragment>() |
| | | |
| | | var totalCount = 0 //总答题次数 |
| | | var rightCount = 0 //正确答题次数 |
| | | var time = 0 //学习秒数 |
| | | private var handler: Handler? = null |
| | | |
| | | val indexList = arrayListOf<SortBean>() |
| | | private val indexAdapter = IndexAdapter(indexList) |
| | | |
| | | val vp by lazy { view_pager } |
| | | var recoverd = false //true已经恢复了进度,后续语音可以自动播放 |
| | | |
| | | override fun initClick() { |
| | | tv_last.setOnClickListener { |
| | | (fragments[view_pager.currentItem-1] as ChooseVoiceFragment).recover() |
| | | view_pager.setCurrentItem(view_pager.currentItem-1,true) |
| | | if (view_pager.currentItem == 0) |
| | | tv_last.gone() |
| | | val tipDialog = TipDialog() |
| | | tipDialog.arguments = bundleOf("msg" to "是否重新开始答题?确认后将清空当前答题进度") |
| | | tipDialog.setCallback(object :TipDialog.OnClickCallback{ |
| | | override fun onOk() { |
| | | showDialog() |
| | | HttpManager.restart(day,week,2).request(this@ChooseVoiceActivity){_,_-> |
| | | totalCount = 0 //总答题次数 |
| | | rightCount = 0 //正确答题次数 |
| | | time = 0 //学习秒数 |
| | | indexList.forEach { it.status = 1 } |
| | | indexAdapter.notifyDataSetChanged() |
| | | data?.accuracy = 0.0 |
| | | (fragments[0] as ChooseVoiceFragment).recover() |
| | | view_pager.setCurrentItem(0,false) |
| | | } |
| | | } |
| | | |
| | | override fun onCancel() { |
| | | } |
| | | }) |
| | | tipDialog.show(supportFragmentManager,"restart") |
| | | } |
| | | |
| | | tv_exit.setOnClickListener { |
| | | onBackPressed() |
| | | } |
| | | |
| | | indexAdapter.setOnItemClickListener { view, position -> |
| | | val sortBean = indexList[position] |
| | | if (position!=view_pager.currentItem&&(sortBean.status!=1||position == indexList.indexOf(indexList.first { it.status == 1 }))){ |
| | | (fragments[position] as ChooseVoiceFragment).recover() |
| | | view_pager.setCurrentItem(position,false) |
| | | } |
| | | } |
| | | } |
| | | |
| | | fun next(){ |
| | | val listenFragment = fragments[view_pager.currentItem] as ChooseVoiceFragment |
| | | val sortBean = indexList[view_pager.currentItem] |
| | | sortBean.status = if (listenFragment.right) 2 else 3 //修改本地答题结果,并上传服务器 |
| | | HttpManager.answerQuestion(sortBean).request(this){_,data-> |
| | | //保存成功 |
| | | } |
| | | val filter = indexList.filter { it.status != 1 } |
| | | data?.accuracy = filter.filter { it.status == 2 }.size.toDouble() / filter.size |
| | | if (view_pager.currentItem == fragments.lastIndex){ |
| | | handler?.removeMessages(0) |
| | | ResultActivity.startResult(this,day,week,season,2,totalCount,rightCount,data!!.data.integral,time,data!!.data.id) |
| | | finish() |
| | | }else{ |
| | | (fragments[view_pager.currentItem+1] as ChooseVoiceFragment).recover() |
| | | view_pager.setCurrentItem(view_pager.currentItem+1,true) |
| | | tv_last.visible() |
| | | if (data!!.subjectList[view_pager.currentItem].filter { it.completed }.size == 4){ //防止多次调用触发 |
| | | (fragments[view_pager.currentItem+1] as ChooseVoiceFragment).recover() |
| | | view_pager.setCurrentItem(view_pager.currentItem+1,true) |
| | | tv_last.visible() |
| | | indexAdapter.notifyDataSetChanged() |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | override fun initView() { |
| | | rv_index.layoutManager = LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL,false) |
| | | rv_index.adapter = indexAdapter |
| | | data?.apply { |
| | | tv_progress.text = "已完成:1/${subjectList.size}" |
| | | tv_progress.text = "已完成:1/%d\n正确率:%.2f%s".format(subjectList.size,accuracy*100,"%") |
| | | indexList.clear() |
| | | indexList.addAll(list) |
| | | indexAdapter.notifyDataSetChanged() |
| | | subjectList.forEachIndexed { index, subject -> |
| | | fragments.add(ChooseVoiceFragment.getInstance(index)) |
| | | } |
| | |
| | | } |
| | | |
| | | override fun onPageSelected(position: Int) { |
| | | tv_progress.text = "已完成:${position+1}/${fragments.size}" |
| | | tv_progress.text = "已完成:%d/%d\n正确率:%.2f%s".format(position+1,fragments.size,accuracy*100,"%") |
| | | } |
| | | |
| | | override fun onPageScrollStateChanged(state: Int) { |
| | |
| | | tv_last.visible() |
| | | totalCount = data?.answerNumber?:0 |
| | | rightCount = data?.correctNumber?:0 |
| | | EventBus.getDefault().post(EmptyEvent(Const.EventCode.RECOVERD)) |
| | | recoverd = true |
| | | } |
| | | } |
| | | |
| | |
| | | tipDialog.arguments = bundleOf("msg" to "未完成全部答题,确认退出吗?") |
| | | tipDialog.setCallback(object :TipDialog.OnClickCallback{ |
| | | override fun onOk() { |
| | | if (view_pager.currentItem == 0) |
| | | val list = (data?.subjectList?: arrayListOf()).subList(0,view_pager.currentItem).flatMap { it } |
| | | HttpManager.exitLearning(view_pager.currentItem,season,time,totalCount,rightCount,day,week,2,data?.data?.id?:"", list.joinToString(",") { it.id }).request(this@ChooseVoiceActivity){ _, _-> |
| | | finish() |
| | | else{ |
| | | val list = (data?.subjectList?: arrayListOf()).subList(0,view_pager.currentItem).flatMap { it } |
| | | HttpManager.exitLearning(view_pager.currentItem,season,time,totalCount,rightCount,day,week,2,data?.data?.id?:"", list.joinToString(",") { it.id }).request(this@ChooseVoiceActivity){ _, _-> |
| | | finish() |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | override fun onDestroy() { |
| | | super.onDestroy() |
| | | EventBus.getDefault().post(EmptyEvent(Const.EventCode.STOP_TIMER)) |
| | | handler?.removeMessages(0) |
| | | handler = null |
| | | } |