package com.casic.endoscope.widgets import android.annotation.SuppressLint import android.app.Dialog import android.content.Context import android.graphics.Color import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.WindowManager import android.widget.AbsListView import android.widget.AdapterView import android.widget.BaseAdapter import android.widget.TextView import com.casic.endoscope.R import com.casic.endoscope.databinding.DialogBluetoothDeviceBinding import com.clj.fastble.data.BleDevice import com.pengxh.kt.lite.extensions.binding import com.pengxh.kt.lite.extensions.dp2px import com.pengxh.kt.lite.extensions.initDialogLayoutParams class BluetoothDeviceDialog private constructor(builder: Builder) : Dialog( builder.context, R.style.UserDefinedDialogStyle ) { private val kTag = "AddCameraPointDialog" private val ctx = builder.context private var beans = builder.beans private val negativeBtn = builder.negativeBtn private val listener = builder.listener class Builder { lateinit var context: Context lateinit var beans: ArrayList<BleDevice> lateinit var negativeBtn: String lateinit var listener: OnDialogButtonClickListener fun setContext(context: Context): Builder { this.context = context return this } fun setDeviceArray(beans: ArrayList<BleDevice>): Builder { this.beans = beans return this } fun setNegativeButton(name: String): Builder { this.negativeBtn = name return this } fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { this.listener = listener return this } fun build(): BluetoothDeviceDialog { return BluetoothDeviceDialog(this) } } private val binding: DialogBluetoothDeviceBinding by binding() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) this.initDialogLayoutParams(0.3f) setContentView(R.layout.dialog_bluetooth_device) setCanceledOnTouchOutside(false) initView() } private fun initView() { binding.cancelButton.text = negativeBtn binding.cancelButton.setOnClickListener { dismiss() listener.onCancelClick() } binding.listView.adapter = ItemListAdapter(ctx) binding.listView.onItemClickListener = AdapterView.OnItemClickListener { _, _, position, _ -> dismiss() listener.onItemClick(position) } } inner class ItemListAdapter(context: Context) : BaseAdapter() { private val inflater: LayoutInflater = LayoutInflater.from(context) override fun getCount(): Int = beans.size override fun getItem(position: Int): Any = beans[position] override fun getItemId(position: Int): Long = position.toLong() @SuppressLint("MissingPermission") override fun getView(position: Int, convertView: View?, viewGroup: ViewGroup?): View { val view: View val holder: ItemViewHolder if (convertView == null) { holder = ItemViewHolder() view = inflater.inflate(R.layout.item_action_sheet, null) holder.itemView = view.findViewById(R.id.sheetItemView) view.tag = holder } else { view = convertView holder = view.tag as ItemViewHolder } holder.itemView.setBackgroundResource(R.drawable.sheet_item_middle_selector) holder.itemView.text = beans[position].name holder.itemView.textSize = 16f holder.itemView.setTextColor(Color.BLUE) //需要动态设置item的高度 val param = AbsListView.LayoutParams( WindowManager.LayoutParams.MATCH_PARENT, 55.dp2px(ctx) ) view.layoutParams = param return view } } internal class ItemViewHolder { lateinit var itemView: TextView } interface OnDialogButtonClickListener { fun onItemClick(position: Int) fun onCancelClick() } }