代码提交
This commit is contained in:
@@ -0,0 +1,208 @@
|
||||
package com.shuwei.intelligent.shelves
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.BroadcastReceiver
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.IntentFilter
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import com.chad.library.adapter4.util.setOnDebouncedItemClick
|
||||
import com.shuwei.intelligent.shelves.HomeActivity.Companion.ACTIVE_CMD
|
||||
import com.shuwei.intelligent.shelves.HomeActivity.Companion.DEVICE_INFO_CMD
|
||||
import com.shuwei.intelligent.shelves.utils.ext.addOnActionSearchListener
|
||||
import com.shuwei.intelligent.shelves.utils.ext.clickWithDebounce
|
||||
import com.shuwei.intelligent.shelves.utils.ext.toast
|
||||
import com.shuwei.intelligent.shelves.adapter.SearchAdapter
|
||||
import com.shuwei.intelligent.shelves.base.BaseActivity
|
||||
import com.shuwei.intelligent.shelves.databinding.ActivityShelfBinding
|
||||
import com.shuwei.intelligent.shelves.model.SearchModel
|
||||
import com.shuwei.intelligent.shelves.model.ShelfModel
|
||||
import com.shuwei.intelligent.shelves.serial.SerialPortManager
|
||||
import com.shuwei.intelligent.shelves.utils.DateTimeUtil
|
||||
import com.shuwei.intelligent.shelves.utils.KeyboardUtil
|
||||
import com.shuwei.intelligent.shelves.utils.decToHex
|
||||
import kotlinx.coroutines.launch
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Date
|
||||
import java.util.Locale
|
||||
import kotlin.random.Random
|
||||
|
||||
@SuppressLint("NotifyDataSetChanged")
|
||||
class ShelfActivity : BaseActivity() {
|
||||
|
||||
companion object {
|
||||
const val SHELF_MODEL = "shelfModel"
|
||||
const val RECEIVER_DEVICE_INFO = "receiverDeviceInfo"
|
||||
const val SHELF_WEIGHT = "shelfWeight"
|
||||
|
||||
}
|
||||
|
||||
private lateinit var binding: ActivityShelfBinding
|
||||
|
||||
private var shelfModel: ShelfModel? = null
|
||||
|
||||
private var clickIndex: Int = -1
|
||||
|
||||
private var realWeight: Int = 0
|
||||
|
||||
@SuppressLint("UnspecifiedRegisterReceiverFlag")
|
||||
@Suppress("DEPRECATION")
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
binding = ActivityShelfBinding.inflate(layoutInflater)
|
||||
setContentView(binding.root)
|
||||
|
||||
shelfModel = intent.getSerializableExtra(SHELF_MODEL) as ShelfModel?
|
||||
|
||||
shelfModel?.let {
|
||||
binding.tvShelfName.text = it.shelfName
|
||||
binding.tvFoodName.text = if (it.foodName.isNullOrBlank()) "-" else it.foodName
|
||||
}
|
||||
|
||||
initRecyclerView()
|
||||
// initWeight()
|
||||
binding.etInputFood.run {
|
||||
addOnActionSearchListener {
|
||||
if (text.isNullOrBlank()) {
|
||||
toast(hint.toString())
|
||||
return@addOnActionSearchListener
|
||||
}
|
||||
loadSearchData()
|
||||
KeyboardUtil.hideKeyboard(context, this)
|
||||
}
|
||||
}
|
||||
|
||||
binding.btnConfirm.clickWithDebounce {
|
||||
if (clickIndex < 0) {
|
||||
toast("请选择食材")
|
||||
return@clickWithDebounce
|
||||
}
|
||||
val data = ShelfModel(
|
||||
shelfName = shelfModel?.shelfName,
|
||||
foodName = list[clickIndex].foodName,
|
||||
foodWeight = realWeight,
|
||||
storeDate = DateTimeUtil.formatDateTime(dateTime = Date())
|
||||
)
|
||||
val intent = Intent().apply {
|
||||
putExtra(SHELF_MODEL, data)
|
||||
}
|
||||
setResult(RESULT_OK, intent)
|
||||
finish()
|
||||
}
|
||||
binding.tvFoodWeight.text = "${realWeight}克"
|
||||
binding.root.setOnClickListener { v ->
|
||||
KeyboardUtil.hideKeyboard(v.context, v)
|
||||
}
|
||||
binding.btnClearZero.setOnClickListener { v ->
|
||||
lifecycleScope.launch {
|
||||
val shelfNo = shelfModel?.shelfNo ?: 0
|
||||
val zeroClearingCmd =
|
||||
"${HomeActivity.HEADER}0401${decToHex(shelfNo)}${HomeActivity.FOOTER}"
|
||||
SerialPortManager.send(zeroClearingCmd)
|
||||
}
|
||||
KeyboardUtil.hideKeyboard(v.context, v)
|
||||
}
|
||||
|
||||
lifecycleScope.launch {
|
||||
SerialPortManager.send(DEVICE_INFO_CMD)
|
||||
}
|
||||
|
||||
registerReceiver(receiver, IntentFilter(RECEIVER_DEVICE_INFO))
|
||||
}
|
||||
|
||||
private val receiver = object : BroadcastReceiver() {
|
||||
override fun onReceive(context: Context?, intent: Intent?) {
|
||||
intent?.let {
|
||||
realWeight = it.getIntExtra(SHELF_WEIGHT, 0)
|
||||
binding.tvFoodWeight.text = "${realWeight}克"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
unregisterReceiver(receiver)
|
||||
super.onDestroy()
|
||||
}
|
||||
|
||||
// private fun initWeight() {
|
||||
// realWeight = Random.nextInt(1, 5001)
|
||||
// }
|
||||
|
||||
private fun loadSearchData() {
|
||||
list.add(SearchModel(foodId = 1000, foodName = "菲律宾乳猪五花肉"))
|
||||
list.add(SearchModel(foodId = 1001, foodName = "金针菇"))
|
||||
list.add(SearchModel(foodId = 1002, foodName = "大菠菜"))
|
||||
list.add(SearchModel(foodId = 1003, foodName = "清远麻鸡块"))
|
||||
list.add(SearchModel(foodId = 1004, foodName = "普罗旺斯番茄"))
|
||||
list.add(SearchModel(foodId = 1005, foodName = "长条茄子"))
|
||||
list.add(SearchModel(foodId = 1006, foodName = "得莫利鱼"))
|
||||
list.add(SearchModel(foodId = 1007, foodName = "土豆丝"))
|
||||
list.add(SearchModel(foodId = 1008, foodName = "辣椒炒肉"))
|
||||
list.add(SearchModel(foodId = 1009, foodName = "雪菜烧豆腐"))
|
||||
list.add(SearchModel(foodId = 1010, foodName = "冬虫夏草炝拌芥兰苗"))
|
||||
list.add(
|
||||
SearchModel(
|
||||
foodId = 1011,
|
||||
foodName = "蘑菇玉米山药莲藕胡萝卜红枣莲子枸杞清炖排骨汤"
|
||||
)
|
||||
)
|
||||
searchAdapter.notifyDataSetChanged()
|
||||
}
|
||||
|
||||
private val list: MutableList<SearchModel> = mutableListOf()
|
||||
private val searchAdapter by lazy {
|
||||
SearchAdapter(list).apply {
|
||||
setOnDebouncedItemClick { adapter, v, position ->
|
||||
this@ShelfActivity.clickIndex = position
|
||||
list.forEach { it.isClicked = false }
|
||||
list[position].isClicked = true
|
||||
notifyDataSetChanged()
|
||||
binding.tvFoodName.text = list[position].foodName
|
||||
KeyboardUtil.hideKeyboard(v.context, v)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun initRecyclerView() {
|
||||
binding.rvSearch.run {
|
||||
layoutManager = GridLayoutManager(this@ShelfActivity, 2)
|
||||
adapter = searchAdapter
|
||||
}
|
||||
}
|
||||
|
||||
private val YYYY_MM_DD__EEEE_HH_MM_SS = "yyyy年MM月dd日 EEEE***HH:mm:ss"
|
||||
|
||||
private fun updateDateTime() {
|
||||
val sdf = SimpleDateFormat(YYYY_MM_DD__EEEE_HH_MM_SS, Locale.CHINA)
|
||||
val dateTime = sdf.format(Date())
|
||||
val arr = dateTime.split("***")
|
||||
updateLeftStatus(arr[0])
|
||||
updateRightStatus(arr[1])
|
||||
}
|
||||
|
||||
private val handler = Handler(Looper.getMainLooper())
|
||||
private val updateTask = object : Runnable {
|
||||
override fun run() {
|
||||
updateDateTime()
|
||||
handler.postDelayed(this, 1000)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
hideStatusBar()
|
||||
handler.post(updateTask)
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
super.onPause()
|
||||
handler.removeCallbacks(updateTask)
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user