| | |
| | | |
| | | 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.utils.AudioUtils |
| | | 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 ListenActivity: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") } |
| | | private val fragments = arrayListOf<Fragment>() |
| | | val fragments = arrayListOf<Fragment>() |
| | | val viewPager by lazy { view_pager } |
| | | |
| | | var totalCount = 0 //总答题次数 |
| | | var rightCount = 0 //正确答题次数 |
| | | var time = 0 //学习秒数 |
| | | private var handler:Handler? = null |
| | | |
| | | val indexList = arrayListOf<SortBean>() |
| | | private val indexAdapter = IndexAdapter(indexList) |
| | | |
| | | override fun initClick() { |
| | | tv_last.setOnClickListener { |
| | | (fragments[view_pager.currentItem-1] as ListenFragment).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,1).request(this@ListenActivity){_,_-> |
| | | totalCount = 0 //总答题次数 |
| | | rightCount = 0 //正确答题次数 |
| | | time = 0 //学习秒数 |
| | | data!!.list.forEach { it.status = 1 } |
| | | data!!.accuracy = 0.0 |
| | | indexList.forEach { it.status = 1 } |
| | | indexAdapter.notifyDataSetChanged() |
| | | data?.accuracy = 0.0 |
| | | (fragments[0] as ListenFragment).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!=viewPager.currentItem/4&&(sortBean.status!=1||position == indexList.indexOf(indexList.first { it.status == 1 }))){ |
| | | (fragments[position*4] as ListenFragment).recover() |
| | | view_pager.setCurrentItem(position*4,false) |
| | | } |
| | | } |
| | | } |
| | | |
| | | fun next(){ |
| | | (fragments[view_pager.currentItem+1] as ListenFragment).recover() |
| | | view_pager.setCurrentItem(view_pager.currentItem+1,true) |
| | | tv_last.visible() |
| | | val listenFragment = fragments[viewPager.currentItem] as ListenFragment |
| | | val sortBean = data!!.list[viewPager.currentItem] |
| | | sortBean.status = if (listenFragment.right) 2 else 3 //修改本地答题结果,并上传服务器 |
| | | HttpManager.answerQuestion(sortBean).request(this){_,data-> |
| | | //保存成功 |
| | | } |
| | | indexList.clear() |
| | | (data!!.subjectList.indices).forEach { |
| | | val subList = data!!.list.subList(it * 4, it * 4 + 4) |
| | | val status = if (subList.filter { it.status!=1 }.size != 4) 1 else if (subList.filter { it.status==2 }.size == 4) 2 else 3 |
| | | indexList.add(SortBean("",status)) |
| | | } |
| | | val filter = indexList.filter { it.status != 1 } |
| | | data?.accuracy = if (filter.isEmpty()) 0.0 else filter.filter { it.status == 2 }.size.toDouble() / filter.size |
| | | if (view_pager.currentItem == fragments.lastIndex){ |
| | | handler?.removeMessages(0) |
| | | ResultActivity.startResult(this,day,week,season,1,totalCount,rightCount,data!!.data.integral,time,data!!.data.id) |
| | | finish() |
| | | }else{ |
| | | val i = view_pager.currentItem + 1 |
| | | (fragments[i] as ListenFragment).recover() |
| | | view_pager.setCurrentItem(i,i%4 == 0) |
| | | tv_last.visible() |
| | | indexAdapter.notifyDataSetChanged() |
| | | } |
| | | } |
| | | |
| | | override fun initView() { |
| | | rv_index.layoutManager = LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false) |
| | | rv_index.adapter = indexAdapter |
| | | data?.apply { |
| | | val flatMap = subjectList?.flatMap { it } |
| | | tv_progress.text = "已完成:1/${flatMap.size}" |
| | | tv_progress.text = "已完成:1/%d\n正确率:%.2f%s".format(subjectList.size,accuracy*100,"%") |
| | | indexList.clear() |
| | | (subjectList.indices).forEach { |
| | | val subList = list.subList(it * 4, it * 4 + 4) |
| | | val status = if (subList.filter { it.status!=1 }.size != 4) 1 else if (subList.filter { it.status==2 }.size == 4) 2 else 3 |
| | | indexList.add(SortBean("",status)) |
| | | } |
| | | indexAdapter.notifyDataSetChanged() |
| | | flatMap.forEachIndexed { index, subject -> |
| | | fragments.add(ListenFragment.getInstance(index/4,index%4)) |
| | | } |
| | |
| | | } |
| | | |
| | | override fun onPageSelected(position: Int) { |
| | | tv_progress.text = "已完成:${position+1}/${flatMap.size}" |
| | | tv_progress.text = "已完成:%d/%d\n正确率:%.2f%s".format(position/4+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,1).request(this){_,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 |
| | | } |
| | | } |
| | | |
| | |
| | | tipDialog.arguments = bundleOf("msg" to "未完成全部答题,确认退出吗?") |
| | | tipDialog.setCallback(object :TipDialog.OnClickCallback{ |
| | | override fun onOk() { |
| | | // HttpManager.exitLearning() |
| | | val list = (data?.subjectList?: arrayListOf()).flatMap { it }.subList(0,view_pager.currentItem) |
| | | HttpManager.exitLearning(view_pager.currentItem,season,time,totalCount,rightCount,day,week,1,data?.data?.id?:"", list.joinToString(",") { it.id }).request(this@ListenActivity){_,_-> |
| | | 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)) |
| | | } |
| | | } |