ExpertIntroActivity.kt 5.43 KB
Newer Older
1 2 3 4 5 6 7 8 9
package com.ydl.confide.intro

import android.graphics.Color
import android.os.Build
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.databinding.DataBindingUtil
import androidx.viewpager2.widget.ViewPager2
10
import com.alibaba.android.arouter.facade.annotation.Autowired
11
import com.alibaba.android.arouter.facade.annotation.Route
12 13
import com.alibaba.android.arouter.launcher.ARouter
import com.alibaba.fastjson.JSON
14
import com.ydl.confide.R
15
import com.ydl.confide.api.ConfideRoute
16
import com.ydl.confide.databinding.ActivityExpertIntroBinding
17
import com.ydl.confide.home.bean.ConfideHomeBodyBean
万齐军 committed
18
import com.ydl.confide.home.http.ConfideHomeApi
19 20 21
import com.ydl.confide.router.PhoneCallIn
import com.ydl.webview.H5Params
import com.ydl.webview.NewH5Activity
万齐军 committed
22
import com.ydl.ydlcommon.base.config.HttpConfig
23
import com.ydl.ydlcommon.base.config.HttpConfig.Companion.YDL_H5
24
import com.ydl.ydlcommon.modular.findRouteService
25
import com.ydl.ydlcommon.utils.BuryPointUtils
万齐军 committed
26 27 28
import com.ydl.ydlcommon.utils.LogUtil
import com.ydl.ydlnet.YDLHttpUtils
import com.yidianling.common.tools.ToastUtil
29
import com.yidianling.user.api.service.IUserService
万齐军 committed
30 31 32
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers
33 34


35
@Route(path = ConfideRoute.R_VIDEO_SHOW)
36
class ExpertIntroActivity : AppCompatActivity() {
万齐军 committed
37 38 39 40 41
    companion object {
        private const val SOURCE_VIDEO = 10
    }

    private val tag = javaClass.simpleName
42 43 44 45

    @Autowired
    @JvmField
    var initPos: Int = 0
万齐军 committed
46

47 48
    @Autowired
    @JvmField
万齐军 committed
49
    var initData: String? = null
50
    private var lastSelectPos = 0
51 52
    private lateinit var binding: ActivityExpertIntroBinding
    private lateinit var adapter: IntroAdapter
万齐军 committed
53 54 55 56 57
    private var page = 1

    private var disposable: Disposable? = null

    private val confideApi = YDLHttpUtils.obtainApi(ConfideHomeApi::class.java)
58 59 60

    private val data = mutableListOf<VideoViewModel>()

61 62
    private var noMoreData = false

63 64
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
65
        ARouter.getInstance().inject(this)
66 67 68 69 70 71 72 73
        binding = DataBindingUtil.setContentView(this, R.layout.activity_expert_intro)
        if (Build.VERSION.SDK_INT >= 21) {
            val decorView = window.decorView
            val option = (View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    or View.SYSTEM_UI_FLAG_LAYOUT_STABLE)
            decorView.systemUiVisibility = option
            window.statusBarColor = Color.TRANSPARENT
        }
万齐军 committed
74
        if (initData != null) {
75
            val beans = JSON.parseArray(initData, ConfideHomeBodyBean::class.java)
万齐军 committed
76
                val isLogin = findRouteService(IUserService::class.java).isLogin()
77 78 79
            val vms = beans.map {
                VideoViewModel().mapOf(it).apply { showFreeTag.set(!isLogin) }
            }
80 81
            data.addAll(vms)
        }
万齐军 committed
82 83 84
        if (data.isEmpty()) {
            loadMore()
        }
85
        binding.ivBack.setOnClickListener { onBackPressed() }
86
        binding.tvConfideRecord.setOnClickListener {
万齐军 committed
87
            if (!PhoneCallIn.loginByOneKeyLogin(this, true)) {
88 89 90 91 92 93 94 95
                return@setOnClickListener
            }
            BuryPointUtils.getInstance().createMap()
                .put("mine_name", "倾诉记录")
                .burryPoint("mine")
            val h5Paramsqing = H5Params(YDL_H5 + "confideOrderList", null)
            NewH5Activity.start(this, h5Paramsqing)
        }
96 97 98 99 100 101 102
        binding.viewPager.orientation = ViewPager2.ORIENTATION_VERTICAL
        binding.viewPager.offscreenPageLimit = 1
        adapter = IntroAdapter(this, data, this)
        binding.viewPager.adapter = adapter
        binding.viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
            override fun onPageSelected(position: Int) {
                adapter.onSelect(position)
103
                if (position == data.size - 1 && lastSelectPos < position) {
104 105
                    loadMore()
                }
106
                lastSelectPos = position
107 108
            }
        })
109
        adapter.checkNetwork()
万齐军 committed
110
        binding.viewPager.setCurrentItem(initPos, false)
111 112 113
    }

    private fun loadMore() {
114 115 116 117
        if (disposable != null && !disposable!!.isDisposed) {
            return
        }
        if (noMoreData) return
万齐军 committed
118 119 120 121 122 123 124
        disposable = confideApi.recommendDoctor(HttpConfig.JAVA_BASE_URL + "auth/listen/nsearch?", page, SOURCE_VIDEO)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe({ resp ->
                if (resp.code == "200") {
                    page++
                    val body = resp.data.body
万齐军 committed
125
                    val isLogin = findRouteService(IUserService::class.java).isLogin() ?: false
126
                    val map = body?.map { VideoViewModel().mapOf(it).apply { showFreeTag.set(!isLogin) } }
万齐军 committed
127 128 129 130
                    map?.let {
                        data.addAll(it)
                        adapter.notifyItemRangeInserted(data.size - it.size, it.size)
                    }
131 132 133
                    if (body == null || body.size == 0) {
                        noMoreData = true
                    }
万齐军 committed
134 135 136 137 138 139 140 141 142 143 144
                } else {
                    ToastUtil.toastShort(resp.msg)
                }
            }, { throwable ->
                LogUtil.e(tag, throwable.message)
            })
    }

    override fun onDestroy() {
        super.onDestroy()
        disposable?.dispose()
145 146
    }
}