package com.kuanzhai.user.ui.menu
|
|
import android.Manifest
|
import android.app.Activity
|
import android.content.Intent
|
import android.util.Log
|
import androidx.core.os.bundleOf
|
import androidx.recyclerview.widget.GridLayoutManager
|
import cn.sinata.xldutils.activity.ImagePagerActivity
|
import cn.sinata.xldutils.clickDelay
|
import cn.sinata.xldutils.utils.FileUtils
|
import cn.sinata.xldutils.utils.myToast
|
import cn.sinata.xldutils.utils.optString
|
import com.kuanzhai.user.R
|
import com.kuanzhai.user.dialog.*
|
import com.kuanzhai.user.interfaces.StringCallback
|
import com.kuanzhai.user.network.HttpManager
|
import com.kuanzhai.user.network.entity.*
|
import com.kuanzhai.user.network.request
|
import com.kuanzhai.user.ui.H5Activity
|
import com.kuanzhai.user.ui.TransparentStatusBarActivity
|
import com.kuanzhai.user.ui.menu.adapter.ExtensionAdapter
|
import com.kuanzhai.user.ui.menu.adapter.ImageAdapter
|
import com.kuanzhai.user.utils.OSSUtil
|
import com.kuanzhai.user.utils.picture.PictureSelectorHelper
|
import com.kuanzhai.user.utils.uploadWithCompress
|
import com.tbruyelle.rxpermissions2.RxPermissions
|
import kotlinx.android.synthetic.main.activity_sale_my.*
|
import org.jetbrains.anko.startActivity
|
import java.lang.Exception
|
|
class SaleMyCarActivity : TransparentStatusBarActivity() {
|
override fun setContentView() = R.layout.activity_sale_my
|
|
private var order:SaleBean? = null
|
|
private val brands = arrayListOf<Brand>()
|
private val provinces = arrayListOf<City>()
|
|
private val describeImg = arrayListOf<String>()
|
private val desAdapter = ImageAdapter(describeImg)
|
|
private val carImg = arrayListOf<String>()
|
private val carAdapter = ImageAdapter(carImg)
|
|
private var carVideo = ""
|
|
var isDescribePhoto = true
|
|
private var provinceId = 0
|
private var brandId = 0
|
private var provinceCode = ""
|
private var cityCode = ""
|
|
private val phone by lazy { intent.getStringExtra("phone")?:"" }
|
|
|
|
|
private val extension = arrayListOf("GPS导航", "倒车影像", "前车雷达", "全景摄像头", "车内氛围灯", "车载电视",
|
"定速巡航", "多媒体控制", "胎压监测", "氙气大灯", "铝合金轮圈", "车载冰箱", "行车显示屏", "运动座椅")
|
private val extensionAdapter = ExtensionAdapter(extension)
|
|
override fun initClick() {
|
tv_brand.setOnClickListener {
|
if (brands.isEmpty())
|
getBrands(true)
|
else
|
showBrand()
|
}
|
|
tv_time.setOnClickListener {
|
val chooseBirthDialog = ChooseBirthDialog()
|
chooseBirthDialog.setCallback(object :ChooseBirthDialog.Callback{
|
override fun onOk(s: String) {
|
tv_time.text = s
|
}
|
})
|
chooseBirthDialog.show(supportFragmentManager,"time")
|
}
|
|
tv_location.setOnClickListener {
|
if (provinces.isEmpty())
|
getProvince(0,false,true)
|
else
|
showRegion()
|
}
|
|
tv_change.setOnClickListener {
|
val singleWheelDialog = SingleWheelDialog()
|
singleWheelDialog.arguments = bundleOf("title" to "选择变速箱","data" to arrayListOf("手动","自动"))
|
singleWheelDialog.show(supportFragmentManager,"dang")
|
singleWheelDialog.setCallback(object :StringCallback{
|
override fun onRlt(rlt: String) {
|
tv_change.text = rlt
|
}
|
})
|
}
|
|
tv_level.clickDelay {
|
val singleWheelDialog = SingleWheelDialog()
|
singleWheelDialog.arguments = bundleOf("title" to "选择级别","data" to arrayListOf("微型车","小型车","紧凑型车","中型车","中大型车","大型车","小型SUV","紧凑型SUV","中型SUV","中大型SUV","大型SUV","紧凑型MPV","中型MPV","中大型MPV","大型MPV","跑车","皮卡","微面","轻客","微卡"))
|
singleWheelDialog.show(supportFragmentManager,"level")
|
singleWheelDialog.setCallback(object :StringCallback{
|
override fun onRlt(rlt: String) {
|
tv_level.text = rlt
|
}
|
})
|
}
|
|
desAdapter.callback = object :StringCallback{
|
override fun onRlt(rlt: String) {
|
describeImg.removeAt(rlt.toInt())
|
if (describeImg.last().isNotEmpty())
|
describeImg.add("")
|
desAdapter.notifyDataSetChanged()
|
}
|
}
|
desAdapter.setOnItemClickListener { _, position ->
|
if (describeImg[position].isEmpty()){
|
SelectPhotoDialog.show(supportFragmentManager,object :StringCallback{
|
override fun onRlt(rst: String) {
|
isDescribePhoto = true
|
if (rst == "photo"){
|
PictureSelectorHelper.pickMultipleImage(this@SaleMyCarActivity,9-describeImg.filter { it.isNotEmpty() }.size)
|
}else{
|
val subscribe =
|
RxPermissions(this@SaleMyCarActivity).request(
|
Manifest.permission.CAMERA,
|
Manifest.permission.RECORD_AUDIO)
|
.subscribe {
|
if (it)
|
PictureSelectorHelper.takePicture(
|
this@SaleMyCarActivity,
|
isCrop = false,
|
enableVideo = false
|
)
|
else
|
myToast("缺少拍摄权限")
|
}
|
compositeDisposable.add(subscribe)
|
}
|
}
|
})
|
}else{
|
val arrayListOf = arrayListOf<String>()
|
arrayListOf.addAll(describeImg.filter { it.isNotEmpty() })
|
startActivity<ImagePagerActivity>(
|
ImagePagerActivity.POSITION to position,
|
ImagePagerActivity.URLS to arrayListOf)
|
}
|
}
|
carAdapter.callback = object :StringCallback{
|
override fun onRlt(rlt: String) {
|
carImg.removeAt(rlt.toInt())
|
if (carImg.last().isNotEmpty())
|
carImg.add("")
|
carAdapter.notifyDataSetChanged()
|
showCarImgCount()
|
}
|
}
|
carAdapter.setOnItemClickListener { _, position ->
|
if (carImg[position].isEmpty()){
|
isDescribePhoto = false
|
SelectPhotoDialog.show(supportFragmentManager,object :StringCallback{
|
override fun onRlt(rst: String) {
|
if (rst == "photo"){
|
PictureSelectorHelper.pickMultipleImage(this@SaleMyCarActivity,15-carImg.filter { it.isNotEmpty() }.size)
|
}else{
|
val subscribe =
|
RxPermissions(this@SaleMyCarActivity).request(
|
Manifest.permission.CAMERA)
|
.subscribe {
|
if (it)
|
PictureSelectorHelper.takePicture(
|
this@SaleMyCarActivity,
|
isCrop = false,
|
enableVideo = false
|
)
|
else
|
myToast("缺少拍摄权限")
|
}
|
compositeDisposable.add(subscribe)
|
}
|
}
|
})
|
}else{
|
val arrayListOf = arrayListOf<String>()
|
arrayListOf.addAll(carImg.filter { it.isNotEmpty() })
|
startActivity<ImagePagerActivity>(
|
ImagePagerActivity.POSITION to position,
|
ImagePagerActivity.URLS to arrayListOf)
|
}
|
}
|
|
iv_video.setOnClickListener {
|
PictureSelectorHelper.pickVideo(this)
|
}
|
|
tv_ensure.clickDelay {
|
val charterReserveTimeDialog = CharterReserveTimeDialog()
|
charterReserveTimeDialog.arguments = bundleOf("title" to "交强险到期时间")
|
charterReserveTimeDialog.setCallback(object :StringCallback{
|
override fun onRlt(rlt: String) {
|
tv_ensure.text = rlt
|
}
|
})
|
charterReserveTimeDialog.show(supportFragmentManager,"ensure")
|
}
|
|
tv_year.clickDelay {
|
val charterReserveTimeDialog = CharterReserveTimeDialog()
|
charterReserveTimeDialog.arguments = bundleOf("title" to "年检到期时间")
|
charterReserveTimeDialog.setCallback(object :StringCallback{
|
override fun onRlt(rlt: String) {
|
tv_year.text = rlt
|
}
|
})
|
charterReserveTimeDialog.show(supportFragmentManager,"year")
|
}
|
|
tv_business.clickDelay {
|
val charterReserveTimeDialog = CharterReserveTimeDialog()
|
charterReserveTimeDialog.arguments = bundleOf("title" to "商业险到期时间")
|
charterReserveTimeDialog.setCallback(object :StringCallback{
|
override fun onRlt(rlt: String) {
|
tv_business.text = rlt
|
}
|
})
|
charterReserveTimeDialog.show(supportFragmentManager,"business")
|
}
|
|
tv_province.clickDelay {
|
if (provinces.isEmpty())
|
getProvince(0,true)
|
else
|
showProvince()
|
}
|
|
tv_city.clickDelay {
|
if (provinceId == 0)
|
myToast("请先选择省")
|
else
|
getProvince(provinceId)
|
}
|
|
tv_rule.clickDelay {
|
HttpManager.getH5(20).request(this){ _, data->
|
val url = data?.optString("content")?:""
|
startActivity<H5Activity>("url" to url,"title" to "汽车售卖协议")
|
}
|
}
|
|
tv_action.clickDelay {
|
if (cb_rule.isChecked){
|
val title = et_title.text.toString()
|
if (title.isEmpty()){
|
myToast("请输入标题")
|
return@clickDelay
|
}
|
val code = et_code.text.toString()
|
if (code.isEmpty()){
|
myToast("请输入车辆识别代码")
|
return@clickDelay
|
}
|
val num = et_car_num.text.toString()
|
if (num.isEmpty()){
|
myToast("请输入车牌号")
|
return@clickDelay
|
}
|
if (brandId == 0){
|
myToast("请选择车辆品牌")
|
return@clickDelay
|
}
|
val color = et_color.text.toString()
|
if (color.isEmpty()){
|
myToast("请输入车辆颜色")
|
return@clickDelay
|
}
|
val time = tv_time.text.toString()
|
if (time.isEmpty()){
|
myToast("请选择首次上牌时间")
|
return@clickDelay
|
}
|
var distance = 0.0
|
try {
|
distance = et_distance.text.toString().toDouble()
|
}catch (e:Exception){
|
myToast("请填写正确的行驶里程")
|
return@clickDelay
|
}
|
if (distance == 0.0){
|
myToast("请填写行驶里程")
|
return@clickDelay
|
}
|
val location = tv_location.text.toString()
|
if (location.isEmpty()){
|
myToast("请选择牌照所在地")
|
return@clickDelay
|
}
|
val count = et_change_count.text.toString()
|
if (count.isEmpty()){
|
myToast("请填写过户次数")
|
return@clickDelay
|
}
|
val pai = et_pai.text.toString()
|
if (pai.isEmpty()){
|
myToast("请输入排量")
|
return@clickDelay
|
}
|
val change = tv_change.text.toString()
|
if (change.isEmpty()){
|
myToast("请选择变速箱")
|
return@clickDelay
|
}
|
val level = tv_level.text.toString()
|
if (level.isEmpty()){
|
myToast("请选择车辆级别")
|
return@clickDelay
|
}
|
|
var money = 0.0
|
try {
|
money = et_money.text.toString().toDouble()
|
}catch (e:Exception){
|
myToast("请填写正确的转让价格")
|
return@clickDelay
|
}
|
if (money == 0.0){
|
myToast("请输入转让价格")
|
return@clickDelay
|
}
|
|
if (carImg.filter { it.isNotEmpty() }.isNullOrEmpty()){
|
myToast("请上传车辆图片")
|
return@clickDelay
|
}
|
val ensure = tv_ensure.text.toString()
|
if (ensure.isEmpty()){
|
myToast("请选择交强险到期时间")
|
return@clickDelay
|
}
|
val year = tv_year.text.toString()
|
if (year.isEmpty()){
|
myToast("请选择年检到期时间")
|
return@clickDelay
|
}
|
val business = tv_business.text.toString()
|
if (business.isEmpty()){
|
myToast("请选择商业险到期时间")
|
return@clickDelay
|
}
|
val name = et_name.text.toString()
|
if (name.isEmpty()){
|
myToast("请输入联系人姓名")
|
return@clickDelay
|
}
|
if (provinceCode.isEmpty()){
|
myToast("请选择省")
|
return@clickDelay
|
}
|
if (cityCode.isEmpty()){
|
myToast("请选择市")
|
return@clickDelay
|
}
|
val address = et_address.text.toString()
|
if (address.isEmpty()){
|
myToast("请输入详细地址")
|
return@clickDelay
|
}
|
var newCarPrice:Double? =
|
try {
|
et_origin.text.toString().toDouble()
|
}catch (e:Exception){
|
null
|
}
|
tv_action.isEnabled = false
|
HttpManager.insertOrUpdateSellingCar(address,brandId,tv_brand.text.toString(),color,code,num,cityCode,tv_city.text.toString(),
|
name,tv_phone.text.toString(),et_describe.text.toString(),describeImg.filter { it.isNotEmpty() }.joinToString(",") { it },
|
pai,ensure,year,carImg.filter { it.isNotEmpty() }.joinToString (","){ it },if (cb_pass.isChecked) 1 else 2,
|
extensionAdapter.checked.joinToString (","){ it },level,time,location,business,distance,if (rb_has.isChecked) 1 else 2,
|
newCarPrice,provinceCode, tv_province.text.toString(),title,money,count.toInt(),change,carVideo,order?.id?:0L).request(this,success = {_,_->
|
startActivity<SubmitSuccessActivity>("title" to titleBar.titleView.text.toString())
|
setResult(Activity.RESULT_OK)
|
finish()
|
}){_,_->
|
tv_action.isEnabled = true
|
}
|
}else
|
myToast("请阅读并同意《宽窄优行汽车售卖协议》")
|
}
|
}
|
|
override fun initView() {
|
//车辆描述图
|
rv_photo_des.layoutManager = GridLayoutManager(this,3)
|
rv_photo_des.adapter = desAdapter
|
describeImg.add("")
|
desAdapter.notifyDataSetChanged()
|
//车辆图
|
rv_photo.layoutManager = GridLayoutManager(this,3)
|
rv_photo.adapter = carAdapter
|
carImg.add("")
|
carAdapter.notifyDataSetChanged()
|
|
rv_extension.layoutManager = GridLayoutManager(this,2)
|
rv_extension.adapter = extensionAdapter
|
|
order = intent.getParcelableExtra("data")
|
title = if (order == null){
|
tv_phone.text = phone
|
"卖车信息发布"
|
}else{
|
order?.apply {
|
et_title.setText(title)
|
et_code.setText(carIdentificationCode)
|
et_car_num.setText(carLicensePlate)
|
tv_brand.text = brandName
|
this@SaleMyCarActivity.brandId = brandId
|
et_color.setText(carColor)
|
tv_time.text = licensingTime
|
et_distance.setText(mileage)
|
tv_location.text = locationOfLicensePlate
|
et_change_count.setText(transferTimes)
|
et_pai.setText(displacement)
|
tv_change.text = transmissionCase
|
tv_level.text = level
|
et_money.setText("%.2f".format(transferPrice))
|
cb_pass.isChecked = includingTransferFee == 1
|
et_origin.setText(newCarPrice)
|
et_describe.setText(describe)
|
describeImg.addAll(0, describeImgUrl.split(",").filter { it.isNotEmpty() })
|
if (describeImg.size == 10)
|
describeImg.removeAt(9)
|
desAdapter.notifyDataSetChanged()
|
val carPhoto = imgUrl.split(",").filter { it.isNotEmpty() }
|
tv_photo_num.text = "*车辆图片${carPhoto.size}/15"
|
carImg.addAll(0, carPhoto)
|
if (carImg.size == 16)
|
carImg.removeAt(15)
|
carAdapter.notifyDataSetChanged()
|
if (!videoUrl.isNullOrEmpty()){
|
tv_video_num.text = "车辆视频1/1"
|
Thread{
|
val f = FileUtils.createVideoThumbnail(videoUrl)
|
runOnUiThread {
|
iv_video.setImageBitmap(f)
|
}
|
}.start()
|
}
|
tv_ensure.text = dueTimeOfCompulsoryInsurance
|
tv_year.text = expirationTimeOfAnnualInspection
|
tv_business.text = maturityTimeOfCommercialInsurance
|
if (mortgage == 1)
|
rb_has.isChecked = true
|
else
|
rb_no.isChecked = true
|
tv_phone.text = contactsPhone
|
et_name.setText(contactsName)
|
tv_province.text = provinceName
|
this@SaleMyCarActivity.provinceCode = provinceCode
|
tv_city.text = cityName
|
this@SaleMyCarActivity.cityCode = cityCode
|
et_address.setText(addres)
|
extensionAdapter.checked.addAll(installationConfiguration.split(",").filter { it.isNotEmpty() })
|
}
|
"卖车信息编辑"
|
}
|
|
getBrands()
|
getProvince()
|
}
|
|
private fun getBrands(showDialog:Boolean = false){
|
HttpManager.queryAllBrand().request(this,false){_,data->
|
brands.clear()
|
brands.addAll(data?: arrayListOf())
|
if (showDialog)
|
showBrand()
|
}
|
}
|
|
private fun showBrand(){
|
val singleWheelDialog = SingleWheelDialog()
|
val arrayListOf = arrayListOf<String>()
|
arrayListOf.addAll(brands.map { it.name })
|
singleWheelDialog.arguments = bundleOf("title" to "选择品牌","data" to arrayListOf)
|
singleWheelDialog.show(supportFragmentManager,"category")
|
singleWheelDialog.setCallback(object :StringCallback{
|
override fun onRlt(rlt: String) {
|
tv_brand.text = rlt
|
brandId = brands.filter { it.name == rlt }.firstOrNull()?.id?:0
|
}
|
})
|
}
|
|
private fun getProvince(provinceId:Int = 0,showDialog:Boolean = false,showRegion:Boolean = false){
|
HttpManager.queryRegions(provinceId).request(this,false){_,data->
|
if (provinceId!=0){
|
val arrayListOf = arrayListOf<String>()
|
arrayListOf.addAll(data!!.map { it.name })
|
val singleWheelDialog = SingleWheelDialog()
|
singleWheelDialog.arguments = bundleOf("title" to "选择城市","data" to arrayListOf)
|
singleWheelDialog.show(supportFragmentManager,"city")
|
singleWheelDialog.setCallback(object :StringCallback{
|
override fun onRlt(rlt: String) {
|
tv_city.text = rlt
|
data.filter { it.name == rlt }.firstOrNull()?.apply {
|
cityCode = code
|
}
|
}
|
})
|
}else{
|
provinces.clear()
|
provinces.addAll(data?: arrayListOf())
|
if (order!=null){
|
this.provinceId = provinces.filter { it.code == order!!.provinceCode }.firstOrNull()?.id?:0
|
}
|
if (showDialog)
|
showProvince()
|
if (showRegion)
|
showRegion()
|
}
|
}
|
}
|
|
private fun showRegion(){
|
val cityDialog = CityDialog()
|
cityDialog.arguments = bundleOf("province" to provinces)
|
cityDialog.setCallback(object :CityDialog.OnOkClick{
|
override fun onOk(region: String, provinceIndex: Int, cityIndex: Int) {
|
tv_location.text = region
|
}
|
})
|
cityDialog.show(supportFragmentManager,"city")
|
}
|
|
private fun showProvince(){
|
val singleWheelDialog = SingleWheelDialog()
|
val arrayListOf = arrayListOf<String>()
|
arrayListOf.addAll(provinces.map { it.name })
|
singleWheelDialog.arguments = bundleOf("title" to "选择省","data" to arrayListOf)
|
singleWheelDialog.show(supportFragmentManager,"province")
|
singleWheelDialog.setCallback(object :StringCallback{
|
override fun onRlt(rlt: String) {
|
tv_province.text = rlt
|
provinces.filter { it.name == rlt }.firstOrNull()?.apply {
|
provinceCode = code
|
provinceId = id
|
}
|
tv_city.text = ""
|
cityCode = ""
|
}
|
})
|
}
|
|
private fun showCarImgCount(){
|
tv_photo_num.text = "*车辆图片${carImg.filter { it.isNotEmpty() }.size}/15"
|
}
|
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
super.onActivityResult(requestCode, resultCode, data)
|
PictureSelectorHelper.onPickResult(requestCode,resultCode,data,object :StringCallback{ //视频回调
|
override fun onRlt(rlt: String) {
|
if (rlt.contains("/")){ //属于文件路径
|
showDialog(canCancel = false)
|
Thread{
|
OSSUtil(this@SaleMyCarActivity).uploadSingle(rlt,object : OSSUtil.OSSUploadCallBack(){
|
override fun onFial(message: String?) {
|
super.onFial(message)
|
runOnUiThread {
|
dismissDialog()
|
myToast("上传失败")
|
}
|
}
|
|
override fun onFinish(url: String) {
|
//视频上传成功之后再上传封面图
|
dismissDialog()
|
Thread{
|
val f = FileUtils.getFirstFrame(rlt)
|
runOnUiThread {
|
iv_video.setImageBitmap(f)
|
tv_video_num.text = "车辆视频1/1"
|
}
|
}.start()
|
carVideo = url
|
Log.e("mmp","视频地址:${carVideo}")
|
}
|
})
|
}.start()
|
}else //报错
|
myToast(rlt)
|
}
|
}){//图片回调
|
showDialog()
|
val list = arrayListOf<String>()
|
it.forEachIndexed { index, s ->
|
s.uploadWithCompress(this,object :StringCallback{
|
override fun onRlt(rst: String) {
|
list.add(rst)
|
if (list.size == it.size){
|
dismissDialog()
|
if (isDescribePhoto){
|
describeImg.addAll(describeImg.size-1,list)
|
if (describeImg.size == 10)
|
describeImg.removeAt(9)
|
desAdapter.notifyDataSetChanged()
|
}else{
|
carImg.addAll(carImg.size-1,list)
|
if (carImg.size == 16)
|
carImg.removeAt(15)
|
carAdapter.notifyDataSetChanged()
|
showCarImgCount()
|
}
|
}
|
}
|
},false)
|
}
|
}
|
}
|
|
override fun onBackPressed() {
|
val tipDialog = TipDialog()
|
tipDialog.arguments = bundleOf("msg" to "您的数据还未提交,确认返回?","ok" to "确认","cancel" to "取消")
|
tipDialog.setCallback(object :TipDialog.OnClickCallback{
|
override fun onOk() {
|
finish()
|
}
|
|
override fun onCancel() {
|
}
|
})
|
tipDialog.show(supportFragmentManager,"back")
|
}
|
}
|