package com.example.smart.widget.common
|
|
import android.content.Context
|
import android.text.Editable
|
import android.text.TextUtils
|
import android.util.AttributeSet
|
import android.view.LayoutInflater
|
import android.widget.FrameLayout
|
import androidx.core.view.isVisible
|
import com.example.basecore.util.DateUtils
|
import com.example.basecore.util.dp2px
|
import com.example.basecore.widget.SimpleTextWatcher
|
import com.example.smart.R
|
import com.example.smart.bean.CommonOptionsBean
|
import com.example.smart.bean.ValueIssueBean
|
import com.example.smart.databinding.CommonEditLayoitBinding
|
import com.example.smart.enumlist.PropertyItemType
|
import com.example.smart.ui.options.device.bean.DeviceUsageBean
|
import com.example.smart.widget.dialog.CommonPopupWindow
|
import com.example.smart.widget.dialog.PopupHelper
|
import com.loper7.date_time_picker.dialog.CardDatePickerDialog
|
|
/**
|
* 通用输入框
|
*/
|
class CommonInputWidget @JvmOverloads constructor(
|
context: Context,
|
attrs: AttributeSet? = null,
|
defStyleAttr: Int = 0,
|
) : FrameLayout(context, attrs, defStyleAttr), ICommonDataProvider {
|
|
private var mDataEvent: ICommonDataEvent? = null
|
|
private var mDataList: List<CommonOptionsBean>? = null
|
|
private var id: String = ""
|
private var content: String = ""
|
|
private val mPopupHelper by lazy {
|
PopupHelper()
|
}
|
|
private var isEditEnable = false
|
|
companion object {
|
fun create(context: Context) = CommonInputWidget(context)
|
}
|
|
private val binding by lazy(LazyThreadSafetyMode.NONE) {
|
CommonEditLayoitBinding.bind(this)
|
}
|
|
|
init {
|
LayoutInflater.from(context).inflate(R.layout.common_edit_layoit, this)
|
|
val typedArray = context.obtainStyledAttributes(attrs, R.styleable.CommonInputWidget)
|
|
val title = typedArray.getString(R.styleable.CommonInputWidget_prefix_txt)
|
|
val contentTxt = typedArray.getString(R.styleable.CommonInputWidget_content_txt)
|
val isMust = typedArray.getBoolean(R.styleable.CommonInputWidget_is_must, false)
|
isEditEnable = typedArray.getBoolean(R.styleable.CommonInputWidget_is_edit, false)
|
val showMore = typedArray.getBoolean(R.styleable.CommonInputWidget_show_more, true)
|
|
val hinTxt = typedArray.getString(R.styleable.CommonInputWidget_hint_txt)
|
typedArray.recycle()
|
|
binding.apply {
|
titleTv.text = title
|
if (!TextUtils.isEmpty(contentTxt)) {
|
contentTv.text = contentTxt
|
content = contentTxt!!
|
}
|
|
if (!TextUtils.isEmpty(hinTxt)) {
|
contentEdt.hint = hinTxt
|
}
|
setOperation(isMust, isEditEnable, showMore)
|
}
|
if (showMore) {
|
binding.contentTv.setOnClickListener {
|
if (mDataList.isNullOrEmpty()) {
|
return@setOnClickListener
|
}
|
showMorePanel()
|
}
|
}
|
}
|
|
//不显示更多按钮但是拥有点击事件
|
fun setClickWithoutMore() {
|
binding.contentTv.setOnClickListener {
|
if (mDataList.isNullOrEmpty()) {
|
return@setOnClickListener
|
}
|
showMorePanel()
|
}
|
}
|
|
|
fun setOperation(isMust: Boolean, isEdit: Boolean, showMore: Boolean) {
|
isEditEnable = isEdit
|
binding.apply {
|
if (isEditEnable) {
|
contentEdt.isVisible = true
|
contentTv.isVisible = false
|
moreImg.isVisible = false
|
} else {
|
contentEdt.isVisible = false
|
contentTv.isVisible = true
|
moreImg.isVisible = true
|
}
|
|
contentEdt.addTextChangedListener(object : SimpleTextWatcher() {
|
override fun afterTextChanged(s: Editable?) {
|
content = s?.toString() ?: ""
|
deviceUsageBean?.uploadContent = content
|
}
|
})
|
if (!showMore) {
|
moreImg.isVisible = false
|
contentTv.setPadding(dp2px(6), 0, dp2px(16), 0)
|
}
|
if (isMust) {
|
titleTv.setTextColor(resources.getColor(R.color.common_text_point_color))
|
} else {
|
titleTv.setTextColor(resources.getColor(R.color.gray_333333))
|
}
|
}
|
if (showMore) {
|
binding.contentTv.setOnClickListener {
|
if (mDataList.isNullOrEmpty()) {
|
return@setOnClickListener
|
}
|
showMorePanel()
|
}
|
}
|
}
|
|
private var deviceUsageBean: DeviceUsageBean.DeviceSingleInfo ? = null
|
/**
|
* only called by usage type
|
*/
|
fun bindDeviceUsageInfo(bean: DeviceUsageBean.DeviceSingleInfo, isEdit: Boolean) {
|
binding.titleTv.text = bean.name
|
deviceUsageBean = bean
|
if (isEdit) {
|
if (TextUtils.isEmpty(deviceUsageBean?.uploadContent)) {
|
binding.contentEdt.setText("")
|
binding.contentEdt.hint = "请输入"
|
} else {
|
binding.contentEdt.setText(deviceUsageBean?.uploadContent)
|
}
|
} else {
|
if (TextUtils.isEmpty(deviceUsageBean?.uploadContent)) {
|
binding.contentTv.text = "请选择"
|
} else {
|
binding.contentTv.text = deviceUsageBean?.uploadContent
|
}
|
if (bean.type == PropertyItemType.ENUM) {
|
val list = ArrayList<CommonOptionsBean>()
|
for (data in bean.options) {
|
list.add(CommonOptionsBean(data, data))
|
}
|
if (list.isNotEmpty()) {
|
bean.uploadContent = list[0].name
|
}
|
bindData(list)
|
|
if (!TextUtils.isEmpty(deviceUsageBean?.uploadContent)) {
|
setDataById(deviceUsageBean?.uploadContent!!)
|
}
|
}
|
binding.contentTv.setOnClickListener {
|
if (bean.type == PropertyItemType.DATE) {
|
showDatePicker()
|
} else {
|
showMorePanel()
|
}
|
}
|
}
|
}
|
|
private fun showMorePanel() {
|
mPopupHelper.showPopup(context, mDataList!!, object : CommonPopupWindow.ItemClickListener {
|
override fun onItemClick(bean: CommonOptionsBean) {
|
updateData(bean)
|
|
mDataEvent?.onClickView(id)
|
mDataEvent?.onWidgetPicked(id, content)
|
|
deviceUsageBean?.uploadContent = content
|
|
}
|
})
|
}
|
|
fun showDatePicker() {
|
CardDatePickerDialog.builder(context)
|
.setTitle("日期")
|
.showBackNow(false)
|
.setThemeColor(context.getColor(R.color.tab_select))
|
.setOnChoose(listener = object : CardDatePickerDialog.OnChooseListener {
|
override fun onChoose(millisecond: Long) {
|
val date = DateUtils.stampToDate(millisecond)
|
binding.contentTv.text = date
|
content = date
|
mDataEvent?.onWidgetPicked("", date)
|
|
deviceUsageBean?.uploadContent = content
|
|
}
|
}).build().show()
|
}
|
|
override fun getEdtView() = binding.contentEdt
|
|
override fun getPreTxt(): String = binding.titleTv.text.toString()
|
|
fun getContentView() = binding.contentTv
|
|
fun setContentTxt(txt: String?) {
|
binding.contentTv.text = txt
|
content = txt ?: ""
|
}
|
|
/**
|
* 下拉框内容,不能为空
|
*/
|
fun setContentWithId(txt: String?, id: String?) {
|
if (TextUtils.isEmpty(id)) {
|
return
|
}
|
if (TextUtils.isEmpty(txt)) {
|
return
|
}
|
binding.contentTv.text = txt
|
content = txt!!
|
this.id = id!!
|
}
|
|
|
fun setDataById(id: String) {
|
if (TextUtils.isEmpty(id)) {
|
return
|
}
|
if (mDataList.isNullOrEmpty()) {
|
return
|
}
|
for (data in mDataList!!) {
|
if (TextUtils.equals(id, data.code)) {
|
updateData(data)
|
break
|
}
|
}
|
}
|
|
fun getValueById(id: String): String {
|
if (TextUtils.isEmpty(id)) {
|
return "0"
|
}
|
if (mDataList.isNullOrEmpty()) {
|
return "0"
|
}
|
for (data in mDataList!!) {
|
if (data is ValueIssueBean) {
|
if (TextUtils.equals(id, data.code)) {
|
return data.value
|
}
|
}
|
}
|
return "0"
|
}
|
|
fun setEditTxt(txt: String?) {
|
binding.contentEdt.setText(txt)
|
content = txt ?: ""
|
}
|
|
fun clearTxt() {
|
binding.contentTv.text = ""
|
content = ""
|
id = ""
|
}
|
|
override fun bindData(data: List<CommonOptionsBean>) {
|
mDataList = data
|
if (data.isNotEmpty()) {
|
updateData(data[0])
|
}
|
}
|
|
override fun setDataEvent(event: ICommonDataEvent) {
|
this.mDataEvent = event
|
}
|
|
override fun updateData(data: CommonOptionsBean) {
|
if (this.id == data.code) {
|
return
|
}
|
this.id = data.code
|
content = data.name
|
if (isEditEnable) {
|
binding.contentEdt.setText(content)
|
} else {
|
binding.contentTv.text = content
|
}
|
}
|
|
override fun getContent(): String = content
|
|
override fun getContainerId(): String = id
|
|
|
}
|