diff --git a/.idea/.name b/.idea/.name
index 3a2b39c..5fc08d0 100644
--- a/.idea/.name
+++ b/.idea/.name
@@ -1 +1 @@
-SmartPlateCabinet
\ No newline at end of file
+SmartTakePlate
\ No newline at end of file
diff --git a/.idea/MarsCodeWorkspaceAppSettings.xml b/.idea/MarsCodeWorkspaceAppSettings.xml
new file mode 100644
index 0000000..e2a065b
--- /dev/null
+++ b/.idea/MarsCodeWorkspaceAppSettings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/appInsightsSettings.xml b/.idea/appInsightsSettings.xml
new file mode 100644
index 0000000..23b2e1f
--- /dev/null
+++ b/.idea/appInsightsSettings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml
index 774c808..0ce98c8 100644
--- a/.idea/deploymentTargetSelector.xml
+++ b/.idea/deploymentTargetSelector.xml
@@ -4,10 +4,10 @@
-
+
-
+
diff --git a/.idea/deviceManager.xml b/.idea/deviceManager.xml
new file mode 100644
index 0000000..91f9558
--- /dev/null
+++ b/.idea/deviceManager.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 988f6f3..7036943 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -18,7 +18,7 @@ android {
compileSdk = 35
defaultConfig {
- applicationId = "com.sw.platecabinet"
+ applicationId = "com.sw.take.plate"
minSdk = 24
targetSdk = 35
versionCode = 1
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 93b5a99..a50f7e4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -10,7 +10,8 @@
+ android:maxSdkVersion="32"
+ tools:ignore="ScopedStorage" />
@@ -21,9 +22,9 @@
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
- android:icon="@mipmap/ic_logo512"
+ android:icon="@drawable/logo_launcher"
android:label="@string/app_name"
- android:roundIcon="@mipmap/ic_logo512"
+ android:roundIcon="@drawable/logo_launcher"
android:supportsRtl="true"
android:theme="@style/Theme.SmartPlateCabinet"
android:networkSecurityConfig="@xml/network_security_config"
@@ -38,19 +39,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/app/src/main/java/com/sw/platecabinet/GlobalData.kt b/app/src/main/java/com/sw/platecabinet/GlobalData.kt
index 8a20c2c..b8cd872 100644
--- a/app/src/main/java/com/sw/platecabinet/GlobalData.kt
+++ b/app/src/main/java/com/sw/platecabinet/GlobalData.kt
@@ -33,7 +33,11 @@ object GlobalData {
/**
* 具体业务baseurl
*/
- var appBaseUrl: String = "https://dev.yixiong-tech.com:8081"
+ var appBaseUrl: String = ""
+ //测试环境
+ const val TEST_URL: String = "http://192.168.1.201:14801"
+ //生产环境
+ const val PRO_URL: String = "https://dev.yixiong-tech.com:8081"
/**
* 设备id
diff --git a/app/src/main/java/com/sw/platecabinet/MyApp.kt b/app/src/main/java/com/sw/platecabinet/MyApp.kt
index 7ec4ff5..fbb0705 100644
--- a/app/src/main/java/com/sw/platecabinet/MyApp.kt
+++ b/app/src/main/java/com/sw/platecabinet/MyApp.kt
@@ -1,9 +1,9 @@
package com.sw.platecabinet
+import android.annotation.SuppressLint
import android.util.Log
import com.sw.plate.App
import com.sw.plate.utils.AppUtil
-import com.sw.platecabinet.model.response.EquipmentUserInfo
import com.sw.platecabinet.utils.CrashHandler
import timber.log.Timber
@@ -11,7 +11,7 @@ class MyApp : App() {
companion object {
const val DEBUG: Boolean = true
var instance: MyApp? = null
- var plateList: List? = null
+// var plateList: List? = null
}
override fun onCreate() {
@@ -28,12 +28,15 @@ class MyApp : App() {
/**
* 初始化全局数据
*/
+ @SuppressLint("LogNotTimber")
private fun initGlobalData() {
- var deviceId = AppUtil.getUDID(this)
+ val deviceId = AppUtil.getUDID(this)
// deviceId = "be154831-3466-3ba2-a2ea-57652c919fed"
Log.d("MyApp", "initialize: deviceId=$deviceId")
GlobalData.deviceId = deviceId
+ GlobalData.appBaseUrl = if ("14d2dad5-7d33-3ced-8a59-f14cb1ef2d21" == deviceId) GlobalData.TEST_URL else GlobalData.PRO_URL
+
// TODO: 临时测试----------------
// if ("2987f0c5-5754-33e9-b00a-251db5e2e55f" == deviceId) {
// GlobalData.deviceId = "79814f20-f253-397c-9da7-8430ffa5ef00"
diff --git a/app/src/main/java/com/sw/platecabinet/activity/BaseActivity.kt b/app/src/main/java/com/sw/platecabinet/activity/BaseActivity.kt
index 6303a58..965a3c9 100644
--- a/app/src/main/java/com/sw/platecabinet/activity/BaseActivity.kt
+++ b/app/src/main/java/com/sw/platecabinet/activity/BaseActivity.kt
@@ -1,41 +1,34 @@
package com.sw.platecabinet.activity
import android.content.Context
+import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.text.TextUtils
-import android.util.Log
-import android.view.KeyEvent
import android.view.View
import android.view.WindowInsetsController
import android.view.WindowManager
import android.widget.TextView
import androidx.activity.enableEdgeToEdge
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.WindowCompat
import androidx.lifecycle.lifecycleScope
import androidx.viewbinding.ViewBinding
-import com.google.gson.Gson
import com.sw.inbound.utils.DateTimeUtils
import com.sw.plate.App
import com.sw.plate.utils.Base64
-import com.sw.plate.utils.ScanGunKeyEventHelper
import com.sw.plate.utils.arcface.facedb.FaceDatabase
import com.sw.plate.utils.arcface.facedb.entity.FaceEntity
import com.sw.plate.utils.arcface.viewmodel.RecognizeViewModel
-import com.sw.platecabinet.MyApp
import com.sw.platecabinet.R
import com.sw.platecabinet.databinding.ItemTitleTimeBinding
import com.sw.platecabinet.ext.clickWithCoroutines
-import com.sw.platecabinet.model.response.EquipmentUserInfo
import com.sw.platecabinet.model.response.UserFaceModel
import com.sw.platecabinet.utils.IntervalExecutor
-import com.sw.platecabinet.utils.PermissionHelper
-import com.sw.platecabinet.utils.PlateUtils
import com.sw.platecabinet.utils.SpTool
import com.sw.platecabinet.view.CustomLoadingDialog
-import com.sw.platecabinet.viewmodel.SettingViewModel
import com.sw.platecabinet.viewmodel.UserViewModel
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
@@ -52,15 +45,14 @@ abstract class BaseActivity : AppCompatActivity() {
protected lateinit var context: Context
private var timeJob: Job? = null
private var mDialogWaiting: CustomLoadingDialog? = null
- private val permissionHelpers = mutableMapOf()
- protected var keyEventHelper: ScanGunKeyEventHelper? = null
-
- // 管理员对应的viewmodel
- val settingViewModel by viewModels()
+// private val permissionHelpers = mutableMapOf()
+// protected var keyEventHelper: ScanGunKeyEventHelper? = null
// 用户对应的viewModel
protected val userViewModel by viewModels()
+ public val recognizeViewModel by viewModels()
+
private var startTime: Long = 0
override fun onCreate(savedInstanceState: Bundle?) {
@@ -81,62 +73,62 @@ abstract class BaseActivity : AppCompatActivity() {
updateTime()
registerDataChange()
initialize()
- registerKeyEvent()
+// registerKeyEvent()
val durationTime = System.currentTimeMillis() - startTime
Timber.d("启动时间:$durationTime")
}
- /**
- * 监听扫描枪扫描事件
- */
- protected fun registerKeyEvent() {
- keyEventHelper =
- ScanGunKeyEventHelper(context, object : ScanGunKeyEventHelper.OnScanSuccessListener {
- override fun onScanSuccess(barcode: String?) {
- Timber.d("onScanSuccess barcode = $barcode")
- if (barcode == null) return
- handleScanKeyInfo(barcode)
- }
- })
- }
+// /**
+// * 监听扫描枪扫描事件
+// */
+// protected fun registerKeyEvent() {
+// keyEventHelper =
+// ScanGunKeyEventHelper(context, object : ScanGunKeyEventHelper.OnScanSuccessListener {
+// override fun onScanSuccess(barcode: String?) {
+// Timber.d("onScanSuccess barcode = $barcode")
+// if (barcode == null) return
+// handleScanKeyInfo(barcode)
+// }
+// })
+// }
/**
* 处理扫描枪数据
*/
protected open fun handleScanKeyInfo(scanInfo: String) {
-// settingViewModel.findByPlateNumber(plateNumber = scanInfo)
- var plateNumber = scanInfo
- if (scanInfo.length > 6) {
- plateNumber = scanInfo.take(6)
- }
- Log.d("TAG", "handleScanKeyInfo: " + Gson().toJson(MyApp.plateList))
- if (MyApp.plateList == null) {
- initPlateList()
- }
- //柜子未关联该餐盘,直接找空位置放入盘子
- val item = MyApp.plateList?.firstOrNull { it.plateNumber.isNullOrBlank() }
- if (item == null) {
- //柜子已满
- MainActivity.start(context = context, pageType = PageType.PLATE_CABINET_FULL)
- return
- }
- //找到位置,放入餐盘,清除已有id和时间
- item.plateNumber = plateNumber
- item.faceId = null
- item.updateTime = null
- PlateUtils.open(this, item.equipmentBoxCode, true)
- SpTool.savePlateData(MyApp.plateList!!)
+//// settingViewModel.findByPlateNumber(plateNumber = scanInfo)
+// var plateNumber = scanInfo
+// if (scanInfo.length > 6) {
+// plateNumber = scanInfo.take(6)
+// }
+// Log.d("TAG", "handleScanKeyInfo: " + Gson().toJson(MyApp.plateList))
+// if (MyApp.plateList == null) {
+// initPlateList()
+// }
+// //柜子未关联该餐盘,直接找空位置放入盘子
+// val item = MyApp.plateList?.firstOrNull { it.plateNumber.isNullOrBlank() }
+// if (item == null) {
+// //柜子已满
+// MainActivity.start(context = context, pageType = PageType.PLATE_CABINET_FULL)
+// return
+// }
+// //找到位置,放入餐盘,清除已有id和时间
+// item.plateNumber = plateNumber
+// item.faceId = null
+// item.updateTime = null
+// PlateUtils.open(this, item.equipmentBoxCode, true)
+// SpTool.savePlateData(MyApp.plateList!!)
}
- override fun dispatchKeyEvent(event: KeyEvent): Boolean {
- if (keyEventHelper != null) {
- if (keyEventHelper!!.isScanGunEvent(event)) {
- keyEventHelper!!.analysisKeyEvent(event)
- return true
- }
- }
- return super.dispatchKeyEvent(event)
- }
+// override fun dispatchKeyEvent(event: KeyEvent): Boolean {
+// if (keyEventHelper != null) {
+// if (keyEventHelper!!.isScanGunEvent(event)) {
+// keyEventHelper!!.analysisKeyEvent(event)
+// return true
+// }
+// }
+// return super.dispatchKeyEvent(event)
+// }
fun updateTime() {
headerBinding?.let {
@@ -153,9 +145,8 @@ abstract class BaseActivity : AppCompatActivity() {
val scope = CoroutineScope(Dispatchers.Main)
timeJob = scope.launch {
DateTimeUtils.realTimeChineseDateFlow()
- .collect { (date, time) ->
- it.tvLeftDate.text = date
- it.tvRightTime.text = time
+ .collect { date ->
+ it.tvRightTime.text = date
}
}
}
@@ -172,36 +163,36 @@ abstract class BaseActivity : AppCompatActivity() {
* 右侧时间双击
*/
open fun onRightDoubleClick() {
- MainActivity.start(context, pageType = PageType.SETTING_LIST)
+ //MainActivity.start(context, pageType = PageType.SETTING_LIST)
}
- override fun onRequestPermissionsResult(
- requestCode: Int,
- permissions: Array,
- grantResults: IntArray
- ) {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults)
-
- val helper = permissionHelpers[requestCode]
- val allGranted = PermissionHelper.handlePermissionResult(
- this,
- requestCode,
- permissions,
- grantResults,
- permissionHelper = helper
- )
-
- if (allGranted) {
- permissionHelpers.remove(requestCode)
- }
- }
-
- /**
- * 注册PermissionHelper以便处理结果
- */
- fun registerPermissionHelper(helper: PermissionHelper) {
- permissionHelpers[helper.requestCode] = helper
- }
+// override fun onRequestPermissionsResult(
+// requestCode: Int,
+// permissions: Array,
+// grantResults: IntArray
+// ) {
+// super.onRequestPermissionsResult(requestCode, permissions, grantResults)
+//
+// val helper = permissionHelpers[requestCode]
+// val allGranted = PermissionHelper.handlePermissionResult(
+// this,
+// requestCode,
+// permissions,
+// grantResults,
+// permissionHelper = helper
+// )
+//
+// if (allGranted) {
+// permissionHelpers.remove(requestCode)
+// }
+// }
+//
+// /**
+// * 注册PermissionHelper以便处理结果
+// */
+// fun registerPermissionHelper(helper: PermissionHelper) {
+// permissionHelpers[helper.requestCode] = helper
+// }
override fun onResume() {
super.onResume()
@@ -290,125 +281,12 @@ abstract class BaseActivity : AppCompatActivity() {
*/
protected open fun registerDataChange() {
Timber.d("registerDataChange")
-// lifecycleScope.launch {
-// viewModel.showLoading.collect {
-// Timber.d("registerDataChange 用户 showLoading = $it")
-// if (it) {
-// showWaitingDialog("")
-// } else {
-// hideWaitingDialog()
-// }
-// }
-// }
-// lifecycleScope.launch {
-// viewModel.currentUserInfo.collect {
-// if (it == null) return@collect
-//// it.showBalanceNotEnoughDialog = true
-// handleLoginSuccess(it, false)
-// }
-// }
-// lifecycleScope.launch {
-// settingViewModel.showLoading.collect {
-// Timber.d("registerDataChange 管理员 showLoading = $it")
-// if (it) {
-// showWaitingDialog("")
-// } else {
-// hideWaitingDialog()
-// }
-// }
-// }
-// lifecycleScope.launch {
-// settingViewModel.searchUserInfo.collect {
-// Timber.d("registerDataChange 管理员 currentUserInfo = $it")
-// if (it == null) return@collect
-// handleLoginSuccess(it, true)
-// }
-// }
-// lifecycleScope.launch {
-// settingViewModel.equipmentList.collect {
-// loadEquipmentList(it)
-// }
-// }
}
-// private fun loadEquipmentList(items: List) {
-// if (items.isEmpty()) return
-// val unbindList = items.filter { !it.isBound() }
-// if (unbindList.isEmpty()) {
-// MainActivity.start(context = context, pageType = PageType.PLATE_CABINET_FULL)
-// } else {
-// val firstInfo = unbindList[0]
-// val currentUserInfo = settingViewModel.searchUserInfo.value
-// firstInfo.plateNumber = currentUserInfo?.plateNumber ?: ""
-// MainActivity.start(
-// context = context,
-// pageType = PageType.BIND_PLATE,
-// equipmentUserInfo = firstInfo
-// )
-// }
-// }
-
- /**
- * 处理登录成功操作
- * @param isAdmin true 管理员 执行绑盘此操作 false 用户,提示错误
- */
- open fun handleLoginSuccess(equipmentUserInfo: EquipmentUserInfo, isAdmin: Boolean) {
-// Timber.d("handleLoginSuccess isAdmin = $isAdmin")
-// equipmentUserInfo.isIntercept = false
-// val cardBalance = equipmentUserInfo.cardBalance ?: 0.toDouble()
-// val balanceIsNotEnough = cardBalance <= 0.toDouble()
-// if (balanceIsNotEnough && equipmentUserInfo.showBalanceNotEnoughDialog) {
-// //提示余额不足弹窗
-// equipmentUserInfo.isIntercept = true
-// BalanceNotEnoughDialog(this).show()
-// return
-// }
-// viewModel.resetUserInfo()
-//// if (equipmentUserInfo.isOtherEquipment()) {
-//// MainActivity.start(
-//// context,
-//// pageType = PageType.PLATE_TIP,
-//// equipmentUserInfo = equipmentUserInfo,
-//// isAdmin
-//// )
-//// return
-//// }
-// if (equipmentUserInfo.equipmentBoxCode?.isNotEmpty() == true) {
-// SerialApi.openPlate(
-// equipmentUserInfo.equipmentBoxCode!!.toInt(),
-// object : SerialPortManager.SendCallback {
-// override fun onSuccess() {
-// MainActivity.start(
-// context,
-// pageType = PageType.PLATE_TIP,
-// isAdmin = isAdmin
-// )
-// }
-//
-// override fun onFail(e: Exception?) {
-// ToastUtils.showToast("柜门打开失败")
-// }
-// })
-// } else {
-// if (isAdmin) {
-// settingViewModel.getEquipmentList {
-// loadEquipmentList(it)
-// }
-// } else {
-// Timber.d("无餐盘信息")
-// MainActivity.start(
-// context,
-// pageType = PageType.PLATE_TIP,
-// equipmentUserInfo = equipmentUserInfo,
-// isAdmin = isAdmin
-// )
-// }
-// }
- }
override fun onDestroy() {
timeJob?.cancel()
- keyEventHelper?.onDestroy()
+// keyEventHelper?.onDestroy()
super.onDestroy()
}
@@ -430,35 +308,19 @@ abstract class BaseActivity : AppCompatActivity() {
private var faceTimestamp = 0L
//private var taskPageNo = 1
- private fun getFaceIncrementList(pageNo: Int = 1, action:(List)-> Unit) {
+ private fun getFaceIncrementList(pageNo: Int = 1, action: (List) -> Unit) {
val timestamp = SpTool.lastFaceTimestamp
-// if (timestamp == 0L) {
-// return
-// }
- settingViewModel.getFaceIncrementList(
+ userViewModel.getFaceIncrementList(
pageNo = pageNo,
timestamp = timestamp
) { list ->
runOnUiThread {
if (pageNo == 1 && list.isEmpty()) {
- //未查询到增量数据
-// Thread{
-// val faceDao = FaceDatabase.getInstance(this).faceDao()
-// if (faceDao.getFaceCount() == 0) {
-// FaceEntity("-1", null, byteArrayOf(-1)).also { it.userType = "-1" }
-// }
-// }.start()
return@runOnUiThread
}
updateFaceData(list)
val userIdList = list.map { it.userId }
action(userIdList)
- //if (list.size >= settingViewModel.PAGE_SIZE) {
- // faceTimestamp = list.last().faceUpdateTimestamp ?: 0
- // taskPageNo++
- // getFaceIncrementList(taskPageNo)
- // return@runOnUiThread
- //}
if (list.isNotEmpty()) {
faceTimestamp = list.last().faceUpdateTimestamp ?: 0
}
@@ -467,7 +329,6 @@ abstract class BaseActivity : AppCompatActivity() {
}
}
- public val recognizeViewModel by viewModels()
private fun updateFaceData(list: List) {
lifecycleScope.launch(Dispatchers.IO) {
val faceList = mutableListOf()
@@ -477,13 +338,11 @@ abstract class BaseActivity : AppCompatActivity() {
if (model.faceDeleted == true) {
//删除数据
faceDao.deleteFaceById(model.userId)
-// if (faceDao.getFaceCount() == 0) {
-// FaceEntity("-1", null, byteArrayOf(-1)).also { it.userType = "-1" }
-// }
} else {
// 获取该用户所有已存特征,判断当前特征是否已存在
val existList = faceDao.queryAllByUserName(model.userId)
- val featureMatches = existList.map { Base64.encode(it.featureData) == model.faceFeatureStr }
+ val featureMatches =
+ existList.map { Base64.encode(it.featureData) == model.faceFeatureStr }
Timber.d("userId=${model.userId}, 已存记录数=${existList.size}, 各条特征是否与服务器一致=$featureMatches")
val alreadyExists = featureMatches.any { it }
if (!alreadyExists) {
@@ -506,7 +365,7 @@ abstract class BaseActivity : AppCompatActivity() {
}
}
- private fun getNewFaceEntity(model: UserFaceModel) : FaceEntity {
+ private fun getNewFaceEntity(model: UserFaceModel): FaceEntity {
return FaceEntity(
model.userId,
null,
@@ -518,29 +377,41 @@ abstract class BaseActivity : AppCompatActivity() {
}
}
- fun initPlateList() {
-// SpTool.putString(SpTool.PLATE_BOX_DATA, "")
-// var list = SpTool.getPlateData()
- val list: MutableList = mutableListOf()
- repeat(22) { index ->
- list.add(
- EquipmentUserInfo(equipmentBoxCode = "${index + 1}")
- )
- }
- MyApp.plateList = list
- }
-
fun clearAllFace(block: () -> Unit) {
Thread {
val faceDao = FaceDatabase.getInstance(App.getContext()).faceDao()
faceDao.deleteAll()
faceDao.resetId()
-// faceDao.insert(
-// FaceEntity("-1", null, byteArrayOf(-1)).also { it.userType = "-1" }
-// )
recognizeViewModel.refreshFaceList()
runOnUiThread { block() }
}.start()
}
+ private var permissionCallback: ((isGranted: Boolean) -> Unit)? = null
+ private var activityCallback: ((intent: Intent?) -> Unit)? = null
+
+ fun requestPermission(permission: String, callback: (isGranted: Boolean) -> Unit) {
+ this.permissionCallback = callback
+ requestPermissionLauncher.launch(permission)
+ }
+
+ // 权限请求回调
+ val requestPermissionLauncher = registerForActivityResult(
+ ActivityResultContracts.RequestPermission()
+ ) { isGranted ->
+ permissionCallback?.invoke(isGranted)
+ }
+
+ fun startActivity(intent: Intent, callback: (Intent?) -> Unit) {
+ this.activityCallback = callback
+ startActivityLauncher.launch(intent)
+ }
+
+ // activity页面返回的回调
+ private val startActivityLauncher = registerForActivityResult(
+ ActivityResultContracts.StartActivityForResult()
+ ) {
+ activityCallback?.invoke(it.data)
+ }
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/sw/platecabinet/activity/DeviceInitActivity.kt b/app/src/main/java/com/sw/platecabinet/activity/DeviceInitActivity.kt
index fc50943..176367a 100644
--- a/app/src/main/java/com/sw/platecabinet/activity/DeviceInitActivity.kt
+++ b/app/src/main/java/com/sw/platecabinet/activity/DeviceInitActivity.kt
@@ -26,26 +26,6 @@ class DeviceInitActivity : BaseActivity() {
}
override fun initialize() {
-// val isSuccess = deviceViewModel.checkEquipmentInfo()
-// if (isSuccess) {
-// goLoginActivity()
-// return
-// }
-// binding.ivQrCode.setImageBitmap(
-// QRCodeUtil.generateQRCode(
-// content = GlobalData.deviceId,
-// size = 200
-// )
-// )
-// binding.btnInit.setOnClickListener {
-// deviceViewModel.getDeviceToken()
-// }
-// binding.btnInit.gone()
-// binding.ivQrCode.invisible()
-// binding.root.postDelayed({
-// goLoginActivity()
-// }, 1000)
- initPlateList()
showWaitingDialog("加载中……")
lifecycleScope.launch {
withContext(Dispatchers.Default) {
diff --git a/app/src/main/java/com/sw/platecabinet/activity/FunActivity.kt b/app/src/main/java/com/sw/platecabinet/activity/FunActivity.kt
index 94d479a..58fbe54 100644
--- a/app/src/main/java/com/sw/platecabinet/activity/FunActivity.kt
+++ b/app/src/main/java/com/sw/platecabinet/activity/FunActivity.kt
@@ -1,152 +1,152 @@
-package com.sw.platecabinet.activity
-
-import androidx.activity.viewModels
-import androidx.lifecycle.lifecycleScope
-import com.sw.plate.utils.Base64
-import com.sw.plate.utils.ToastUtils
-import com.sw.plate.utils.arcface.facedb.FaceDatabase
-import com.sw.platecabinet.MyApp
-import com.sw.platecabinet.databinding.ActivityFunBinding
-import com.sw.platecabinet.databinding.ItemTitleTimeBinding
-import com.sw.platecabinet.dialog.CustomDialog
-import com.sw.platecabinet.ext.clickWithDebounce
-import com.sw.platecabinet.utils.PlateUtils
-import com.sw.platecabinet.utils.SpTool
-import com.sw.platecabinet.viewmodel.UserViewModel
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.delay
-import kotlinx.coroutines.launch
-import kotlinx.coroutines.withContext
-import kotlin.getValue
-
-class FunActivity : BaseActivity() {
-
- override fun inflateTitleBinding(): ItemTitleTimeBinding? {
- return binding.includeHeader
- }
-
- override fun inflateViewBinding() = ActivityFunBinding.inflate(layoutInflater)
-
- override fun initialize() {
- binding.btnClearFace.clickWithDebounce { clearFace() }
- binding.btnClearAndGetAll.clickWithDebounce { clearFaceAndGetAll() }
- binding.btnOpenAllPlate.clickWithDebounce {
- lifecycleScope.launch {
- openAllPlate()
- }
- }
- binding.btnPutPlate.clickWithDebounce { putPlate() }
-
- queryUserCount()
-
- binding.btnTestFeature.clickWithDebounce {
- testFeature()
- }
- }
- private fun testFeature() {
- userViewModel.getUserFace(1, 1) {list ->
- lifecycleScope.launch {
- withContext(Dispatchers.IO) {
- if (list.isEmpty()) return@withContext
- val userId = list[0].userId
- val base64Feature = list[0].faceFeatureStr
- val faceDao = FaceDatabase.getInstance(this@FunActivity).faceDao()
- val entityList = faceDao.queryAllByUserName(userId)
- val resultList = entityList.map { base64Feature == Base64.encode(it.featureData) }
- val isEqual = resultList.any { true }
- ToastUtils.showToast("比较结果:$isEqual")
- }
- }
- }
- }
-
- private fun clearFace() {
- loadClearDialog("请确认是否清除本地所有数据?") {
- showWaitingDialog("加载中……")
- clearAllFace {
- binding.root.postDelayed(
- {
- hideWaitingDialog()
- ToastUtils.showToast("已清除")
- queryUserCount()
- }, 500
- )
- }
- }
- }
-
- private fun clearFaceAndGetAll() {
- loadClearDialog("请确认是否清除本地所有数据,并重新拉取全量人脸数据?") {
- showWaitingDialog("加载中……")
- clearAllFace {
- userViewModel.getUserFaceCache { status, msg ->
- hideWaitingDialog()
- ToastUtils.showToast(
- if (status) "请求成功,$msg" else "请求失败,$msg"
- )
- queryUserCount()
- }
- }
- }
- }
-
- private suspend fun openAllPlate() {
- MyApp.plateList?.let { plateList ->
- val boxCodeList = plateList.filter { it.equipmentBoxCode.isNullOrBlank().not() }
- .map { it.equipmentBoxCode }
- boxCodeList.forEach { boxCode ->
- withContext(Dispatchers.Default) {
- PlateUtils.openDirect(boxCode)
- delay(500)
- }
- }
- }
- }
-
- private fun putPlate() {
- showWaitingDialog("加载中……")
- MyApp.plateList?.forEachIndexed { index, item ->
- val num = index + 1
- val realNum = if (num < 10) "0${num}" else "${num}"
- item.plateNumber = realNum + realNum + realNum
- item.faceId = null
- item.updateTime = null
- }
- SpTool.savePlateData(MyApp.plateList!!)
- binding.root.postDelayed({
- hideWaitingDialog()
- ToastUtils.showToast("已完成")
- }, 1000)
- }
-
- /**
- * 加载清除数据弹窗
- */
- private fun loadClearDialog(msg: String, callback: () -> Unit) {
- CustomDialog(
- activity = this,
- content = msg,
- onConfirm = {
- callback()
- }).show()
- }
-
- override fun onLeftDoubleClick() {
- finish()
- }
-
- override fun onRightDoubleClick() {
-
- }
-
- private fun queryUserCount() {
- lifecycleScope.launch {
- val faceDao = FaceDatabase.getInstance(this@FunActivity).faceDao()
- val memberUserCount = withContext(Dispatchers.IO) { faceDao.getFaceCount("1") }
- val tempUserCount = withContext(Dispatchers.IO) { faceDao.getFaceCount("2") }
- binding.tvMemberUserCount.text = "会员用户:${memberUserCount}人"
- binding.tvTempUserCount.text = "临时用户:${tempUserCount}人"
- }
- }
-
-}
\ No newline at end of file
+//package com.sw.platecabinet.activity
+//
+//import androidx.activity.viewModels
+//import androidx.lifecycle.lifecycleScope
+//import com.sw.plate.utils.Base64
+//import com.sw.plate.utils.ToastUtils
+//import com.sw.plate.utils.arcface.facedb.FaceDatabase
+//import com.sw.platecabinet.MyApp
+//import com.sw.platecabinet.databinding.ActivityFunBinding
+//import com.sw.platecabinet.databinding.ItemTitleTimeBinding
+//import com.sw.platecabinet.dialog.CustomDialog
+//import com.sw.platecabinet.ext.clickWithDebounce
+//import com.sw.platecabinet.utils.PlateUtils
+//import com.sw.platecabinet.utils.SpTool
+//import com.sw.platecabinet.viewmodel.UserViewModel
+//import kotlinx.coroutines.Dispatchers
+//import kotlinx.coroutines.delay
+//import kotlinx.coroutines.launch
+//import kotlinx.coroutines.withContext
+//import kotlin.getValue
+//
+//class FunActivity : BaseActivity() {
+//
+// override fun inflateTitleBinding(): ItemTitleTimeBinding? {
+// return binding.includeHeader
+// }
+//
+// override fun inflateViewBinding() = ActivityFunBinding.inflate(layoutInflater)
+//
+// override fun initialize() {
+// binding.btnClearFace.clickWithDebounce { clearFace() }
+// binding.btnClearAndGetAll.clickWithDebounce { clearFaceAndGetAll() }
+// binding.btnOpenAllPlate.clickWithDebounce {
+// lifecycleScope.launch {
+// openAllPlate()
+// }
+// }
+// binding.btnPutPlate.clickWithDebounce { putPlate() }
+//
+// queryUserCount()
+//
+// binding.btnTestFeature.clickWithDebounce {
+// testFeature()
+// }
+// }
+// private fun testFeature() {
+// userViewModel.getUserFace(1, 1) {list ->
+// lifecycleScope.launch {
+// withContext(Dispatchers.IO) {
+// if (list.isEmpty()) return@withContext
+// val userId = list[0].userId
+// val base64Feature = list[0].faceFeatureStr
+// val faceDao = FaceDatabase.getInstance(this@FunActivity).faceDao()
+// val entityList = faceDao.queryAllByUserName(userId)
+// val resultList = entityList.map { base64Feature == Base64.encode(it.featureData) }
+// val isEqual = resultList.any { true }
+// ToastUtils.showToast("比较结果:$isEqual")
+// }
+// }
+// }
+// }
+//
+// private fun clearFace() {
+// loadClearDialog("请确认是否清除本地所有数据?") {
+// showWaitingDialog("加载中……")
+// clearAllFace {
+// binding.root.postDelayed(
+// {
+// hideWaitingDialog()
+// ToastUtils.showToast("已清除")
+// queryUserCount()
+// }, 500
+// )
+// }
+// }
+// }
+//
+// private fun clearFaceAndGetAll() {
+// loadClearDialog("请确认是否清除本地所有数据,并重新拉取全量人脸数据?") {
+// showWaitingDialog("加载中……")
+// clearAllFace {
+// userViewModel.getUserFaceCache { status, msg ->
+// hideWaitingDialog()
+// ToastUtils.showToast(
+// if (status) "请求成功,$msg" else "请求失败,$msg"
+// )
+// queryUserCount()
+// }
+// }
+// }
+// }
+//
+// private suspend fun openAllPlate() {
+// MyApp.plateList?.let { plateList ->
+// val boxCodeList = plateList.filter { it.equipmentBoxCode.isNullOrBlank().not() }
+// .map { it.equipmentBoxCode }
+// boxCodeList.forEach { boxCode ->
+// withContext(Dispatchers.Default) {
+// PlateUtils.openDirect(boxCode)
+// delay(500)
+// }
+// }
+// }
+// }
+//
+// private fun putPlate() {
+// showWaitingDialog("加载中……")
+// MyApp.plateList?.forEachIndexed { index, item ->
+// val num = index + 1
+// val realNum = if (num < 10) "0${num}" else "${num}"
+// item.plateNumber = realNum + realNum + realNum
+// item.faceId = null
+// item.updateTime = null
+// }
+// SpTool.savePlateData(MyApp.plateList!!)
+// binding.root.postDelayed({
+// hideWaitingDialog()
+// ToastUtils.showToast("已完成")
+// }, 1000)
+// }
+//
+// /**
+// * 加载清除数据弹窗
+// */
+// private fun loadClearDialog(msg: String, callback: () -> Unit) {
+// CustomDialog(
+// activity = this,
+// content = msg,
+// onConfirm = {
+// callback()
+// }).show()
+// }
+//
+// override fun onLeftDoubleClick() {
+// finish()
+// }
+//
+// override fun onRightDoubleClick() {
+//
+// }
+//
+// private fun queryUserCount() {
+// lifecycleScope.launch {
+// val faceDao = FaceDatabase.getInstance(this@FunActivity).faceDao()
+// val memberUserCount = withContext(Dispatchers.IO) { faceDao.getFaceCount("1") }
+// val tempUserCount = withContext(Dispatchers.IO) { faceDao.getFaceCount("2") }
+// binding.tvMemberUserCount.text = "会员用户:${memberUserCount}人"
+// binding.tvTempUserCount.text = "临时用户:${tempUserCount}人"
+// }
+// }
+//
+//}
\ No newline at end of file
diff --git a/app/src/main/java/com/sw/platecabinet/activity/LoginByFaceActivity.kt b/app/src/main/java/com/sw/platecabinet/activity/LoginByFaceActivity.kt
index 7dbc21d..bae86fd 100644
--- a/app/src/main/java/com/sw/platecabinet/activity/LoginByFaceActivity.kt
+++ b/app/src/main/java/com/sw/platecabinet/activity/LoginByFaceActivity.kt
@@ -7,12 +7,15 @@ import android.content.Intent
import android.graphics.Bitmap
import android.graphics.Point
import android.hardware.Camera
+import android.net.Uri
import android.os.Build
-import android.util.DisplayMetrics
+import android.provider.Settings
import android.view.View
import android.view.ViewGroup
import android.view.ViewTreeObserver
+import android.widget.FrameLayout
import androidx.annotation.RequiresApi
+import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope
import com.arcsoft.face.ErrorInfo
@@ -39,24 +42,21 @@ import com.sw.plate.utils.arcface.facedb.entity.FaceEntity
import com.sw.plate.utils.arcface.model.UserFaceInfo
import com.sw.plate.utils.arcface.viewmodel.RecognizeViewModel
import com.sw.plate.utils.arcface.viewmodel.RecognizeViewModel.REGISTER_STATUS_READY
-import com.sw.platecabinet.MyApp
import com.sw.platecabinet.R
import com.sw.platecabinet.databinding.ActivityLoginFaceBinding
import com.sw.platecabinet.databinding.ItemTitleTimeBinding
+import com.sw.platecabinet.dialog.CustomDialog
import com.sw.platecabinet.ext.clickWithDebounce
import com.sw.platecabinet.ext.gone
import com.sw.platecabinet.ext.visible
-import com.sw.platecabinet.model.response.EquipmentUserInfo
import com.sw.platecabinet.model.response.UserFaceModel
import com.sw.platecabinet.utils.BitmapSaver
import com.sw.platecabinet.utils.CountDownUtil
import com.sw.platecabinet.utils.Debouncer
import com.sw.platecabinet.utils.LogFileUtil
-import com.sw.platecabinet.utils.PermissionHelper
import com.sw.platecabinet.utils.PlateUtils
import com.sw.platecabinet.utils.RegisterCallbackHandler
import com.sw.platecabinet.utils.SoundPoolUtil
-import com.sw.platecabinet.utils.SpTool
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
@@ -73,13 +73,6 @@ import java.util.concurrent.atomic.AtomicBoolean
class LoginByFaceActivity : BaseActivity(),
ViewTreeObserver.OnGlobalLayoutListener {
- private val CAMERA_PERMISSION_REQUEST_CODE = 100
- private val REQUIRED_PERMISSIONS: Array = arrayOf(
- Manifest.permission.CAMERA,
- Manifest.permission.WRITE_EXTERNAL_STORAGE,
- Manifest.permission.READ_EXTERNAL_STORAGE
- )
-
override fun inflateViewBinding(): ActivityLoginFaceBinding {
return ActivityLoginFaceBinding.inflate(layoutInflater)
}
@@ -132,22 +125,53 @@ class LoginByFaceActivity : BaseActivity(),
resetRecognizeState()
}
}
-
+ // 检查相机权限
private fun checkCameraPermission() {
Timber.i("checkCameraPermission")
- val permissionHelper =
- PermissionHelper.with(this, REQUIRED_PERMISSIONS, CAMERA_PERMISSION_REQUEST_CODE)
- .onGranted {
- loadLogInfo("checkCameraPermission 权限已允许")
- // 权限已授予
- recognizeViewModel.init()
- initRgbCamera()
- resumeCamera()
- }
- .build()
- registerPermissionHelper(permissionHelper)
- permissionHelper.checkAndRequest()
+ val hasCameraPermission = ContextCompat.checkSelfPermission(
+ this,
+ Manifest.permission.CAMERA
+ ) == android.content.pm.PackageManager.PERMISSION_GRANTED
+
+ if (hasCameraPermission) {
+ // 权限已授予
+ loadLogInfo("checkCameraPermission 权限已允许")
+ recognizeViewModel.init()
+ initRgbCamera()
+ resumeCamera()
+ } else {
+ // 无权限,请求相机权限
+ requestCameraPermission()
+ }
+ }
+
+ private fun requestCameraPermission() {
+ requestPermission(Manifest.permission.CAMERA) { isGranted ->
+ if (isGranted) {
+ // 权限已授予
+ loadLogInfo("checkCameraPermission 权限已允许")
+ recognizeViewModel.init()
+ initRgbCamera()
+ resumeCamera()
+ } else {
+ // 权限被拒绝
+ loadLogInfo("checkCameraPermission 权限被拒绝")
+ CustomDialog(
+ activity = this,
+ content = "请在设置中开启相机权限",
+ onConfirm = {
+ val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply {
+ data = Uri.fromParts("package", context.packageName, null)
+ }
+ startActivity(intent) {
+ checkCameraPermission()
+ }
+ }, onCancel = {
+
+ }).show()
+ }
+ }
}
@Subscribe(threadMode = ThreadMode.MAIN)
@@ -319,11 +343,7 @@ class LoginByFaceActivity : BaseActivity(),
loadLogInfo("collectFace,recognizeUserId 识别成功但 userId 为空,忽略")
return
}
-
- loadLogInfo(
- "collectFace,recognizeUserId 识别成功 userId=$userId, time=${DateTimeUtils.getDateTimeString()}"
- )
-
+ loadLogInfo("collectFace,recognizeUserId 识别成功 userId=$userId, time=${DateTimeUtils.getDateTimeString()}")
// 成功后必须重置状态
retryFailCount = 0
isCollecting.set(false)
@@ -363,57 +383,41 @@ class LoginByFaceActivity : BaseActivity(),
resumeCamera()
}
- /**
- * 查询餐盘数据
- */
- private fun getPlateData(block: (List) -> Unit) {
- MyApp.plateList?.let {
- block(it)
- }
- }
-
- private var currentPlateInfo: EquipmentUserInfo? = null
private var plateEnable = false
+ /**
+ * 检测有无餐盘
+ */
+ private fun checkHasPlate(block: (Boolean) -> Unit) {
+ showWaitingDialog("检测餐盘中,请稍候……")
+ binding.root.postDelayed({
+ hideWaitingDialog()
+ block(true)
+ }, 1500)
+ }
+
/**
* 打开餐盘柜
*/
private fun openPlate(userId: String?) {
if (plateEnable.not()) return
loadLogInfo("collectFace,openPlate: userId=$userId")
- getPlateData { items ->
- loadLogInfo("collectFace,openPlate: items:${Gson().toJson(items)}")
- // 未查询到当前用户,查询第一个未绑定的餐盘
- val item = items.firstOrNull { it.plateNumber.isNullOrEmpty().not() }
- loadLogInfo("collectFace,openPlate: item2:${item}")
- if (item == null) {
- //暂无餐盘
+ checkHasPlate { hasPlate ->
+ if (hasPlate.not()) {
+ //暂无餐盘,请联系管理人员
loadLogInfo("collectFace,openPlate: 暂无餐盘,请联系管理人员,isCollectFace=$isCollectFace")
- //ToastUtils.showToast("暂无餐盘,请联系管理人员")
SoundPoolUtil.getInstance().play(NO_PLATE_REMIND, 0)
goInitActivity()
- return@getPlateData
+ return@checkHasPlate
}
-// if (tempUserId != currentUserId) {
+ //取餐盘
SoundPoolUtil.getInstance().play(RECOGNIZE_SUCCESS, 0)
-// } else {
-// SoundPoolUtil.getInstance().play(COLLECT_SUCCESS, 0)
-// }
- loadLogInfo("collectFace,openPlate: item3:${item}")
- item.faceId = userId
- item.updateTime = DateTimeUtils.getDateTimeString()
- item.plateNumber = null
- plateEnable = false
- openDebouncer.debounce {
- //打开柜子
- PlateUtils.open(this, item.equipmentBoxCode, false) {
- goInitActivity()
- }
- recognizeCountDownUtil.cancelCountDown()
+ //调用发盘方法
+ PlateUtils.open(this, "", false) {
+ goInitActivity()
}
- currentPlateInfo = item
- MyApp.plateList = items
- SpTool.savePlateData(items)
+ plateEnable = false
+ recognizeCountDownUtil.cancelCountDown()
}
}
@@ -457,43 +461,45 @@ class LoginByFaceActivity : BaseActivity(),
displayOrientation: Int,
scale: Float
): ViewGroup.LayoutParams {
- val layoutParams = previewView.layoutParams
- val measuredWidth = previewView.measuredWidth
- val measuredHeight = previewView.measuredHeight
- var ratio = (previewSize.height.toFloat()) / previewSize.width.toFloat()
- if (ratio > 1) {
- ratio = 1 / ratio
- }
- if (displayOrientation % 180 == 0) {
- layoutParams.width = measuredWidth
- layoutParams.height = (measuredWidth * ratio).toInt()
- } else {
- layoutParams.height = measuredHeight
- layoutParams.width = (measuredHeight * ratio).toInt()
- }
- if (scale < 1f) {
- val rgbParam = rgbPreview.layoutParams
- layoutParams.width = (rgbParam.width * scale).toInt()
- layoutParams.height = (rgbParam.height * scale).toInt()
- } else {
- layoutParams.width = (layoutParams.width * scale).toInt()
- layoutParams.height = (layoutParams.height * scale).toInt()
- }
-
- val metrics = DisplayMetrics()
- windowManager.defaultDisplay.getMetrics(metrics)
-
- if (layoutParams.width >= metrics.widthPixels) {
- val viewRatio = layoutParams.width / (metrics.widthPixels.toFloat())
- layoutParams.width = (layoutParams.width / viewRatio).toInt()
- layoutParams.height = (layoutParams.height / viewRatio).toInt()
- }
- if (layoutParams.height >= metrics.heightPixels) {
- val viewRatio = layoutParams.height / (metrics.heightPixels.toFloat())
- layoutParams.width = (layoutParams.width / viewRatio).toInt()
- layoutParams.height = (layoutParams.height / viewRatio).toInt()
- }
+// val layoutParams = previewView.layoutParams
+// val measuredWidth = previewView.measuredWidth
+// val measuredHeight = previewView.measuredHeight
+// var ratio = (previewSize.height.toFloat()) / previewSize.width.toFloat()
+// if (ratio > 1) {
+// ratio = 1 / ratio
+// }
+// if (displayOrientation % 180 == 0) {
+// layoutParams.width = measuredWidth
+// layoutParams.height = (measuredWidth * ratio).toInt()
+// } else {
+// layoutParams.height = measuredHeight
+// layoutParams.width = (measuredHeight * ratio).toInt()
+// }
+// if (scale < 1f) {
+// val rgbParam = rgbPreview.layoutParams
+// layoutParams.width = (rgbParam.width * scale).toInt()
+// layoutParams.height = (rgbParam.height * scale).toInt()
+// } else {
+// layoutParams.width = (layoutParams.width * scale).toInt()
+// layoutParams.height = (layoutParams.height * scale).toInt()
+// }
+//
+// val metrics = DisplayMetrics()
+// windowManager.defaultDisplay.getMetrics(metrics)
+//
+// if (layoutParams.width >= metrics.widthPixels) {
+// val viewRatio = layoutParams.width / (metrics.widthPixels.toFloat())
+// layoutParams.width = (layoutParams.width / viewRatio).toInt()
+// layoutParams.height = (layoutParams.height / viewRatio).toInt()
+// }
+// if (layoutParams.height >= metrics.heightPixels) {
+// val viewRatio = layoutParams.height / (metrics.heightPixels.toFloat())
+// layoutParams.width = (layoutParams.width / viewRatio).toInt()
+// layoutParams.height = (layoutParams.height / viewRatio).toInt()
+// }
+ val layoutParams = FrameLayout.LayoutParams(776, 582);
+ Timber.d("adjustPreviewViewSize,${layoutParams.width},${layoutParams.height}}")
previewView.setLayoutParams(layoutParams)
faceRectView.setLayoutParams(layoutParams)
return layoutParams
@@ -534,11 +540,11 @@ class LoginByFaceActivity : BaseActivity(),
previewSizeRgb.height,
layoutParams.width,
layoutParams.height,
- 90,
+ 0,
cameraId,
isMirror,
- true,
- true
+ false,
+ false
)
recognizeViewModel.onRgbCameraOpened(camera)
@@ -557,7 +563,6 @@ class LoginByFaceActivity : BaseActivity(),
drawPreviewInfo(facePreviewInfoList)
}
if (facePreviewInfoList.isNullOrEmpty()) {
- currentPlateInfo = null
currentUserId = null
userFaceInfo = null
binding.btnCollect.tag = ""
@@ -601,6 +606,7 @@ class LoginByFaceActivity : BaseActivity(),
.additionalRotation(0) // 角度
.previewSize(recognizeViewModel.loadPreviewSize())
.specificCameraId(previewConfig.rgbCameraId)
+// .isMirror(true)
.isMirror(true)
.previewOn(binding.dualCameraTexturePreviewRgb)
.cameraListener(cameraListener)
@@ -821,7 +827,7 @@ class LoginByFaceActivity : BaseActivity(),
}
private fun addUserFace(faceData: String, imageFile: File) {
- settingViewModel.addUserFace(faceData, imageFile) { status, faceModel ->
+ userViewModel.addUserFace(faceData, imageFile) { status, faceModel ->
loadLogInfo("collectFace,saveFaceInfo: ----------12,人脸数据发送完成时间:${DateTimeUtils.getDateTimeString()},结果:$status-----------")
if (status.not()) {
ToastUtils.showToast("新增数据失败")
diff --git a/app/src/main/java/com/sw/platecabinet/activity/LoginByFaceActivityBak.kt b/app/src/main/java/com/sw/platecabinet/activity/LoginByFaceActivityBak.kt
deleted file mode 100644
index 55ee620..0000000
--- a/app/src/main/java/com/sw/platecabinet/activity/LoginByFaceActivityBak.kt
+++ /dev/null
@@ -1,946 +0,0 @@
-//package com.sw.platecabinet.activity
-//
-//import android.Manifest
-//import android.content.Intent
-//import android.graphics.Bitmap
-//import android.graphics.Point
-//import android.hardware.Camera
-//import android.os.Build
-//import android.os.CountDownTimer
-//import android.util.DisplayMetrics
-//import android.view.View
-//import android.view.ViewGroup
-//import android.view.ViewTreeObserver
-//import androidx.annotation.RequiresApi
-//import androidx.lifecycle.Observer
-//import com.arcsoft.face.ErrorInfo
-//import com.google.gson.Gson
-//import com.sw.inbound.utils.DateTimeUtils
-//import com.sw.plate.utils.Base64
-//import com.sw.plate.utils.ToastUtils
-//import com.sw.plate.utils.arcface.ConfigUtil
-//import com.sw.plate.utils.arcface.ErrorCodeUtil
-//import com.sw.plate.utils.arcface.FaceRectTransformer
-//import com.sw.plate.utils.arcface.FaceRectView
-//import com.sw.plate.utils.arcface.FaceRectView.DrawInfo
-//import com.sw.plate.utils.arcface.PreviewConfig
-//import com.sw.plate.utils.arcface.camera.CameraListener
-//import com.sw.plate.utils.arcface.camera.DualCameraHelper
-//import com.sw.plate.utils.arcface.face.constants.LivenessType
-//import com.sw.plate.utils.arcface.face.model.CompareResult
-//import com.sw.plate.utils.arcface.face.model.FacePreviewInfo
-//import com.sw.plate.utils.arcface.face.model.RecognizeConfiguration
-//import com.sw.plate.utils.arcface.facedb.FaceDatabase
-//import com.sw.plate.utils.arcface.facedb.entity.FaceEntity
-//import com.sw.plate.utils.arcface.model.UserFaceInfo
-//import com.sw.plate.utils.arcface.viewmodel.RecognizeViewModel
-//import com.sw.plate.utils.arcface.viewmodel.RecognizeViewModel.REGISTER_STATUS_READY
-//import com.sw.platecabinet.MyApp
-//import com.sw.platecabinet.R
-//import com.sw.platecabinet.databinding.ActivityLoginFaceBinding
-//import com.sw.platecabinet.databinding.ItemTitleTimeBinding
-//import com.sw.platecabinet.model.response.EquipmentUserInfo
-//import com.sw.platecabinet.model.response.UserFaceModel
-//import com.sw.platecabinet.utils.BitmapSaver
-//import com.sw.platecabinet.utils.Debouncer
-//import com.sw.platecabinet.utils.LogFileUtil
-//import com.sw.platecabinet.utils.PermissionHelper
-//import com.sw.platecabinet.utils.PlateUtils
-//import com.sw.platecabinet.utils.RegisterCallbackHandler
-//import com.sw.platecabinet.utils.SoundPoolUtil
-//import com.sw.platecabinet.utils.SpTool
-//import org.greenrobot.eventbus.EventBus
-//import org.greenrobot.eventbus.Subscribe
-//import org.greenrobot.eventbus.ThreadMode
-//import timber.log.Timber
-//import java.io.File
-//import java.util.concurrent.atomic.AtomicBoolean
-//
-///**
-// * 人脸识别
-// */
-//class LoginByFaceActivityBak : BaseActivity(),
-// ViewTreeObserver.OnGlobalLayoutListener {
-// // private val recognizeViewModel by viewModels()
-// private var countDownTimer: CountDownTimer? = null
-//
-// private val CAMERA_PERMISSION_REQUEST_CODE = 100
-// private val REQUIRED_PERMISSIONS: Array = arrayOf(
-// Manifest.permission.CAMERA,
-// Manifest.permission.WRITE_EXTERNAL_STORAGE,
-// Manifest.permission.READ_EXTERNAL_STORAGE
-// )
-//
-// override fun inflateViewBinding(): ActivityLoginFaceBinding {
-// return ActivityLoginFaceBinding.inflate(layoutInflater)
-// }
-//
-// override fun inflateTitleBinding(): ItemTitleTimeBinding {
-// return binding.includeHeader
-// }
-//
-// companion object {
-// private const val TAG = "LoginByFaceActivity"
-// private var instance: LoginByFaceActivityBak? = null
-//
-// private const val COLLECT_SUCCESS = "collect_success"
-// private const val RECOGNIZE_SUCCESS = "recognize_success"
-// private const val NO_PLATE_REMIND = "no_plate_remind";
-//
-// fun goInitActivity() {
-// instance?.goInitActivity()
-// }
-// }
-//
-//// private var logList: MutableList = mutableListOf()
-//// private val logAdapter by lazy { LogAdapter(logList) }
-//
-// override fun initialize() {
-// instance = this
-// userViewModel.activeEngine()
-//// addSocketListener()
-// initCountTime()
-// initArcViewModel()
-// initArcView()
-// openRectInfoDraw = true
-// recognizeViewModel.setDrawRectInfoTextValue(true)
-// //viewModel.generateToken()
-//
-//// binding.llToPwd.setOnClickListener {
-//// val intent = Intent(this, LoginByPwdActivity::class.java)
-//// startActivity(intent)
-//// }
-//
-//// TaskManager.startTask()
-//
-// EventBus.getDefault().register(this)
-//
-//// binding.btnCollectFace.setOnClickListener { collectFace() }
-//
-//
-//// binding.rvLogInfo.let {
-//// it.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, true)
-//// it.adapter = logAdapter
-//// }
-////
-//// binding.btnLogState.let {
-//// it.tag = false
-//// it.setImageResource(R.drawable.ic_log_show)
-//// it.setOnClickListener { v ->
-//// binding.rvLogInfo.run {
-//// val state = it.tag.toString().toBooleanStrictOrNull() ?: false
-//// if (state) visible() else gone()
-//// }
-//// val state = it.tag.toString().toBooleanStrictOrNull() ?: false
-//// it.tag = state
-//// it.setImageResource(
-//// if (state) R.drawable.ic_log_hide else R.drawable.ic_log_show
-//// )
-//// }
-//// }
-//
-// //开启人脸增量数据定时任务
-// startFaceTask {
-// loadLogInfo("collectFace增量接口数据用户id:${Gson().toJson(it)}")
-// }
-//
-// val soundMap = hashMapOf()
-// soundMap[COLLECT_SUCCESS] = R.raw.collect_success
-// soundMap[RECOGNIZE_SUCCESS] = R.raw.recognize_success
-// soundMap[NO_PLATE_REMIND] = R.raw.no_plate_remind
-// SoundPoolUtil.getInstance().loadR(this, soundMap);
-// }
-//
-//
-// private fun checkCameraPermission() {
-// Timber.i("checkCameraPermission")
-// val permissionHelper =
-// PermissionHelper.with(this, REQUIRED_PERMISSIONS, CAMERA_PERMISSION_REQUEST_CODE)
-// .onGranted {
-// loadLogInfo("checkCameraPermission 权限已允许")
-// // 权限已授予
-// recognizeViewModel.init()
-// initRgbCamera()
-// resumeCamera()
-// }
-// .build()
-// registerPermissionHelper(permissionHelper)
-// permissionHelper.checkAndRequest()
-// }
-//
-// @Subscribe(threadMode = ThreadMode.MAIN)
-// fun getFaceEntity(insertEntity: FaceEntity) {
-// Timber.tag("performSync").e("-time=%s", insertEntity.registerTime)
-// recognizeViewModel.addFace(insertEntity)
-// Timber.tag("performSync over").e("-time=%s", insertEntity.registerTime)
-// }
-//
-// override fun onLeftDoubleClick() {
-// finish()
-// }
-//
-// private var isRecognition = false
-// private var rgbCameraHelper: DualCameraHelper? = null
-// private var rgbFaceRectTransformer: FaceRectTransformer? = null
-// private val livenessType = LivenessType.RGB
-// private var openRectInfoDraw = false
-// private val regDebouncer = Debouncer(3000)
-// private var registerHandler: RegisterCallbackHandler? = null
-//
-// private fun initArcViewModel() {
-// recognizeViewModel.setLiveType(livenessType)
-// recognizeViewModel.prepareRegister()
-// recognizeViewModel.setOnRegisterFinishedCallback { facePreviewInfo, userFaceInfo ->
-// registerHandler?.setCallback {
-// if (!isCollectFace) {
-// return@setCallback
-// }
-// if (this.userFaceInfo == null && userFaceInfo != null) {
-// recognizeViewModel.updateRegisterStatus(RecognizeViewModel.REGISTER_STATUS_DONE)
-// this.userFaceInfo = userFaceInfo
-// getFaceDataBlock { faceData, headBmp ->
-// isCollecting.set(false)
-// isCollectFace = false
-// sendFaceData(faceData, headBmp)
-// }
-// }
-// }
-// }
-// recognizeViewModel.ftInitCode.observe(this, Observer { ftInitCode: Int? ->
-// if (ftInitCode != ErrorInfo.MOK) {
-// val error: String? = getString(
-// R.string.specific_engine_init_failed, "ftEngine",
-// ftInitCode, ErrorCodeUtil.arcFaceErrorCodeToFieldName(ftInitCode!!)
-// )
-// Timber.e("ftInitCode observe = $error")
-// ToastUtils.showToast(error)
-// }
-// })
-// recognizeViewModel.frInitCode.observe(this, Observer { frInitCode: Int? ->
-// if (frInitCode != ErrorInfo.MOK) {
-// val error: String? = getString(
-// R.string.specific_engine_init_failed, "frEngine",
-// frInitCode, ErrorCodeUtil.arcFaceErrorCodeToFieldName(frInitCode!!)
-// )
-// Timber.e("frInitCode observe = $error")
-// ToastUtils.showToast(error)
-// }
-// })
-// recognizeViewModel.flInitCode.observe(this, Observer { flInitCode: Int? ->
-// if (flInitCode != ErrorInfo.MOK) {
-// val error: String? = getString(
-// R.string.specific_engine_init_failed, "flEngine",
-// flInitCode, ErrorCodeUtil.arcFaceErrorCodeToFieldName(flInitCode!!)
-// )
-// Timber.e("flInitCode observe = $error")
-// ToastUtils.showToast(error)
-// }
-// })
-//
-// recognizeViewModel.recognizeConfiguration
-// .observe(this, Observer { recognizeConfiguration: RecognizeConfiguration? ->
-// Timber.i("recognizeConfiguration: observe = ${recognizeConfiguration.toString()}")
-// })
-// recognizeViewModel.recognizeNotice.observe(this, Observer { notice: String? ->
-// Timber.i("recognizeNotice observe notice = $notice")
-// })
-//
-// recognizeViewModel.recognizeUserId.observe(this, Observer { result: CompareResult? ->
-// loadLogInfo("collectFace,recognizeUserId observe userId = ${result?.faceEntity?.userName}")
-// if (faceUseSwitch) {
-// loadFaceRecognizeResult2(result)
-// return@Observer
-// }
-// loadFaceRecognizeResult(result)
-// })
-//
-// recognizeViewModel.drawRectInfoText.observe(this, Observer { info ->
-// Timber.i("drawRectInfoText observe info = $info")
-// })
-// }
-//
-// /**
-// * 人脸识别开关,true-loadFaceRecognizeResult2,false-loadFaceRecognizeResult
-// */
-// private var faceUseSwitch = true
-//
-// /**
-// * 识别失败重试次数
-// */
-// private var retryFailCount = 0
-//
-// /**
-// * 识别失败最大次数
-// */
-// private val maxFailCount = 5
-//
-// /**
-// * 人脸失败阈值
-// */
-// private val faceFailThreshold = 0.3
-//
-// /**
-// * 配置阈值,默认值为0.8
-// */
-// private val faceSuccessThreshold by lazy { ConfigUtil.getRecognizeThreshold(this) }
-//
-//
-// private val openPlateDebouncer = Debouncer(5000)
-// private val isCollecting = AtomicBoolean(false)
-//
-// /**
-// * 根据相似度similar>设定阈值0.8作为识别成功判断,
-// * 如果similar<0.3作为识别失败判断,
-// * 如果similar>=0.3&&similar<=0.8时,暂时不作为失败情况,再识别5次如果similar<0.8则作为识别失败处理
-// */
-// private fun loadFaceRecognizeResult2(result: CompareResult?) {
-// // 无有效结果直接忽略
-// val similar = result?.similar ?: return
-//
-// binding.tvSimilarValue.text = "$similar,${retryFailCount}次"
-// loadLogInfo(
-// "collectFace,recognizeUserId 阈值 success=$faceSuccessThreshold, " +
-// "fail=$faceFailThreshold, similar=$similar, retry=$retryFailCount"
-// )
-//
-// if (similar >= faceSuccessThreshold) {
-// val userId = result.faceEntity?.userName
-// if (userId.isNullOrBlank()) {
-// loadLogInfo("collectFace,recognizeUserId 识别成功但 userId 为空,忽略")
-// return
-// }
-//
-// loadLogInfo(
-// "collectFace,recognizeUserId 识别成功 userId=$userId, time=${DateTimeUtils.getDateTimeString()}"
-// )
-//
-// // 成功后必须重置状态
-// retryFailCount = 0
-// isCollecting.set(false)
-// isCollectFace = false
-// currentUserId = userId
-//
-// // 防抖,防止重复开闸
-// openPlateDebouncer.debounce {
-// openPlate(userId)
-// }
-// return
-// }
-//
-// if (isCollectFace) {
-// loadLogInfo("collectFace,recognizeUserId 正在采集中,忽略失败结果 similar=$similar")
-// return
-// }
-//
-// if (similar <= faceFailThreshold || retryFailCount >= maxFailCount) {
-// loadLogInfo(
-// "collectFace,recognizeUserId 识别失败,开始采集 similar=$similar, " +
-// "retry=$retryFailCount, time=${DateTimeUtils.getDateTimeString()}"
-// )
-// if (!isCollecting.compareAndSet(false, true)) {
-// loadLogInfo("collectFace 已在采集中,忽略重复触发")
-// return
-// }
-//
-// retryFailCount = 0
-// isCollectFace = true
-// collectFace()//采集人脸
-// return
-// }
-//
-// retryFailCount++
-// loadLogInfo("collectFace,recognizeUserId 中间态重试,retryFailCount=$retryFailCount")
-// }
-//
-//// private fun loadFaceRecognizeResult2(result: CompareResult?) {
-////
-//// if(isCollectFace){
-//// return
-//// }
-////
-//// val similar = result?.similar ?: 0f
-//// binding.tvSimilarValue.text = "$similar,${retryFailCount}次"
-//// loadLogInfo("collectFace,recognizeUserId 人脸识别配置阈值为:${faceSuccessThreshold},失败阈值为:${faceFailThreshold},相似度为:${similar},失败次数为:${retryFailCount}")
-//// if (similar > faceSuccessThreshold) {
-//// loadLogInfo("collectFace,recognizeUserId 相似度为:${similar},识别成功时间:${DateTimeUtils.getDateTimeString()}")
-//// //大 于识别阈值,作为识别成功判断
-//// currentUserId = result?.faceEntity?.userName
-//// Debouncer(5000).debounce { openPlate(currentUserId) }
-//// return
-//// }
-//// loadLogInfo("collectFace,recognizeUserId 人脸识别相似度为:${similar},失败次数为:${retryFailCount}")
-//// if (similar < faceFailThreshold || retryFailCount >= maxFailCount) {
-//// //相似度低于识别错误阈值进行采集、识别失败次数大于等于最大失败次数,作为识别失败判断
-//// if (isCollectFace.not()) {
-//// //非采集中
-//// loadLogInfo("collectFace,recognizeUserId 未识别到人脸信息,相似度为:${similar},开始采集时间:${DateTimeUtils.getDateTimeString()}")
-//// isCollectFace = true
-//// collectFace()
-//// return
-//// }
-//// }
-//// //满足similar >= faceFailThreshold && similar <= successThreshold时进行重试
-//// retryFailCount++
-//// loadLogInfo("collectFace,recognizeUserId 人脸识别失败次数为:${retryFailCount}")
-//// }
-//
-// /**
-// * 根据相似度similar>设定阈值0.8作为识别是否成功来加载人脸识别结果
-// */
-// private fun loadFaceRecognizeResult(result: CompareResult?) {
-// val similar = result?.similar ?: 0f
-// binding.tvSimilarValue.text = "$similar"
-// val similarPass = result?.isSimilarPass ?: false
-// if (similarPass.not()) {
-// loadLogInfo("collectFace,recognizeUserId 未识别到人脸信息,开始采集")
-// isCollectFace = true
-// collectFace()
-// return
-// }
-// currentUserId = result?.faceEntity?.userName
-// if (tempUserId != currentUserId) {
-// SoundPoolUtil.getInstance().play("success", 0)
-// }
-//// plateEnable = true
-// Debouncer(5000).debounce { openPlate(currentUserId) }
-// }
-//
-// /**
-// * 查询餐盘数据
-// */
-// private fun getPlateData(block: (List) -> Unit) {
-// MyApp.plateList?.let {
-// block(it)
-// }
-// }
-//
-// private var currentPlateInfo: EquipmentUserInfo? = null
-// private var plateEnable = false
-//
-// /**
-// * 打开餐盘柜
-// */
-// private fun openPlate(userId: String?) {
-// if (plateEnable.not()) return
-// loadLogInfo("collectFace,openPlate: userId=$userId")
-// getPlateData { items ->
-// loadLogInfo("collectFace,openPlate: items:${Gson().toJson(items)}")
-// // 未查询到当前用户,查询第一个未绑定的餐盘
-// val item = items.firstOrNull { it.plateNumber.isNullOrEmpty().not() }
-// loadLogInfo("collectFace,openPlate: item2:${item}")
-// if (item == null) {
-// //暂无餐盘
-// loadLogInfo("collectFace,openPlate: 暂无餐盘,请联系管理人员,isCollectFace=$isCollectFace")
-// //ToastUtils.showToast("暂无餐盘,请联系管理人员")
-// SoundPoolUtil.getInstance().play(NO_PLATE_REMIND, 0)
-// goInitActivity()
-// return@getPlateData
-// }
-//// if (tempUserId != currentUserId) {
-// SoundPoolUtil.getInstance().play(RECOGNIZE_SUCCESS, 0)
-//// } else {
-//// SoundPoolUtil.getInstance().play(COLLECT_SUCCESS, 0)
-//// }
-// loadLogInfo("collectFace,openPlate: item3:${item}")
-// item.faceId = userId
-// item.updateTime = DateTimeUtils.getDateTimeString()
-// item.plateNumber = null
-// plateEnable = false
-// Debouncer(5000).debounce {
-// //打开柜子
-// PlateUtils.open(this, item.equipmentBoxCode, false)
-// }
-// currentPlateInfo = item
-// MyApp.plateList = items
-// SpTool.savePlateData(items)
-// }
-// }
-//
-//// private val debouncer by lazy { Debouncer(3000) }
-//
-// private fun initArcView() {
-// //在布局结束后才做初始化操作
-// binding.dualCameraTexturePreviewRgb.getViewTreeObserver().addOnGlobalLayoutListener(this)
-// recognizeViewModel.getCompareResultList().getValue()
-// }
-//
-// override fun onDestroy() {
-// loadLogInfo("onDestroy")
-// instance = null
-// if (rgbCameraHelper != null) {
-// rgbCameraHelper!!.release()
-// rgbCameraHelper = null
-// }
-//
-// recognizeViewModel.destroy()
-//
-// EventBus.getDefault().unregister(this)
-// super.onDestroy()
-// }
-//
-//
-// /**
-// * 调整View的宽高,使预览显示正常且采集框固定为380x380
-// *
-// * @param rgbPreview RGB预览View
-// * @param previewView 显示预览数据的view
-// * @param faceRectView 画框的view (380x380)
-// * @param previewSize 预览大小
-// * @param displayOrientation 相机旋转角度
-// * @param scale 缩放比例
-// * @return 调整后的LayoutParams
-// */
-// private fun adjustPreviewViewSize(
-// rgbPreview: View,
-// previewView: View,
-// faceRectView: FaceRectView,
-// previewSize: Camera.Size,
-// displayOrientation: Int,
-// scale: Float
-// ): ViewGroup.LayoutParams {
-// val layoutParams = previewView.layoutParams
-// val measuredWidth = previewView.measuredWidth
-// val measuredHeight = previewView.measuredHeight
-// var ratio = (previewSize.height.toFloat()) / previewSize.width.toFloat()
-// if (ratio > 1) {
-// ratio = 1 / ratio
-// }
-// if (displayOrientation % 180 == 0) {
-// layoutParams.width = measuredWidth
-// layoutParams.height = (measuredWidth * ratio).toInt()
-// } else {
-// layoutParams.height = measuredHeight
-// layoutParams.width = (measuredHeight * ratio).toInt()
-// }
-// if (scale < 1f) {
-// val rgbParam = rgbPreview.getLayoutParams()
-// layoutParams.width = (rgbParam.width * scale).toInt()
-// layoutParams.height = (rgbParam.height * scale).toInt()
-// } else {
-// layoutParams.width = (layoutParams.width * scale).toInt()
-// layoutParams.height = (layoutParams.height * scale).toInt()
-// }
-//
-// val metrics = DisplayMetrics()
-// windowManager.defaultDisplay.getMetrics(metrics)
-//
-// if (layoutParams.width >= metrics.widthPixels) {
-// val viewRatio = layoutParams.width / (metrics.widthPixels.toFloat())
-// layoutParams.width = (layoutParams.width / viewRatio).toInt()
-// layoutParams.height = (layoutParams.height / viewRatio).toInt()
-// }
-// if (layoutParams.height >= metrics.heightPixels) {
-// val viewRatio = layoutParams.height / (metrics.heightPixels.toFloat())
-// layoutParams.width = (layoutParams.width / viewRatio).toInt()
-// layoutParams.height = (layoutParams.height / viewRatio).toInt()
-// }
-//
-// previewView.setLayoutParams(layoutParams)
-// faceRectView.setLayoutParams(layoutParams)
-// return layoutParams
-// }
-//
-// private fun initRgbCamera() {
-// val cameraListener: CameraListener = object : CameraListener {
-// override fun onCameraOpened(
-// camera: Camera,
-// cameraId: Int,
-// displayOrientation: Int,
-// isMirror: Boolean
-// ) {
-// loadLogInfo("initRgbCamera Rgb onCameraOpened: cameraId = $cameraId, displayOrientation = $displayOrientation")
-// runOnUiThread({
-// val previewSizeRgb = camera.getParameters().getPreviewSize()
-// val layoutParams = adjustPreviewViewSize(
-// binding.dualCameraTexturePreviewRgb,
-// binding.dualCameraTexturePreviewRgb, binding.dualCameraFaceRectView,
-// previewSizeRgb, displayOrientation, 0.6f
-// )
-// loadLogInfo("initRgbCamera previewSizeRgb = ${previewSizeRgb.width}-${previewSizeRgb.height}")
-// loadLogInfo("initRgbCamera layoutParams = ${layoutParams.width}-${layoutParams.height}")
-// loadLogInfo(
-// "initRgbCamera isMirror = ${isMirror}, isDrawRgbRectHorizontalMirror = ${
-// ConfigUtil.isDrawRgbRectHorizontalMirror(
-// context
-// )
-// }, isDrawRgbRectVerticalMirror = ${
-// ConfigUtil.isDrawRgbRectVerticalMirror(
-// context
-// )
-// }"
-// )
-// rgbFaceRectTransformer = FaceRectTransformer(
-// previewSizeRgb.width,
-// previewSizeRgb.height,
-// layoutParams.width,
-// layoutParams.height,
-// 90,
-// cameraId,
-// isMirror,
-// true,
-// true
-// )
-//
-// recognizeViewModel.onRgbCameraOpened(camera)
-// recognizeViewModel.setRgbFaceRectTransformer(rgbFaceRectTransformer)
-// })
-// }
-//
-// @RequiresApi(api = Build.VERSION_CODES.Q)
-// override fun onPreview(nv21: ByteArray?, camera: Camera?) {
-// if (!isRecognition) {
-// return
-// }
-// binding.dualCameraFaceRectView.clearFaceInfo()
-// facePreviewInfoList = recognizeViewModel.onPreviewFrame(nv21, true)
-// if (facePreviewInfoList != null && rgbFaceRectTransformer != null) {
-// drawPreviewInfo(facePreviewInfoList)
-// }
-// if (facePreviewInfoList.isNullOrEmpty()) {
-// currentPlateInfo = null
-// currentUserId = null
-// userFaceInfo = null
-// }
-// recognizeViewModel.clearLeftFace(facePreviewInfoList)
-// }
-//
-// override fun onCameraClosed() {
-// Timber.i("initRgbCamera onCameraClosed: ")
-// }
-//
-// override fun onCameraError(e: java.lang.Exception) {
-// Timber.i("initRgbCamera onCameraError: %s", e.message)
-// e.printStackTrace()
-// }
-//
-// override fun onCameraConfigurationChanged(cameraID: Int, displayOrientation: Int) {
-// Timber.i("initRgbCamera onCameraConfigurationChanged: threadName = ${Thread.currentThread().name}")
-// if (rgbFaceRectTransformer != null) {
-// rgbFaceRectTransformer!!.cameraDisplayOrientation = displayOrientation
-// }
-// Timber.i("initRgbCamera onCameraConfigurationChanged: $cameraID $displayOrientation")
-// }
-// }
-//
-// val previewConfig: PreviewConfig = recognizeViewModel.previewConfig
-// rgbCameraHelper = DualCameraHelper.Builder()
-// .previewViewSize(
-// Point(
-// binding.dualCameraTexturePreviewRgb.measuredWidth,
-// binding.dualCameraTexturePreviewRgb.measuredHeight
-// )
-// )
-// .rotation(windowManager.defaultDisplay.rotation)
-// .additionalRotation(0) // 角度
-// .previewSize(recognizeViewModel.loadPreviewSize())
-// .specificCameraId(previewConfig.rgbCameraId)
-// .isMirror(true)
-// .previewOn(binding.dualCameraTexturePreviewRgb)
-// .cameraListener(cameraListener)
-// .build()
-// rgbCameraHelper!!.init()
-// rgbCameraHelper!!.start()
-// }
-//
-// /**
-// * 绘制RGB、IR画面的实时人脸信息
-// *
-// * @param facePreviewInfoList RGB画面的实时人脸信息
-// */
-// private fun drawPreviewInfo(facePreviewInfoList: MutableList?) {
-// if (rgbFaceRectTransformer != null) {
-// val rgbDrawInfoList: MutableList? = recognizeViewModel.getDrawInfo(
-// facePreviewInfoList, LivenessType.RGB, openRectInfoDraw
-// )
-// // 识别成功
-// binding.dualCameraFaceRectView.drawRealtimeFaceInfo(rgbDrawInfoList)
-// }
-// }
-//
-// fun openRectInfoDraw(view: View?) {
-// openRectInfoDraw = !openRectInfoDraw
-// recognizeViewModel.setDrawRectInfoTextValue(openRectInfoDraw)
-// }
-//
-//
-// override fun onGlobalLayout() {
-// loadLogInfo("onGlobalLayout")
-// binding.dualCameraTexturePreviewRgb.getViewTreeObserver().removeOnGlobalLayoutListener(this)
-// // 请求权限
-// checkCameraPermission()
-// }
-//
-// private fun resumeCamera() {
-// isRecognition = true
-// if (rgbCameraHelper != null && rgbCameraHelper!!.isStopped) {
-// loadLogInfo("collectFace,resumeCamera: ")
-// rgbCameraHelper!!.start()
-// } else {
-// recognizeViewModel.onPreviewFrame(ByteArray(1382400), true)
-// }
-// }
-//
-// /**
-// * 临时用户id
-// */
-// private var tempUserId: String = ""
-// override fun onResume() {
-// super.onResume()
-// registerHandler = RegisterCallbackHandler()
-// try {
-// if (isFirstOpen) {
-// goInitActivity()
-// binding.root.postDelayed({
-// isFirstOpen = false
-// }, 1000)
-// return
-// }
-// retryFailCount = 0
-// binding.tvSimilarValue.text = ""
-// isCollecting.set(false)
-// isCollectFace = false
-// plateEnable = true
-// collectCount = 0
-// tempUserId = "${System.currentTimeMillis()}"
-// resumeCamera()
-// userViewModel.resetUserInfo()
-// countDownTimer?.let {
-// it.cancel()
-// it.start()
-// }
-//// initFaceScheduler()
-//// checkFaceState()
-// } catch (e: Exception) {
-// e.printStackTrace()
-// }
-// }
-//
-// private var isFirstOpen = true
-//
-// protected override fun onPause() {
-// pauseCamera()
-// super.onPause()
-// countDownTimer?.cancel()
-// }
-//
-// private fun pauseCamera() {
-// isRecognition = false
-// recognizeViewModel.onPreviewFrame(ByteArray(1382400), true)
-// }
-//
-// override fun handleLoginSuccess(equipmentUserInfo: EquipmentUserInfo, isAdmin: Boolean) {
-// super.handleLoginSuccess(equipmentUserInfo, isAdmin)
-//// goInitActivity()
-// }
-//
-// private val totalTimeInMillis = 15 * 1000L
-// fun initCountTime() {
-// countDownTimer = object : CountDownTimer(totalTimeInMillis, 1000) {
-// override fun onTick(millisUntilFinished: Long) {
-// loadLogInfo("initCountTime onTick = ${(millisUntilFinished / 1000).toInt()}")
-// binding.tvToInit.text = "${(millisUntilFinished / 1000).toInt() + 1}"
-// }
-//
-// override fun onFinish() {
-// goInitActivity()
-// }
-// }
-// }
-//
-// fun goInitActivity() {
-// val intent = Intent(context, InitActivity::class.java)
-// startActivity(intent)
-// }
-//
-// /**
-// * 采集人脸
-// */
-// private fun collectFace() {
-// loadLogInfo("collectFace: -----------1,开始采集人脸,开始时间:${DateTimeUtils.getDateTimeString()}----------")
-// if (isFirstOpen) return
-// loadLogInfo("collectFace: ----------2,isFirstOpen=false-----------")
-// loadLogInfo("collectFace: ----------4,检测到人脸信息-----------")
-// currentUserId = null
-// userFaceInfo = null
-// recognizeViewModel.updateRegisterStatus(REGISTER_STATUS_READY)
-// loadLogInfo("collectFace: ----------5,人脸采集中-----------")
-// }
-//
-// private val uploadFaceDebouncer = Debouncer(10000)
-//
-// /**
-// * 改为上传人脸数据,不需要发生人脸数据到收银端
-// */
-// private fun sendFaceData(faceData: String, headBmp: Bitmap) {
-// loadLogInfo("collectFace,sendFaceData: ----------11,发送人脸数据-----------")
-//
-// val imageFile = BitmapSaver.saveToAppFilesDir(
-// headBmp, this, "IMG_CROP_${System.currentTimeMillis()}.jpg"
-// )
-// loadLogInfo("collectFace,sendFaceData:${imageFile?.absolutePath}")
-// if (imageFile == null) {
-// ToastUtils.showToast("获取人脸照片失败")
-// return
-// }
-// uploadFaceDebouncer.debounce {
-// addUserFace(faceData, imageFile)
-// }
-//// // 给某个客户端发送
-//// val jsonObject = JSONObject().also {
-//// it.put("type", "faceFeature")
-//// it.put("content", faceData)
-//// }
-//// tcpClient?.send(jsonObject)
-// }
-//
-// private fun addUserFace(faceData: String, imageFile: File) {
-// settingViewModel.addUserFace(faceData, imageFile) { status, faceModel ->
-// loadLogInfo("collectFace,saveFaceInfo: ----------12,人脸数据发送完成时间:${DateTimeUtils.getDateTimeString()},结果:$status-----------")
-// if (status.not()) {
-// ToastUtils.showToast("新增数据失败")
-// loadLogInfo("collectFace,sendFaceData: ----------12,发送人脸数据失败,faceData=${faceData}")
-// return@addUserFace
-// }
-// if (faceModel == null) {
-// ToastUtils.showToast("新增数据成功,但未拿到接口数据")
-// loadLogInfo("collectFace,sendFaceData: ----------12,发送人脸数据成功但接口返回为null,faceData=${faceData}")
-// return@addUserFace
-// }
-// Thread {
-// saveFaceInfo(faceModel)
-// uploadFaceDebouncer.reset()
-// }.start()
-// }
-// }
-//
-// private fun getFaceDataBlock(block: (String, Bitmap) -> Unit) {
-// if (userFaceInfo == null || userFaceInfo?.faceFeature?.featureData == null) {
-// return
-// }
-// val faceData: String? = Base64.encode(userFaceInfo?.faceFeature?.featureData)
-// if (faceData.isNullOrBlank()) {
-// return
-// }
-// loadLogInfo("collectFace,getFaceData: ----------7,拿到人脸提取特征数据时间:${DateTimeUtils.getDateTimeString()}-----------")
-// block(faceData, userFaceInfo!!.headBmp)
-// }
-//
-// /**
-// * 加载日志
-// * @param msg 日志内容
-// */
-// private fun loadLogInfo(msg: String) {
-// Timber.tag(TAG).d(msg)
-// LogFileUtil.saveLog(msg)
-// }
-//
-// private var facePreviewInfoList: MutableList? = null
-// private var userFaceInfo: UserFaceInfo? = null
-//
-// private var currentUserId: String? = null
-//
-// private fun saveFaceInfo(faceModel: UserFaceModel) {
-// try {
-// loadLogInfo("collectFace,saveFaceInfo: ----------8,保存人脸取特征数据-----------")
-// val faceDao = FaceDatabase.getInstance(this).faceDao()
-// val faceEntity = FaceEntity(
-// faceModel.userId,
-// null,
-// Base64.decode(faceModel.faceFeatureStr)
-// ).also {
-// //1-会员、2-临时用户
-// it.userType = if (faceModel.isMember) "1" else "2"
-// }
-// faceDao.insert(faceEntity)
-// loadLogInfo("collectFace,saveFaceInfo: ----------10,人脸数据保存完成-----------")
-// recognizeViewModel.refreshFaceList()
-// loadLogInfo("collectFace,saveFaceInfo: ----------11,刷新人脸数据-----------")
-// runOnUiThread { recognizeViewModel.onPreviewFrame(ByteArray(1382400), true) }
-// loadLogInfo("---------------------------------")
-// collectCount = 0
-// } catch (e: Exception) {
-// e.printStackTrace()
-// loadLogInfo("collectFace,saveFaceInfo: ----------13,人脸采集异常:${e.message}-----------")
-// collectCount++
-// loadLogInfo("collectFace,saveFaceInfo: ----------14,${collectCount}次人脸采集异常:${e.message}-----------")
-// ToastUtils.showToast("人脸采集异常:${e.message}")
-// }
-// }
-//
-// private var collectCount = 0
-//
-//// private var tcpClient: TcpClient? = null
-////
-//// private fun addSocketListener() {
-////// val ipAddress = NetworkUtils.getIPAddress(true)
-////// loadLogInfo( "addSocketListener,ipAddress: $ipAddress");
-//// tcpClient = TcpClient(
-//// "192.168.1.95",
-//// 5000,
-//// GlobalData.deviceId, // clientId
-//// 5000, // connectTimeoutMs
-//// 10 * 1000, // heartbeatIntervalMs
-//// 30 * 1000 // heartbeatTimeoutMs
-//// )
-////
-//// tcpClient?.setListener(object : TcpClientListenerImpl() {
-//// override fun onSendSuccess(json: JSONObject?) {
-//// super.onSendSuccess(json)
-//// loadLogInfo("collectFace,TcpClientListener发送成功:$json")
-////// toast("发送成功")
-//// }
-////
-//// override fun onSendFailed(json: JSONObject?, e: java.lang.Exception?) {
-//// super.onSendFailed(json, e)
-//// ToastUtils.showToast("发送失败${e?.message}")
-//// loadLogInfo("collectFace,TcpClientListener人脸数据发送失败:${e?.message}")
-//// }
-////
-//// override fun onMessage(json: JSONObject?) {
-//// super.onMessage(json)
-//// loadLogInfo("collectFace,TcpClientListener收到消息:$json")
-//// val type = json?.getInt("type")
-//// // 根据服务端消息类型处理删除新增临时用户人脸数据---------------------
-//// when (type) {
-//// LanServer.TYPE_ADD_FACE_DATA -> {
-//// //采集设备id自己生成,不接收服务端的,在本地只判断是否存在同一人脸数据
-//// loadLogInfo("collectFace,TcpClientListener收到消息,新增用户:采集设备id自己生成,不接收服务端的,在本地只判断是否存在同一人脸数据")
-//// }
-////
-//// LanServer.TYPE_CLEAR_FACE_DATA -> {
-//// clearFaceData()
-//// }
-////
-//// else -> {}
-//// }
-//// }
-//// })
-//// tcpClient?.start()
-////
-//// try {
-//// LanServer.getInstance().let {
-//// it.setListener(object : LanServerListenerImpl() {
-//// override fun onMessageReceived(clientId: String?, message: JSONObject?) {
-//// super.onMessageReceived(clientId, message)
-//// ToastUtils.showToast("收到消息clientId=$clientId")
-//// }
-//// })
-//// it.start()
-//// }
-//// } catch (e: Exception) {
-//// e.printStackTrace()
-//// }
-//// }
-//
-// private fun clearFaceData() {
-// Thread {
-// val faceDao = FaceDatabase.getInstance(this).faceDao()
-// faceDao.deleteTempUserFaceData()
-// recognizeViewModel.refreshFaceList()
-// loadLogInfo("collectFace,TcpClientListener收到消息,已删除并刷新人脸数据")
-// }.start()
-// }
-//
-// private var isCollectFace = false
-//
-//}
\ No newline at end of file
diff --git a/app/src/main/java/com/sw/platecabinet/activity/LoginByPwdActivity.kt b/app/src/main/java/com/sw/platecabinet/activity/LoginByPwdActivity.kt
deleted file mode 100644
index a7e2e94..0000000
--- a/app/src/main/java/com/sw/platecabinet/activity/LoginByPwdActivity.kt
+++ /dev/null
@@ -1,62 +0,0 @@
-//package com.sw.platecabinet.activity
-//
-//import android.content.Intent
-//import com.sw.plate.utils.ToastUtils
-//import com.sw.platecabinet.databinding.ActivityLoginByPwdBinding
-//import com.sw.platecabinet.databinding.ItemTitleTimeBinding
-//import com.sw.platecabinet.dialog.BalanceNotEnoughDialog
-//import com.sw.platecabinet.model.request.LoginParam
-//import com.sw.platecabinet.model.response.EquipmentUserInfo
-//import com.sw.platecabinet.utils.KeyboardUtils
-//
-///**
-// * 密码登录
-// */
-//class LoginByPwdActivity : BaseActivity() {
-//
-// override fun inflateViewBinding(): ActivityLoginByPwdBinding {
-// return ActivityLoginByPwdBinding.inflate(layoutInflater)
-// }
-//
-// override fun inflateTitleBinding(): ItemTitleTimeBinding {
-// return binding.includeHeader
-// }
-//
-// override fun initialize() {
-// binding.btnLogin.setOnClickListener {
-// val phone = binding.etPhone.text.toString()
-// val pwd = binding.etPwd.text.toString()
-// if (phone.isEmpty() || pwd.isEmpty()) {
-// ToastUtils.showToast("手机或校验码不能为空")
-// return@setOnClickListener
-// }
-// val loginParam = LoginParam(
-// //equipmentId = equipmentId,
-// phone = phone,
-// password = pwd
-// )
-// viewModel.loginWithPwd(loginParam)
-// KeyboardUtils.hideKeyboard(this)
-// }
-// binding.tvFaceRec.setOnClickListener {
-// val intent = Intent(this, LoginByFaceActivity::class.java)
-// startActivity(intent)
-// }
-// }
-//
-// override fun onResume() {
-// super.onResume()
-// viewModel.resetUserInfo()
-// }
-//
-// override fun handleLoginSuccess(equipmentUserInfo: EquipmentUserInfo, isAdmin: Boolean) {
-// super.handleLoginSuccess(equipmentUserInfo, isAdmin)
-//// val cardBalance = equipmentUserInfo.cardBalance?:0.toDouble()
-//// val balanceIsNotEnough = cardBalance <= 0.toDouble()
-// if (equipmentUserInfo.isIntercept) {
-// return
-// }
-// LoginByFaceActivity.goInitActivity()
-// finish()
-// }
-//}
\ No newline at end of file
diff --git a/app/src/main/java/com/sw/platecabinet/activity/MainActivity.kt b/app/src/main/java/com/sw/platecabinet/activity/MainActivity.kt
index 5387307..2df00fd 100644
--- a/app/src/main/java/com/sw/platecabinet/activity/MainActivity.kt
+++ b/app/src/main/java/com/sw/platecabinet/activity/MainActivity.kt
@@ -2,14 +2,11 @@ package com.sw.platecabinet.activity
import android.content.Context
import android.content.Intent
-import com.sw.plate.utils.ToastUtils
import com.sw.platecabinet.R
import com.sw.platecabinet.databinding.ActivityMainBinding
import com.sw.platecabinet.databinding.ItemTitleTimeBinding
-import com.sw.platecabinet.dialog.CustomDialog
import com.sw.platecabinet.fragment.PlateCabinetFullFragment
import com.sw.platecabinet.fragment.PlateOpenFragment
-import com.sw.platecabinet.fragment.SettingListFragment
import com.sw.platecabinet.utils.FragmentHelper
typealias Callback = (String) -> Unit
@@ -65,7 +62,7 @@ class MainActivity : BaseActivity() {
pageType = param?.let { PageType.valueOf(param) } ?: PageType.SETTING_LIST
fragmentHelper = FragmentHelper(supportFragmentManager, R.id.fragment_container)
val page = when (pageType) {
- PageType.SETTING_LIST -> SettingListFragment()
+// PageType.SETTING_LIST -> SettingListFragment()
// PageType.BIND_PLATE -> BindPlateFragment.newInstance(equipmentUserInfo)
// PageType.PLATE_TIP -> PlateOpenFragment.newInstance(equipmentUserInfo, isAdmin)
PageType.PLATE_TIP -> PlateOpenFragment.newInstance(isScanCode)
@@ -86,7 +83,7 @@ class MainActivity : BaseActivity() {
override fun onRightDoubleClick() {
if (pageType == PageType.SETTING_LIST) {
- startActivity(Intent(this, FunActivity::class.java))
+// startActivity(Intent(this, FunActivity::class.java))
}
}
diff --git a/app/src/main/java/com/sw/platecabinet/activity/TestActivity.kt b/app/src/main/java/com/sw/platecabinet/activity/TestActivity.kt
deleted file mode 100644
index 3414411..0000000
--- a/app/src/main/java/com/sw/platecabinet/activity/TestActivity.kt
+++ /dev/null
@@ -1,97 +0,0 @@
-package com.sw.platecabinet.activity
-
-import android.os.Bundle
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.LinearLayout
-import android.widget.TextView
-import androidx.appcompat.app.AppCompatActivity
-import androidx.recyclerview.widget.GridLayoutManager
-import androidx.recyclerview.widget.LinearLayoutManager
-import androidx.recyclerview.widget.RecyclerView
-import com.sw.platecabinet.R
-import kotlin.math.ceil
-
-class TestActivity : AppCompatActivity() {
- private lateinit var parentRecyclerView: RecyclerView
- private lateinit var pageAdapter: PageAdapter
- private val itemsPerPage = 22 // 每行2个,每列11个,共22个
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_test)
-
- parentRecyclerView = findViewById(R.id.parentRecyclerView)
- parentRecyclerView.layoutManager = LinearLayoutManager(this, RecyclerView.HORIZONTAL, false)
-
- // 假设有100个数据项
- val allItems = (1..30).map { "Item $it" }
- val pages = allItems.chunked(itemsPerPage)
-
- pageAdapter = PageAdapter(pages)
- parentRecyclerView.adapter = pageAdapter
- }
-
- private fun convertToColumnFirst(original: List, cols: Int): List {
- val rows = ceil(original.size.toDouble() / cols).toInt()
- return List(original.size) { pos ->
- val row = pos % rows
- val col = pos / rows
- val originalPos = col + row * cols
- original.getOrElse(originalPos) { "" }
- }
- }
-
- inner class PageAdapter(private val pages: List>) :
- RecyclerView.Adapter() {
-
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PageViewHolder {
- val view = LayoutInflater.from(parent.context)
- .inflate(R.layout.page_item_layout, parent, false)
- return PageViewHolder(view)
- }
-
- override fun onBindViewHolder(holder: PageViewHolder, position: Int) {
- holder.bind(pages[position])
- }
-
- override fun getItemCount(): Int = pages.size
-
- inner class PageViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
- private val childRecyclerView: RecyclerView =
- itemView.findViewById(R.id.childRecyclerView)
-
- fun bind(items: List) {
- childRecyclerView.layoutManager = GridLayoutManager(itemView.context, 2)
- childRecyclerView.adapter = ChildAdapter(items)
- }
- }
- }
-
- inner class ChildAdapter(private val items: List) :
- RecyclerView.Adapter() {
-
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
- val view = LayoutInflater.from(parent.context)
- .inflate(R.layout.item_bind_view, parent, false)
- return ItemViewHolder(view)
- }
-
- override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
- holder.bind(position, items[position])
- }
-
- override fun getItemCount(): Int = items.size
-
- inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
- private val llRoot: LinearLayout = itemView.findViewById(R.id.ll_root)
- private val tvNum: TextView = itemView.findViewById(R.id.tv_num)
-
- fun bind(position: Int, item: String) {
- tvNum.text = item
- llRoot.setBackgroundResource(if (position % 3 == 0) R.drawable.grid_item_bind else R.drawable.grid_item_unbind)
- }
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/sw/platecabinet/activity/UnBindDialogActivity.kt b/app/src/main/java/com/sw/platecabinet/activity/UnBindDialogActivity.kt
deleted file mode 100644
index 10438b9..0000000
--- a/app/src/main/java/com/sw/platecabinet/activity/UnBindDialogActivity.kt
+++ /dev/null
@@ -1,57 +0,0 @@
-//package com.sw.platecabinet.activity
-//
-//import android.graphics.Color
-//import android.view.Gravity
-//import android.view.ViewGroup
-//import androidx.core.graphics.drawable.toDrawable
-//import androidx.core.view.WindowCompat
-//import com.sw.platecabinet.GlobalKey
-//import com.sw.platecabinet.databinding.ActivityUnbindDialogBinding
-//import com.sw.platecabinet.databinding.ItemTitleTimeBinding
-//import com.sw.platecabinet.ext.dp
-//import com.sw.platecabinet.model.response.EquipmentUserInfo
-//
-///**
-// * 解绑确认弹窗界面
-// */
-//class UnBindDialogActivity : BaseActivity() {
-// private var equipmentUserInfo: EquipmentUserInfo? = null
-//
-// override fun inflateViewBinding(): ActivityUnbindDialogBinding {
-// return ActivityUnbindDialogBinding.inflate(layoutInflater)
-// }
-//
-// override fun inflateTitleBinding(): ItemTitleTimeBinding? {
-// return null
-// }
-//
-// override fun initialize() {
-// window?.apply {
-// WindowCompat.setDecorFitsSystemWindows(this, false)
-// setBackgroundDrawable(Color.TRANSPARENT.toDrawable())
-//
-// attributes = attributes.apply {
-// y = 314.dp
-// width = (context.resources.displayMetrics.widthPixels * 0.8).toInt()
-// height = ViewGroup.LayoutParams.MATCH_PARENT
-// gravity = Gravity.CENTER
-// }
-// }
-// equipmentUserInfo =
-// intent.getParcelableExtra(GlobalKey.PARAM_EQUIPMENT_INFO)
-// if (equipmentUserInfo == null) return
-// binding.tvTipInfo.text = "即将解除【${equipmentUserInfo!!.name}】的餐盘"
-// binding.tvCancel.setOnClickListener {
-// finish()
-// }
-// binding.tvConfirm.setOnClickListener {
-// setResult(RESULT_OK)
-// finish()
-// }
-// }
-//
-// override fun finish() {
-// super.finish()
-// overridePendingTransition(0, 0) // 确保退出也无动画
-// }
-//}
\ No newline at end of file
diff --git a/app/src/main/java/com/sw/platecabinet/dialog/BalanceNotEnoughDialog.kt b/app/src/main/java/com/sw/platecabinet/dialog/BalanceNotEnoughDialog.kt
index 30c9ff9..5d93adc 100644
--- a/app/src/main/java/com/sw/platecabinet/dialog/BalanceNotEnoughDialog.kt
+++ b/app/src/main/java/com/sw/platecabinet/dialog/BalanceNotEnoughDialog.kt
@@ -1,36 +1,36 @@
-package com.sw.platecabinet.dialog
-
-import android.app.Dialog
-import android.graphics.drawable.ColorDrawable
-import android.os.Bundle
-import android.view.Window
-import androidx.fragment.app.FragmentActivity
-import com.sw.platecabinet.databinding.DialogBalanceNotEnoughBinding
-import com.sw.platecabinet.ext.dp
-
-open class BalanceNotEnoughDialog(
- private var activity: FragmentActivity
-) : Dialog(activity) {
-
- private lateinit var binding: DialogBalanceNotEnoughBinding
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- requestWindowFeature(Window.FEATURE_NO_TITLE)
- binding = DialogBalanceNotEnoughBinding.inflate(layoutInflater)
- setContentView(binding.root)
- window?.run {
- attributes = attributes.apply {
- width = 480.dp
- }
- setBackgroundDrawable(ColorDrawable())
- setCancelable(false)
- }
- addListener()
- }
-
- private fun addListener() {
- binding.tvConfirm.setOnClickListener { dismiss() }
- }
-
-}
+//package com.sw.platecabinet.dialog
+//
+//import android.app.Dialog
+//import android.graphics.drawable.ColorDrawable
+//import android.os.Bundle
+//import android.view.Window
+//import androidx.fragment.app.FragmentActivity
+//import com.sw.platecabinet.databinding.DialogBalanceNotEnoughBinding
+//import com.sw.platecabinet.ext.dp
+//
+//open class BalanceNotEnoughDialog(
+// private var activity: FragmentActivity
+//) : Dialog(activity) {
+//
+// private lateinit var binding: DialogBalanceNotEnoughBinding
+//
+// override fun onCreate(savedInstanceState: Bundle?) {
+// super.onCreate(savedInstanceState)
+// requestWindowFeature(Window.FEATURE_NO_TITLE)
+// binding = DialogBalanceNotEnoughBinding.inflate(layoutInflater)
+// setContentView(binding.root)
+// window?.run {
+// attributes = attributes.apply {
+// width = 480.dp
+// }
+// setBackgroundDrawable(ColorDrawable())
+// setCancelable(false)
+// }
+// addListener()
+// }
+//
+// private fun addListener() {
+// binding.tvConfirm.setOnClickListener { dismiss() }
+// }
+//
+//}
diff --git a/app/src/main/java/com/sw/platecabinet/dialog/UserBindRemindDialog.kt b/app/src/main/java/com/sw/platecabinet/dialog/UserBindRemindDialog.kt
index 1a2149e..56f4699 100644
--- a/app/src/main/java/com/sw/platecabinet/dialog/UserBindRemindDialog.kt
+++ b/app/src/main/java/com/sw/platecabinet/dialog/UserBindRemindDialog.kt
@@ -1,38 +1,38 @@
-package com.sw.platecabinet.dialog
-
-import android.app.Dialog
-import android.graphics.drawable.ColorDrawable
-import android.os.Bundle
-import android.view.Window
-import androidx.fragment.app.FragmentActivity
-import com.sw.platecabinet.databinding.DialogUserBindRemindBinding
-import com.sw.platecabinet.ext.dp
-
-open class UserBindRemindDialog(
- private var activity: FragmentActivity,
- var content:String
-) : Dialog(activity) {
-
- private lateinit var binding: DialogUserBindRemindBinding
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- requestWindowFeature(Window.FEATURE_NO_TITLE)
- binding = DialogUserBindRemindBinding.inflate(layoutInflater)
- setContentView(binding.root)
- window?.run {
- attributes = attributes.apply {
- width = 480.dp
- }
- setBackgroundDrawable(ColorDrawable())
- setCancelable(false)
- }
- binding.tvBindContent.text = content
- addListener()
- }
-
- private fun addListener() {
- binding.tvConfirm.setOnClickListener { dismiss() }
- }
-
-}
+//package com.sw.platecabinet.dialog
+//
+//import android.app.Dialog
+//import android.graphics.drawable.ColorDrawable
+//import android.os.Bundle
+//import android.view.Window
+//import androidx.fragment.app.FragmentActivity
+//import com.sw.platecabinet.databinding.DialogUserBindRemindBinding
+//import com.sw.platecabinet.ext.dp
+//
+//open class UserBindRemindDialog(
+// private var activity: FragmentActivity,
+// var content:String
+//) : Dialog(activity) {
+//
+// private lateinit var binding: DialogUserBindRemindBinding
+//
+// override fun onCreate(savedInstanceState: Bundle?) {
+// super.onCreate(savedInstanceState)
+// requestWindowFeature(Window.FEATURE_NO_TITLE)
+// binding = DialogUserBindRemindBinding.inflate(layoutInflater)
+// setContentView(binding.root)
+// window?.run {
+// attributes = attributes.apply {
+// width = 480.dp
+// }
+// setBackgroundDrawable(ColorDrawable())
+// setCancelable(false)
+// }
+// binding.tvBindContent.text = content
+// addListener()
+// }
+//
+// private fun addListener() {
+// binding.tvConfirm.setOnClickListener { dismiss() }
+// }
+//
+//}
diff --git a/app/src/main/java/com/sw/platecabinet/fragment/BaseFragment.kt b/app/src/main/java/com/sw/platecabinet/fragment/BaseFragment.kt
index b72aa2c..b06321c 100644
--- a/app/src/main/java/com/sw/platecabinet/fragment/BaseFragment.kt
+++ b/app/src/main/java/com/sw/platecabinet/fragment/BaseFragment.kt
@@ -8,13 +8,9 @@ import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.fragment.app.Fragment
-import androidx.fragment.app.viewModels
-import androidx.lifecycle.lifecycleScope
import androidx.viewbinding.ViewBinding
import com.sw.platecabinet.R
import com.sw.platecabinet.view.CustomLoadingDialog
-import com.sw.platecabinet.viewmodel.SettingViewModel
-import kotlinx.coroutines.launch
abstract class BaseFragment(
private val bindingInflater: (inflater: LayoutInflater, parent: ViewGroup?, attachToParent: Boolean) -> VB
@@ -22,7 +18,6 @@ abstract class BaseFragment(
private var _binding: VB? = null
protected val binding get() = _binding!!
private var mDialogWaiting: CustomLoadingDialog? = null
- protected val viewModel by viewModels()
override fun onCreateView(
inflater: LayoutInflater,
@@ -39,15 +34,7 @@ abstract class BaseFragment(
* 注册数据变化监听
*/
open fun registerDataChange() {
- lifecycleScope.launch {
- viewModel.showLoading.collect {
- if (it) {
- showWaitingDialog("")
- } else {
- hideWaitingDialog()
- }
- }
- }
+
}
abstract fun initialize()
diff --git a/app/src/main/java/com/sw/platecabinet/fragment/PlateOpenFragment.kt b/app/src/main/java/com/sw/platecabinet/fragment/PlateOpenFragment.kt
index 7f70bf0..061ee1e 100644
--- a/app/src/main/java/com/sw/platecabinet/fragment/PlateOpenFragment.kt
+++ b/app/src/main/java/com/sw/platecabinet/fragment/PlateOpenFragment.kt
@@ -7,7 +7,6 @@ import com.sw.platecabinet.Constants
import com.sw.platecabinet.R
import com.sw.platecabinet.activity.InitActivity
import com.sw.platecabinet.databinding.FragmentPlateOpenBinding
-import com.sw.platecabinet.model.response.EquipmentUserInfo
/**
* 餐盘柜提示界面
diff --git a/app/src/main/java/com/sw/platecabinet/fragment/SettingListFragment.kt b/app/src/main/java/com/sw/platecabinet/fragment/SettingListFragment.kt
index 19d46cd..d898dbe 100644
--- a/app/src/main/java/com/sw/platecabinet/fragment/SettingListFragment.kt
+++ b/app/src/main/java/com/sw/platecabinet/fragment/SettingListFragment.kt
@@ -1,241 +1,241 @@
-package com.sw.platecabinet.fragment
-
-import android.view.View
-import androidx.core.view.isVisible
-import androidx.lifecycle.lifecycleScope
-import androidx.recyclerview.widget.GridLayoutManager
-import androidx.recyclerview.widget.LinearLayoutManager
-import androidx.recyclerview.widget.RecyclerView
-import com.sw.inbound.utils.DateTimeUtils
-import com.sw.plate.utils.ToastUtils
-import com.sw.plate.utils.comn.SerialApi
-import com.sw.plate.utils.comn.SerialPortManager
-import com.sw.platecabinet.GlobalData
-import com.sw.platecabinet.MyApp
-import com.sw.platecabinet.R
-import com.sw.platecabinet.activity.BaseActivity
-import com.sw.platecabinet.activity.MainActivity
-import com.sw.platecabinet.activity.PageType
-import com.sw.platecabinet.adapter.GenericItemAdapter
-import com.sw.platecabinet.adapter.GenericPageAdapter
-import com.sw.platecabinet.adapter.GridSpacingItemDecoration
-import com.sw.platecabinet.adapter.dpToPx
-import com.sw.platecabinet.databinding.FragmentSettingListBinding
-import com.sw.platecabinet.databinding.ItemBindViewBinding
-import com.sw.platecabinet.ext.formatNumber
-import com.sw.platecabinet.ext.maskName
-import com.sw.platecabinet.model.response.EquipmentUserInfo
-import com.sw.platecabinet.utils.ListArrangementUtil
-import com.sw.platecabinet.utils.PlateUtils
-import com.sw.platecabinet.utils.SpTool
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.launch
-import kotlinx.coroutines.withContext
-import timber.log.Timber
-
-/**
- * 餐盘柜绑定的用户列表界面
- */
-class SettingListFragment :
- BaseFragment(FragmentSettingListBinding::inflate) {
-
- /**
- * 需要横向滚动的adapter
- */
- private var pageAdapter: GenericPageAdapter? = null
-
- /**
- * 垂直滚动的adapter
- */
- private var itemAdapter: GenericItemAdapter? = null
-
- override fun registerDataChange() {
- super.registerDataChange()
-// lifecycleScope.launch {
-// viewModel.equipmentList.collect { it ->
-// Timber.d("registerDateChange updateAdapter it = $it")
-// updateAdapter(it)
-// }
-// }
- }
-
- override fun initialize() {
- binding.mainRecyclerView.apply {
- if (GlobalData.arrayCross > 2) {
- layoutManager = LinearLayoutManager(context, RecyclerView.HORIZONTAL, false)
- pageAdapter = createPageAdapter()
- adapter = pageAdapter
- } else {
- layoutManager = GridLayoutManager(context, 2)
- // 添加间距装饰(12dp)
- addItemDecoration(
- GridSpacingItemDecoration(
- spanCount = 2,
- spacing = requireContext().dpToPx(12),
- includeEdge = true // 包含边缘间距
- )
- )
- itemAdapter = createItemAdapter()
- adapter = itemAdapter
- }
- }
-
- }
-
- override fun onResume() {
- super.onResume()
-// viewModel.getEquipmentList{
-// updateAdapter(it)
-// }
- MyApp.plateList?.let {
- updateAdapter(it)
- }
- }
-
-// private fun getPlateData(block: (List) -> Unit) {
-// MyApp.plateList?.let {
-// block(it)
-// }
-//// viewModel.getEquipmentList { items ->
-//// block(items)
+//package com.sw.platecabinet.fragment
+//
+//import android.view.View
+//import androidx.core.view.isVisible
+//import androidx.lifecycle.lifecycleScope
+//import androidx.recyclerview.widget.GridLayoutManager
+//import androidx.recyclerview.widget.LinearLayoutManager
+//import androidx.recyclerview.widget.RecyclerView
+//import com.sw.inbound.utils.DateTimeUtils
+//import com.sw.plate.utils.ToastUtils
+//import com.sw.plate.utils.comn.SerialApi
+//import com.sw.plate.utils.comn.SerialPortManager
+//import com.sw.platecabinet.GlobalData
+//import com.sw.platecabinet.MyApp
+//import com.sw.platecabinet.R
+//import com.sw.platecabinet.activity.BaseActivity
+//import com.sw.platecabinet.activity.MainActivity
+//import com.sw.platecabinet.activity.PageType
+//import com.sw.platecabinet.adapter.GenericItemAdapter
+//import com.sw.platecabinet.adapter.GenericPageAdapter
+//import com.sw.platecabinet.adapter.GridSpacingItemDecoration
+//import com.sw.platecabinet.adapter.dpToPx
+//import com.sw.platecabinet.databinding.FragmentSettingListBinding
+//import com.sw.platecabinet.databinding.ItemBindViewBinding
+//import com.sw.platecabinet.ext.formatNumber
+//import com.sw.platecabinet.ext.maskName
+//import com.sw.platecabinet.model.response.EquipmentUserInfo
+//import com.sw.platecabinet.utils.ListArrangementUtil
+//import com.sw.platecabinet.utils.PlateUtils
+//import com.sw.platecabinet.utils.SpTool
+//import kotlinx.coroutines.Dispatchers
+//import kotlinx.coroutines.launch
+//import kotlinx.coroutines.withContext
+//import timber.log.Timber
+//
+///**
+// * 餐盘柜绑定的用户列表界面
+// */
+//class SettingListFragment :
+// BaseFragment(FragmentSettingListBinding::inflate) {
+//
+// /**
+// * 需要横向滚动的adapter
+// */
+// private var pageAdapter: GenericPageAdapter? = null
+//
+// /**
+// * 垂直滚动的adapter
+// */
+// private var itemAdapter: GenericItemAdapter? = null
+//
+// override fun registerDataChange() {
+// super.registerDataChange()
+//// lifecycleScope.launch {
+//// viewModel.equipmentList.collect { it ->
+//// Timber.d("registerDateChange updateAdapter it = $it")
+//// updateAdapter(it)
+//// }
//// }
// }
-
- private fun createItemAdapter(): GenericItemAdapter {
- return GenericItemAdapter(
- items = emptyList(),
- bindingInflater = ItemBindViewBinding::inflate,
- bindCallback = { item, position ->
- setItemInfo(item, position)
- }
- )
- }
-
- private fun createPageAdapter(): GenericPageAdapter {
- return GenericPageAdapter(
- pages = emptyList(),
- pageLayoutId = R.layout.page_item_layout,
- itemBindingInflater = ItemBindViewBinding::inflate,
- itemBindCallback = { item, position ->
- setItemInfo(item, position)
- }
- )
- }
-
- private fun ItemBindViewBinding.setItemInfo(
- item: EquipmentUserInfo,
- position: Int
- ) {
-// if (item.isPlaceholder()) {
-// this.llRoot.isVisible = false
-// return
-// }
- this.llRoot.isVisible = true
- this.tvNum.text = formatNumber(item.equipmentBoxCode ?: "")
- if (item.plateNumber.isNullOrBlank().not()) {
-// val date = DateTimeUtils.parseDateTime(item.updateTime)
-// val timeInMillis = date?.time ?: 0L
-// val isOldTime = DateTimeUtils.isMoreThanHoursFromNow(timeInMillis)
-
- this.llRoot.setBackgroundResource(R.drawable.grid_item_bind)
- this.tvNum.setTextColor(resources.getColor(R.color.bind_4E535D))
-// this.tvLastTime.setTextColor(
-// if (isOldTime) resources.getColor(R.color.bind_time_old) else resources.getColor(
-// R.color.bind_585868
-// )
-// )
- this.llOpen.setBackgroundResource(R.drawable.grid_button_bind)
- this.tvOpen.setTextColor(resources.getColor(R.color.bind_FFCC99))
- this.llBindInfo.visibility = View.VISIBLE
- this.tvUnbind.visibility = View.GONE
-
-// this.tvName.text = item.name.maskName()
- this.tvName.text = item.plateNumber
-
-// this.tvLastTime.text = DateTimeUtils.getTimeAgo(date)
- } else {
- this.llRoot.setBackgroundResource(R.drawable.grid_item_unbind)
- this.tvNum.setTextColor(resources.getColor(R.color.bind_FFCC99))
- this.llOpen.setBackgroundResource(R.drawable.grid_button_unbind)
- this.tvOpen.setTextColor(resources.getColor(R.color.unbind_32283C))
- this.llBindInfo.visibility = View.GONE
- this.tvUnbind.visibility = View.VISIBLE
-// this.tvUnbind.text = "未绑定"
- }
-// this.llRoot.setOnClickListener {
-//// Timber.d("itemClick llRoot ${item.name}, position = $position")
-// if (item.isBound()) {
-// MainActivity.start(
-// requireContext(),
-// pageType = PageType.UNBIND_PLATE,
-// equipmentUserInfo = item
-// )
+//
+// override fun initialize() {
+// binding.mainRecyclerView.apply {
+// if (GlobalData.arrayCross > 2) {
+// layoutManager = LinearLayoutManager(context, RecyclerView.HORIZONTAL, false)
+// pageAdapter = createPageAdapter()
+// adapter = pageAdapter
// } else {
-// MainActivity.start(
-// requireContext(),
-// pageType = PageType.BIND_PLATE,
-// equipmentUserInfo = item
+// layoutManager = GridLayoutManager(context, 2)
+// // 添加间距装饰(12dp)
+// addItemDecoration(
+// GridSpacingItemDecoration(
+// spanCount = 2,
+// spacing = requireContext().dpToPx(12),
+// includeEdge = true // 包含边缘间距
+// )
// )
+// itemAdapter = createItemAdapter()
+// adapter = itemAdapter
// }
// }
- this.llOpen.setOnClickListener {
-// item.faceId = null
- PlateUtils.open(
- fragmentActivity = requireActivity(),
- code = item.equipmentBoxCode,
- isScanCode = false,
- isSetting = true
- )
- }
- }
-
- fun updateAdapter(items: List) {
- val itemsPerPage = 2 * GlobalData.arrayVertical // 每行2个,每列11个,共22个
- if (GlobalData.arrayCross > 2) {
- lifecycleScope.launch(Dispatchers.Default) {
- // 多recyclerview
- var pages = if (items.size > itemsPerPage) {
- if (GlobalData.arrayMode == 0) {
- val pageList = items.chunked(itemsPerPage)
- pageList.mapIndexed { index, it ->
- var itemList: MutableList = it.toMutableList()
- if (index == pageList.size - 1) {
- // 补全剩余item
- itemList = (itemList + List(itemsPerPage - itemList.size) {
- EquipmentUserInfo()
- }) as MutableList
- }
- ListArrangementUtil.convertToColumnFirst(
- itemList,
- GlobalData.arrayVertical
- )
- }
- } else {
- val newItems =
- ListArrangementUtil.horizontalSortPageItem(items, GlobalData.arrayCross)
- newItems.chunked(itemsPerPage)
- }
- } else {
- listOf(
- items
- )
- }
- withContext(Dispatchers.Main) {
- pageAdapter?.updatePages(pages)
- }
- }
- } else {
- // 单 recyclerview
- lifecycleScope.launch(Dispatchers.Default) {
- var pages = items
- if (GlobalData.arrayMode == 0) {
- pages = ListArrangementUtil.verticalSortItem(pages)
- }
- withContext(Dispatchers.Main) {
- itemAdapter?.updateData(pages)
- }
- }
- }
- binding.mainRecyclerView.scrollToPosition(0)
- }
-}
\ No newline at end of file
+//
+// }
+//
+// override fun onResume() {
+// super.onResume()
+//// viewModel.getEquipmentList{
+//// updateAdapter(it)
+//// }
+// MyApp.plateList?.let {
+// updateAdapter(it)
+// }
+// }
+//
+//// private fun getPlateData(block: (List) -> Unit) {
+//// MyApp.plateList?.let {
+//// block(it)
+//// }
+////// viewModel.getEquipmentList { items ->
+////// block(items)
+////// }
+//// }
+//
+// private fun createItemAdapter(): GenericItemAdapter {
+// return GenericItemAdapter(
+// items = emptyList(),
+// bindingInflater = ItemBindViewBinding::inflate,
+// bindCallback = { item, position ->
+// setItemInfo(item, position)
+// }
+// )
+// }
+//
+// private fun createPageAdapter(): GenericPageAdapter {
+// return GenericPageAdapter(
+// pages = emptyList(),
+// pageLayoutId = R.layout.page_item_layout,
+// itemBindingInflater = ItemBindViewBinding::inflate,
+// itemBindCallback = { item, position ->
+// setItemInfo(item, position)
+// }
+// )
+// }
+//
+// private fun ItemBindViewBinding.setItemInfo(
+// item: EquipmentUserInfo,
+// position: Int
+// ) {
+//// if (item.isPlaceholder()) {
+//// this.llRoot.isVisible = false
+//// return
+//// }
+// this.llRoot.isVisible = true
+// this.tvNum.text = formatNumber(item.equipmentBoxCode ?: "")
+// if (item.plateNumber.isNullOrBlank().not()) {
+//// val date = DateTimeUtils.parseDateTime(item.updateTime)
+//// val timeInMillis = date?.time ?: 0L
+//// val isOldTime = DateTimeUtils.isMoreThanHoursFromNow(timeInMillis)
+//
+// this.llRoot.setBackgroundResource(R.drawable.grid_item_bind)
+// this.tvNum.setTextColor(resources.getColor(R.color.bind_4E535D))
+//// this.tvLastTime.setTextColor(
+//// if (isOldTime) resources.getColor(R.color.bind_time_old) else resources.getColor(
+//// R.color.bind_585868
+//// )
+//// )
+// this.llOpen.setBackgroundResource(R.drawable.grid_button_bind)
+// this.tvOpen.setTextColor(resources.getColor(R.color.bind_FFCC99))
+// this.llBindInfo.visibility = View.VISIBLE
+// this.tvUnbind.visibility = View.GONE
+//
+//// this.tvName.text = item.name.maskName()
+// this.tvName.text = item.plateNumber
+//
+//// this.tvLastTime.text = DateTimeUtils.getTimeAgo(date)
+// } else {
+// this.llRoot.setBackgroundResource(R.drawable.grid_item_unbind)
+// this.tvNum.setTextColor(resources.getColor(R.color.bind_FFCC99))
+// this.llOpen.setBackgroundResource(R.drawable.grid_button_unbind)
+// this.tvOpen.setTextColor(resources.getColor(R.color.unbind_32283C))
+// this.llBindInfo.visibility = View.GONE
+// this.tvUnbind.visibility = View.VISIBLE
+//// this.tvUnbind.text = "未绑定"
+// }
+//// this.llRoot.setOnClickListener {
+////// Timber.d("itemClick llRoot ${item.name}, position = $position")
+//// if (item.isBound()) {
+//// MainActivity.start(
+//// requireContext(),
+//// pageType = PageType.UNBIND_PLATE,
+//// equipmentUserInfo = item
+//// )
+//// } else {
+//// MainActivity.start(
+//// requireContext(),
+//// pageType = PageType.BIND_PLATE,
+//// equipmentUserInfo = item
+//// )
+//// }
+//// }
+// this.llOpen.setOnClickListener {
+//// item.faceId = null
+// PlateUtils.open(
+// fragmentActivity = requireActivity(),
+// code = item.equipmentBoxCode,
+// isScanCode = false,
+// isSetting = true
+// )
+// }
+// }
+//
+// fun updateAdapter(items: List) {
+// val itemsPerPage = 2 * GlobalData.arrayVertical // 每行2个,每列11个,共22个
+// if (GlobalData.arrayCross > 2) {
+// lifecycleScope.launch(Dispatchers.Default) {
+// // 多recyclerview
+// var pages = if (items.size > itemsPerPage) {
+// if (GlobalData.arrayMode == 0) {
+// val pageList = items.chunked(itemsPerPage)
+// pageList.mapIndexed { index, it ->
+// var itemList: MutableList = it.toMutableList()
+// if (index == pageList.size - 1) {
+// // 补全剩余item
+// itemList = (itemList + List(itemsPerPage - itemList.size) {
+// EquipmentUserInfo()
+// }) as MutableList
+// }
+// ListArrangementUtil.convertToColumnFirst(
+// itemList,
+// GlobalData.arrayVertical
+// )
+// }
+// } else {
+// val newItems =
+// ListArrangementUtil.horizontalSortPageItem(items, GlobalData.arrayCross)
+// newItems.chunked(itemsPerPage)
+// }
+// } else {
+// listOf(
+// items
+// )
+// }
+// withContext(Dispatchers.Main) {
+// pageAdapter?.updatePages(pages)
+// }
+// }
+// } else {
+// // 单 recyclerview
+// lifecycleScope.launch(Dispatchers.Default) {
+// var pages = items
+// if (GlobalData.arrayMode == 0) {
+// pages = ListArrangementUtil.verticalSortItem(pages)
+// }
+// withContext(Dispatchers.Main) {
+// itemAdapter?.updateData(pages)
+// }
+// }
+// }
+// binding.mainRecyclerView.scrollToPosition(0)
+// }
+//}
\ No newline at end of file
diff --git a/app/src/main/java/com/sw/platecabinet/model/ErrorInfo.kt b/app/src/main/java/com/sw/platecabinet/model/ErrorInfo.kt
index b857e4c..47c4449 100644
--- a/app/src/main/java/com/sw/platecabinet/model/ErrorInfo.kt
+++ b/app/src/main/java/com/sw/platecabinet/model/ErrorInfo.kt
@@ -1,19 +1,17 @@
package com.sw.platecabinet.model
-import com.sw.platecabinet.model.response.EquipmentUserInfo
-
/**
* 错误信息 code == 200 成功
*/
-data class ErrorInfo(
- val code: String = "00000",
- val msg: String = "",
- val equipmentUserInfo: EquipmentUserInfo? = null
-) {
- fun isSuccess(): Boolean {
- return code == "00000"
- }
-}
+//data class ErrorInfo(
+// val code: String = "00000",
+// val msg: String = "",
+// val equipmentUserInfo: EquipmentUserInfo? = null
+//) {
+// fun isSuccess(): Boolean {
+// return code == "00000"
+// }
+//}
data class DeviceConfig(
var arcsoftAppId: String? = null,
diff --git a/app/src/main/java/com/sw/platecabinet/model/response/EquipmentInfo.kt b/app/src/main/java/com/sw/platecabinet/model/response/EquipmentInfo.kt
index 4d85533..5d9602f 100644
--- a/app/src/main/java/com/sw/platecabinet/model/response/EquipmentInfo.kt
+++ b/app/src/main/java/com/sw/platecabinet/model/response/EquipmentInfo.kt
@@ -1,72 +1,72 @@
-package com.sw.platecabinet.model.response
-
-
-import android.os.Parcelable
-import com.google.gson.annotations.SerializedName
-import kotlinx.parcelize.Parcelize
-
-@Parcelize
-data class EquipmentInfo(
- @SerializedName("appPackageLocalUrl")
- val appPackageLocalUrl: String? = "",
- @SerializedName("appPackageUrl")
- val appPackageUrl: String? = "",
- @SerializedName("arcsoftActiveKey")
- val arcsoftActiveKey: String? = "",
- @SerializedName("arcsoftAppId")
- val arcsoftAppId: String? = "",
- @SerializedName("arcsoftSdkKey")
- val arcsoftSdkKey: String? = "",
- @SerializedName("arrayCross")
- val arrayCross: Int? = 0,
- @SerializedName("arrayMode")
- val arrayMode: String? = "",
- @SerializedName("arrayVertical")
- val arrayVertical: Int? = 0,
- @SerializedName("canteenId")
- val canteenId: String? = "",
- @SerializedName("canteenName")
- val canteenName: String? = "",
- @SerializedName("clientServerIp")
- val clientServerIp: String? = "",
- @SerializedName("createBy")
- val createBy: String? = "",
- @SerializedName("createTime")
- val createTime: String? = "",
- @SerializedName("customerName")
- val customerName: String? = "",
- @SerializedName("equipmentCode")
- val equipmentCode: String? = "",
- @SerializedName("equipmentName")
- val equipmentName: String? = "",
- @SerializedName("equipmentName_dictText")
- val equipmentNameDictText: String? = "",
- @SerializedName("id")
- val id: String? = "",
- @SerializedName("isSync")
- val isSync: Int? = 0,
- @SerializedName("mqName")
- val mqName: String? = "",
- @SerializedName("mqPassword")
- val mqPassword: String? = "",
- @SerializedName("orgCode")
- val orgCode: String? = "",
- @SerializedName("owningTrack")
- val owningTrack: Int? = 0,
- @SerializedName("owningTrackOrder")
- val owningTrackOrder: Int? = 0,
- @SerializedName("screenHtml")
- val screenHtml: String? = "",
- @SerializedName("serviceRequestAddress")
- val serviceRequestAddress: String? = "",
- @SerializedName("status")
- val status: Int? = 0,
- @SerializedName("sysOrgCode")
- val sysOrgCode: String? = "",
- @SerializedName("updateBy")
- val updateBy: String? = "",
- @SerializedName("updateTime")
- val updateTime: String? = "",
- @SerializedName("zhstServerIp")
- val zhstServerIp: String? = ""
-) : Parcelable
\ No newline at end of file
+//package com.sw.platecabinet.model.response
+//
+//
+//import android.os.Parcelable
+//import com.google.gson.annotations.SerializedName
+//import kotlinx.parcelize.Parcelize
+//
+//@Parcelize
+//data class EquipmentInfo(
+// @SerializedName("appPackageLocalUrl")
+// val appPackageLocalUrl: String? = "",
+// @SerializedName("appPackageUrl")
+// val appPackageUrl: String? = "",
+// @SerializedName("arcsoftActiveKey")
+// val arcsoftActiveKey: String? = "",
+// @SerializedName("arcsoftAppId")
+// val arcsoftAppId: String? = "",
+// @SerializedName("arcsoftSdkKey")
+// val arcsoftSdkKey: String? = "",
+// @SerializedName("arrayCross")
+// val arrayCross: Int? = 0,
+// @SerializedName("arrayMode")
+// val arrayMode: String? = "",
+// @SerializedName("arrayVertical")
+// val arrayVertical: Int? = 0,
+// @SerializedName("canteenId")
+// val canteenId: String? = "",
+// @SerializedName("canteenName")
+// val canteenName: String? = "",
+// @SerializedName("clientServerIp")
+// val clientServerIp: String? = "",
+// @SerializedName("createBy")
+// val createBy: String? = "",
+// @SerializedName("createTime")
+// val createTime: String? = "",
+// @SerializedName("customerName")
+// val customerName: String? = "",
+// @SerializedName("equipmentCode")
+// val equipmentCode: String? = "",
+// @SerializedName("equipmentName")
+// val equipmentName: String? = "",
+// @SerializedName("equipmentName_dictText")
+// val equipmentNameDictText: String? = "",
+// @SerializedName("id")
+// val id: String? = "",
+// @SerializedName("isSync")
+// val isSync: Int? = 0,
+// @SerializedName("mqName")
+// val mqName: String? = "",
+// @SerializedName("mqPassword")
+// val mqPassword: String? = "",
+// @SerializedName("orgCode")
+// val orgCode: String? = "",
+// @SerializedName("owningTrack")
+// val owningTrack: Int? = 0,
+// @SerializedName("owningTrackOrder")
+// val owningTrackOrder: Int? = 0,
+// @SerializedName("screenHtml")
+// val screenHtml: String? = "",
+// @SerializedName("serviceRequestAddress")
+// val serviceRequestAddress: String? = "",
+// @SerializedName("status")
+// val status: Int? = 0,
+// @SerializedName("sysOrgCode")
+// val sysOrgCode: String? = "",
+// @SerializedName("updateBy")
+// val updateBy: String? = "",
+// @SerializedName("updateTime")
+// val updateTime: String? = "",
+// @SerializedName("zhstServerIp")
+// val zhstServerIp: String? = ""
+//) : Parcelable
\ No newline at end of file
diff --git a/app/src/main/java/com/sw/platecabinet/model/response/EquipmentUserInfo.kt b/app/src/main/java/com/sw/platecabinet/model/response/EquipmentUserInfo.kt
index 4adc7d1..7404e5a 100644
--- a/app/src/main/java/com/sw/platecabinet/model/response/EquipmentUserInfo.kt
+++ b/app/src/main/java/com/sw/platecabinet/model/response/EquipmentUserInfo.kt
@@ -1,90 +1,90 @@
-package com.sw.platecabinet.model.response
-
-import android.os.Parcelable
-import android.text.TextUtils
-//import com.google.gson.annotations.SerializedName
-import com.sw.platecabinet.GlobalData
-import kotlinx.parcelize.Parcelize
-
-/**
- * 设备绑定用户信息
- */
-@Parcelize
-data class EquipmentUserInfo(
+//package com.sw.platecabinet.model.response
+//
+//import android.os.Parcelable
+//import android.text.TextUtils
+////import com.google.gson.annotations.SerializedName
+//import com.sw.platecabinet.GlobalData
+//import kotlinx.parcelize.Parcelize
+//
+///**
+// * 设备绑定用户信息
+// */
+//@Parcelize
+//data class EquipmentUserInfo(
+//// /**
+//// * 主键
+//// */
+//// val id: Long? = 0,
+//// /**
+//// *
+//// * 设备Id
+//// */
+//// val equipmentId: String? = "",
+//// /**
+//// * 设备编号
+//// */
+//// var equipmentCode: String? = "",
// /**
-// * 主键
+// * 设备盒子编号
// */
-// val id: Long? = 0,
+// var equipmentBoxCode: String? = "",
+// /**
+// * 会员Id
+// */
+// var faceId: String? = "",
+// /**
+// * 餐盘编号
+// */
+// var plateNumber: String? = "",
+//// /**
+//// * 设备名称
+//// */
+//// val equipmentName: String? = "",
+//
+//// val orderNo: String? = "",
// /**
// *
-// * 设备Id
+// * 更新时间
// */
-// val equipmentId: String? = "",
-// /**
-// * 设备编号
-// */
-// var equipmentCode: String? = "",
- /**
- * 设备盒子编号
- */
- var equipmentBoxCode: String? = "",
- /**
- * 会员Id
- */
- var faceId: String? = "",
- /**
- * 餐盘编号
- */
- var plateNumber: String? = "",
-// /**
-// * 设备名称
-// */
-// val equipmentName: String? = "",
-
-// val orderNo: String? = "",
- /**
- *
- * 更新时间
- */
- var updateTime: String? = "",
-
-// val name: String? = "",
-// val phone: String? = "",
-// val faceUrl: String? = "",
-// val mealTime: String? = "",
-// val mealTimeInterval: String? = "",
-// val openTime: String? = "",
-// val openTimeInterval: String? = "",
-// val eatCount: Int? = 0,
+// var updateTime: String? = "",
//
-// var cardBalance: Double? = 0.toDouble(),
-
-// /**
-// * 用于cardBalance后续拦截判断
-// */
-// var showBalanceNotEnoughDialog: Boolean = false,
-// var isIntercept: Boolean = false
-) : Parcelable {
-
-// /**
-// * 是否已绑定
-// */
-// fun isBound(): Boolean {
-// return faceId.isNullOrBlank().not()
-// }
-
-// /**
-// * 是否是其他设备
-// */
-// fun isOtherEquipment(): Boolean {
-// return equipmentCode != null && equipmentCode != "" && GlobalData.globalEquipmentCode != equipmentCode
-// }
-
-// fun hasEquipmentBox(): Boolean {
-// return !TextUtils.isEmpty(equipmentBoxCode)
-// }
+//// val name: String? = "",
+//// val phone: String? = "",
+//// val faceUrl: String? = "",
+//// val mealTime: String? = "",
+//// val mealTimeInterval: String? = "",
+//// val openTime: String? = "",
+//// val openTimeInterval: String? = "",
+//// val eatCount: Int? = 0,
+////
+//// var cardBalance: Double? = 0.toDouble(),
//
-// fun isPlaceholder(): Boolean {
-// return equipmentBoxCode.isNullOrBlank()
-// }
-}
\ No newline at end of file
+//// /**
+//// * 用于cardBalance后续拦截判断
+//// */
+//// var showBalanceNotEnoughDialog: Boolean = false,
+//// var isIntercept: Boolean = false
+//) : Parcelable {
+//
+//// /**
+//// * 是否已绑定
+//// */
+//// fun isBound(): Boolean {
+//// return faceId.isNullOrBlank().not()
+//// }
+//
+//// /**
+//// * 是否是其他设备
+//// */
+//// fun isOtherEquipment(): Boolean {
+//// return equipmentCode != null && equipmentCode != "" && GlobalData.globalEquipmentCode != equipmentCode
+//// }
+//
+//// fun hasEquipmentBox(): Boolean {
+//// return !TextUtils.isEmpty(equipmentBoxCode)
+//// }
+////
+//// fun isPlaceholder(): Boolean {
+//// return equipmentBoxCode.isNullOrBlank()
+//// }
+//}
\ No newline at end of file
diff --git a/app/src/main/java/com/sw/platecabinet/model/response/SearchResult.kt b/app/src/main/java/com/sw/platecabinet/model/response/SearchResult.kt
index 4ee8dca..eafbab6 100644
--- a/app/src/main/java/com/sw/platecabinet/model/response/SearchResult.kt
+++ b/app/src/main/java/com/sw/platecabinet/model/response/SearchResult.kt
@@ -1,85 +1,85 @@
-package com.sw.platecabinet.model.response
-
-
-import android.os.Parcelable
-import com.google.gson.annotations.SerializedName
-import kotlinx.parcelize.Parcelize
-
-/**
- * 搜索会员信息结果
- */
-@Parcelize
-data class SearchResult(
- @SerializedName("endRow")
- val endRow: Int? = 0,
- @SerializedName("hasNextPage")
- val hasNextPage: Boolean? = false,
- @SerializedName("hasPreviousPage")
- val hasPreviousPage: Boolean? = false,
- @SerializedName("isFirstPage")
- val isFirstPage: Boolean? = false,
- @SerializedName("isLastPage")
- val isLastPage: Boolean? = false,
- @SerializedName("list")
- val list: List? = listOf(),
- @SerializedName("navigateFirstPage")
- val navigateFirstPage: Int? = 0,
- @SerializedName("navigateLastPage")
- val navigateLastPage: Int? = 0,
- @SerializedName("navigatePages")
- val navigatePages: Int? = 0,
- @SerializedName("navigatepageNums")
- val navigatepageNums: List? = listOf(),
- @SerializedName("nextPage")
- val nextPage: Int? = 0,
- @SerializedName("pageNum")
- val pageNum: Int? = 0,
- @SerializedName("pageSize")
- val pageSize: Int? = 0,
- @SerializedName("pages")
- val pages: Int? = 0,
- @SerializedName("prePage")
- val prePage: Int? = 0,
- @SerializedName("size")
- val size: Int? = 0,
- @SerializedName("startRow")
- val startRow: Int? = 0,
- @SerializedName("total")
- val total: Int? = 0
-) : Parcelable {
- @Parcelize
- data class Member(
-// @SerializedName("cardBalance")
-// val cardBalance: String? = "",
-// @SerializedName("cardCode")
-// val cardCode: String? = "",
-// @SerializedName("consumptionCount")
-// val consumptionCount: Int? = 0,
-// @SerializedName("consumptionTotal")
-// val consumptionTotal: String? = "",
-// @SerializedName("createTime")
-// val createTime: String? = "",
-// @SerializedName("firstTopUpTime")
-// val firstTopUpTime: String? = "",
-// @SerializedName("id")
-// val id: Int? = 0,
-// @SerializedName("integralBalance")
-// val integralBalance: Int? = 0,
-// @SerializedName("lastConsumptionTime")
-// val lastConsumptionTime: String? = "",
-// @SerializedName("memberFrom")
-// val memberFrom: Int? = 0,
-// @SerializedName("name")
+//package com.sw.platecabinet.model.response
+//
+//
+//import android.os.Parcelable
+//import com.google.gson.annotations.SerializedName
+//import kotlinx.parcelize.Parcelize
+//
+///**
+// * 搜索会员信息结果
+// */
+//@Parcelize
+//data class SearchResult(
+// @SerializedName("endRow")
+// val endRow: Int? = 0,
+// @SerializedName("hasNextPage")
+// val hasNextPage: Boolean? = false,
+// @SerializedName("hasPreviousPage")
+// val hasPreviousPage: Boolean? = false,
+// @SerializedName("isFirstPage")
+// val isFirstPage: Boolean? = false,
+// @SerializedName("isLastPage")
+// val isLastPage: Boolean? = false,
+// @SerializedName("list")
+// val list: List? = listOf(),
+// @SerializedName("navigateFirstPage")
+// val navigateFirstPage: Int? = 0,
+// @SerializedName("navigateLastPage")
+// val navigateLastPage: Int? = 0,
+// @SerializedName("navigatePages")
+// val navigatePages: Int? = 0,
+// @SerializedName("navigatepageNums")
+// val navigatepageNums: List? = listOf(),
+// @SerializedName("nextPage")
+// val nextPage: Int? = 0,
+// @SerializedName("pageNum")
+// val pageNum: Int? = 0,
+// @SerializedName("pageSize")
+// val pageSize: Int? = 0,
+// @SerializedName("pages")
+// val pages: Int? = 0,
+// @SerializedName("prePage")
+// val prePage: Int? = 0,
+// @SerializedName("size")
+// val size: Int? = 0,
+// @SerializedName("startRow")
+// val startRow: Int? = 0,
+// @SerializedName("total")
+// val total: Int? = 0
+//) : Parcelable {
+// @Parcelize
+// data class Member(
+//// @SerializedName("cardBalance")
+//// val cardBalance: String? = "",
+//// @SerializedName("cardCode")
+//// val cardCode: String? = "",
+//// @SerializedName("consumptionCount")
+//// val consumptionCount: Int? = 0,
+//// @SerializedName("consumptionTotal")
+//// val consumptionTotal: String? = "",
+//// @SerializedName("createTime")
+//// val createTime: String? = "",
+//// @SerializedName("firstTopUpTime")
+//// val firstTopUpTime: String? = "",
+//// @SerializedName("id")
+//// val id: Int? = 0,
+//// @SerializedName("integralBalance")
+//// val integralBalance: Int? = 0,
+//// @SerializedName("lastConsumptionTime")
+//// val lastConsumptionTime: String? = "",
+//// @SerializedName("memberFrom")
+//// val memberFrom: Int? = 0,
+//// @SerializedName("name")
+//// val name: String? = "",
+//// @SerializedName("phone")
+//// val phone: String? = "",
+//// @SerializedName("rewardBalance")
+//// val rewardBalance: String? = "",
+//// @SerializedName("topUpBalance")
+//// val topUpBalance: String? = ""
+// val id: String? = "",
+// val faceId: String? = "",
// val name: String? = "",
-// @SerializedName("phone")
// val phone: String? = "",
-// @SerializedName("rewardBalance")
-// val rewardBalance: String? = "",
-// @SerializedName("topUpBalance")
-// val topUpBalance: String? = ""
- val id: String? = "",
- val faceId: String? = "",
- val name: String? = "",
- val phone: String? = "",
- ) : Parcelable
-}
\ No newline at end of file
+// ) : Parcelable
+//}
\ No newline at end of file
diff --git a/app/src/main/java/com/sw/platecabinet/network/api/ApiService.kt b/app/src/main/java/com/sw/platecabinet/network/api/ApiService.kt
index c1e1652..90be6ca 100644
--- a/app/src/main/java/com/sw/platecabinet/network/api/ApiService.kt
+++ b/app/src/main/java/com/sw/platecabinet/network/api/ApiService.kt
@@ -2,173 +2,28 @@ package com.sw.platecabinet.network.api
import com.sw.platecabinet.GlobalData
import com.sw.platecabinet.model.DeviceConfig
-import com.sw.platecabinet.model.request.BindParam
-import com.sw.platecabinet.model.request.EquipmentParam
-import com.sw.platecabinet.model.request.LoginParam
-import com.sw.platecabinet.model.request.SearchParam
import com.sw.platecabinet.model.response.ApiResponse
-import com.sw.platecabinet.model.response.EquipmentInfo
-import com.sw.platecabinet.model.response.EquipmentUserInfo
-import com.sw.platecabinet.model.response.SearchResult
import com.sw.platecabinet.model.response.UserFaceModel
import okhttp3.MultipartBody
import retrofit2.http.Body
import retrofit2.http.Field
import retrofit2.http.FormUrlEncoded
import retrofit2.http.GET
-import retrofit2.http.Header
import retrofit2.http.Multipart
import retrofit2.http.POST
import retrofit2.http.Part
-import retrofit2.http.Query
import retrofit2.http.Url
interface ApiService {
-// /**
-// * device获取token
-// */
-// @GET("sys/getEquipmentToken")
-// suspend fun getDeviceToken(
-// @Query("qrcodeId") qrcodeId: String,
-// @Query("appVersion") appVersion: String = GlobalData.appVersion
-// ): ApiResponse
-//
-// /**
-// *获取配置信息
-// */
-// @GET("equipment/stEquipment/queryByEquipmentCode")
-// suspend fun getDeviceInfo(
-// @Query("equipmentCode") equipmentCode: String,
-// @Query("appVersion") appVersion: String = GlobalData.appVersion,
-// @Header("X-Access-Token") token: String
-// ): ApiResponse
-//
-// /**
-// * 生成token
-// */
-// @GET//("/shuwei-zhct/scales/generateToken")
-// suspend fun generateToken(
-// @Url url: String = "${GlobalData.appBaseUrl}/shuwei-zhct/scales/generateToken",
-// @Query("deviceId") deviceId: String,
-// @Query("appVersion") appVersion: String,
-// @Query("equipmentCode") equipmentCode: String
-// ): ApiResponse
-
/**
- * 获取人脸数据
+ * 获取人脸缓存数据
*/
-// @GET//("/shuwei-zhct/scales/getUserFaceCache")
-// suspend fun getUserFaceCache(
-// @Url url: String = "${GlobalData.appBaseUrl}/shuwei-zhct/scales/getUserFaceCache",
-// @Query("appVersion") appVersion: String,
-// @Query("equipmentCode") equipmentCode: String
-// ): ApiResponse>
@POST
suspend fun getUserFaceCache(
@Url url: String = "${GlobalData.appBaseUrl}/terminal/neglect/common/app/faceFeature/list",
@Body param: Map
): ApiResponse>
-// /**
-// * 餐盘用户信息获取
-// */
-// @POST//("/shuwei-zhct/swEquipmentRelUser/equipmentBoxLogin")
-// suspend fun equipmentBoxLogin(
-// @Url url: String = "${GlobalData.appBaseUrl}/shuwei-zhct/swEquipmentRelUser/equipmentBoxLogin",
-// @Body param: LoginParam
-// ): ApiResponse
-
- /**
- * 餐盘用户信息获取
- */
- @POST//("/shuwei-zhct/swEquipmentRelUser/equipmentBoxLogin")
- suspend fun equipmentBoxLogin(
- @Url url: String = "${GlobalData.appBaseUrl}/terminal/neglect/sideboard/app/getPlateBoxUserInfo",
- @Body param: LoginParam
- ): ApiResponse
-
- /**
- * 餐盘用户信息列表查询
- */
-// @POST//("/shuwei-zhct/swEquipmentRelUser/list")
-// suspend fun getEquipmentList(
-// @Url url: String = "${GlobalData.appBaseUrl}/shuwei-zhct/swEquipmentRelUser/list",
-// @Body param: EquipmentParam
-// ): ApiResponse>
-
- @GET
- suspend fun getEquipmentList(
- @Url url: String = "${GlobalData.appBaseUrl}/terminal/neglect/sideboard/app/getYxMemberRefPlateByEquipmentCode",
- ): ApiResponse>
-// /**
-// * 餐盘用户信息绑定解绑
-// */
-// @POST//("/shuwei-zhct/swEquipmentRelUser/addOrEdit")
-// suspend fun bindEquipment(
-// @Url url: String = "${GlobalData.appBaseUrl}/shuwei-zhct/swEquipmentRelUser/addOrEdit",
-// @Body param: BindParam
-// ): ApiResponse
-
- /**
- * 餐盘绑定
- */
- @POST
- suspend fun plateBind(
- @Url url: String = "${GlobalData.appBaseUrl}/terminal/neglect/sideboard/app/plateBinding",
- @Body param: BindParam
- ): ApiResponse
-
- /**
- * 餐盘解绑
- */
- @POST
- @FormUrlEncoded
- suspend fun plateUnbind(
- @Url url: String = "${GlobalData.appBaseUrl}/terminal/neglect/sideboard/app/plateUnbind",
- @Field("id") id: Long?
- ): ApiResponse
-
- /**
- * 用户信息模糊搜索
- */
- @POST//("/shuwei-user/swclientUserInfoShop/selectList")
- suspend fun searchUser(
-// @Url url: String = "${GlobalData.appBaseUrl}/shuwei-user/swclientUserInfoShop/selectList",
- @Url url: String = "${GlobalData.appBaseUrl}/terminal/neglect/common/app/getUserInfoByNameOrPhone",
- @Body param: SearchParam
- ): ApiResponse?>
-
-// /**
-// * 通过餐盘号获取信息
-// */
-// @POST//("/shuwei-zhct/swEquipmentRelUser/findByPlateNumber")
-// suspend fun findByPlateNumber(
-// @Url url: String = "${GlobalData.appBaseUrl}/shuwei-zhct/swEquipmentRelUser/findByPlateNumber",
-// @Body param: BindParam
-// ): ApiResponse
-
-
- /**
- * 通过餐盘号获取信息
- */
- @GET
- suspend fun findByPlateNumber(
- @Url url: String = "${GlobalData.appBaseUrl}/terminal/neglect/sideboard/app/getMemberRefPlateByPlateNumber",
- @Query("plateNumber") plateNumber: String
- ): ApiResponse
-
-
- /**
- * 获取人脸增量数据
- *
- * @param timeDate 时间戳(毫秒级)
- */
-// @GET//("/shuwei-zhct/scales/getHeartbeatInterface")
-// suspend fun getHeartbeatInterface(
-// @Url url: String = "${GlobalData.appBaseUrl}/shuwei-zhct/scales/getHeartbeatInterface",
-// @Query("timeDate") timeDate: Long
-// ): ApiResponse>
-
/**
* 获取人脸增量数据
*/
@@ -193,10 +48,13 @@ interface ApiService {
@FormUrlEncoded
suspend fun addUserFace(
@Url url: String = "${GlobalData.appBaseUrl}/terminal/neglect/common/app/addUserByFace",
- @Field("featureChar") faceData:String,
- @Field("url") imageUr:String
+ @Field("featureChar") faceData: String,
+ @Field("url") imageUr: String
): ApiResponse
+ /**
+ * 上传图片
+ */
@Multipart
@POST
suspend fun uploadImage(
diff --git a/app/src/main/java/com/sw/platecabinet/repository/RemoteRepository.kt b/app/src/main/java/com/sw/platecabinet/repository/RemoteRepository.kt
index d09dfc0..bda6c05 100644
--- a/app/src/main/java/com/sw/platecabinet/repository/RemoteRepository.kt
+++ b/app/src/main/java/com/sw/platecabinet/repository/RemoteRepository.kt
@@ -1,10 +1,7 @@
package com.sw.platecabinet.repository
import com.sw.platecabinet.model.DeviceConfig
-import com.sw.platecabinet.model.request.SearchParam
import com.sw.platecabinet.model.response.ApiResponse
-import com.sw.platecabinet.model.response.EquipmentUserInfo
-import com.sw.platecabinet.model.response.SearchResult
import com.sw.platecabinet.model.response.UserFaceModel
import com.sw.platecabinet.network.api.ApiService
import com.sw.platecabinet.utils.FileUtils
@@ -17,42 +14,6 @@ class RemoteRepository constructor(
private val apiService: ApiService
) : BaseRepository() {
-// /**
-// * 生成token
-// */
-// suspend fun getDeviceToken(qrcodeId: String): ApiResponse {
-// return safeApiCall {
-// apiService.getDeviceToken(
-// qrcodeId
-// )
-// }
-// }
-//
-// /**
-// * 获取设备信息
-// */
-// suspend fun getDeviceInfo(equipmentCode: String, token: String): ApiResponse {
-// return safeApiCall {
-// apiService.getDeviceInfo(
-// equipmentCode,
-// token = token
-// )
-// }
-// }
-//
-// /**
-// * 生成token
-// */
-// suspend fun generateToken(deviceId: String): ApiResponse {
-// return safeApiCall {
-// apiService.generateToken(
-// deviceId = deviceId,
-// appVersion = GlobalData.appVersion,
-// equipmentCode = GlobalData.globalEquipmentCode
-// )
-// }
-// }
-
/**
* 获取人脸数据
*/
@@ -70,57 +31,6 @@ class RemoteRepository constructor(
}
}
-// /**
-// * 登录
-// */
-// suspend fun equipmentBoxLogin(param: LoginParam): ApiResponse {
-// return safeApiCall { apiService.equipmentBoxLogin(param = param) }
-// }
-
-// /**
-// * 获取设备绑定用户列表
-// */
-// suspend fun getEquipmentList(): ApiResponse> {
-// return safeApiCall { apiService.getEquipmentList() }
-// }
-
-// /**
-// * 餐盘用户信息绑定解绑
-// */
-// suspend fun bindEquipment(param: BindParam): ApiResponse {
-// return safeApiCall { apiService.bindEquipment(param = param) }
-// }
-
-// suspend fun plateBind(param: BindParam): ApiResponse {
-// return safeApiCall { apiService.plateBind(param = param) }
-// }
-
-// suspend fun plateUnbind(id: Long?): ApiResponse {
-// return safeApiCall { apiService.plateUnbind(id = id) }
-// }
-
- /**
- * 用户信息模糊搜索
- */
- suspend fun searchUser(param: SearchParam): ApiResponse?> {
- return safeApiCall { apiService.searchUser(param = param) }
- }
-
- /**
- * 通过餐盘编号获取绑定信息
- */
- suspend fun findByPlateNumber(plateNumber: String): ApiResponse {
- return safeApiCall { apiService.findByPlateNumber(plateNumber = plateNumber) }
- }
-
-// /**
-// * 获取人脸增量数据
-// *
-// * @param timeDate 时间戳(毫秒级)
-// */
-// suspend fun getHeartbeatInterface(timeDate: Long): ApiResponse> {
-// return safeApiCall { apiService.getHeartbeatInterface(timeDate = timeDate) }
-// }
suspend fun getFaceIncrementList(
pageNum: Long,
@@ -142,7 +52,7 @@ class RemoteRepository constructor(
return safeApiCall { apiService.getDeviceConfig() }
}
- suspend fun addUserFace(faceData: String, imageUr:String): ApiResponse {
+ suspend fun addUserFace(faceData: String, imageUr: String): ApiResponse {
return safeApiCall { apiService.addUserFace(faceData = faceData, imageUr = imageUr) }
}
diff --git a/app/src/main/java/com/sw/platecabinet/utils/DateTimeUtils.kt b/app/src/main/java/com/sw/platecabinet/utils/DateTimeUtils.kt
index a10f64c..ba062a8 100644
--- a/app/src/main/java/com/sw/platecabinet/utils/DateTimeUtils.kt
+++ b/app/src/main/java/com/sw/platecabinet/utils/DateTimeUtils.kt
@@ -28,10 +28,10 @@ object DateTimeUtils {
}
/**
- * 获取带时间的完整中文格式(示例:2025年6月11日 星期三 14:30)
+ * 获取带时间的完整中文格式(示例:2025年06月11日 星期三 14:30)
*/
fun getChineseDateTimeString(date: Date = Date()): String {
- return SimpleDateFormat("yyyy年M月d日 EEEE HH:mm:ss", Locale.CHINA).format(date)
+ return SimpleDateFormat("yyyy年MM月dd日 EEEE HH:mm", Locale.CHINA).format(date)
}
// 使用线程安全的日期格式化(避免 SimpleDateFormat 的线程安全问题)
@@ -52,7 +52,7 @@ object DateTimeUtils {
*/
fun realTimeChineseDateFlow(intervalMillis: Long = 1000) = flow {
while (true) {
- emit(getChineseDateTimePair())
+ emit(getChineseDateTimeString())
delay(intervalMillis)
}
}
diff --git a/app/src/main/java/com/sw/platecabinet/utils/ListArrangementUtil.kt b/app/src/main/java/com/sw/platecabinet/utils/ListArrangementUtil.kt
index 9e82dff..d42542c 100644
--- a/app/src/main/java/com/sw/platecabinet/utils/ListArrangementUtil.kt
+++ b/app/src/main/java/com/sw/platecabinet/utils/ListArrangementUtil.kt
@@ -1,88 +1,88 @@
-package com.sw.platecabinet.utils
-
-import com.sw.platecabinet.model.response.EquipmentUserInfo
-import timber.log.Timber
-import kotlin.math.ceil
-
-/**
- * 列表排序工具类
- */
-object ListArrangementUtil {
-
- /**
- * page item水平排序
- */
- fun horizontalSortPageItem(
- list: List,
- columns: Int,
- defaultValue: EquipmentUserInfo = EquipmentUserInfo()
- ): List {
- Timber.d("horizontalSortPageItem")
- require(columns > 0) { "Columns must be positive" }
-
- val filledList = list.padToMultiple(columns, defaultValue)
- val chunks = filledList.chunked(columns)
-
- return (0 until columns)
- .windowed(2, 2, partialWindows = true)
- .flatMap { group ->
- when (group.size) {
- 2 -> chunks.flatMap { listOf(it[group[0]], it[group[1]]) }
- 1 -> chunks.flatMap {
- listOf(it[group[0]], EquipmentUserInfo(equipmentBoxCode = null))
- }.dropLast(1)
- else -> error("Unexpected group size")
- }
- }
- }
-
- /**
- * item 垂直排序
- */
- fun verticalSortItem(list: List): List {
- Timber.d("verticalSortItem")
- val users = list.padToEvenSize()
- val half = users.size / 2
-
- return users.take(half)
- .zip(users.drop(half)) { a, b -> listOf(a, b) }
- .flatten()
- }
-
- /**
- * page item垂直排序
- */
- fun convertToColumnFirst(
- original: List,
- cols: Int
- ): List {
- Timber.d("convertToColumnFirst")
- require(cols > 0) { "Columns must be positive" }
-
- val rows = ceil(original.size.toDouble() / cols).toInt()
- return List(original.size) { pos ->
- original.getOrNull(pos % rows * cols + pos / rows) ?: EquipmentUserInfo()
- }
- }
-
- // 提取的扩展函数
- private fun List.padToMultiple(
- multiple: Int,
- defaultValue: EquipmentUserInfo
- ): List {
- return if (size % multiple != 0) {
- this + List(multiple - (size % multiple)) { defaultValue }
- } else {
- this
- }
- }
-
- private fun List.padToEvenSize(): List {
- return if (size % 2 != 0) {
- Timber.d("列表长度必须是偶数")
- this + EquipmentUserInfo()
- } else {
- this
- }
- }
-}
\ No newline at end of file
+//package com.sw.platecabinet.utils
+//
+//import com.sw.platecabinet.model.response.EquipmentUserInfo
+//import timber.log.Timber
+//import kotlin.math.ceil
+//
+///**
+// * 列表排序工具类
+// */
+//object ListArrangementUtil {
+//
+// /**
+// * page item水平排序
+// */
+// fun horizontalSortPageItem(
+// list: List,
+// columns: Int,
+// defaultValue: EquipmentUserInfo = EquipmentUserInfo()
+// ): List {
+// Timber.d("horizontalSortPageItem")
+// require(columns > 0) { "Columns must be positive" }
+//
+// val filledList = list.padToMultiple(columns, defaultValue)
+// val chunks = filledList.chunked(columns)
+//
+// return (0 until columns)
+// .windowed(2, 2, partialWindows = true)
+// .flatMap { group ->
+// when (group.size) {
+// 2 -> chunks.flatMap { listOf(it[group[0]], it[group[1]]) }
+// 1 -> chunks.flatMap {
+// listOf(it[group[0]], EquipmentUserInfo(equipmentBoxCode = null))
+// }.dropLast(1)
+// else -> error("Unexpected group size")
+// }
+// }
+// }
+//
+// /**
+// * item 垂直排序
+// */
+// fun verticalSortItem(list: List): List {
+// Timber.d("verticalSortItem")
+// val users = list.padToEvenSize()
+// val half = users.size / 2
+//
+// return users.take(half)
+// .zip(users.drop(half)) { a, b -> listOf(a, b) }
+// .flatten()
+// }
+//
+// /**
+// * page item垂直排序
+// */
+// fun convertToColumnFirst(
+// original: List,
+// cols: Int
+// ): List {
+// Timber.d("convertToColumnFirst")
+// require(cols > 0) { "Columns must be positive" }
+//
+// val rows = ceil(original.size.toDouble() / cols).toInt()
+// return List(original.size) { pos ->
+// original.getOrNull(pos % rows * cols + pos / rows) ?: EquipmentUserInfo()
+// }
+// }
+//
+// // 提取的扩展函数
+// private fun List.padToMultiple(
+// multiple: Int,
+// defaultValue: EquipmentUserInfo
+// ): List {
+// return if (size % multiple != 0) {
+// this + List(multiple - (size % multiple)) { defaultValue }
+// } else {
+// this
+// }
+// }
+//
+// private fun List.padToEvenSize(): List {
+// return if (size % 2 != 0) {
+// Timber.d("列表长度必须是偶数")
+// this + EquipmentUserInfo()
+// } else {
+// this
+// }
+// }
+//}
\ No newline at end of file
diff --git a/app/src/main/java/com/sw/platecabinet/utils/PermissionHelper.kt b/app/src/main/java/com/sw/platecabinet/utils/PermissionHelper.kt
index 13129da..a03a264 100644
--- a/app/src/main/java/com/sw/platecabinet/utils/PermissionHelper.kt
+++ b/app/src/main/java/com/sw/platecabinet/utils/PermissionHelper.kt
@@ -77,11 +77,7 @@ class PermissionHelper private constructor(
val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply {
data = Uri.fromParts("package", context.packageName, null)
}
- if (context is Activity) {
- context.startActivity(intent)
- } else if (context is Fragment) {
- context.startActivity(intent)
- }
+ context.startActivity(intent)
}
}
diff --git a/app/src/main/java/com/sw/platecabinet/utils/PlateUtils.kt b/app/src/main/java/com/sw/platecabinet/utils/PlateUtils.kt
index 6794a3c..77859c5 100644
--- a/app/src/main/java/com/sw/platecabinet/utils/PlateUtils.kt
+++ b/app/src/main/java/com/sw/platecabinet/utils/PlateUtils.kt
@@ -1,13 +1,7 @@
package com.sw.platecabinet.utils
import androidx.fragment.app.FragmentActivity
-import com.sw.plate.utils.ToastUtils
-import com.sw.plate.utils.comn.SerialApi
-import com.sw.plate.utils.comn.SerialPortManager
import com.sw.platecabinet.activity.BaseActivity
-import com.sw.platecabinet.activity.MainActivity
-import com.sw.platecabinet.activity.PageType
-import timber.log.Timber
object PlateUtils {
@@ -19,48 +13,54 @@ object PlateUtils {
callback: () -> Unit = {}
) {
val activity = fragmentActivity as BaseActivity<*>
- Timber.d("itemClick llOpen equipmentBoxCode = ${code}")
- val equipmentBoxCode: Int = code?.toInt() ?: -1
- if (equipmentBoxCode < 0) {
- ToastUtils.showToast("餐盘柜编号错误")
- return
- }
- activity.showWaitingDialog("请稍等")
- SerialApi.openPlate(equipmentBoxCode, object : SerialPortManager.SendCallback {
- override fun onSuccess() {
- activity.hideWaitingDialog()
- if (isSetting.not()) {
- MainActivity.start(
- activity,
- pageType = PageType.PLATE_TIP,
- isScanCode = isScanCode
- )
- } else {
- ToastUtils.showToast("柜门打开成功")
- callback()
- }
- }
- override fun onFail(e: Exception?) {
- activity.hideWaitingDialog()
- ToastUtils.showToast("柜门打开失败")
- callback()
- }
- })
+ activity.window.decorView.postDelayed({
+ callback()
+ }, 1500)
+
+// activity.showWaitingDialog("请稍等")
+// Timber.d("itemClick llOpen equipmentBoxCode = ${code}")
+// val equipmentBoxCode: Int = code?.toInt() ?: -1
+// if (equipmentBoxCode < 0) {
+// ToastUtils.showToast("餐盘柜编号错误")
+// return
+// }
+// activity.showWaitingDialog("请稍等")
+// SerialApi.openPlate(equipmentBoxCode, object : SerialPortManager.SendCallback {
+// override fun onSuccess() {
+// activity.hideWaitingDialog()
+// if (isSetting.not()) {
+// MainActivity.start(
+// activity,
+// pageType = PageType.PLATE_TIP,
+// isScanCode = isScanCode
+// )
+// } else {
+// ToastUtils.showToast("柜门打开成功")
+// callback()
+// }
+// }
+//
+// override fun onFail(e: Exception?) {
+// activity.hideWaitingDialog()
+// ToastUtils.showToast("柜门打开失败")
+// callback()
+// }
+// })
}
- fun openDirect(boxCode: String?) {
- val boxNumber = boxCode?.toIntOrNull() ?: -1
- if (boxNumber < 0) return
- SerialApi.openPlate(boxNumber, object : SerialPortManager.SendCallback {
- override fun onSuccess() {
-
- }
-
- override fun onFail(e: Exception?) {
-
- }
- })
- }
+// fun openDirect(boxCode: String?) {
+// val boxNumber = boxCode?.toIntOrNull() ?: -1
+// if (boxNumber < 0) return
+// SerialApi.openPlate(boxNumber, object : SerialPortManager.SendCallback {
+// override fun onSuccess() {
+//
+// }
+//
+// override fun onFail(e: Exception?) {
+//
+// }
+// })
+// }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/sw/platecabinet/utils/SpTool.kt b/app/src/main/java/com/sw/platecabinet/utils/SpTool.kt
index 501b08d..272eca5 100644
--- a/app/src/main/java/com/sw/platecabinet/utils/SpTool.kt
+++ b/app/src/main/java/com/sw/platecabinet/utils/SpTool.kt
@@ -1,12 +1,8 @@
package com.sw.platecabinet.utils
-import com.google.gson.Gson
-import com.sw.inbound.utils.GsonUtils
import com.sw.inbound.utils.SPUtil
import com.sw.inbound.utils.SPUtil.Companion.getInstance
import com.sw.platecabinet.MyApp
-import com.sw.platecabinet.model.response.EquipmentUserInfo
-import kotlin.text.get
object SpTool {
const val LAST_FACE_TIMESTAMP: String = "faceTimestamp"
@@ -30,18 +26,18 @@ object SpTool {
spUtil?.put(LAST_FACE_TIMESTAMP, timestamp)
}
- fun savePlateData(items: List) {
- val jsonData = Gson().toJson(items)
- putString(PLATE_BOX_DATA, jsonData)
- }
-
- fun getPlateData(): List? {
- val jsonData = spUtil?.get(PLATE_BOX_DATA, "")
- if (jsonData.isNullOrBlank()) {
- return null
- }
- return GsonUtils.fromJsonList(jsonData, EquipmentUserInfo::class.java)
- }
+// fun savePlateData(items: List) {
+// val jsonData = Gson().toJson(items)
+// putString(PLATE_BOX_DATA, jsonData)
+// }
+//
+// fun getPlateData(): List? {
+// val jsonData = spUtil?.get(PLATE_BOX_DATA, "")
+// if (jsonData.isNullOrBlank()) {
+// return null
+// }
+// return GsonUtils.fromJsonList(jsonData, EquipmentUserInfo::class.java)
+// }
var firstGetFace: Boolean
get() = spUtil?.get(IS_FIRST_GET_FACE, true)?:true
diff --git a/app/src/main/java/com/sw/platecabinet/viewmodel/BaseViewModel.kt b/app/src/main/java/com/sw/platecabinet/viewmodel/BaseViewModel.kt
index 7ced9c2..bb8a817 100644
--- a/app/src/main/java/com/sw/platecabinet/viewmodel/BaseViewModel.kt
+++ b/app/src/main/java/com/sw/platecabinet/viewmodel/BaseViewModel.kt
@@ -3,9 +3,7 @@ package com.sw.platecabinet.viewmodel
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.sw.plate.utils.ToastUtils
-import com.sw.platecabinet.GlobalData
import com.sw.platecabinet.model.response.ApiResponse
-import com.sw.platecabinet.model.response.EquipmentInfo
import com.sw.platecabinet.network.ApiClient
import com.sw.platecabinet.repository.RemoteRepository
import kotlinx.coroutines.flow.MutableStateFlow
@@ -65,12 +63,12 @@ abstract class BaseViewModel() : ViewModel() {
Timber.d("handleError ${exception.message}")
}
- fun parseEquipmentInfo(equipmentInfo: EquipmentInfo) {
-// GlobalData.appBaseUrl = equipmentInfo.appPackageUrl!!
-// GlobalData.appBaseUrl="https://vip.shuziweidao.com"
-// GlobalData.sdkKey = equipmentInfo.arcsoftSdkKey!!
-// GlobalData.appId = equipmentInfo.arcsoftAppId!!
-// GlobalData.activeKey = equipmentInfo.arcsoftActiveKey!!
-// GlobalData.restId = equipmentInfo.canteenId!!
- }
+// fun parseEquipmentInfo(equipmentInfo: EquipmentInfo) {
+//// GlobalData.appBaseUrl = equipmentInfo.appPackageUrl!!
+//// GlobalData.appBaseUrl="https://vip.shuziweidao.com"
+//// GlobalData.sdkKey = equipmentInfo.arcsoftSdkKey!!
+//// GlobalData.appId = equipmentInfo.arcsoftAppId!!
+//// GlobalData.activeKey = equipmentInfo.arcsoftActiveKey!!
+//// GlobalData.restId = equipmentInfo.canteenId!!
+// }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/sw/platecabinet/viewmodel/SettingViewModel.kt b/app/src/main/java/com/sw/platecabinet/viewmodel/SettingViewModel.kt
index c6fdf68..3c9e851 100644
--- a/app/src/main/java/com/sw/platecabinet/viewmodel/SettingViewModel.kt
+++ b/app/src/main/java/com/sw/platecabinet/viewmodel/SettingViewModel.kt
@@ -1,250 +1,62 @@
-package com.sw.platecabinet.viewmodel
-
-import com.sw.platecabinet.GlobalData.globalEquipmentCode
-import com.sw.platecabinet.model.response.EquipmentUserInfo
-import com.sw.platecabinet.model.response.SearchResult
-import com.sw.platecabinet.model.response.UserFaceModel
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.flow.MutableStateFlow
-import kotlinx.coroutines.flow.StateFlow
-import kotlinx.coroutines.withContext
-import java.io.File
-
-/**
- * 管理员操作viewmodel
- */
-class SettingViewModel : BaseViewModel() {
- // 设备绑定列表
-// private val _equipmentList = MutableStateFlow>(emptyList())
-// val equipmentList: StateFlow> = _equipmentList
-
- private val _searchMemberList = MutableStateFlow>(emptyList())
- val searchMemberList: StateFlow> = _searchMemberList
-
- private val _searchUserInfo = MutableStateFlow(null)
- val searchUserInfo: StateFlow = _searchUserInfo
-
- var currentPage = 1
- var isLoading = false
- var canLoadMore = true
-
- /**
- * 绑定/解绑状态 <绑定/解绑, 错误信息,>
- */
-// private val _bindStateChange = MutableStateFlow>(null to ErrorInfo())
-// val bindStateChange: StateFlow> = _bindStateChange
-
-
- /**
- * 获取设备绑定用户信息列表
- */
-// fun getEquipmentList(equipmentCode: String = globalEquipmentCode) {
-// launchWithLoading {
-// val param =
-// EquipmentParam(appVersion = GlobalData.appVersion, equipmentCode = equipmentCode)
-// val response = repository.getEquipmentList(param)
-// if (parseResponse(response)) {
-// _equipmentList.value = response.data ?: emptyList()
-// }
-// }
-//// val list = mutableListOf()
-//// for (i in 1 .. 30){
-//// list.add(EquipmentUserInfo(id = i, equipmentBoxCode = i.toString()))
-//// }
-//// _equipmentList.value = list
+//package com.sw.platecabinet.viewmodel
+//
+//import com.sw.platecabinet.model.response.UserFaceModel
+//import kotlinx.coroutines.Dispatchers
+//import kotlinx.coroutines.withContext
+//import java.io.File
+//
+///**
+// * 管理员操作viewmodel
+// */
+//class SettingViewModel : BaseViewModel() {
+//
+// companion object {
+// const val PAGE_SIZE = 100
// }
-// fun getEquipmentList(block: (List) -> Unit) {
-// launchWithLoading {
-// val response = repository.getEquipmentList()
-// if (parseResponse(response)) {
-// val list = response.data ?: emptyList()
-// block(list)
-// }
-// }
-// }
-
+//
// /**
-// * 搜索会员信息列表
+// * 获取人脸数据
// */
-// fun getSearchMemberList(param:String, pageNum: Int = 1, pageSize: Int = 50) {
-// if (TextUtils.isEmpty(param)) return
-// currentPage = pageNum
-// var name =""
-// var phone =""
-// val num = param.toIntOrNull()
-// if (num != null) {
-// phone = param
-// } else {
-// name = param
-// }
+// fun getFaceIncrementList(
+// pageNo: Int = 1,
+// pageSize: Int = PAGE_SIZE,
+// timestamp: Long,
+// block: (List) -> Unit
+// ) {
// launch {
-// val searchParam = SearchParam(
-//// appVersion = GlobalData.appVersion,
-// name = name,
-// phone = phone,
-// pageNum = pageNum,
-// pageSize = pageSize
+// val response = repository.getFaceIncrementList(
+// pageNum = pageNo.toLong(),
+// pageSize = pageSize.toLong(),
+// timestamp = timestamp
// )
-// isLoading = true
-// val response = repository.searchUser(searchParam)
-// isLoading = false
// if (parseResponse(response)) {
-// response.data?.let { list ->
-// if (pageNum == 1) {
-// _searchMemberList.value = list
-// } else {
-// _searchMemberList.value = _searchMemberList.value.plus(list)
-// }
-// if (list.size >= pageSize) currentPage++
+// withContext(Dispatchers.Default) {
+// val list: List = response.data ?: emptyList()
+// block(list)
// }
// }
// }
// }
-
-// fun bindPlate(
-// equipmentBoxCode: String,
-// equipmentCode: String = globalEquipmentCode,
-// memberId: Int,
-// plateNumber: String
-// ) {
-// _bindStateChange.value = null to ErrorInfo()
-// launchWithLoading {
-// val bindParam = BindParam(
-// appVersion = GlobalData.appVersion,
-// equipmentBoxCode = equipmentBoxCode,
-// equipmentCode = equipmentCode,
-// memberId = memberId,
-// plateNumber = plateNumber
-// )
-// val response = repository.bindEquipment(bindParam)
-// if (parseResponse(response)) {
-// var userInfo = response.data
-// if (userInfo == null) {
-// userInfo = EquipmentUserInfo()
-// userInfo.equipmentBoxCode = equipmentBoxCode
-// userInfo.plateNumber = plateNumber
-// userInfo.equipmentCode = equipmentCode
-// }
-// _bindStateChange.value = true to ErrorInfo(equipmentUserInfo = userInfo)
-// } else {
-// _bindStateChange.value = true to ErrorInfo(response.code, response.msg.toString())
+//
+// /**
+// * 添加人脸数据
+// */
+// fun addUserFace(faceData: String, imageFile: File, block: (Boolean, UserFaceModel?) -> Unit) {
+// launch {
+// val imageResp = repository.uploadImage(imageFile)
+// val imageUrl = imageResp.data ?: ""
+// if (imageUrl.isBlank()) {
+// block(false, null)
+// return@launch
// }
+// val faceResp = repository.addUserFace(faceData, imageUrl)
+// val status = parseResponse(faceResp)
+// if (status.not()) {
+// block(false, null)
+// return@launch
+// }
+// block(true, faceResp.data)
// }
// }
-// fun unbindPlate(
-// equipmentBoxCode: String,
-// equipmentCode: String = globalEquipmentCode
-// ) {
-// launchWithLoading {
-// val bindParam = BindParam(
-// appVersion = GlobalData.appVersion,
-// equipmentBoxCode = equipmentBoxCode,
-// equipmentCode = equipmentCode
-// )
-// val response = repository.bindEquipment(bindParam)
-// if (parseResponse(response)) {
-// _bindStateChange.value = false to ErrorInfo()
-// } else {
-// _bindStateChange.value = false to ErrorInfo(response.code, response.msg.toString())
-// }
-// }
-// }
-
-// fun unbindPlate(id: Long?, block:(Pair)-> Unit) {
-// block(null to ErrorInfo())
-// launchWithLoading {
-// val response = repository.plateUnbind(id)
-// if (parseResponse(response)) {
-// block(false to ErrorInfo())
-// } else {
-// block(false to ErrorInfo(response.code, response.msg.toString()))
-// }
-// }
-// }
-
-// fun bindPlate(bindParam: BindParam, block:(Pair)-> Unit) {
-// launchWithLoading {
-//// val response = repository.plateBind(bindParam)
-//// if (parseResponse(response)) {
-//// var userInfo = response.data
-//// if (userInfo == null) {
-//// userInfo = EquipmentUserInfo()
-//// userInfo.equipmentBoxCode = bindParam.equipmentBoxCode
-//// userInfo.plateNumber = bindParam.plateNumber
-//// userInfo.equipmentCode = bindParam.equipmentCode
-//// }
-//// block(true to ErrorInfo(equipmentUserInfo = userInfo))
-//// } else {
-//// block(true to ErrorInfo(response.code, response.msg.toString()))
-//// }
-// }
-// }
-
- fun findByPlateNumber(
- plateNumber: String,
- equipmentCode: String = globalEquipmentCode
- ) {
-// _searchUserInfo.value = null
-// launchWithLoading {
-//// val bindParam = BindParam(plateNumber = plateNumber)
-// val response = repository.findByPlateNumber(plateNumber)
-// if (response.code == "00000") {
-// _searchUserInfo.value = response.data
-// } else {
-// _searchUserInfo.value = EquipmentUserInfo(
-// plateNumber = plateNumber,
-// equipmentCode = equipmentCode,
-// updateTime = DateTimeUtils.getDateTimeString()
-// )
-// }
-// }
- }
-
- val PAGE_SIZE = 100
-
- /**
- * 获取人脸数据
- */
- fun getFaceIncrementList(
- pageNo: Int = 1,
- pageSize: Int = PAGE_SIZE,
- timestamp: Long,
- block: (List) -> Unit
- ) {
- launch {
- val response = repository.getFaceIncrementList(
- pageNum = pageNo.toLong(),
- pageSize = pageSize.toLong(),
- timestamp = timestamp
- )
- if (parseResponse(response)) {
- withContext(Dispatchers.Default) {
- val list: List = response.data ?: emptyList()
- block(list)
- }
- }
- }
- }
-
- /**
- * 添加人脸数据
- */
- fun addUserFace(faceData: String, imageFile: File, block: (Boolean, UserFaceModel?) -> Unit) {
- launch {
- val imageResp = repository.uploadImage(imageFile)
- val imageUrl = imageResp.data?:""
- if (imageUrl.isBlank()) {
- block(false, null)
- return@launch
- }
- val faceResp = repository.addUserFace(faceData, imageUrl)
- val status = parseResponse(faceResp)
- if (status.not()) {
- block(false, null)
- return@launch
- }
- block(true, faceResp.data)
- }
- }
-
-}
\ No newline at end of file
+//
+//}
\ No newline at end of file
diff --git a/app/src/main/java/com/sw/platecabinet/viewmodel/UserViewModel.kt b/app/src/main/java/com/sw/platecabinet/viewmodel/UserViewModel.kt
index 9cb8c35..1bab3ea 100644
--- a/app/src/main/java/com/sw/platecabinet/viewmodel/UserViewModel.kt
+++ b/app/src/main/java/com/sw/platecabinet/viewmodel/UserViewModel.kt
@@ -11,13 +11,13 @@ import com.sw.plate.utils.arcface.facedb.entity.FaceEntity
import com.sw.platecabinet.GlobalData
import com.sw.platecabinet.GlobalKey
import com.sw.platecabinet.model.DeviceConfig
-import com.sw.platecabinet.model.request.LoginParam
import com.sw.platecabinet.model.response.UserFaceModel
import com.sw.platecabinet.utils.SpTool
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import timber.log.Timber
+import java.io.File
/**
* 用户viewmodel
@@ -28,38 +28,18 @@ class UserViewModel : BaseViewModel() {
const val PAGE_SIZE = 100
}
- // 通过人脸获取到的用户信息
-// private val _currentUserInfo = MutableStateFlow(null)
-// val currentUserInfo: StateFlow = _currentUserInfo
-
private val faceApi: FaceApi = FaceApi()
- /**
- * 获取token
- */
-// fun generateToken(deviceId: String = "SWSN:88:12:AC:4E:D9:CC") {
-// launchWithLoading {
-// val response = repository.generateToken(deviceId)
-// if (parseResponse(response)) {
-// // 缓存token
-// SPUtil.getInstance().put(GlobalKey.KEY_TOKEN, response.data)
-// // 首次运行获取人脸数据
-// if (SPUtil.getInstance().get(GlobalKey.KEY_FIRST_RUN, false) != true) {
-// getUserFaceCache()
-// }
-// }
-// }
-// }
fun getUserFace(
pageNo: Int,
pageSize: Int,
callback: (List) -> Unit
) {
- launchWithLoading{
+ launchWithLoading {
val response = repository.getUserFaceCache(pageNum = pageNo, pageSize = pageSize)
val status = parseResponse(response)
- if (status) callback(response.data?:emptyList())
+ if (status) callback(response.data ?: emptyList())
else emptyList()
}
}
@@ -159,40 +139,6 @@ class UserViewModel : BaseViewModel() {
})
}
- /**
- * 校验码登录
- */
- fun loginWithPwd(loginParam: LoginParam) {
-// launchWithLoading {
-// val response = repository.equipmentBoxLogin(loginParam)
-// if (parseResponse(response)) {
-// _currentUserInfo.value = response.data
-// }
-// }
- }
-
- /**
- * 通过用户id获取用户信息
- */
-// fun getUserInfoById(memberId: String?, action: (EquipmentUserInfo?) -> Unit = {}) {
-// _currentUserInfo.value = null
-// launchWithLoading {
-// val loginParam = LoginParam(faceId = memberId)
-// val response = repository.equipmentBoxLogin(loginParam)
-// if (parseResponse(response)) {
-// _currentUserInfo.value = response.data
-// action(response.data)
-// }
-// }
-// }
-
- /**
- * 重置用户信息
- */
- fun resetUserInfo() {
- Timber.d("resetUserInfo")
-// _currentUserInfo.value = null
- }
fun getDeviceConfig(block: (DeviceConfig?) -> Unit) {
// Timber.tag(TAG).d("getDeviceConfig")
@@ -206,4 +152,50 @@ class UserViewModel : BaseViewModel() {
}
}
+
+ /**
+ * 获取人脸数据
+ */
+ fun getFaceIncrementList(
+ pageNo: Int = 1,
+ pageSize: Int = PAGE_SIZE,
+ timestamp: Long,
+ block: (List) -> Unit
+ ) {
+ launch {
+ val response = repository.getFaceIncrementList(
+ pageNum = pageNo.toLong(),
+ pageSize = pageSize.toLong(),
+ timestamp = timestamp
+ )
+ if (parseResponse(response)) {
+ withContext(Dispatchers.Default) {
+ val list: List = response.data ?: emptyList()
+ block(list)
+ }
+ }
+ }
+ }
+
+ /**
+ * 添加人脸数据
+ */
+ fun addUserFace(faceData: String, imageFile: File, block: (Boolean, UserFaceModel?) -> Unit) {
+ launch {
+ val imageResp = repository.uploadImage(imageFile)
+ val imageUrl = imageResp.data ?: ""
+ if (imageUrl.isBlank()) {
+ block(false, null)
+ return@launch
+ }
+ val faceResp = repository.addUserFace(faceData, imageUrl)
+ val status = parseResponse(faceResp)
+ if (status.not()) {
+ block(false, null)
+ return@launch
+ }
+ block(true, faceResp.data)
+ }
+ }
+
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable-xxhdpi/bg_face_area.png b/app/src/main/res/drawable-xxhdpi/bg_face_area.png
new file mode 100644
index 0000000..181dcd7
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/bg_face_area.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/logo_launcher.png b/app/src/main/res/drawable-xxhdpi/logo_launcher.png
new file mode 100644
index 0000000..79ee1a9
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/logo_launcher.png differ
diff --git a/app/src/main/res/drawable/bg_collect_page3.png b/app/src/main/res/drawable/bg_collect_page3.png
new file mode 100644
index 0000000..f3858e4
Binary files /dev/null and b/app/src/main/res/drawable/bg_collect_page3.png differ
diff --git a/app/src/main/res/drawable/bg_splash.xml b/app/src/main/res/drawable/bg_splash.xml
index dc25727..8e47489 100644
--- a/app/src/main/res/drawable/bg_splash.xml
+++ b/app/src/main/res/drawable/bg_splash.xml
@@ -2,34 +2,20 @@
-
-
+ android:width="1920px"
+ android:height="1080px">
+
-
+ android:top="150dp">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/btn_outline.xml b/app/src/main/res/drawable/btn_outline.xml
index 7aab849..2c01c15 100644
--- a/app/src/main/res/drawable/btn_outline.xml
+++ b/app/src/main/res/drawable/btn_outline.xml
@@ -1,8 +1,8 @@
-
+
+ android:width="3dp"
+ android:color="#FFC08A6F" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_init.xml b/app/src/main/res/layout/activity_init.xml
index 777eea5..0273e0d 100644
--- a/app/src/main/res/layout/activity_init.xml
+++ b/app/src/main/res/layout/activity_init.xml
@@ -4,7 +4,7 @@
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@drawable/bg"
+ android:background="@drawable/bg_collect_page3"
android:orientation="vertical"
tools:context=".activity.InitActivity">
@@ -12,10 +12,10 @@
android:id="@+id/includeHeader"
layout="@layout/item_title_time" />
-
+ android:layout_weight="1"/>
-
-
-
-
-
-
-
diff --git a/app/src/main/res/layout/activity_login_face.xml b/app/src/main/res/layout/activity_login_face.xml
index f8651b9..e5f5cb1 100644
--- a/app/src/main/res/layout/activity_login_face.xml
+++ b/app/src/main/res/layout/activity_login_face.xml
@@ -1,226 +1,125 @@
-
+ tools:context=".activity.LoginByFaceActivity"
+ tools:ignore="HardcodedText,ContentDescription,PxUsage">
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index f5200d5..205bdd9 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -5,7 +5,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
- android:background="@drawable/bg"
+ android:background="@drawable/bg_collect_page3"
tools:context=".activity.MainActivity">
@@ -20,10 +21,10 @@
android:id="@+id/tvTip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginStart="30dp"
+ android:layout_marginHorizontal="10dp"
android:textColor="@color/white"
android:text="请稍等"
- android:textSize="22sp" />
+ android:textSize="26sp" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_plate_open.xml b/app/src/main/res/layout/fragment_plate_open.xml
index 1f64a6d..2d5a7ad 100644
--- a/app/src/main/res/layout/fragment_plate_open.xml
+++ b/app/src/main/res/layout/fragment_plate_open.xml
@@ -1,5 +1,4 @@
-
+ android:layout_height="100dp"
+ android:paddingHorizontal="65dp"
+ tools:ignore="HardcodedText,ContentDescription,UseCompoundDrawables">
-
+ app:layout_constraintBottom_toBottomOf="parent">
+
+
+
+
+
+
+ tools:text="2026年03月27日 星期五 12:08" />
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index a82b98a..9e68d82 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,5 +1,5 @@
- 餐盘柜
+ 发盘机
Hello blank fragment
diff --git a/lib_face/src/main/java/com/sw/plate/utils/arcface/ConfigUtil.java b/lib_face/src/main/java/com/sw/plate/utils/arcface/ConfigUtil.java
index 7de06e0..14c3e4a 100644
--- a/lib_face/src/main/java/com/sw/plate/utils/arcface/ConfigUtil.java
+++ b/lib_face/src/main/java/com/sw/plate/utils/arcface/ConfigUtil.java
@@ -87,10 +87,10 @@ public class ConfigUtil {
/**
* 默认相机分辨率
*/
- private static final String DEFAULT_PREVIEW_SIZE = "1280x720";
+// private static final String DEFAULT_PREVIEW_SIZE = "1280x720";
+ private static final String DEFAULT_PREVIEW_SIZE = "1024x768";
// private static final String DEFAULT_PREVIEW_SIZE = "400x640";
-
/**
* 获取String类型的preference
*
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 450c81e..881557e 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -25,6 +25,6 @@ dependencyResolutionManagement {
}
}
-rootProject.name = "SmartPlateCabinet"
+rootProject.name = "SmartTakePlate"
include(":app")
include(":lib_face")