diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index db2c7b8..b762cfb 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -43,6 +43,7 @@ android:name=".ShelfActivity" android:screenOrientation="portrait" tools:ignore="DiscouragedApi,LockedOrientationActivity" /> + = mutableListOf() - val weightArray = SparseArray() + val weightArray = SparseIntArray() var shelfIndex = 0 // public fun getRealWeight():Double = weightArray[shelfIndex]?:0.0 @@ -124,6 +128,7 @@ class HomeActivity : BaseActivity() { } SerialPortManager.send(ACTIVE_CMD) + //SerialPortManager.send(DEVICE_INFO_CMD) } repeatOnLifecycle(Lifecycle.State.CREATED) { @@ -296,7 +301,12 @@ class HomeActivity : BaseActivity() { //获取设备状态 getDeviceInfo(data) } - + "1001","1002" -> { + Log.d(TAG, "receiveSerialPortData,温控信息上报数据:${data}") + } + "0F02" -> { + Log.d(TAG, "receiveSerialPortData,温控信息应答数据:${data}") + } else -> {} } } @@ -378,12 +388,11 @@ class HomeActivity : BaseActivity() { weightHex = firstByteHex + weightHex.substring(2) realWeight = -1 * weightHex.toInt() } - val realWeightDouble = realWeight / 1000.0 - weightArray.put(index, realWeightDouble) + weightArray.put(index, realWeight) if (index <= 10) { list.firstOrNull { it.deviceNo == index }?.let { - it.weight = realWeightDouble + it.weight = realWeight.toDouble() val pos = list.indexOf(it) shelfAdapter.notifyItemChanged(pos) Log.d(TAG, "getWeightInfo: deviceNo=${it.deviceNo},realWeight=${realWeight}") @@ -435,7 +444,7 @@ class HomeActivity : BaseActivity() { @Suppress("DEPRECATION") private val shelfAdapter by lazy { ShelfAdapter(list).apply { - setOnDebouncedItemClick { adapter, view, position -> + setOnItemClickListener { _, _, position -> shelfIndex = position lifecycleScope.launch { // val openCmd = if (list[position].deviceNo in 1..5) @@ -447,6 +456,7 @@ class HomeActivity : BaseActivity() { // toast("${list[position].goodsName}柜门开启失败") // return@launch // } + //SerialPortManager.send(START_CMD) launch(Intent(this@HomeActivity, ShelfActivity::class.java).also { it.putExtra(ShelfActivity.SHELF_MODEL, list[position]) }) { @@ -465,13 +475,13 @@ class HomeActivity : BaseActivity() { try { - val submitList = list.sortedBy { it.deviceNo } - val body = ShelfBody().also { - it.deviceId = App.deviceId ?: "" - it.canteenId = App.canteenId - it.temperature = showTemperatureC - it.humidity = showHumidity - it.goodsList = submitList + val submitList = list.sortedBy { item-> item.deviceNo } + val body = ShelfBody().also { body -> + body.deviceId = App.deviceId ?: "" + body.canteenId = App.canteenId + body.temperature = showTemperatureC + body.humidity = showHumidity + body.goodsList = submitList } Log.d("mzf", "performSync: body:${body.toJsonString()}") lifecycleScope.launch { @@ -553,7 +563,8 @@ class HomeActivity : BaseActivity() { item?.apply { goodsId = "" goodsName = null - weight = null + weight = 0.0 + weightBak = if (event.weight <= 0.0 ) 0.0 else -1 * event.weight.toDouble() createTime = null overdueDay = null } diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/SettingActivity.kt b/app/src/main/java/com/shuwei/intelligent/shelves/SettingActivity.kt new file mode 100644 index 0000000..e478fa0 --- /dev/null +++ b/app/src/main/java/com/shuwei/intelligent/shelves/SettingActivity.kt @@ -0,0 +1,68 @@ +package com.shuwei.intelligent.shelves + +import android.os.Bundle +import android.os.Handler +import android.os.Looper +import androidx.lifecycle.lifecycleScope +import com.shuwei.intelligent.shelves.base.BaseActivity +import com.shuwei.intelligent.shelves.databinding.ActivitySettingBinding +import com.shuwei.intelligent.shelves.serial.SerialPortManager +import com.shuwei.intelligent.shelves.utils.KeyboardUtil +import kotlinx.coroutines.launch +import java.text.SimpleDateFormat +import java.util.Date +import java.util.Locale + +class SettingActivity: BaseActivity() { + + private lateinit var binding: ActivitySettingBinding + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = ActivitySettingBinding.inflate(layoutInflater) + setBackground() + setContentView(binding.root) + binding.btnSendCmd.setOnClickListener{ + val cmd = binding.etInputCmd.text.toString().trim() + if (cmd.isBlank()) { + return@setOnClickListener + } + val realCmd = "${HomeActivity.HEADER}0F01${cmd}${HomeActivity.FOOTER}" + lifecycleScope.launch { + SerialPortManager.send(realCmd) + } + } + binding.ivBack.setOnClickListener { finish() } + binding.root.setOnClickListener { v -> + KeyboardUtil.hideKeyboard(v) + } + } + + + private fun updateDateTime() { + val sdf = SimpleDateFormat(ShelfActivity.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) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/ShelfActivity.kt b/app/src/main/java/com/shuwei/intelligent/shelves/ShelfActivity.kt index 4efe815..18225a1 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/ShelfActivity.kt +++ b/app/src/main/java/com/shuwei/intelligent/shelves/ShelfActivity.kt @@ -54,7 +54,7 @@ class ShelfActivity : BaseActivity() { companion object { private const val TAG = "ShelfActivity" - private const val YYYY_MM_DD__EEEE_HH_MM_SS = "yyyy年MM月dd日 EEEE***HH:mm:ss" + const val YYYY_MM_DD__EEEE_HH_MM_SS = "yyyy年MM月dd日 EEEE***HH:mm:ss" const val SHELF_MODEL = "shelfModel" const val RECEIVER_DEVICE_INFO = "receiverDeviceInfo" const val SHELF_WEIGHT = "shelfWeight" @@ -90,9 +90,9 @@ class ShelfActivity : BaseActivity() { shelfModel?.let { binding.tvShelfName.text = it.shelfName binding.tvFoodName.text = if (it.goodsName.isNullOrBlank()) "-" else it.goodsName - realWeight = ((it.weight ?: 0.0) * 1000).toInt() -// realWeight = (HomeActivity.getRealWeight() * 1000).toInt() - binding.tvFoodWeight.text = "${realWeight}克" + realWeight = it.weight?.toInt()?:0 + binding.tvFoodWeight.text = if(realWeight < 1000) "${realWeight}克" else "%.3f千克".format(realWeight/1000.0) + startTime = System.currentTimeMillis() } initRecyclerView() @@ -125,7 +125,7 @@ class ShelfActivity : BaseActivity() { shelfName = shelfModel?.shelfName, goodsId = currentGoodsId, goodsName = list[clickIndex].goodsName, - weight = realWeight / 1000.0, + weight = realWeight.toDouble(), overdueDay = list[clickIndex].overdueDay, // createTime = if (shelfModel?.goodsId == currentGoodsId) null else DateTimeUtil.formatDateTime(dateTime = Date()) createTime = DateTimeUtil.formatDateTime(dateTime = Date()) @@ -142,11 +142,12 @@ class ShelfActivity : BaseActivity() { binding.btnClearZero.setOnClickListener { clearZero() } - binding.btnClearEmpty?.setOnClickListener { + binding.btnClearEmpty.setOnClickListener { + val tempWeight = shelfModel?.weight?.toInt()?:0 clearZero() binding.tvFoodName.text = "-" - binding.tvFoodWeight.text = "0克" - EventBus.getDefault().post(ClearShelfEvent(shelfModel!!.deviceNo)) + //binding.tvFoodWeight.text = "0克" + EventBus.getDefault().post(ClearShelfEvent(shelfModel!!.deviceNo, tempWeight)) } lifecycleScope.launch { SerialPortManager.send(DEVICE_INFO_CMD) @@ -358,7 +359,12 @@ class ShelfActivity : BaseActivity() { @Subscribe(threadMode = ThreadMode.MAIN) public fun receiveWeightEvent(event: SendWeightEvent) { if (event.shelfNo == (shelfModel?.deviceNo ?: 0)) { - binding.tvFoodWeight.text = "${event.weight}克" + val intervalTime = System.currentTimeMillis() - startTime + Log.d(TAG, "receiveWeightEvent: ${event.shelfNo}号货架重量数据获取间隔时间为:$intervalTime") + val weight = event.weight + binding.tvFoodWeight.text = if(weight < 1000) "${weight}克" else "%.3f千克".format(weight/1000.0) + startTime = System.currentTimeMillis() + window.decorView.postDelayed({ Loading.dismiss() }, 1000) } } @@ -375,10 +381,11 @@ class ShelfActivity : BaseActivity() { // binding.tvFoodWeight.text = "${realWeight}克" SerialPortManager.send(DEVICE_INFO_CMD) + startTime = System.currentTimeMillis() Loading.show(this@ShelfActivity) - window.decorView.postDelayed({ Loading.dismiss() }, 5000) +// window.decorView.postDelayed({ Loading.dismiss() }, 5000) } KeyboardUtil.hideKeyboard(window.decorView) } - + private var startTime = 0L } \ No newline at end of file diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/adapter/ShelfAdapter.kt b/app/src/main/java/com/shuwei/intelligent/shelves/adapter/ShelfAdapter.kt index b10957f..218150e 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/adapter/ShelfAdapter.kt +++ b/app/src/main/java/com/shuwei/intelligent/shelves/adapter/ShelfAdapter.kt @@ -14,7 +14,6 @@ import com.shuwei.intelligent.shelves.utils.DateTimeUtil import com.shuwei.intelligent.shelves.utils.ext.gone import com.shuwei.intelligent.shelves.utils.ext.visible import java.util.Date -import kotlin.math.roundToInt class ShelfAdapter(list: MutableList) : BaseQuickAdapter(list) { @@ -37,7 +36,7 @@ class ShelfAdapter(list: MutableList) : override fun onBindViewHolder(holder: VH, position: Int, item: ShelfModel?) { val shelfNo = item!!.deviceNo item.shelfName = "货架-${if (shelfNo < 10) "0${shelfNo}" else "$shelfNo"}" - val weight = item.weight ?: 0.toDouble() + val weight = item.weight ?: 0.0 val binding = holder.binding if (item.overdueDay.isNullOrBlank()) { binding.ivStaleFood.gone() @@ -63,7 +62,8 @@ class ShelfAdapter(list: MutableList) : binding.tvFoodWeight.run { setTextColor(getColor(R.color.food_weight_orange)) //val showWeight = if (weight == 0.toDouble()) "0克" else "%.3f千克".format(weight) - text = "${(weight*1000).roundToInt()}克" + text = if(weight < 1000) "${weight.toInt()}克" else "%.3f千克".format(weight/1000.0) + //"${(weight*1000).roundToInt()}克" } //val isBlankShelf = weight <= 0 val isBlankShelf = item.goodsName.isNullOrBlank() diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/base/BaseActivity.kt b/app/src/main/java/com/shuwei/intelligent/shelves/base/BaseActivity.kt index 3528ccd..a453d57 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/base/BaseActivity.kt +++ b/app/src/main/java/com/shuwei/intelligent/shelves/base/BaseActivity.kt @@ -17,9 +17,11 @@ import com.shuwei.intelligent.shelves.HomeActivity import com.shuwei.intelligent.shelves.HomeActivity.Companion.LIGHT_CLOSE import com.shuwei.intelligent.shelves.HomeActivity.Companion.LIGHT_OPEN import com.shuwei.intelligent.shelves.R +import com.shuwei.intelligent.shelves.SettingActivity import com.shuwei.intelligent.shelves.databinding.ActivityBaseBinding import com.shuwei.intelligent.shelves.serial.SerialPortManager import com.shuwei.intelligent.shelves.utils.ext.clickWithDebounce +import com.shuwei.intelligent.shelves.utils.ext.startActivity import kotlinx.coroutines.launch @Suppress("DEPRECATION") @@ -146,6 +148,9 @@ open class BaseActivity : AppCompatActivity() { val tag = binding.tvLeftStatus.tag?.toString()?.toBoolean() ?: true switchLight(tag.not()) } + binding.tvRightStatus.clickWithDebounce { + startActivity { } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/model/SendWeightEvent.kt b/app/src/main/java/com/shuwei/intelligent/shelves/model/SendWeightEvent.kt index 4ac15d0..ee3d717 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/model/SendWeightEvent.kt +++ b/app/src/main/java/com/shuwei/intelligent/shelves/model/SendWeightEvent.kt @@ -7,4 +7,4 @@ data class SendWeightEvent( data class WeightEvent(var weight: Int) -data class ClearShelfEvent(var shelfNo: Int) \ No newline at end of file +data class ClearShelfEvent(var shelfNo: Int, var weight: Int) \ No newline at end of file diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/model/ShelfModel.kt b/app/src/main/java/com/shuwei/intelligent/shelves/model/ShelfModel.kt index f70759c..ec74d88 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/model/ShelfModel.kt +++ b/app/src/main/java/com/shuwei/intelligent/shelves/model/ShelfModel.kt @@ -10,6 +10,7 @@ data class ShelfModel( var goodsName: String? = null, var deviceId: String? = null, var weight: Double? = null, + var weightBak: Double? = null, var createTime: String? = null, var overdueDay: String? = null, var temperature: String? = null, diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/net/LoadingDialog.kt b/app/src/main/java/com/shuwei/intelligent/shelves/net/LoadingDialog.kt index e6dd43c..2a63c93 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/net/LoadingDialog.kt +++ b/app/src/main/java/com/shuwei/intelligent/shelves/net/LoadingDialog.kt @@ -1,5 +1,6 @@ package com.shuwei.intelligent.shelves.net +import android.app.Activity import android.app.Dialog import android.content.Context import android.graphics.Color @@ -15,13 +16,15 @@ object Loading { private var dialog: LoadingDialog? = null - fun show(context: Context) { + fun show(activity: Activity) { + if (activity.isFinishing || activity.isDestroyed) { + return + } if (dialog?.isShowing == true) { dialog?.dismiss() } - if (dialog == null) { - dialog = LoadingDialog(context) + dialog = LoadingDialog(activity) } dialog?.show() } @@ -47,12 +50,13 @@ class LoadingDialog( binding.tvMessage.text = message setContentView(binding.root) setCancelable(true) + setCanceledOnTouchOutside(true) window?.run { setBackgroundDrawable(Color.TRANSPARENT.toDrawable()) - setFlags( - WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, - WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE - ); +// setFlags( +// WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, +// WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE +// ) } setOnDismissListener { onDismiss() diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/task/SyncTask.kt b/app/src/main/java/com/shuwei/intelligent/shelves/task/SyncTask.kt index 03b843e..d633151 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/task/SyncTask.kt +++ b/app/src/main/java/com/shuwei/intelligent/shelves/task/SyncTask.kt @@ -38,6 +38,11 @@ class SyncTask(appContext: Context, workerParams: WorkerParameters) : val list = HomeActivity.list Log.d(TAG, "performSync: list:${list.toJsonString()}") val submitList = list.sortedBy { it.deviceNo } + submitList.forEach { + if (it.goodsId.isBlank()) { + it.weight = it.weightBak + } + } // submitList.forEach { // it.temperature = HomeActivity.showTemperatureC // it.humidity = HomeActivity.showHumidity diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/task/TaskManager.kt b/app/src/main/java/com/shuwei/intelligent/shelves/task/TaskManager.kt index 2f544a7..34aeeb0 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/task/TaskManager.kt +++ b/app/src/main/java/com/shuwei/intelligent/shelves/task/TaskManager.kt @@ -14,6 +14,7 @@ object TaskManager { val nextRequest = OneTimeWorkRequestBuilder() .setInitialDelay(2, TimeUnit.MINUTES) // .setInitialDelay(30, TimeUnit.SECONDS) +// .setInitialDelay(10, TimeUnit.MINUTES) // .setInputData(inputData) .build() WorkManager.getInstance(App.getInstance()) diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/utils/AppUtil.java b/app/src/main/java/com/shuwei/intelligent/shelves/utils/AppUtil.java index af3b846..dd9317c 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/utils/AppUtil.java +++ b/app/src/main/java/com/shuwei/intelligent/shelves/utils/AppUtil.java @@ -406,7 +406,8 @@ public class AppUtil { */ @SuppressLint("MissingPermission") public static String getUDID(Context context) { - return "test111"; + return "SWZC-HG-001"; + //"test111"; // String androidID = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID); // if (!androidID.equals("")) { // try { diff --git a/app/src/main/res/layout-sw600dp/activity_shelf.xml b/app/src/main/res/layout-sw600dp/activity_shelf.xml index 217889e..aca4625 100644 --- a/app/src/main/res/layout-sw600dp/activity_shelf.xml +++ b/app/src/main/res/layout-sw600dp/activity_shelf.xml @@ -35,10 +35,10 @@ android:layout_width="wrap_content" android:layout_height="60dp" android:layout_marginTop="24dp" + android:fontFamily="sans-serif-medium" android:gravity="center" android:textColor="@color/bg_page" android:textSize="30sp" - android:fontFamily="sans-serif-medium" tools:text="货架 - 03" /> - - - @@ -167,16 +152,16 @@ android:layout_height="60dp" android:layout_marginEnd="24dp" android:background="@null" + android:fontFamily="sans-serif-medium" android:hint="输入食材名称" - android:maxLines="1" - android:inputType="text" - android:text="" android:imeOptions="actionSearch" - android:textColor="@color/food_name_black" + android:inputType="text" + android:maxLines="1" android:paddingStart="1dp" android:paddingEnd="1dp" + android:text="" + android:textColor="@color/food_name_black" android:textColorHint="#B4BEC8" - android:fontFamily="sans-serif-medium" android:textSize="30sp" tools:ignore="Autofill,HardcodedText,TextFields" /> @@ -184,8 +169,8 @@ + android:layout_marginTop="24dp" + android:layout_weight="1"> + tools:itemCount="10" + tools:listitem="@layout/list_item_search" /> + android:visibility="gone" /> - - + android:layout_height="wrap_content" + android:gravity="center_vertical" + android:orientation="horizontal"> + + + + + + diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml new file mode 100644 index 0000000..eddde70 --- /dev/null +++ b/app/src/main/res/layout/activity_setting.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + +