package com.sinata.xqmuse.ui.course
|
|
import android.content.Intent
|
import android.os.CountDownTimer
|
import android.util.TypedValue
|
import android.webkit.WebChromeClient
|
import android.webkit.WebSettings
|
import android.webkit.WebViewClient
|
import androidx.core.widget.NestedScrollView
|
import androidx.recyclerview.widget.GridLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
import cn.sinata.xldutils.gone
|
import cn.sinata.xldutils.utils.SpanBuilder
|
import cn.sinata.xldutils.utils.showAllowingStateLoss
|
import cn.sinata.xldutils.visible
|
import com.google.android.material.appbar.AppBarLayout
|
import com.share.utils.ShareUtils
|
import com.sinata.xqmuse.R
|
import com.sinata.xqmuse.dialog.SendConfirmDialog
|
import com.sinata.xqmuse.dialog.ShareDialog
|
import com.sinata.xqmuse.network.Apis
|
import com.sinata.xqmuse.network.HttpManager
|
import com.sinata.xqmuse.network.entity.Chapter
|
import com.sinata.xqmuse.network.entity.CourseBean
|
import com.sinata.xqmuse.network.entity.CourseDetail
|
import com.sinata.xqmuse.network.request
|
import com.sinata.xqmuse.ui.TransparentStatusBarActivity
|
import com.sinata.xqmuse.ui.course.adapter.ChapterAdapter
|
import com.sinata.xqmuse.ui.course.adapter.CourseGridAdapter
|
import com.sinata.xqmuse.utils.AppBarStateChangeListener
|
import com.sinata.xqmuse.utils.Const
|
import com.sinata.xqmuse.utils.interfaces.StringCallback
|
import com.umeng.socialize.bean.SHARE_MEDIA
|
import kotlinx.android.synthetic.main.activity_course_deatil.*
|
import kotlinx.android.synthetic.main.activity_course_deatil.iv_back
|
import kotlinx.android.synthetic.main.activity_course_deatil.webView
|
import kotlinx.android.synthetic.main.activity_level.*
|
import org.jetbrains.anko.*
|
|
class CourseDetailActivity : TransparentStatusBarActivity() {
|
override fun setContentView() = R.layout.activity_course_deatil
|
|
private val data by lazy { intent.getParcelableExtra<CourseDetail>("data") }
|
|
private val chapterList = arrayListOf<Chapter>()
|
private val chapterAdapter = ChapterAdapter(chapterList)
|
private val courseList = arrayListOf<CourseBean>()
|
private val courseAdapter = CourseGridAdapter(courseList)
|
|
var scrollByTab = false //true:点击tab滑动,不触发滑动回调,防止回环
|
private val SCROLL_DURATION = 500 //滑动时长
|
private var timer: CountDownTimer? = null
|
|
override fun initClick() {
|
iv_back.setOnClickListener { finish() }
|
|
tv_send.setOnClickListener {
|
getData(true)
|
}
|
|
tv_action.setOnClickListener {
|
if (tv_action.text == "立即学习"){
|
if (data?.list?.isNullOrEmpty() == true)
|
toast("该课程暂未添加章节")
|
else
|
startActivity<StudyActivity>("id" to data?.list?.firstOrNull()?.id)
|
} else
|
getData(false)
|
}
|
iv_collect.setOnClickListener {
|
HttpManager.collectCourse(data?.id?:"").request(this){_,_->
|
data?.isCollect = if (data?.isCollect == 1) 2 else 1
|
iv_collect.setImageResource(if (data?.isCollect == 1) R.mipmap.collected else R.mipmap.uncollect)
|
toast(if (data?.isCollect == 1) "收藏成功" else "已取消收藏")
|
}
|
}
|
iv_share.setOnClickListener {
|
val shareDialog = ShareDialog()
|
shareDialog.callback = object :StringCallback{
|
override fun onResult(rst: String) {
|
if (rst == "wx"){
|
ShareUtils.share(this@CourseDetailActivity,
|
SHARE_MEDIA.WEIXIN,data?.courseTitle, Const.SHARE.SHARE_COURSE_TITLE,
|
Apis.SHARE_COURSE.format(data?.id),null,"")
|
}else{
|
ShareUtils.share(this@CourseDetailActivity,
|
SHARE_MEDIA.WEIXIN_CIRCLE,data?.courseTitle,Const.SHARE.SHARE_COURSE_TITLE,
|
Apis.SHARE_COURSE.format(data?.id),null,"")
|
}
|
}
|
}
|
shareDialog.showAllowingStateLoss(supportFragmentManager,"share")
|
}
|
cb_intro.setOnClickListener {
|
scroll2Position(0)
|
checkTab(0)
|
}
|
cb_chapter.setOnClickListener {
|
scroll2Position(1)
|
checkTab(1)
|
}
|
cb_push.setOnClickListener {
|
scroll2Position(2)
|
checkTab(2)
|
}
|
scrollView.setOnScrollChangeListener { _: NestedScrollView?, _: Int, scrollY: Int, _: Int, _: Int ->
|
if (!scrollByTab)
|
when {
|
scrollY>=tv_2.top -> checkTab(2)
|
scrollY>=tv_1.top -> checkTab(1)
|
else -> checkTab(0)
|
}
|
}
|
chapterAdapter.setOnItemClickListener { _, position ->
|
if (tv_action.text == "立即学习")
|
startActivity<StudyActivity>("id" to data?.list?.get(position)?.id,"index" to position)
|
else
|
getData(false)
|
}
|
courseAdapter.setOnItemClickListener { _, position ->
|
showDialog()
|
HttpManager.getPayCourseInfoById(courseList[position].id?:"").request(this,success = { _, data->
|
dismissDialog()
|
data?.goDetail(this)
|
}){_,_->
|
dismissDialog()
|
}
|
}
|
}
|
|
override fun initView() {
|
titleBar.gone()
|
val settings = webView.settings
|
settings.javaScriptEnabled = true
|
settings.javaScriptCanOpenWindowsAutomatically = true
|
settings.defaultTextEncodingName = "utf-8"
|
settings.domStorageEnabled = true
|
settings.setSupportZoom(true)
|
// settings.textZoom = 200
|
settings.useWideViewPort = true
|
settings.loadWithOverviewMode = true
|
settings.layoutAlgorithm = WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING
|
webView.webChromeClient = object : WebChromeClient() {}
|
webView.webViewClient = object : WebViewClient() {}
|
rv_chapter.layoutManager = LinearLayoutManager(this)
|
rv_chapter.adapter = chapterAdapter
|
rv_push.layoutManager = GridLayoutManager(this,2)
|
rv_push.adapter = courseAdapter
|
webView.backgroundColor = 0
|
webView.background.alpha = 0
|
appbar.addOnOffsetChangedListener(object : AppBarStateChangeListener() {
|
override fun onStateChanged(appBarLayout: AppBarLayout?, state: State?, ratio:Double) {
|
bg.alpha = if(ratio<0.2) 0f else ((ratio-0.2)/0.8).toFloat()
|
when (state) {
|
State.EXPANDED -> {
|
//展开状态
|
iv_back.imageResource = R.mipmap.icon_back_white
|
iv_share.imageResource = R.mipmap.ic_share
|
if (data?.isCollect!=1)
|
iv_collect.imageResource = R.mipmap.uncollect
|
tvTitle.textColorResource = R.color.white
|
}
|
State.COLLAPSED -> {
|
//折叠状态
|
iv_back.imageResource = R.mipmap.back
|
iv_share.imageResource = R.mipmap.ic_share_black
|
if (data?.isCollect!=1)
|
iv_collect.imageResource = R.mipmap.uncollect_b
|
tvTitle.textColorResource = R.color.textColor
|
}
|
}
|
}
|
})
|
|
data?.apply {
|
iv_collect.setImageResource(if (data?.isCollect == 1) R.mipmap.collected else R.mipmap.uncollect)
|
iv_cover.setImageURI(detailUrl)
|
tv_name.text = courseTitle
|
tv_teacher.text = "导师 ${tutor}"
|
tv_count.text = "${count}人已加入学习"
|
val sHead =
|
"<html><head><meta name=\"viewport\" content=\"width=device-width, " + "initial-scale=1.0, minimum-scale=0.5, maximum-scale=2.0, user-scalable=yes\" />" + "<style>img{max-width:100% !important;height:auto !important;}</style>" + "<style>body{max-width:100% !important;}</style>" + "</head><body>"
|
webView!!.loadDataWithBaseURL(
|
null,
|
sHead + briefIntroduction,
|
"text/html",
|
"utf-8",
|
null
|
)
|
chapterList.addAll(list)
|
chapterAdapter.notifyDataSetChanged()
|
courseList.addAll(list2)
|
courseAdapter.notifyDataSetChanged()
|
if (chargeType == 3)
|
tv_send.visible()
|
if (chargeType == 1||isBuy == 1||(chargeType == 2&&isVip == 1)){
|
tv_action.text = "立即学习"
|
}else{
|
val s = "¥ %s 立即购买".format(generalPrice!!)
|
tv_action.text = SpanBuilder(s).size(0,1,12).size(2,generalPrice.length+2,21).build()
|
}
|
}
|
|
}
|
|
private fun scroll2Position(position:Int){
|
scrollByTab = true
|
timer?.cancel()
|
when(position){
|
0->{
|
scrollView.smoothScrollTo(0,0,SCROLL_DURATION)
|
}
|
1->{
|
scrollView.smoothScrollTo(0,tv_1.top,SCROLL_DURATION)
|
}
|
2->{
|
scrollView.smoothScrollTo(0,tv_2.top,SCROLL_DURATION)
|
}
|
}
|
timer = object :CountDownTimer(SCROLL_DURATION.toLong(),SCROLL_DURATION.toLong()){
|
override fun onTick(p0: Long) {
|
}
|
|
override fun onFinish() {
|
scrollByTab = false
|
}
|
}.start()
|
}
|
|
private fun checkTab(i: Int){
|
when (i) {
|
0 -> {
|
cb_intro.textColorResource = R.color.textColor
|
cb_intro.setTextSize(TypedValue.COMPLEX_UNIT_SP,21f)
|
iv_tab_1.visible()
|
cb_chapter.textColorResource = R.color.textColor99
|
cb_chapter.setTextSize(TypedValue.COMPLEX_UNIT_SP,16f)
|
iv_tab_2.gone()
|
cb_push.textColorResource = R.color.textColor99
|
cb_push.setTextSize(TypedValue.COMPLEX_UNIT_SP,16f)
|
iv_tab_3.gone()
|
}
|
1 -> {
|
cb_chapter.textColorResource = R.color.textColor
|
cb_chapter.setTextSize(TypedValue.COMPLEX_UNIT_SP,21f)
|
iv_tab_2.visible()
|
cb_intro.textColorResource = R.color.textColor99
|
cb_intro.setTextSize(TypedValue.COMPLEX_UNIT_SP,16f)
|
iv_tab_1.gone()
|
cb_push.textColorResource = R.color.textColor99
|
cb_push.setTextSize(TypedValue.COMPLEX_UNIT_SP,16f)
|
iv_tab_3.gone()
|
}
|
else -> {
|
cb_push.textColorResource = R.color.textColor
|
cb_push.setTextSize(TypedValue.COMPLEX_UNIT_SP,21f)
|
iv_tab_3.visible()
|
cb_intro.textColorResource = R.color.textColor99
|
cb_intro.setTextSize(TypedValue.COMPLEX_UNIT_SP,16f)
|
iv_tab_1.gone()
|
cb_chapter.textColorResource = R.color.textColor99
|
cb_chapter.setTextSize(TypedValue.COMPLEX_UNIT_SP,16f)
|
iv_tab_2.gone()
|
}
|
}
|
}
|
|
private fun getData(isSend:Boolean) {
|
HttpManager.confirmOrder(data?.id?:"").request(this){_,data->
|
if (isSend){
|
SendConfirmDialog.show(supportFragmentManager,data?.generalPrice?:"0.0",object :StringCallback{
|
override fun onResult(rst: String) {
|
startActivity<BuyCourseActivity>("isSend" to isSend,"data" to data)
|
}
|
})
|
}else
|
startActivityForResult<BuyCourseActivity>(1,"isSend" to isSend,"data" to data)
|
}
|
}
|
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
super.onActivityResult(requestCode, resultCode, data)
|
if (resultCode == RESULT_OK){
|
this.data?.isBuy = 1
|
tv_action.text = "立即学习"
|
}
|
}
|
}
|