lmw
2025-04-24 718f31c92e2029d05260810435a2c70cef6e6ce5
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
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.amap.api.location.AMapLocationClient
import com.amap.api.location.AMapLocationClientOption
import com.sinata.xqmuse.XQApplication
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
import org.jetbrains.anko.support.v4.toast
 
 
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)){
            requestLocation()
        }else if (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) {
                                        requestLocation()
                                    } 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 requestLocation(){
        toast("定位中...")
        var locationClient:AMapLocationClient?
        try {
            locationClient = AMapLocationClient(requireActivity())
        } catch (e: Exception) {
            locationClient = null
        }
        locationClient?.setLocationListener {
            XQApplication.lat = it.latitude
            XQApplication.lon = it.longitude
            refreshLayout.autoRefresh()
        }
        val option = AMapLocationClientOption()
        option.locationPurpose = AMapLocationClientOption.AMapLocationPurpose.SignIn
        option.isOnceLocation = true
        locationClient?.setLocationOption(option)
        //设置场景模式后最好调用一次stop,再调用start以保证场景模式生效
        locationClient?.stopLocation()
        locationClient?.startLocation()
    }
 
    private fun getData(){
        HttpManager.getMeditationPage(page, search, XQApplication.lat, XQApplication.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)
    }
}