123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288 |
- package xn.hxp.weidith
- import android.app.Activity
- import android.app.Dialog
- import android.content.Context
- import android.content.IntentFilter
- import android.graphics.Color
- import android.graphics.drawable.ColorDrawable
- import android.hardware.usb.UsbManager
- import android.os.Bundle
- import android.os.Handler
- import android.os.Looper
- import android.os.Message
- import android.util.Log
- import android.view.*
- import android.widget.*
- import androidx.recyclerview.widget.LinearLayoutManager
- import androidx.recyclerview.widget.RecyclerView
- import com.blankj.utilcode.util.LogUtils
- import xn.hxp.R
- import xn.hxp.comm.Constants
- import xn.hxp.receiver.OnSerialScanListener
- import xn.hxp.receiver.PortScanHelper
- import xn.hxp.receiver.UsbReceiver
- import xn.hxp.ui.adapter.UsageLabelDialogAdapter
- import xn.hxp.utils.BigDecimalUtils
- import com.rc.httpcore.bean.ChemistryBean
- import org.greenrobot.eventbus.EventBus
- import org.greenrobot.eventbus.Subscribe
- import org.greenrobot.eventbus.ThreadMode
- //领用-请扫描化学品标签
- class UsageLabelDialog(
- private val ac: Activity,
- private var isLcok: Boolean,
- private var cabinet: String,
- private val lint: IIneSwipeLin
- ) : Dialog(ac) {
- private var mUsbReceiver: UsbReceiver? = null // 刷卡广播注册
- private var mHandleScanEvent = false //当前是否已经获取过 usb返回的参数
- private val mAdapter by lazy { UsageLabelDialogAdapter(ac) }
- private var mCounter = 0
- private var butClos: Button? = null
- override fun onStart() {
- super.onStart()
- EventBus.getDefault().register(this)
- }
- override fun onStop() {
- super.onStop()
- mPortScanHelper.onPause()
- ac.unregisterReceiver(mUsbReceiver)
- EventBus.getDefault().unregister(this)
- }
- init {
- requestWindowFeature(Window.FEATURE_NO_TITLE)
- setContentView(R.layout.usage_label_dialog)
- window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
- window?.setGravity(Gravity.CENTER)
- window?.setLayout(
- WindowManager.LayoutParams.MATCH_PARENT,
- WindowManager.LayoutParams.WRAP_CONTENT
- )
- // 设置点击外部空白处不关闭对话框
- setCanceledOnTouchOutside(false)
- }
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- if (isLcok) {
- findViewById<Button>(R.id.butOpen).visibility = View.VISIBLE
- } else {
- findViewById<Button>(R.id.butOpen).visibility = View.GONE
- }
- findViewById<TextView>(R.id.cabinet).text = "$cabinet"
- findViewById<Button>(R.id.butClos).setOnClickListener {
- closHandle()
- dismiss()
- }
- findViewById<Button>(R.id.cloe).setOnClickListener {
- closHandle()
- lint.onCloses()
- dismiss()
- }
- //领用信息
- findViewById<Button>(R.id.useEn).setOnClickListener {
- if (mAdapter.data != null && mAdapter.data.size > 0) {
- val hasDuplicateCodes = hasDuplicateCodes(mAdapter.data)
- LogUtils.i("========hasDuplicateCodes $hasDuplicateCodes")
- if (!hasDuplicateCodes) {
- closHandle()
- lint.onUseClick(mAdapter.data)
- dismiss()
- } else {
- LogUtils.i("===========2")
- Toast.makeText(ac as Context, "不能重复领用", Toast.LENGTH_SHORT).show()
- }
- }
- }
- findViewById<Button>(R.id.butOpen).setOnClickListener {
- closHandle()
- dismiss()
- lint.openLock()
- }
- val findViewById = findViewById<RecyclerView>(R.id.reView)
- findViewById.layoutManager = LinearLayoutManager(ac)
- findViewById.adapter = mAdapter
- mPortScanHelper.onResume()
- registerUsbBroadcast()
- // mCountDownHandler.removeMessages(Constants.WHAT_COUNT_DOWN_TWO)
- // mCountDownHandler.sendEmptyMessage(Constants.WHAT_COUNT_DOWN_TWO)
- mAdapter.setOnItemChildClickListener { adapter, view, position ->
- // 在这里处理子View的点击事件
- when (view.id) {
- R.id.imgDelete -> {
- // mAdapter.data.removeAt(position)
- // mAdapter.notifyItemRemoved(position)
- lint.onPositions(position, mAdapter)
- }
- }
- }
- }
- private fun hasDuplicateCodes(list: List<ChemistryBean>): Boolean {
- val distinctCodes = list.map { it.code }.distinct()
- return distinctCodes.size != list.size
- }
- interface IIneSwipeLin {
- fun onCardInContent(cont: String)//刷卡返回
- fun onUseClick(data: MutableList<ChemistryBean>)//点击领用
- fun onCloses() //关闭清空数据
- fun openLock()//再次开门
- fun onPositions(position: Int, mData: UsageLabelDialogAdapter)//下标删除
- fun onTimerReply()//重置最外层弹框信息
- }
- override fun dispatchKeyEvent(event: KeyEvent): Boolean {
- if (event.keyCode == KeyEvent.KEYCODE_BACK) {
- // 在Dialog弹出时处理返回键事件
- // 处理完事件后返回true表示事件已经被消费,不再传递
- return true
- }
- mPortScanHelper.dispatchKeyEvent(event)
- return super.dispatchKeyEvent(event)
- }
- //必须写这个方法 防止注册失败
- @Subscribe(threadMode = ThreadMode.MAIN)
- fun onUpdateEventEvent(event: KeyEvent) {
- }
- private val mPortScanHelper by lazy {
- PortScanHelper(ac, object : OnSerialScanListener {
- override fun dispatchScanEvent(type: OnSerialScanListener.ScanType, content: String) {
- lint.onTimerReply()
- mCounter = 0
- if (!mHandleScanEvent) {
- if (content.isNotBlank()) {
- LogUtils.i("========a==当前usb返回参数$content")
- mHandleScanEvent = true
- // handleScanEvent(content)
- //所有通过查询二维码的参数 需要先判断 http开头的 然后进行截取
- if (content.startsWith("http")) {
- try {
- val currentDateTimeString =
- BigDecimalUtils.extractParameterValue(content, "code")
- LogUtils.i("=======ce $currentDateTimeString")
- lint.onCardInContent(currentDateTimeString!!)
- } catch (e: Exception) {
- mHandleScanEvent = false
- LogUtils.i("刷卡异常了")
- showToast("未获取到二维码信息,请重新扫描", 3000)
- }
- } else {
- lint.onCardInContent(content)
- }
- }
- }
- }
- })
- }
- private fun showToast(message: String, duration: Int) {
- Toast.makeText(ac, message, duration).show()
- }
- //刷卡usb链接
- private fun registerUsbBroadcast() {
- if (null == mUsbReceiver) {
- val filter = IntentFilter().apply {
- addAction(UsbReceiver.ACTION_USB_PERMISSION)
- addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED)
- addAction(UsbManager.ACTION_USB_DEVICE_DETACHED)
- addAction(UsbReceiver.ACTION_USB_STATE) // usb连接状态广播
- }
- mUsbReceiver = UsbReceiver()
- ac.registerReceiver(mUsbReceiver, filter)
- }
- }
- fun setMessage(message: String, dataList: List<ChemistryBean>) {
- LogUtils.i("====================数据过来了")
- mHandleScanEvent = false
- findViewById<ImageView>(R.id.img).visibility = View.GONE
- findViewById<Button>(R.id.butClos).visibility = View.GONE
- findViewById<LinearLayout>(R.id.linTow).visibility = View.VISIBLE
- findViewById<RecyclerView>(R.id.reView).visibility = View.VISIBLE // 在这里可以设置接收到的消息参数
- mAdapter.setNewInstance(dataList.toMutableList())
- }
- fun notifyData(mChemistryBean: MutableList<ChemistryBean>) {
- mHandleScanEvent = false
- mAdapter.data = mChemistryBean
- mAdapter.notifyDataSetChanged()
- }
- fun notifyData() {
- mHandleScanEvent = false
- }
- private fun closHandle() {
- // mCountDownHandler.removeMessages(Constants.WHAT_COUNT_DOWN_TWO)
- // mCountDownHandler.removeCallbacksAndMessages(null)
- }
- // private val mCountDownHandler = object : Handler(Looper.getMainLooper()) {
- //
- // override fun handleMessage(msg: Message) {
- // if (Constants.WHAT_COUNT_DOWN_TWO == msg.what) {
- //
- // val countDown = Constants.OFFTIME_TIME - mCounter
- //
- // Log.d("======返回时间", "$countDown")
- // if (countDown <= 0) {
- // dismiss()
- // } else {
- // sendEmptyMessageDelayed(Constants.WHAT_COUNT_DOWN_TWO, 1000)
- // }
- // mCounter++
- // }
- // }
- // }
- override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
- // 在触摸事件发生时被调用
- when (ev.action) {
- MotionEvent.ACTION_DOWN -> {
- // 用户按下屏幕时的处理逻辑
- onUserInteraction()
- }
- MotionEvent.ACTION_MOVE -> {
- // 用户在屏幕上移动手指时的处理逻辑
- }
- MotionEvent.ACTION_UP -> {
- // 用户抬起手指时的处理逻辑
- }
- }
- return super.dispatchTouchEvent(ev)
- }
- fun onUserInteraction() {
- // 在用户与对话框交互时的逻辑处理
- LogUtils.i("=========弹框触发了")
- lint.onTimerReply()
- mCounter = 0
- }
- }
|