package com.dollearn.student.ui.home
|
|
import android.annotation.SuppressLint
|
import android.os.Handler
|
import android.os.Looper
|
import android.os.Message
|
import android.view.ViewGroup
|
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 QAActivity:TransparentStatusBarActivity() {
|
override fun setContentView() = R.layout.activity_listen
|
|
private val day by lazy {
|
intent.getIntExtra("day",0)
|
}
|
private val week by lazy {
|
intent.getIntExtra("week",0)
|
}
|
private val season by lazy {
|
intent.getIntExtra("season",0)
|
}
|
val data by lazy { intent.getParcelableExtra<SubjectBean>("data") }
|
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 {
|
val tipDialog = TipDialog()
|
tipDialog.arguments = bundleOf("msg" to "是否重新开始答题?确认后将清空当前答题进度")
|
tipDialog.setCallback(object :TipDialog.OnClickCallback{
|
override fun onOk() {
|
showDialog()
|
HttpManager.restart(day,week,4).request(this@QAActivity){_,_->
|
totalCount = 0 //总答题次数
|
rightCount = 0 //正确答题次数
|
time = 0 //学习秒数
|
indexList.forEach { it.status = 1 }
|
indexAdapter.notifyDataSetChanged()
|
data?.accuracy = 0.0
|
view_pager.setCurrentItem(0,false)
|
(fragments[0] as QAFragment).recover()
|
}
|
}
|
|
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 }))){
|
view_pager.setCurrentItem(position,false)
|
(fragments[position] as QAFragment).recover()
|
}
|
}
|
}
|
|
fun next(){
|
val listenFragment = fragments[view_pager.currentItem] as QAFragment
|
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,4,totalCount,rightCount,data!!.data.integral,time,data!!.data.id)
|
finish()
|
}else{
|
view_pager.setCurrentItem(view_pager.currentItem+1,true)
|
(fragments[view_pager.currentItem+1] as QAFragment).recover()
|
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/%d\n正确率:%.2f%s".format(subjectList.size,accuracy*100,"%")
|
indexList.clear()
|
indexList.addAll(list)
|
indexAdapter.notifyDataSetChanged()
|
subjectList.forEachIndexed { index, subject ->
|
fragments.add(QAFragment.getInstance(index))
|
}
|
view_pager.adapter = @SuppressLint("WrongConstant")
|
object : FragmentPagerAdapter(supportFragmentManager,0) {
|
override fun getItem(p0: Int): Fragment {
|
return fragments[p0]
|
}
|
|
override fun getCount(): Int {
|
return fragments.size
|
}
|
|
override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
|
}
|
}
|
view_pager.offscreenPageLimit = fragments.size
|
view_pager.addOnPageChangeListener(object :ViewPager.OnPageChangeListener{
|
override fun onPageScrolled(
|
position: Int,
|
positionOffset: Float,
|
positionOffsetPixels: Int
|
) {
|
|
}
|
|
override fun onPageSelected(position: Int) {
|
tv_progress.text = "已完成:%d/%d\n正确率:%.2f%s".format(position+1,subjectList.size,accuracy*100,"%")
|
}
|
|
override fun onPageScrollStateChanged(state: Int) {
|
}
|
})
|
}
|
recover()
|
handler= object :Handler(Looper.myLooper()!!){
|
override fun handleMessage(msg: Message) {
|
super.handleMessage(msg)
|
if (msg.what == 0){
|
time++
|
handler?.sendEmptyMessageDelayed(0,1000L)
|
}
|
}
|
}
|
handler?.sendEmptyMessageDelayed(0,1000L)
|
}
|
|
private fun recover(){
|
HttpManager.teamSchedule(day,week,4).request(this,false){_,data->
|
view_pager.setCurrentItem((data?.schedule?:1)-1,false)
|
if (view_pager.currentItem != 0)
|
tv_last.visible()
|
totalCount = data?.answerNumber?:0
|
rightCount = data?.correctNumber?:0
|
EventBus.getDefault().post(EmptyEvent(Const.EventCode.RECOVERD))
|
recoverd = true
|
}
|
}
|
|
override fun onBackPressed() {
|
val tipDialog = TipDialog()
|
tipDialog.arguments = bundleOf("msg" to "未完成全部答题,确认退出吗?")
|
tipDialog.setCallback(object :TipDialog.OnClickCallback{
|
override fun onOk() {
|
val list = (data?.subjectList?: arrayListOf()).flatMap { it }.subList(0,view_pager.currentItem)
|
HttpManager.exitLearning(view_pager.currentItem,season,time,totalCount,rightCount,day,week,4,data?.data?.id?:"", list.joinToString(",") { it.id }).request(this@QAActivity){ _, _->
|
finish()
|
}
|
}
|
|
override fun onCancel() {
|
}
|
})
|
tipDialog.show(supportFragmentManager,"exit")
|
}
|
|
override fun onDestroy() {
|
super.onDestroy()
|
handler?.removeMessages(0)
|
handler = null
|
EventBus.getDefault().post(EmptyEvent(Const.EventCode.STOP_TIMER))
|
}
|
}
|