lmw
2024-10-23 2f204867ad034d3a95ba9acc112d6507f296447b
app/src/main/java/com/sinata/xqmuse/ui/discovery/DiscoveryFragment.kt
@@ -1,54 +1,41 @@
package com.sinata.xqmuse.ui.discovery
import androidx.recyclerview.widget.LinearLayoutManager
import cn.sinata.xldutils.activity.BaseActivity
import android.Manifest
import androidx.recyclerview.widget.GridLayoutManager
import cn.sinata.xldutils.fragment.BaseFragment
import cn.sinata.xldutils.gone
import cn.sinata.xldutils.visible
import cn.sinata.xldutils.utils.SPUtils
import com.sinata.xqmuse.JkApplication
import com.sinata.xqmuse.R
import com.sinata.xqmuse.dialog.AddMomentPop
import com.sinata.xqmuse.dialog.TipDialog
import com.sinata.xqmuse.network.HttpManager
import com.sinata.xqmuse.network.entity.Dynamic
import com.sinata.xqmuse.network.entity.Place
import com.sinata.xqmuse.network.requestByF
import com.sinata.xqmuse.ui.discovery.adapter.DynamicAdapter
import com.sinata.xqmuse.ui.discovery.adapter.PlaceAdapter
import com.sinata.xqmuse.utils.Const
import com.sinata.xqmuse.utils.event.EmptyEvent
import com.sinata.xqmuse.utils.extention.clickDelay
import com.sinata.xqmuse.utils.interfaces.StringCallback
import com.tbruyelle.rxpermissions2.RxPermissions
import kotlinx.android.synthetic.main.fragment_discovery.*
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.jetbrains.anko.support.v4.dip
import org.jetbrains.anko.support.v4.startActivity
class DiscoveryFragment : BaseFragment() {
    override fun contentViewId() = R.layout.fragment_discovery
    private val dyns = arrayListOf<Dynamic>()
    private val adapter = DynamicAdapter(dyns)
    private val list = arrayListOf<Place>()
    private val adapter = PlaceAdapter(list)
    private var page = 1
    var search: String? = null //搜索
    override fun onFirstVisibleToUser() {
        EventBus.getDefault().register(this)
        rv_act.layoutManager = LinearLayoutManager(requireContext())
        rv_act.adapter = adapter
        iv_msg.setOnClickListener {
            startActivity<MsgActivity>()
        }
        iv_add.setOnClickListener {
            val pop = AddMomentPop(requireContext())
            pop.setCallback(object : StringCallback {
                override fun onResult(rst: String) {
                    startActivity<PublishActivity>("isVideo" to (rst == "video"))
                }
            })
            pop.showAsDropDown(iv_add,dip(-120),-iv_add.measuredHeight-dip(20))
        }
        rv_list.layoutManager = GridLayoutManager(requireContext(),2)
        rv_list.adapter = adapter
        adapter.setOnItemClickListener { view, position ->
            startActivity<DynamicActivity>("id" to dyns[position].id)
            startActivity<PlaceDetailActivity>("id" to list[position].id)
        }
        refreshLayout.setOnRefreshListener {
            val s = et_search.text.toString()
@@ -60,41 +47,51 @@
            page++
            getData()
        }
        tv_search.clickDelay {
            val s = et_search.text.toString()
            search = if (s.isNullOrEmpty()) null else s
            (requireActivity() as BaseActivity).hideInputMethod()
            refreshLayout.resetNoMoreData()
            page = 1
            getData()
        et_search.setOnClickListener {
            startActivity<SearchPlaceActivity>()
        }
        getUnread()
        page = 1
        getData()
        checkLocation()
    }
    fun getUnread(){
        HttpManager.messageCount().requestByF(this){_,data->
            if (data?:0>99){
                tv_unread.visible()
                tv_unread.text = "99+"
            }else if (data?:0>0){
                tv_unread.visible()
                tv_unread.text = data.toString()
            }else
                tv_unread.gone()
    private fun checkLocation() {
        val rxPermissions = RxPermissions(requireActivity())
        if (rxPermissions.isGranted(Manifest.permission.ACCESS_FINE_LOCATION)||SPUtils.instance().getBoolean(Const.User.LOCATION_REFUSED)){
            refreshLayout.autoRefresh()
        }else{
            TipDialog.show(childFragmentManager,"为了展示您附近的疗愈馆,我们需要获取该设备的位置权限",object :TipDialog.OnClickCallback{
                override fun onOk() {
                    val subscribe =
                        rxPermissions.request(Manifest.permission.ACCESS_FINE_LOCATION).subscribe {
                            if (it){
                                //todo 高德定位
                                refreshLayout.autoRefresh()
                            }else{
                                SPUtils.instance().put(Const.User.LOCATION_REFUSED,true).apply()
                                refreshLayout.autoRefresh()
        }
    }
                    compositeDisposable.add(subscribe)
                }
                override fun onCancel() {
                    SPUtils.instance().put(Const.User.LOCATION_REFUSED,true).apply()
                    refreshLayout.autoRefresh()
                }
            },"去授权","取消")
        }
    }
    private fun getData(){
        HttpManager.findList(page,search).requestByF(this,success = {_,data->
        HttpManager.getMeditationPage(page,search,JkApplication.lat, JkApplication.lon).requestByF(this,success = { _, data->
            if (page == 1)
                dyns.clear()
            dyns.addAll(data?: arrayListOf())
                list.clear()
            list.addAll(data?.list?: arrayListOf())
            adapter.notifyDataSetChanged()
            if (dyns.isEmpty())
            if (list.isEmpty())
                refreshLayout.finishRefreshWithNoMoreData()
            else if (data.isNullOrEmpty())
            else if (data?.list?.isNullOrEmpty() == true)
                refreshLayout.finishLoadMoreWithNoMoreData()
            else if (page == 1)
                refreshLayout.finishRefresh()