Newer
Older
SmartKitchen / app / src / main / java / com / casic / br / view / AddAddressActivity.kt
package com.casic.br.view

import androidx.lifecycle.ViewModelProvider
import com.casic.br.R
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.LoadingDialogHub
import com.casic.br.vm.AddressViewModel
import com.github.gzuliyujiang.wheelpicker.AddressPicker
import com.github.gzuliyujiang.wheelpicker.annotation.AddressMode
import com.github.gzuliyujiang.wheelpicker.contract.OnAddressPickedListener
import com.github.gzuliyujiang.wheelpicker.entity.CityEntity
import com.github.gzuliyujiang.wheelpicker.entity.CountyEntity
import com.github.gzuliyujiang.wheelpicker.entity.ProvinceEntity
import com.github.gzuliyujiang.wheelpicker.utility.AddressJsonParser
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.extensions.sp2px
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import com.pengxh.kt.lite.vm.LoadState
import kotlinx.android.synthetic.main.activity_add_address.*
import kotlinx.android.synthetic.main.include_base_title.*

class AddAddressActivity : KotlinBaseActivity(), OnAddressPickedListener {

    private val kTag = "AddAddressActivity"
    private lateinit var addressViewModel: AddressViewModel

    override fun initLayoutView(): Int = R.layout.activity_add_address

    override fun setupTopBarLayout() {
        ImmersionBar.with(this).statusBarDarkFont(true).init()
        ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this))

        leftBackView.setOnClickListener { finish() }
        titleView.text = "新建地址"
    }

    override fun initData() {
        addressViewModel = ViewModelProvider(this)[AddressViewModel::class.java]
    }

    override fun initEvent() {
        addressView.setOnClickListener {
            val addressPicker = AddressPicker(this)
            addressPicker.setAddressMode(
                "china_city_data.json", AddressMode.PROVINCE_CITY_COUNTY,
                AddressJsonParser.Builder()
                    .provinceCodeField("code")
                    .provinceNameField("name")
                    .provinceChildField("city")
                    .cityCodeField("code")
                    .cityNameField("name")
                    .cityChildField("area")
                    .countyCodeField("code")
                    .countyNameField("name")
                    .build()
            )
            addressPicker.setDefaultValue("北京市", "市辖区", "海淀区")
            addressPicker.setOnAddressPickedListener(this)
            val layout = addressPicker.wheelLayout
            layout.setTextSize(14f.sp2px(this).toFloat())
            layout.setSelectedTextSize(16f.sp2px(this).toFloat())
            layout.setSelectedTextColor(R.color.mainThemeColor.convertColor(this))
            layout.setSelectedTextBold(true)
            layout.setOnLinkageSelectedListener { first, second, third ->
                addressPicker.titleView.text = String.format(
                    "%s%s%s",
                    addressPicker.firstWheelView.formatItem(first),
                    addressPicker.secondWheelView.formatItem(second),
                    addressPicker.thirdWheelView.formatItem(third)
                )
                addressPicker.titleView.setTextColor(R.color.mainThemeColor.convertColor(this))
            }
            addressPicker.show()
        }

        saveAddressButton.setOnClickListener {
            if (addressView.text.isNullOrBlank()) {
                "请先选择地区".show(this)
                return@setOnClickListener
            }
            if (streetView.text.isNullOrBlank()) {
                "请输入街道或者楼牌号地址".show(this)
                return@setOnClickListener
            }
            if (postalCodeView.text.isNullOrBlank()) {
                "请输入邮政编码".show(this)
                return@setOnClickListener
            }

            val split = addressView.text.split("-")
            val userModel = DeserializeModel.getUserModel()!!
            addressViewModel.addAddress(
                userModel.mobile,
                split[0],
                split[1],
                split[2],
                streetView.text.toString(),
                "${split[0]}${split[1]}${split[2]}${streetView.text.toString()}",
                postalCodeView.text.toString()
            )
        }
    }

    override fun onAddressPicked(
        province: ProvinceEntity?, city: CityEntity?, county: CountyEntity?
    ) {
        addressView.text = String.format("%s-%s-%s", province?.name, city?.name, county?.name)
    }

    override fun observeRequestState() {
        addressViewModel.loadState.observe(this, {
            when (it) {
                LoadState.Loading -> {
                    LoadingDialogHub.show(this, "地址保存中...")
                }
                LoadState.Success -> {
                    LoadingDialogHub.dismiss()
                    finish()
                }
                else -> LoadingDialogHub.dismiss()
            }
        })
    }
}