package com.igo.user.ui.trip
|
|
import android.app.Activity
|
import android.graphics.Color
|
import android.view.View
|
import android.widget.CheckBox
|
import android.widget.TextView
|
import androidx.core.os.bundleOf
|
import cn.sinata.xldutils.gone
|
import cn.sinata.xldutils.invisible
|
import cn.sinata.xldutils.toBrowser
|
import cn.sinata.xldutils.utils.SPUtils
|
import cn.sinata.xldutils.utils.myToast
|
import cn.sinata.xldutils.utils.optDouble
|
import cn.sinata.xldutils.utils.showAllowingStateLoss
|
import cn.sinata.xldutils.visible
|
import com.google.android.gms.maps.CameraUpdateFactory
|
import com.google.android.gms.maps.GoogleMap
|
import com.google.android.gms.maps.SupportMapFragment
|
import com.google.android.gms.maps.model.BitmapDescriptorFactory
|
import com.google.android.gms.maps.model.LatLng
|
import com.google.android.gms.maps.model.LatLngBounds
|
import com.google.android.gms.maps.model.Marker
|
import com.google.android.gms.maps.model.MarkerOptions
|
import com.google.android.gms.maps.model.Polyline
|
import com.google.android.gms.maps.model.PolylineOptions
|
import com.igo.user.R
|
import com.igo.user.dialog.ShareDialog
|
import com.igo.user.dialog.TipDialog
|
import com.igo.user.network.Apis
|
import com.igo.user.network.HttpManager
|
import com.igo.user.network.entity.Order
|
import com.igo.user.network.entity.Point
|
import com.igo.user.network.request
|
import com.igo.user.ui.TransparentStatusBarActivity
|
import com.igo.user.utils.Const
|
import com.igo.user.utils.IGoShareUtils
|
import com.igo.user.utils.google.AMapKit
|
import com.igo.user.utils.showMoney
|
import com.igo.user.views.CenterFlowLayout
|
import com.igo.user.views.RatingBar
|
import com.share.utils.ShareUtils
|
import com.umeng.socialize.UMShareListener
|
import com.umeng.socialize.bean.SHARE_MEDIA
|
import org.jetbrains.anko.find
|
import org.jetbrains.anko.sdk27.coroutines.onClick
|
import org.jetbrains.anko.startActivity
|
|
class OrderDetailWithMapActivity :TransparentStatusBarActivity(),UMShareListener {
|
override fun setContentView() = R.layout.activity_map_order_detail
|
|
private val id by lazy {
|
intent.getIntExtra("id",0)
|
}
|
private val type by lazy {
|
intent.getIntExtra("type",0)
|
}
|
private var score = 0
|
private var order: Order? = null
|
private val points = arrayListOf<Point>()
|
|
//一至五星评价内容
|
private val list1 by lazy {
|
arrayListOf(getString(R.string.车辆不符), getString(R.string.司机不符), getString(R.string.态度恶劣), getString(R.string.行为不端), getString(R.string.违反交通), getString(R.string.额外收费))
|
}
|
private val list2 by lazy {
|
arrayListOf(getString(R.string.故意绕路), getString(R.string.额外加人), getString(R.string.送错地点), getString(R.string.车辆肮脏), getString(R.string.司机迟到), getString(R.string.中途换车))
|
}
|
private val list3 by lazy {
|
arrayListOf(getString(R.string.车内异味), getString(R.string.开车不稳), getString(R.string.道路不熟), getString(R.string.接打电话), getString(R.string.索要好评), getString(R.string.索要小费))
|
}
|
private val list4 by lazy {
|
arrayListOf(getString(R.string.基本整洁), getString(R.string.基本礼貌), getString(R.string.基本平稳), getString(R.string.基本准时), getString(R.string.基本友好), getString(R.string.基本合理))
|
}
|
private val list5 by lazy {
|
arrayListOf(getString(R.string.车辆美观), getString(R.string.内部整洁), getString(R.string.路线优化), getString(R.string.接待礼貌), getString(R.string.驾驶平稳), getString(R.string.服务卓越))
|
}
|
|
private fun getLabelList(star:Int):List<String>{
|
return when(star){
|
5->list5
|
4->list4
|
3->list3
|
2->list2
|
else->list1
|
}
|
}
|
|
private val checkList = arrayListOf<String>()
|
|
lateinit var aMap: GoogleMap
|
|
private val tv_money by lazy { find<TextView>(R.id.tv_money) }
|
private val tv_title by lazy { find<TextView>(R.id.tv_title) }
|
private val tv_name by lazy { find<TextView>(R.id.tv_name) }
|
private val tv_car by lazy { find<TextView>(R.id.tv_car) }
|
private val tv_action by lazy { find<TextView>(R.id.tv_action) }
|
private val rating by lazy { find<RatingBar>(R.id.rating) }
|
private val tv_car_info by lazy { find<TextView>(R.id.tv_car_info) }
|
private val tv_score by lazy { find<TextView>(R.id.tv_score) }
|
private val fl_label by lazy { find<CenterFlowLayout>(R.id.fl_label) }
|
|
override fun initClick() {
|
tv_money.onClick {
|
startActivity<PriceDetailActivity>("order" to order)
|
}
|
|
rating.setOnRatingChangeListener {
|
if (!rating.clickable)
|
return@setOnRatingChangeListener
|
tv_action.visible()
|
if (it.toInt()!=score)
|
inputLabel(it.toInt())
|
score = it.toInt()
|
}
|
|
tv_action.setOnClickListener {
|
HttpManager.orderEvaluate(id,score,type,checkList.joinToString (","){ it }).request(this){_,_->
|
setResult(Activity.RESULT_OK)
|
myToast(getString(R.string.评价成功))
|
tv_action.gone()
|
tv_title.text = getString(R.string.评价详情)
|
rating.isClickable = false
|
getData()
|
getRedMoney()
|
}
|
}
|
}
|
|
override fun initView() {
|
title = getString(R.string.订单详情)
|
/* titleBar.addRightButton(getString(R.string.开收据),onClickListener = View.OnClickListener {
|
if (order!=null){
|
if ((order?.receipt ?: "".isNullOrEmpty()) == true){
|
myToast(getString(R.string.收据不可用))
|
}else
|
toBrowser(order?.receipt?:"")
|
}
|
})*/
|
getData()
|
queryTrack()
|
initMap()
|
}
|
|
private fun initMap() {
|
val fragment = supportFragmentManager.findFragmentById(R.id.mMapView) as SupportMapFragment
|
AMapKit.initMap(fragment){
|
aMap = it
|
aMap.uiSettings.isMyLocationButtonEnabled = false
|
}
|
}
|
|
private fun getData(){
|
HttpManager.queryOrderInfo(id,type).request(this){ _, data->
|
order = data
|
data?.run {
|
tv_name.text = driverName
|
tv_car.text = licensePlate
|
tv_car_info.text = "$brand·$carColor"
|
tv_score.text = String.format("%.1f",score)
|
if (payMoney == 0.0)
|
tv_money.invisible()
|
else
|
tv_money.text = payMoney.showMoney(this@OrderDetailWithMapActivity)
|
if (startMarker == null)
|
setMarker(LatLng(startLat,startLon))
|
if (endMarker == null)
|
setMarker(LatLng(endLat,endLon),false)
|
val builder = LatLngBounds.builder()
|
builder.include(LatLng(startLat,startLon)).include(
|
LatLng(endLat,endLon))
|
aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(LatLng((startLat+endLat)/2,(startLon+endLon)/2),12f))
|
setStateUI()
|
if (points.isNotEmpty()&&routeOverlay == null)
|
setRoute()
|
}
|
}
|
}
|
|
private fun setStateUI() {
|
when(order?.state){
|
8->{ //待评价
|
tv_title.text = getString(R.string.匿名评价司机)
|
}
|
9->{ //已完成
|
tv_title.text = getString(R.string.评价详情)
|
rating.isClickable = false
|
rating.setStar(order!!.orderScore.toFloat())
|
fl_label.removeAllViews()
|
val list = arrayListOf<String>()
|
list.addAll(getLabelList(order!!.orderScore))
|
val split = order!!.evaluate.split(",")
|
list.forEach {
|
val view = layoutInflater.inflate(R.layout.item_score_label, null) as CheckBox
|
view.text = it
|
view.isEnabled = false
|
if (it in split)
|
view.isChecked = true
|
fl_label.addView(view)
|
}
|
}
|
}
|
}
|
|
private fun queryTrack(){
|
HttpManager.queryTrack(id,type).request(this){_,data->
|
data?.let {
|
points.addAll(it)
|
if (order!=null){
|
setRoute()
|
}
|
}
|
}
|
}
|
|
private fun inputLabel(star: Int) {
|
fl_label.removeAllViews()
|
checkList.clear()
|
val list = arrayListOf<String>()
|
list.addAll(getLabelList(star))
|
list.forEach {
|
val view = layoutInflater.inflate(R.layout.item_score_label, null) as CheckBox
|
view.text = it
|
view.setOnCheckedChangeListener { _, isChecked ->
|
if (isChecked)
|
checkList.add(view.text.toString())
|
else
|
checkList.remove(view.text.toString())
|
}
|
fl_label.addView(view)
|
}
|
}
|
|
private var routeOverlay: Polyline? = null
|
private fun setRoute(){
|
val polylineOptions = PolylineOptions()
|
polylineOptions.color(Color.parseColor("#00C47A")).width(18f)
|
polylineOptions.add(LatLng(order!!.startLat,order!!.startLon))
|
points.map { LatLng(it.lat,it.lon) }.forEach {
|
polylineOptions.add(it)
|
}
|
polylineOptions.add(LatLng(order!!.endLat,order!!.endLon))
|
routeOverlay = aMap.addPolyline(polylineOptions)
|
}
|
private var startMarker: Marker? = null
|
private var endMarker: Marker? = null
|
|
/**
|
* @param isStart true:起点标记 false:终点标记
|
*/
|
private fun setMarker(latLon: LatLng, isStart:Boolean = true) {
|
val language = SPUtils.instance().getString("language", "en")
|
|
if (isStart){
|
val ic = when(language){
|
"en"->R.mipmap.starting_point_e
|
"ch"->R.mipmap.starting_point
|
else->R.mipmap.starting_point_f
|
}
|
val icon = BitmapDescriptorFactory.fromResource(ic)
|
val options = MarkerOptions()
|
options.position(latLon).icon(icon)
|
startMarker = aMap.addMarker(options)
|
}else{
|
val ic = when(language){
|
"en"->R.mipmap.end_point_e
|
"ch"->R.mipmap.end_point
|
else->R.mipmap.end_point_f
|
}
|
val options = MarkerOptions()
|
options.position(latLon).icon(BitmapDescriptorFactory.fromResource(ic))
|
endMarker = aMap.addMarker(options)
|
}
|
}
|
|
/**
|
* 评价成功以后需要查询是否可以获得分享红包
|
*/
|
private fun getRedMoney(){
|
HttpManager.queryRedMoney(id,type).request(this){_,data->
|
data?.let {
|
val money = it.optDouble("amount")
|
if (money>0){
|
val tipDialog = TipDialog()
|
tipDialog.arguments = bundleOf("msg" to String.format(getString(R.string.分享APP给好友可以获得红包),money),
|
"ok" to getString(R.string.去分享),"cancel" to getString(R.string.不分享))
|
tipDialog.setCallback(object :TipDialog.OnClickCallback{
|
override fun onOk() {
|
val shareDialog = ShareDialog()
|
shareDialog.setCallback(object :ShareDialog.Callback{
|
override fun onOk(way: Int) { //0:wx 1:qq 2:msg
|
val language = SPUtils.instance().getString("language","en")
|
val languageP = if (language == "ch") 1 else if (language == "en") 2 else 3
|
val url = String.format(Apis.SHARE_URL, languageP, languageP,SPUtils.instance().getInt(Const.User.USER_ID))
|
if (way == 3)
|
IGoShareUtils.shareWA(this@OrderDetailWithMapActivity,getString(R.string.下载注册即送打车券),url)
|
else
|
if (way == 4)
|
IGoShareUtils.shareFB(this@OrderDetailWithMapActivity,url,getString(R.string.下载注册即送打车券),null)
|
else if (way == 5)
|
IGoShareUtils.shareTweet(this@OrderDetailWithMapActivity,getString(R.string.下载注册即送打车券),url)
|
else
|
ShareUtils.share(this@OrderDetailWithMapActivity,if (way == 0) SHARE_MEDIA.WEIXIN else if (way == 1) SHARE_MEDIA.QQ else
|
SHARE_MEDIA.MORE, getString(R.string.下载注册即送打车券),Const.Share.TITLE,
|
url,this@OrderDetailWithMapActivity,"")
|
shareDialog.dismiss()
|
getRed(money)
|
}
|
})
|
shareDialog.showAllowingStateLoss(supportFragmentManager,"share")
|
}
|
|
override fun onCancel() {}
|
})
|
tipDialog.showAllowingStateLoss(supportFragmentManager,"red")
|
}
|
}
|
}
|
}
|
|
/**
|
* 分享后获得红包
|
*/
|
private fun getRed(money:Double){
|
HttpManager.shareRedEnvelope(id,type).request(this){_,_->
|
val tipDialog = TipDialog()
|
tipDialog.arguments = bundleOf("msg" to String.format(getString(R.string.您收到一个打车红包下次打车可抵扣金额),money.showMoney(this)),
|
"ok" to getString(R.string.确定),"isAlert" to true)
|
tipDialog.showAllowingStateLoss(supportFragmentManager,"red")
|
}
|
}
|
|
override fun onResult(p0: SHARE_MEDIA?) {
|
}
|
|
override fun onCancel(p0: SHARE_MEDIA?) {
|
}
|
|
override fun onError(p0: SHARE_MEDIA?, p1: Throwable?) {
|
}
|
|
override fun onStart(p0: SHARE_MEDIA?) {
|
}
|
}
|