package cn.flightfeather.thirdapp.module.task
|
|
import android.app.Activity
|
import android.arch.lifecycle.Observer
|
import android.arch.lifecycle.ViewModelProviders
|
import android.content.Intent
|
import android.os.Bundle
|
import android.support.v7.app.AlertDialog
|
import android.view.View
|
import android.widget.AdapterView
|
import cn.flightfeather.thirdapp.R
|
import cn.flightfeather.thirdapp.activity.MapActivity
|
import cn.flightfeather.thirdapp.adapter.AllListViewAdapter
|
import cn.flightfeather.thirdapp.bean.*
|
import cn.flightfeather.thirdapp.model.event.SceneEvent
|
import cn.flightfeather.thirdapp.module.base.BaseActivity
|
import cn.flightfeather.thirdapp.util.Domain
|
import cn.flightfeather.thirdapp.util.UUIDGenerator
|
import kotlinx.android.synthetic.main.activity_scense_detail.*
|
import kotlinx.android.synthetic.main.layout_actionbar.*
|
import org.greenrobot.eventbus.EventBus
|
import org.greenrobot.eventbus.Subscribe
|
import org.jetbrains.anko.toast
|
import java.text.DecimalFormat
|
import java.util.*
|
|
/**
|
* @author riku
|
* Date: 2019/8/6
|
* 场景详情界面,新建场景或修改场景
|
*/
|
const val START_LOCATION = 1
|
const val NO_CHOICE = "请选择"
|
|
class SceneDetailActivity : BaseActivity(), View.OnClickListener {
|
|
override fun getLayoutId(): Int = R.layout.activity_scense_detail
|
|
lateinit var viewModel: SceneDetailViewModel
|
|
lateinit var provinceAdapter: AllListViewAdapter<Province>
|
lateinit var cityAdapter: AllListViewAdapter<City>
|
lateinit var districtAdapter: AllListViewAdapter<District>
|
lateinit var townAdapter: AllListViewAdapter<Town>
|
lateinit var sceneTypeAdapter: AllListViewAdapter<Domainitem>
|
|
//模式(0:新增场景信息;1:修改场景信息)
|
private var mode = 0
|
private var scene: Scense? = null
|
private var title = "新建场景"
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
super.onCreate(savedInstanceState)
|
EventBus.getDefault().register(this)
|
|
viewModel = ViewModelProviders.of(this).get(SceneDetailViewModel::class.java)
|
|
mode = intent.getIntExtra("mode", 0)
|
scene = intent.getSerializableExtra("updateScene") as Scense?
|
|
initUI()
|
scene?.let {
|
title = "修改场景信息"
|
setSceneDetail(it)
|
}
|
|
viewModel.provinceList.observe(this, Observer {
|
provinceAdapter.notifyDataSetChanged()
|
})
|
|
viewModel.allSceneTypeList.observe(this, Observer {
|
sceneTypeAdapter.notifyDataSetChanged()
|
scene?.let { setSceneType(it.type) }
|
})
|
|
viewModel.getData()
|
viewModel.getSceneType()
|
}
|
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
super.onActivityResult(requestCode, resultCode, data)
|
if (requestCode == START_LOCATION && resultCode == Activity.RESULT_OK) {
|
data?.let {
|
val longitude = it.getSerializableExtra("Longitude") as Double
|
val latitude = it.getSerializableExtra("Latitude") as Double
|
val df = DecimalFormat("0.000000")
|
et_lng.setText( df.format(longitude))
|
et_lat.setText(df.format(latitude))
|
|
img_location.setImageResource(R.drawable.icon_mark_green)
|
tv_location.text = "定位完成"
|
}
|
|
}
|
}
|
|
private fun initUI() {
|
provinceAdapter = object : AllListViewAdapter<Province>(viewModel.provinceList.value, R.layout.item_scense_detail_list) {
|
override fun bindView(holder: ViewHolder?, obj: Province?) {
|
holder?.setText(R.id.tv_item, obj?.provincename)
|
}
|
}
|
cityAdapter = object : AllListViewAdapter<City>(viewModel.cityList, R.layout.item_scense_detail_list) {
|
override fun bindView(holder: ViewHolder?, obj: City?) {
|
holder?.setText(R.id.tv_item, obj?.cityname)
|
}
|
}
|
districtAdapter = object : AllListViewAdapter<District>(viewModel.districtList, R.layout.item_scense_detail_list) {
|
override fun bindView(holder: ViewHolder?, obj: District?) {
|
holder?.setText(R.id.tv_item, obj?.districtname)
|
}
|
}
|
townAdapter = object : AllListViewAdapter<Town>(viewModel.townList, R.layout.item_scense_detail_list) {
|
override fun bindView(holder: ViewHolder?, obj: Town?) {
|
holder?.setText(R.id.tv_item, obj?.townname)
|
}
|
}
|
sceneTypeAdapter = object : AllListViewAdapter<Domainitem>(viewModel.allSceneTypeList.value, R.layout.item_scense_detail_list) {
|
override fun bindView(holder: ViewHolder?, obj: Domainitem?) {
|
holder?.setText(R.id.tv_item, obj?.text)
|
}
|
}
|
|
sp_province.apply {
|
adapter = provinceAdapter
|
onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
|
override fun onNothingSelected(parent: AdapterView<*>?) = Unit
|
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
|
viewModel.cityList.apply {
|
clear()
|
val pId = (sp_province.selectedItem as Province).provinceid
|
viewModel.allCityList.forEach {
|
if (it.pronvinceid == pId) {
|
add(it)
|
}
|
}
|
}
|
|
cityAdapter.notifyDataSetChanged()
|
}
|
}
|
}
|
|
sp_city.apply {
|
adapter = cityAdapter
|
onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
|
override fun onNothingSelected(parent: AdapterView<*>?) = Unit
|
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
|
viewModel.districtList.apply {
|
clear()
|
add(District().apply { districtname = NO_CHOICE })
|
val cId = (sp_city.selectedItem as City).cityId
|
viewModel.allDistrictList.forEach {
|
if (it.cityid == cId) {
|
add(it)
|
}
|
}
|
}
|
|
districtAdapter.notifyDataSetChanged()
|
}
|
}
|
}
|
|
sp_district.apply {
|
adapter = districtAdapter
|
onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
|
override fun onNothingSelected(parent: AdapterView<*>?) = Unit
|
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
|
viewModel.townList.apply {
|
clear()
|
add(Town().apply { townname = NO_CHOICE })
|
val dId = (sp_district.selectedItem as District).districtid
|
viewModel.allTownList.forEach {
|
if (it.districtid == dId) {
|
add(it)
|
}
|
}
|
}
|
|
townAdapter.notifyDataSetChanged()
|
|
scene?.let { setLocation(it) }
|
}
|
}
|
}
|
|
sp_town.apply {
|
adapter = townAdapter
|
}
|
|
sp_type.apply {
|
adapter = sceneTypeAdapter
|
}
|
|
img_location.setOnClickListener(this)
|
tv_save.setOnClickListener(this)
|
|
img_left.setOnClickListener(this)
|
img_right.visibility = View.GONE
|
spinner_topclass_task.visibility = View.GONE
|
|
}
|
|
private fun submit() {
|
if (check()) {
|
AlertDialog.Builder(this).apply {
|
setTitle("确认是否提交?")
|
setPositiveButton(R.string.yes) {dialog, which ->
|
save(mode)
|
}
|
setNegativeButton(R.string.cancel, null)
|
}.show()
|
} else {
|
application.toast("请将信息填写完整!")
|
}
|
}
|
|
private fun setSceneDetail(scene: Scense) {
|
actionbar_title.text = title
|
et_scene_name.setText(scene.name)
|
et_scene_address.setText(scene.location)
|
et_scene_contact.setText(scene.contacts)
|
et_scene_telephone.setText(scene.contactst)
|
et_scene_wechat.setText(scene.contactswx)
|
et_lng.apply {
|
setText(scene.longitude?.toString())
|
isEnabled = false
|
}
|
et_lat.apply {
|
setText(scene.latitude?.toString())
|
isEnabled = false
|
}
|
img_location.apply {
|
setImageResource(R.drawable.icon_mark_green)
|
setOnClickListener(null)
|
}
|
tv_location.text = "无法修改"
|
}
|
|
private fun setSceneType(typeName: String?) {
|
typeName?.let {
|
for (i in 0 until sceneTypeAdapter.count) {
|
if (sceneTypeAdapter.getItem(i).text == it) {
|
sp_type.setSelection(i)
|
}
|
}
|
}
|
}
|
|
private fun setLocation(scene: Scense) {
|
scene.provincename?.let {
|
for (i in 0 until provinceAdapter.count) {
|
if (provinceAdapter.getItem(i).provincename == it) {
|
sp_province.setSelection(i)
|
}
|
}
|
}
|
scene.cityname?.let {
|
for (i in 0 until cityAdapter.count) {
|
if (cityAdapter.getItem(i).cityname == it) {
|
sp_city.setSelection(i)
|
}
|
}
|
}
|
scene.districtname?.let {
|
for (i in 0 until districtAdapter.count) {
|
if (districtAdapter.getItem(i).districtname == it) {
|
sp_district.setSelection(i)
|
}
|
}
|
}
|
scene.townname?.let {
|
for (i in 0 until townAdapter.count) {
|
if (townAdapter.getItem(i).townname == it) {
|
sp_town.setSelection(i)
|
}
|
}
|
}
|
}
|
|
private fun check():Boolean {
|
if (et_scene_name.text.toString().isEmpty()) return false
|
if (et_scene_address.text.toString().isEmpty()) return false
|
if (et_scene_contact.text.toString().isEmpty()) return false
|
if (et_scene_telephone.text.toString().isEmpty()) return false
|
if ((sp_district.selectedItem as District).districtname == NO_CHOICE) return false
|
if ((sp_town.selectedItem as Town).townname == NO_CHOICE) return false
|
if (et_lng.text.toString().isEmpty()) return false
|
if (et_lat.text.toString().isEmpty()) return false
|
return true
|
}
|
|
private fun save(mode: Int) {
|
when (mode) {
|
//新增
|
0 -> {
|
val newScene = Scense().apply {
|
guid = UUIDGenerator.generate16ShortUUID()
|
name = et_scene_name.text.toString()
|
|
(sp_type.selectedItem as Domainitem).let {
|
typeid = it.value.toByte()
|
type = it.text
|
}
|
location = et_scene_address.text.toString()
|
longitude = et_lng.text.toString().toDouble()
|
latitude = et_lat.text.toString().toDouble()
|
(sp_province.selectedItem as Province).let {
|
provincecode = it.provincecode
|
provincename = it.provincename
|
}
|
(sp_city.selectedItem as City).let {
|
citycode = it.citycode
|
cityname = it.cityname
|
}
|
(sp_district.selectedItem as District).let {
|
districtcode = it.districtcode
|
districtname = it.districtname
|
}
|
(sp_town.selectedItem as Town).let {
|
towncode = it.towncode
|
townname = it.townname
|
}
|
contactst = et_scene_telephone.text.toString()
|
contactswx = et_scene_wechat.text.toString()
|
contacts = et_scene_contact.text.toString()
|
createdate = Date()
|
updatedate = Date()
|
extension1 = Domain.SCENSE_AVAILABLE
|
}
|
|
viewModel.putScene(newScene)
|
}
|
//修改
|
1 -> {
|
scene?.apply {
|
name = et_scene_name.text.toString()
|
|
(sp_type.selectedItem as Domainitem).let {
|
typeid = it.value.toByte()
|
type = it.text
|
}
|
location = et_scene_address.text.toString()
|
longitude = et_lng.text.toString().toDouble()
|
latitude = et_lat.text.toString().toDouble()
|
(sp_province.selectedItem as Province).let {
|
provincecode = it.provincecode
|
provincename = it.provincename
|
}
|
(sp_city.selectedItem as City).let {
|
citycode = it.citycode
|
cityname = it.cityname
|
}
|
(sp_district.selectedItem as District).let {
|
districtcode = it.districtcode
|
districtname = it.districtname
|
}
|
(sp_town.selectedItem as Town).let {
|
towncode = it.towncode
|
townname = it.townname
|
}
|
contactst = et_scene_telephone.text.toString()
|
contactswx = et_scene_wechat.text.toString()
|
contacts = et_scene_contact.text.toString()
|
|
updatedate = Date()
|
}
|
|
viewModel.updateScene(scene)
|
}
|
}
|
}
|
|
@Subscribe
|
fun onSubmitDone(sceneEvent: SceneEvent) {
|
finish()
|
}
|
|
override fun onClick(v: View?) {
|
when (v?.id) {
|
R.id.img_left -> {
|
finish()
|
}
|
R.id.img_location -> {
|
startActivityForResult(Intent(this, MapActivity::class.java), START_LOCATION)
|
}
|
R.id.tv_save -> {
|
submit()
|
}
|
}
|
}
|
}
|