StorageDialog.kt 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. package xn.hxp.weidith
  2. import android.app.Dialog
  3. import android.content.Context
  4. import android.graphics.Color
  5. import android.graphics.drawable.ColorDrawable
  6. import android.os.Bundle
  7. import android.os.Handler
  8. import android.os.Looper
  9. import android.os.Message
  10. import android.util.Log
  11. import android.view.*
  12. import android.widget.Button
  13. import android.widget.LinearLayout
  14. import android.widget.TextView
  15. import androidx.recyclerview.widget.LinearLayoutManager
  16. import androidx.recyclerview.widget.RecyclerView
  17. import xn.hxp.R
  18. import xn.hxp.comm.Constants
  19. import xn.hxp.ui.adapter.CabinetDoorAdapter
  20. import xn.hxp.ui.adapter.CabinetDoorRighAdapter
  21. import xn.hxp.ui.adapter.DoorStoreyAdapter
  22. import com.blankj.utilcode.util.LogUtils
  23. import com.rc.httpcore.bean.ChemicalTypeBean
  24. import com.rc.httpcore.bean.LockVoListBean
  25. import com.rc.httpcore.bean.RuleBean
  26. //化学品存储位置-归还位置
  27. class StorageDialog(
  28. private val ct: Context,
  29. private var mType: Int = 0,
  30. private val listData: List<RuleBean>,
  31. private var lint: IonClickListener
  32. ) : Dialog(ct) {
  33. private val mAdapterLeft by lazy { CabinetDoorAdapter(ct) } //左边柜子
  34. private val mAdapterRigh by lazy { CabinetDoorRighAdapter(ct) } //右边柜子
  35. private val mAdapterStorey by lazy { DoorStoreyAdapter() } //柜子层数
  36. private val mStoreyList = mutableListOf<Int>() //层数
  37. private var cabinetName: String? = null
  38. private var cabinetId: String? = null
  39. private var mDoorName: String? = null
  40. private var mDoorUniqueId: String? = null
  41. private var mLockNum: String? = null
  42. private var mCounter = 0
  43. private var mUnlockingMethod: Int = 0
  44. private var mCabinetLockVoList: List<LockVoListBean>? = null //柜锁会又多个
  45. private var butClos: Button? = null
  46. init {
  47. requestWindowFeature(Window.FEATURE_NO_TITLE)
  48. setContentView(R.layout.storage_dialog)
  49. window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
  50. window?.setGravity(Gravity.CENTER)
  51. window?.setLayout(
  52. WindowManager.LayoutParams.MATCH_PARENT,
  53. WindowManager.LayoutParams.WRAP_CONTENT
  54. )
  55. // 设置点击外部空白处不关闭对话框
  56. setCanceledOnTouchOutside(false)
  57. if (mType == 1) {
  58. findViewById<LinearLayout>(R.id.lin3).visibility = View.VISIBLE
  59. val rvStorey = findViewById<RecyclerView>(R.id.cabinetLayer)
  60. rvStorey.layoutManager = LinearLayoutManager(ct)
  61. rvStorey.adapter = mAdapterStorey
  62. }
  63. }
  64. override fun onCreate(savedInstanceState: Bundle?) {
  65. super.onCreate(savedInstanceState)
  66. val recyclerViewListLeft = findViewById<RecyclerView>(R.id.recyclerViewListLeft)
  67. recyclerViewListLeft.layoutManager = LinearLayoutManager(ct)
  68. recyclerViewListLeft.adapter = mAdapterLeft
  69. val recyclerViewListRight = findViewById<RecyclerView>(R.id.recyclerViewListRight)
  70. recyclerViewListRight.layoutManager = LinearLayoutManager(ct)
  71. recyclerViewListRight.adapter = mAdapterRigh
  72. mAdapterLeft.setNewInstance(listData.toMutableList())
  73. mAdapterLeft.setOnItemClickListener { adapter, view, position ->
  74. mAdapterLeft.data.forEach { it.isType = false }
  75. mAdapterLeft.data[position].isType = true
  76. mAdapterRigh.data.forEach { it.isType = false } //柜门初始化
  77. mAdapterLeft.notifyDataSetChanged()
  78. if (mAdapterLeft.data[position].cabinetDoorVoList != null) {
  79. mLockNum = mAdapterLeft.data[position].lockNum
  80. cabinetName = mAdapterLeft.data[position].cabinetName
  81. cabinetId = mAdapterLeft.data[position].cabinetId
  82. mAdapterRigh.setNewInstance(mAdapterLeft.data[position].cabinetDoorVoList.toMutableList())
  83. }
  84. }
  85. // if (mType == 1) {
  86. // val doorLayers = mAdapterLeft.data[0].cabinetDoorVoList[0].doorLayers
  87. // for (i in 1..doorLayers) {
  88. // mStoreyList.add(i)
  89. // mAdapterStorey.setNewInstance(mStoreyList)
  90. // }
  91. // }
  92. mAdapterRigh.setOnItemClickListener { adapter, view, position ->
  93. val cabinetDoorVo = mAdapterRigh.data[position]
  94. mDoorName = cabinetDoorVo.doorName
  95. mDoorUniqueId = cabinetDoorVo.doorUniqueId
  96. mCabinetLockVoList = cabinetDoorVo.cabinetLockVoList
  97. mAdapterRigh.data.forEach { it.isType = false }
  98. mAdapterRigh.data[position].isType = true
  99. mAdapterRigh.notifyDataSetChanged()
  100. if (mType == 0) {
  101. lint.onClick(
  102. cabinetId!!,
  103. cabinetName!!,
  104. mDoorName!!,
  105. mDoorUniqueId!!,
  106. mCabinetLockVoList!!,
  107. cabinetDoorVo.doorLayers,
  108. mLockNum!!
  109. )
  110. mCountDownHandler.removeMessages(Constants.WHAT_COUNT_DOWN_TWO)
  111. mCountDownHandler.sendEmptyMessage(Constants.WHAT_COUNT_DOWN_TWO)
  112. dismiss()
  113. } else {
  114. val doorLayers = cabinetDoorVo.doorLayers
  115. LogUtils.i("========层${doorLayers}")
  116. mStoreyList.clear()
  117. for (i in 1..doorLayers) {
  118. mStoreyList.add(i)
  119. }
  120. if (mAdapterStorey.data != null && mAdapterStorey.data.size > 0) {
  121. mAdapterStorey.data = mStoreyList
  122. mAdapterStorey.notifyDataSetChanged()
  123. } else {
  124. mAdapterStorey.setNewInstance(mStoreyList)
  125. }
  126. }
  127. }
  128. //选择得层数
  129. mAdapterStorey.setOnItemClickListener { adapter, view, position ->
  130. //当前选择得层数
  131. val layers = mAdapterStorey.data[position]
  132. lint.onClick(
  133. cabinetId!!,
  134. cabinetName!!,
  135. mDoorName!!,
  136. mDoorUniqueId!!,
  137. mCabinetLockVoList!!,
  138. layers,
  139. mLockNum!!
  140. )
  141. closHandle()
  142. dismiss()
  143. }
  144. findViewById<TextView>(R.id.butClos).setOnClickListener {
  145. closHandle()
  146. dismiss()
  147. lint.onClose()
  148. }
  149. mCountDownHandler.removeMessages(Constants.WHAT_COUNT_DOWN_TWO)
  150. mCountDownHandler.sendEmptyMessage(Constants.WHAT_COUNT_DOWN_TWO)
  151. }
  152. //存储位置:一柜子-左一门
  153. interface IonClickListener {
  154. fun onClick(
  155. cabinetId: String,
  156. cabinetName: String,
  157. doorName: String,
  158. doorId: String,
  159. cabinetLockVoList: List<LockVoListBean>,
  160. layers: Int,
  161. lockNum: String, //柜锁编号
  162. )
  163. fun onClose()
  164. }
  165. private fun closHandle() {
  166. mCountDownHandler.removeMessages(Constants.WHAT_COUNT_DOWN_TWO)
  167. mCountDownHandler.removeCallbacksAndMessages(null)
  168. }
  169. private val mCountDownHandler = object : Handler(Looper.getMainLooper()) {
  170. override fun handleMessage(msg: Message) {
  171. if (Constants.WHAT_COUNT_DOWN_TWO == msg.what) {
  172. val countDown = Constants.OFFTIME_TIME - mCounter
  173. Log.d("======返回时间", "$countDown")
  174. if (countDown <= 0) {
  175. dismiss()
  176. } else {
  177. sendEmptyMessageDelayed(Constants.WHAT_COUNT_DOWN_TWO, 1000)
  178. }
  179. mCounter++
  180. }
  181. }
  182. }
  183. override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
  184. // 在触摸事件发生时被调用
  185. when (ev.action) {
  186. MotionEvent.ACTION_DOWN -> {
  187. // 用户按下屏幕时的处理逻辑
  188. onUserInteraction()
  189. }
  190. MotionEvent.ACTION_MOVE -> {
  191. // 用户在屏幕上移动手指时的处理逻辑
  192. }
  193. MotionEvent.ACTION_UP -> {
  194. // 用户抬起手指时的处理逻辑
  195. }
  196. }
  197. return super.dispatchTouchEvent(ev)
  198. }
  199. private fun onUserInteraction() {
  200. // 在用户与对话框交互时的逻辑处理
  201. LogUtils.i("=========弹框触发了")
  202. mCounter = 0
  203. }
  204. }