package com.igo.user.ui.trip
|
|
import android.app.Activity
|
import android.content.Intent
|
import android.text.Editable
|
import android.text.TextWatcher
|
import android.util.TypedValue
|
import android.widget.EditText
|
import android.widget.TextView
|
import androidx.recyclerview.widget.LinearLayoutManager
|
import cn.sinata.xldutils.defaultScheduler
|
import cn.sinata.xldutils.gone
|
import cn.sinata.xldutils.rxutils.ResultException
|
import cn.sinata.xldutils.sysErr
|
import cn.sinata.xldutils.utils.SPUtils
|
import cn.sinata.xldutils.view.SwipeRefreshRecyclerLayout
|
import cn.sinata.xldutils.visible
|
import com.igo.user.IGoApplication
|
import com.igo.user.R
|
import com.igo.user.db.HistoryDBManager
|
import com.igo.user.network.HttpManager
|
import com.igo.user.network.entity.Anchor
|
import com.igo.user.network.entity.LatLonPoint
|
import com.igo.user.network.entity.PlaceDetailBean
|
import com.igo.user.network.entity.SearchBean
|
import com.igo.user.network.entity.Tip
|
import com.igo.user.ui.ChooseCityActivity
|
import com.igo.user.ui.TransparentStatusBarActivity
|
import com.igo.user.ui.trip.adapter.PositionAdapter
|
import io.reactivex.subscribers.DisposableSubscriber
|
import org.jetbrains.anko.find
|
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 isModify by lazy { //true:修改终点
|
intent.getBooleanExtra("isModify",false)
|
}
|
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 val lv_position by lazy { find<SwipeRefreshRecyclerLayout>(R.id.lv_position) }
|
private val tv_city by lazy { find<TextView>(R.id.tv_city) }
|
private val tv_back by lazy { find<TextView>(R.id.tv_back) }
|
private val tv_empty by lazy { find<TextView>(R.id.tv_empty) }
|
private val et_search by lazy { find<EditText>(R.id.et_search) }
|
|
private var country = "" //国家名,为了解决国外城市名同名的问题
|
|
private var disposable: DisposableSubscriber<SearchBean>? = null
|
private var disposableLatLon: DisposableSubscriber<PlaceDetailBean>? = 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")
|
}
|
|
private var lat = 0.0
|
private var lon = 0.0
|
|
|
override fun initClick() {
|
tv_city.setOnClickListener {
|
if (siteId == 0)
|
startActivityForResult<ChooseCityActivity>(1,"changeRoot" to false)
|
}
|
tv_back.setOnClickListener {
|
finish()
|
}
|
adapter.setOnItemClickListener { view, position ->
|
if (mTips[position].point.latitude == 0.0&&mTips[position].point.longitude == 0.0){
|
getLatLon(mTips[position])
|
}else{
|
HistoryDBManager.saveHistory(this,mTips[position],tv_city.text.toString()) //保存搜索记录
|
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 getString(R.string.确定清除历史吗),"ok" to getString(R.string.确定),"cancel" to getString(R.string.取消))
|
// tipDialog.setCallback(object : TipDialog.OnClickCallback{
|
// override fun onCancel() {
|
// }
|
//
|
// override fun onOk() {
|
//
|
// }
|
// })
|
// tipDialog.show(supportFragmentManager,"tip")
|
HistoryDBManager.clearHistory(this@ChoosePositionActivity)
|
mTips.clear()
|
adapter.notifyDataSetChanged()
|
adapter.removeFooter()
|
}
|
}
|
|
override fun initView() {
|
tv_city.text = if (cityName.isNullOrEmpty()) IGoApplication.chooseCityName else cityName
|
lat = if (IGoApplication.chooseCityLat!=0.0) IGoApplication.chooseCityLat else IGoApplication.lat
|
lon = if (IGoApplication.chooseCityLon!=0.0) IGoApplication.chooseCityLon else IGoApplication.lon
|
|
country = IGoApplication.chooseCountry
|
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) getString(if (isStart) R.string.设置领取点 else R.string.设置目的地) else if(isModify) getString(R.string.设置目的地) else if(isStart){
|
if (SPUtils.instance().getString("language","en") == "fr"){ //解决法文标题过长问题
|
titleBar.titleView.setTextSize(TypedValue.COMPLEX_UNIT_SP,12f)
|
}
|
getString(R.string.设置上车点)
|
} else if (siteId!=0) getString(
|
R.string.设置下车点) else getString(R.string.设置目的地)
|
et_search.hint = if (isLogistics) getString(if (isStart) R.string.在哪里取货 else R.string.输入收件地址) else if (isStart) getString(R.string.您从哪里上车) else getString(R.string.您要去哪儿)
|
|
lv_position.setAdapter(adapter)
|
et_search.addTextChangedListener(object : TextWatcher {
|
override fun afterTextChanged(s: Editable?) {
|
if (s.isNullOrEmpty()){
|
disposable?.dispose()
|
mTips.clear()
|
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()
|
}
|
disposable = object : DisposableSubscriber<SearchBean>() {
|
|
override fun onComplete() {
|
|
}
|
|
override fun onNext(t: SearchBean?) {
|
sysErr("------t-->$t")
|
mTips.clear()
|
if (t == null||t.status!= "OK") {
|
|
} else {
|
mTips.addAll(t.results.map {
|
val tip = Tip()
|
tip.name = it.name
|
tip.address = it.formatted_address
|
tip.setPostion(
|
LatLonPoint(
|
it.geometry.location.lat,
|
it.geometry.location.lng
|
)
|
)
|
tip
|
})
|
}
|
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("搜索出错啦!")
|
}
|
}
|
}
|
var cityName = if (cityName.isNullOrEmpty()) IGoApplication.chooseCityName else cityName
|
HttpManager.textsearch("$cityName $keyword",lat,lon).defaultScheduler().subscribe(disposable)
|
}
|
|
private fun getLatLon(data: Tip) {
|
//取消以前的订阅
|
if (disposableLatLon != null && !disposableLatLon!!.isDisposed) {
|
disposableLatLon?.dispose()
|
}
|
disposableLatLon = object : DisposableSubscriber<PlaceDetailBean>() {
|
|
override fun onComplete() {
|
|
}
|
|
override fun onNext(t: PlaceDetailBean?) {
|
sysErr("------t-->$t")
|
mTips.clear()
|
if (t == null||t.status!= "OK") {
|
|
} else {
|
data.setPostion(LatLonPoint(t.result.geometry.location.lat,t.result.geometry.location.lng))
|
HistoryDBManager.saveHistory(this@ChoosePositionActivity,data,tv_city.text.toString()) //保存搜索记录
|
setResult(Activity.RESULT_OK,intent.putExtra("lat",data.point.latitude)
|
.putExtra("lon",data.point.longitude).putExtra("name",data.name)
|
.putExtra("code",data.adcode))
|
finish()
|
}
|
}
|
|
override fun onError(t: Throwable?) {
|
if (t is ResultException) {
|
toast(t.message.toString())
|
}
|
}
|
}
|
showDialog()
|
HttpManager.placeDetails(data.adcode).defaultScheduler().subscribe(disposableLatLon)
|
}
|
|
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")
|
country = data.getStringExtra("country")?:""
|
lat = data.getDoubleExtra("lat",0.0)
|
lon = data.getDoubleExtra("lon",0.0)
|
}
|
else{
|
setResult(resultCode,data)
|
finish()
|
}
|
}
|
}
|
}
|