| | |
| | | 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.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.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 |
| | | import org.jetbrains.anko.support.v4.toast |
| | | |
| | | |
| | | 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() |
| | |
| | | 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)){ |
| | | 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.findList(page,search).requestByF(this,success = {_,data-> |
| | | if (page == 1) |
| | | dyns.clear() |
| | | dyns.addAll(data?: arrayListOf()) |
| | | adapter.notifyDataSetChanged() |
| | | if (dyns.isEmpty()) |
| | | refreshLayout.finishRefreshWithNoMoreData() |
| | | else if (data.isNullOrEmpty()) |
| | | refreshLayout.finishLoadMoreWithNoMoreData() |
| | | else if (page == 1) |
| | | refreshLayout.finishRefresh() |
| | | else |
| | | refreshLayout.finishLoadMore() |
| | | }){_,_-> |
| | | 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 |
| | |
| | | } |
| | | |
| | | @Subscribe |
| | | fun refresh(e:EmptyEvent){ |
| | | fun refresh(e: EmptyEvent){ |
| | | if (e.code == Const.EventCode.REFRESH_DISCOVERY) |
| | | refreshLayout.autoRefresh() |
| | | } |