lmw
2024-10-23 2f204867ad034d3a95ba9acc112d6507f296447b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package com.sinata.xqmuse.ui.discovery
 
import android.Manifest
import androidx.recyclerview.widget.GridLayoutManager
import cn.sinata.xldutils.fragment.BaseFragment
import cn.sinata.xldutils.utils.SPUtils
import com.sinata.xqmuse.JkApplication
import com.sinata.xqmuse.R
import com.sinata.xqmuse.dialog.TipDialog
import com.sinata.xqmuse.network.HttpManager
import com.sinata.xqmuse.network.entity.Place
import com.sinata.xqmuse.network.requestByF
import com.sinata.xqmuse.ui.discovery.adapter.PlaceAdapter
import com.sinata.xqmuse.utils.Const
import com.sinata.xqmuse.utils.event.EmptyEvent
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.startActivity
 
 
class DiscoveryFragment : BaseFragment() {
    override fun contentViewId() = R.layout.fragment_discovery
 
    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_list.layoutManager = GridLayoutManager(requireContext(),2)
        rv_list.adapter = adapter
 
        adapter.setOnItemClickListener { view, position ->
            startActivity<PlaceDetailActivity>("id" to list[position].id)
        }
        refreshLayout.setOnRefreshListener {
            val s = et_search.text.toString()
            search = if (s.isNullOrEmpty()) null else s
            page = 1
            getData()
        }
        refreshLayout.setOnLoadMoreListener {
            page++
            getData()
        }
 
        et_search.setOnClickListener {
            startActivity<SearchPlaceActivity>()
        }
        checkLocation()
    }
 
    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.getMeditationPage(page,search,JkApplication.lat, JkApplication.lon).requestByF(this,success = { _, data->
            if (page == 1)
                list.clear()
            list.addAll(data?.list?: arrayListOf())
            adapter.notifyDataSetChanged()
            if (list.isEmpty())
                refreshLayout.finishRefreshWithNoMoreData()
            else if (data?.list?.isNullOrEmpty() == true)
                refreshLayout.finishLoadMoreWithNoMoreData()
            else if (page == 1)
                refreshLayout.finishRefresh()
            else
                refreshLayout.finishLoadMore()
        }){_,_->
            if (page == 1)
                refreshLayout.finishRefresh(false)
            else
                refreshLayout.finishLoadMore(false)
        }
    }
 
    @Subscribe
    fun refresh(e:EmptyEvent){
        if (e.code == Const.EventCode.REFRESH_DISCOVERY)
            refreshLayout.autoRefresh()
    }
 
    override fun onDestroy() {
        super.onDestroy()
        EventBus.getDefault().unregister(this)
    }
}