package com.fuban.user.ui.trip
|
|
import android.app.Activity
|
import android.content.Intent
|
import android.text.Editable
|
import android.text.TextWatcher
|
import androidx.core.os.bundleOf
|
import androidx.recyclerview.widget.LinearLayoutManager
|
import cn.sinata.xldutils.*
|
import cn.sinata.xldutils.rxutils.ResultException
|
import cn.sinata.xldutils.view.SwipeRefreshRecyclerLayout
|
import com.amap.api.services.help.Inputtips
|
import com.amap.api.services.help.InputtipsQuery
|
import com.amap.api.services.help.Tip
|
import com.fuban.user.FBApplication
|
import com.fuban.user.db.HistoryDBManager
|
import com.fuban.user.ui.TransparentStatusBarActivity
|
import com.fuban.user.dialog.TipDialog
|
import com.fuban.user.ui.trip.adapter.PositionAdapter
|
import io.reactivex.Flowable
|
import com.fuban.user.R
|
import com.fuban.user.network.entity.Anchor
|
import com.fuban.user.ui.ChooseCityActivity
|
import com.fuban.user.ui.crosscity.ConfirmPositionActivity
|
import io.reactivex.subscribers.DisposableSubscriber
|
import kotlinx.android.synthetic.main.activity_choose_position.*
|
import org.jetbrains.anko.startActivityForResult
|
import org.jetbrains.anko.toast
|
|
class ChoosePositionActivity: TransparentStatusBarActivity() {
|
override fun setContentView() = R.layout.activity_choose_position
|
|
private val isStart by lazy {
|
intent.getBooleanExtra("isStart",true)
|
}
|
private val siteId by lazy { //如果不为零,代表是跨城搜索地址,城市不可切换
|
intent.getIntExtra("siteId",0)
|
}
|
private val isLogistics by lazy { //true物流订单
|
intent.getBooleanExtra("isLogistics",false)
|
}
|
private val footerView by lazy {
|
layoutInflater.inflate(R.layout.footer_clear,lv_position,false)
|
}
|
|
private var disposable: DisposableSubscriber<List<Tip>>? = null
|
private val mTips = ArrayList<Tip>() //搜索结果
|
private val adapter by lazy {
|
PositionAdapter(mTips)
|
}
|
|
private val cityName by lazy {
|
intent.getStringExtra("cityName")
|
}
|
private val data by lazy { //直通车的电子围栏锚点
|
intent.getParcelableArrayListExtra<Anchor>("data")
|
}
|
|
|
override fun initClick() {
|
tv_city.setOnClickListener {
|
if (siteId == 0)
|
startActivityForResult<ChooseCityActivity>(1,"changeRoot" to false)
|
}
|
tv_back.setOnClickListener {
|
finish()
|
}
|
adapter.setOnItemClickListener { view, position ->
|
HistoryDBManager.saveHistory(this,mTips[position],tv_city.text.toString()) //保存搜索记录
|
if (siteId!=0){ //跨城,需要跳转判断是否在站点范围内
|
startActivityForResult<ConfirmPositionActivity>(2,"name" to mTips[position].name,
|
"address" to if (mTips[position].address.isEmpty()) mTips[position].district else mTips[position].address,
|
"lat" to mTips[position].point.latitude,"lon" to mTips[position].point.longitude,
|
"siteId" to siteId,"code" to mTips[position].adcode,"data" to data)
|
}else{
|
setResult(Activity.RESULT_OK,intent.putExtra("lat",mTips[position].point.latitude)
|
.putExtra("lon",mTips[position].point.longitude).putExtra("name",mTips[position].name)
|
.putExtra("code",mTips[position].adcode))
|
finish()
|
}
|
}
|
footerView.setOnClickListener {
|
val tipDialog = TipDialog()
|
tipDialog.arguments = bundleOf("msg" to "确定清除历史吗?","ok" to "确定","cancel" to "取消")
|
tipDialog.setCallback(object : TipDialog.OnClickCallback{
|
override fun onCancel() {
|
}
|
|
override fun onOk() {
|
HistoryDBManager.clearHistory(this@ChoosePositionActivity)
|
mTips.clear()
|
adapter.notifyDataSetChanged()
|
adapter.removeFooter()
|
}
|
})
|
tipDialog.show(supportFragmentManager,"tip")
|
|
}
|
}
|
|
override fun initView() {
|
tv_city.text = if (cityName.isNullOrEmpty()) FBApplication.chooseCityName else cityName
|
if (siteId!=0){ //跨城
|
tv_city.setCompoundDrawablesWithIntrinsicBounds(0,0,0,0)
|
}
|
lv_position.setMode(SwipeRefreshRecyclerLayout.Mode.None)
|
lv_position.setLayoutManager(LinearLayoutManager(this, LinearLayoutManager.VERTICAL,false))
|
title = if (isLogistics) "设置领取点" else if(isStart) "设置上车点" else if (siteId!=0) "设置下车点" else "设置目的地"
|
et_search.hint = if (isLogistics) "在哪里取货?" else if (isStart) "您从哪里上车" else "您要去哪儿"
|
|
lv_position.setAdapter(adapter)
|
et_search.addTextChangedListener(object : TextWatcher {
|
override fun afterTextChanged(s: Editable?) {
|
if (s.isNullOrEmpty()){
|
mTips.addAll(HistoryDBManager.getAddressList(this@ChoosePositionActivity,if (siteId!=0) tv_city.text.toString() else ""))
|
adapter.isSearch(false)
|
tv_empty.gone()
|
if (mTips.isNotEmpty())
|
adapter.setFooterView(footerView)
|
}else{
|
search(s.toString())
|
}
|
}
|
|
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
|
}
|
|
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
|
}
|
})
|
mTips.addAll(HistoryDBManager.getAddressList(this,if (siteId!=0) tv_city.text.toString() else ""))
|
adapter.notifyDataSetChanged()
|
if (mTips.isNotEmpty())
|
adapter.setFooterView(footerView)
|
et_search.requestFocus()
|
}
|
|
private fun search(keyword: String) {
|
//取消以前的订阅
|
if (disposable != null && !disposable!!.isDisposed) {
|
disposable?.dispose()
|
}
|
val query = InputtipsQuery(keyword, tv_city.text.toString())
|
query.cityLimit = true
|
val inputtips = Inputtips(this, query)
|
disposable = object : DisposableSubscriber<List<Tip>>() {
|
|
override fun onComplete() {
|
|
}
|
|
override fun onNext(t: List<Tip>?) {
|
sysErr("------t-->$t")
|
mTips.clear()
|
if (t == null) {
|
|
} else {
|
mTips.addAll(t.filter { it.point != null && (it.point.latitude != 0.0 || it.point.longitude != 0.0) })
|
}
|
if (mTips.isEmpty())
|
tv_empty.visible()
|
else
|
tv_empty.gone()
|
adapter.isSearch(true)
|
adapter.removeFooter()
|
}
|
|
override fun onError(t: Throwable?) {
|
if (t is ResultException) {
|
toast(t.message.toString())
|
} else {
|
toast("搜索出错啦!")
|
}
|
}
|
}
|
Flowable.just(inputtips).ioScheduler().flatMap {
|
sysErr("----------inputtips----------")
|
val list = try {
|
it.requestInputtips()
|
} catch (e: Exception) {
|
null
|
}
|
sysErr("----list--->$list")
|
if (list == null) {
|
Flowable.error(ResultException("没有搜索到相关数据"))
|
} else {
|
Flowable.just(list)
|
}
|
}.defaultScheduler().subscribe(disposable)
|
}
|
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
super.onActivityResult(requestCode, resultCode, data)
|
if (resultCode == Activity.RESULT_OK&&data!=null){
|
if (requestCode == 1)
|
tv_city.text = data.getStringExtra("name")
|
else{
|
setResult(resultCode,data)
|
finish()
|
}
|
}
|
}
|
}
|