|
@@ -2,37 +2,29 @@ package com.grkj.iscs.features.main.fragment.user_info
|
|
|
|
|
|
|
|
import android.graphics.Bitmap
|
|
import android.graphics.Bitmap
|
|
|
import android.graphics.Color
|
|
import android.graphics.Color
|
|
|
|
|
+import android.widget.TextView
|
|
|
import androidx.fragment.app.viewModels
|
|
import androidx.fragment.app.viewModels
|
|
|
import com.drake.brv.annotaion.DividerOrientation
|
|
import com.drake.brv.annotaion.DividerOrientation
|
|
|
import com.drake.brv.utils.divider
|
|
import com.drake.brv.utils.divider
|
|
|
import com.drake.brv.utils.linear
|
|
import com.drake.brv.utils.linear
|
|
|
import com.drake.brv.utils.models
|
|
import com.drake.brv.utils.models
|
|
|
import com.drake.brv.utils.setup
|
|
import com.drake.brv.utils.setup
|
|
|
-import com.grkj.data.data.CommonConstants
|
|
|
|
|
-import com.grkj.data.data.MainDomainData
|
|
|
|
|
import com.grkj.data.model.vo.SysBiometricDataVo
|
|
import com.grkj.data.model.vo.SysBiometricDataVo
|
|
|
-import com.grkj.data.utils.FileStorageUtils
|
|
|
|
|
import com.grkj.iscs.R
|
|
import com.grkj.iscs.R
|
|
|
import com.grkj.iscs.databinding.FragmentSetFingerprintBinding
|
|
import com.grkj.iscs.databinding.FragmentSetFingerprintBinding
|
|
|
import com.grkj.iscs.databinding.ItemSetFingerprintBinding
|
|
import com.grkj.iscs.databinding.ItemSetFingerprintBinding
|
|
|
import com.grkj.iscs.features.main.dialog.user_info.AddFingerprintDialog
|
|
import com.grkj.iscs.features.main.dialog.user_info.AddFingerprintDialog
|
|
|
import com.grkj.iscs.features.main.viewmodel.user_info.UserInfoViewModel
|
|
import com.grkj.iscs.features.main.viewmodel.user_info.UserInfoViewModel
|
|
|
import com.grkj.ui_base.base.BaseFragment
|
|
import com.grkj.ui_base.base.BaseFragment
|
|
|
-import com.grkj.ui_base.config.ISCSConfig
|
|
|
|
|
import com.grkj.ui_base.dialog.TipDialog
|
|
import com.grkj.ui_base.dialog.TipDialog
|
|
|
import com.grkj.ui_base.utils.CommonUtils
|
|
import com.grkj.ui_base.utils.CommonUtils
|
|
|
import com.grkj.ui_base.utils.fingerprint.FingerprintUtil
|
|
import com.grkj.ui_base.utils.fingerprint.FingerprintUtil
|
|
|
import com.kongzue.dialogx.dialogs.CustomDialog
|
|
import com.kongzue.dialogx.dialogs.CustomDialog
|
|
|
-import com.kongzue.dialogx.dialogs.PopTip
|
|
|
|
|
-import com.sik.sikcore.date.TimeUtils
|
|
|
|
|
import com.sik.sikcore.extension.deleteIfExists
|
|
import com.sik.sikcore.extension.deleteIfExists
|
|
|
import com.sik.sikcore.extension.setDebouncedClickListener
|
|
import com.sik.sikcore.extension.setDebouncedClickListener
|
|
|
import com.sik.sikimage.ImageConvertUtils
|
|
import com.sik.sikimage.ImageConvertUtils
|
|
|
-import com.zkteco.android.biometric.module.fingerprintreader.FingerprintCaptureListener
|
|
|
|
|
-import com.zkteco.android.biometric.module.fingerprintreader.FingerprintConstant
|
|
|
|
|
-import com.zkteco.android.biometric.module.fingerprintreader.FingerprintSensor
|
|
|
|
|
-import com.zkteco.zkfinger.FingerprintService
|
|
|
|
|
import dagger.hilt.android.AndroidEntryPoint
|
|
import dagger.hilt.android.AndroidEntryPoint
|
|
|
|
|
+import java.util.UUID
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 设置指纹
|
|
* 设置指纹
|
|
@@ -41,6 +33,16 @@ import dagger.hilt.android.AndroidEntryPoint
|
|
|
class SetFingerprintFragment : BaseFragment<FragmentSetFingerprintBinding>() {
|
|
class SetFingerprintFragment : BaseFragment<FragmentSetFingerprintBinding>() {
|
|
|
private val viewModel: UserInfoViewModel by viewModels()
|
|
private val viewModel: UserInfoViewModel by viewModels()
|
|
|
private var fingerprintTempData = mutableListOf<ByteArray>()
|
|
private var fingerprintTempData = mutableListOf<ByteArray>()
|
|
|
|
|
+
|
|
|
|
|
+ private var mFingerprintLimit: Int = 5
|
|
|
|
|
+ private var mFingerprintPressTimes: Int = 0
|
|
|
|
|
+ private var mFingerprintInputErrorTimes: Int = 0
|
|
|
|
|
+ private var mFingerprintGroupName: String = ""
|
|
|
|
|
+ private val maxPressTimes = 3
|
|
|
|
|
+ private val inputFingerprintErrorTimes = 3
|
|
|
|
|
+ private var pressTip: TextView? = null
|
|
|
|
|
+ private val inputFingerprintIds: MutableList<Long> = mutableListOf()
|
|
|
|
|
+
|
|
|
override fun getLayoutId(): Int {
|
|
override fun getLayoutId(): Int {
|
|
|
return R.layout.fragment_set_fingerprint
|
|
return R.layout.fragment_set_fingerprint
|
|
|
}
|
|
}
|
|
@@ -51,8 +53,12 @@ class SetFingerprintFragment : BaseFragment<FragmentSetFingerprintBinding>() {
|
|
|
}
|
|
}
|
|
|
binding.add.setDebouncedClickListener {
|
|
binding.add.setDebouncedClickListener {
|
|
|
fingerprintTempData.clear()
|
|
fingerprintTempData.clear()
|
|
|
- AddFingerprintDialog.show {
|
|
|
|
|
|
|
+ AddFingerprintDialog.show({
|
|
|
FingerprintUtil.stop()
|
|
FingerprintUtil.stop()
|
|
|
|
|
+
|
|
|
|
|
+ it.dismiss()
|
|
|
|
|
+ }) {
|
|
|
|
|
+ pressTip = it
|
|
|
}.apply {
|
|
}.apply {
|
|
|
startCaptureFingerprint(this)
|
|
startCaptureFingerprint(this)
|
|
|
}
|
|
}
|
|
@@ -64,12 +70,15 @@ class SetFingerprintFragment : BaseFragment<FragmentSetFingerprintBinding>() {
|
|
|
).toString(),
|
|
).toString(),
|
|
|
countDownTime = 10,
|
|
countDownTime = 10,
|
|
|
onConfirmClick = {
|
|
onConfirmClick = {
|
|
|
- viewModel.sysBiometricDataVo.filter { it.isSelected }.forEach { item ->
|
|
|
|
|
- if (item.content.isNotEmpty()) {
|
|
|
|
|
- item.content.deleteIfExists()
|
|
|
|
|
|
|
+ viewModel.fingerprintData.filter { it.isSelected }.forEach { item ->
|
|
|
|
|
+ if (item.fingerprintData.isNotEmpty()) {
|
|
|
|
|
+ item.fingerprintData.forEach {
|
|
|
|
|
+ it.content.deleteIfExists()
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- viewModel.deleteFingerprintByIds(viewModel.sysBiometricDataVo.map { it.recordId })
|
|
|
|
|
|
|
+ viewModel.deleteFingerprintByIds(viewModel.fingerprintData.flatMap { it.fingerprintData }
|
|
|
|
|
+ .map { it.recordId })
|
|
|
.observe(this) {
|
|
.observe(this) {
|
|
|
if (it) {
|
|
if (it) {
|
|
|
TipDialog.showSuccess(getString(R.string.delete_success))
|
|
TipDialog.showSuccess(getString(R.string.delete_success))
|
|
@@ -115,7 +124,7 @@ class SetFingerprintFragment : BaseFragment<FragmentSetFingerprintBinding>() {
|
|
|
itemBinding.select.setOnCheckedChangeListener { _, checked ->
|
|
itemBinding.select.setOnCheckedChangeListener { _, checked ->
|
|
|
item.isSelected = checked
|
|
item.isSelected = checked
|
|
|
binding.selectAll.setOnCheckedChangeListener(null)
|
|
binding.selectAll.setOnCheckedChangeListener(null)
|
|
|
- binding.selectAll.isChecked = viewModel.sysBiometricDataVo.all { it.isSelected }
|
|
|
|
|
|
|
+ binding.selectAll.isChecked = viewModel.fingerprintData.all { it.isSelected }
|
|
|
setSelectAllListener()
|
|
setSelectAllListener()
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -126,77 +135,57 @@ class SetFingerprintFragment : BaseFragment<FragmentSetFingerprintBinding>() {
|
|
|
private fun startCaptureFingerprint(dialog: CustomDialog) {
|
|
private fun startCaptureFingerprint(dialog: CustomDialog) {
|
|
|
FingerprintUtil.init(requireContext())
|
|
FingerprintUtil.init(requireContext())
|
|
|
FingerprintUtil.start()
|
|
FingerprintUtil.start()
|
|
|
|
|
+ mFingerprintGroupName = UUID.randomUUID().toString()
|
|
|
FingerprintUtil.setScanListener(object : FingerprintUtil.OnScanListener {
|
|
FingerprintUtil.setScanListener(object : FingerprintUtil.OnScanListener {
|
|
|
override fun onScan(bitmap: Bitmap) {
|
|
override fun onScan(bitmap: Bitmap) {
|
|
|
- if (ISCSConfig.isNetVersion) {
|
|
|
|
|
- FingerprintUtil.stop()
|
|
|
|
|
- val saveFileName =
|
|
|
|
|
- "${MainDomainData.userInfo?.userId}_fingerprint_${
|
|
|
|
|
- TimeUtils.nowString(
|
|
|
|
|
- "yyyyMMddHHmmss"
|
|
|
|
|
- )
|
|
|
|
|
- }"
|
|
|
|
|
- FileStorageUtils.writeText(
|
|
|
|
|
- CommonConstants.FINGERPRINT_FOLDER,
|
|
|
|
|
- saveFileName,
|
|
|
|
|
- ImageConvertUtils.bitmapToBase64(bitmap).toString()
|
|
|
|
|
- )
|
|
|
|
|
- val savePath = FileStorageUtils.getFilePath(
|
|
|
|
|
- CommonConstants.FINGERPRINT_FOLDER,
|
|
|
|
|
- saveFileName
|
|
|
|
|
- )
|
|
|
|
|
- viewModel.saveUserFingerprint(savePath)
|
|
|
|
|
- .observe(this@SetFingerprintFragment) {
|
|
|
|
|
|
|
+ viewModel.saveUserFingerprint(
|
|
|
|
|
+ ImageConvertUtils.bitmapToBase64(bitmap) ?: "",
|
|
|
|
|
+ mFingerprintGroupName
|
|
|
|
|
+ ).observe(this@SetFingerprintFragment) {
|
|
|
|
|
+ if (it != null) {
|
|
|
|
|
+ logger.info("添加指纹:${it}")
|
|
|
|
|
+ inputFingerprintIds.add(it)
|
|
|
|
|
+ mFingerprintPressTimes++
|
|
|
|
|
+ if (mFingerprintPressTimes == maxPressTimes) {
|
|
|
|
|
+ dialog?.dismiss()
|
|
|
|
|
+ showToast(getString(com.grkj.ui_base.R.string.fingerprint_add_success_tip))
|
|
|
getData()
|
|
getData()
|
|
|
- TipDialog.showSuccess(getString(com.grkj.ui_base.R.string.save_success))
|
|
|
|
|
- dialog.dismiss()
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- override fun onScan(temp: ByteArray?) {
|
|
|
|
|
- if (!ISCSConfig.isNetVersion && temp != null) {
|
|
|
|
|
- fingerprintTempData.add(temp)
|
|
|
|
|
- logger.info("指纹数量:${fingerprintTempData.size}-${temp.size}")
|
|
|
|
|
- if (fingerprintTempData.size == 3) {
|
|
|
|
|
- val newFingerprintTemp = ByteArray(FingerprintConstant.MAX_DATA_LENGTH)
|
|
|
|
|
- val mergeCode = FingerprintService.merge(
|
|
|
|
|
- fingerprintTempData[0],
|
|
|
|
|
- fingerprintTempData[1],
|
|
|
|
|
- fingerprintTempData[2],
|
|
|
|
|
- newFingerprintTemp
|
|
|
|
|
- )
|
|
|
|
|
- logger.info("指纹模板长度:${newFingerprintTemp.size}-${mergeCode}")
|
|
|
|
|
- if (newFingerprintTemp.isNotEmpty()) {
|
|
|
|
|
- val saveFileName =
|
|
|
|
|
- "${MainDomainData.userInfo?.userId}_fingerprint_${
|
|
|
|
|
- TimeUtils.nowString(
|
|
|
|
|
- "yyyyMMddHHmmss"
|
|
|
|
|
- )
|
|
|
|
|
- }"
|
|
|
|
|
- FileStorageUtils.writeBytes(
|
|
|
|
|
- CommonConstants.FINGERPRINT_FOLDER,
|
|
|
|
|
- saveFileName,
|
|
|
|
|
- newFingerprintTemp
|
|
|
|
|
- )
|
|
|
|
|
- val savePath = FileStorageUtils.getFilePath(
|
|
|
|
|
- CommonConstants.FINGERPRINT_FOLDER,
|
|
|
|
|
- saveFileName
|
|
|
|
|
|
|
+ } else if (mFingerprintInputErrorTimes == inputFingerprintErrorTimes) {
|
|
|
|
|
+ mFingerprintGroupName = UUID.randomUUID().toString()
|
|
|
|
|
+ mFingerprintPressTimes = 0
|
|
|
|
|
+ mFingerprintInputErrorTimes = 0
|
|
|
|
|
+ pressTip?.text = getString(
|
|
|
|
|
+ com.grkj.ui_base.R.string.fingerprint_scan_tip,
|
|
|
|
|
+ maxPressTimes - mFingerprintPressTimes
|
|
|
)
|
|
)
|
|
|
- viewModel.saveUserFingerprint(savePath)
|
|
|
|
|
|
|
+ viewModel.deleteFingerprintByIds(inputFingerprintIds)
|
|
|
.observe(this@SetFingerprintFragment) {
|
|
.observe(this@SetFingerprintFragment) {
|
|
|
- FingerprintUtil.stop()
|
|
|
|
|
getData()
|
|
getData()
|
|
|
- TipDialog.showSuccess(getString(com.grkj.ui_base.R.string.save_success))
|
|
|
|
|
- dialog.dismiss()
|
|
|
|
|
}
|
|
}
|
|
|
|
|
+ showToast(getString(R.string.please_re_press_fingerprint_again))
|
|
|
} else {
|
|
} else {
|
|
|
- PopTip.tip(R.string.fingerprint_register_failed)
|
|
|
|
|
- fingerprintTempData.clear()
|
|
|
|
|
|
|
+ pressTip?.text = getString(
|
|
|
|
|
+ com.grkj.ui_base.R.string.fingerprint_scan_tip,
|
|
|
|
|
+ maxPressTimes - mFingerprintPressTimes
|
|
|
|
|
+ )
|
|
|
|
|
+ showToast(getString(R.string.please_press_fingerprint_again))
|
|
|
}
|
|
}
|
|
|
} else {
|
|
} else {
|
|
|
- PopTip.tip(R.string.please_press_the_fingerprint_again)
|
|
|
|
|
|
|
+ mFingerprintInputErrorTimes++
|
|
|
|
|
+ if (mFingerprintInputErrorTimes == inputFingerprintErrorTimes) {
|
|
|
|
|
+ mFingerprintGroupName = UUID.randomUUID().toString()
|
|
|
|
|
+ mFingerprintPressTimes = 0
|
|
|
|
|
+ mFingerprintInputErrorTimes = 0
|
|
|
|
|
+ pressTip?.text = getString(
|
|
|
|
|
+ com.grkj.ui_base.R.string.fingerprint_scan_tip,
|
|
|
|
|
+ maxPressTimes - mFingerprintPressTimes
|
|
|
|
|
+ )
|
|
|
|
|
+ viewModel.deleteFingerprintByIds(inputFingerprintIds)
|
|
|
|
|
+ .observe(this@SetFingerprintFragment) {
|
|
|
|
|
+ getData()
|
|
|
|
|
+ }
|
|
|
|
|
+ showToast(getString(R.string.please_re_press_fingerprint_again))
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -205,7 +194,7 @@ class SetFingerprintFragment : BaseFragment<FragmentSetFingerprintBinding>() {
|
|
|
|
|
|
|
|
private fun setSelectAllListener() {
|
|
private fun setSelectAllListener() {
|
|
|
binding.selectAll.setOnCheckedChangeListener { v, checked ->
|
|
binding.selectAll.setOnCheckedChangeListener { v, checked ->
|
|
|
- viewModel.sysBiometricDataVo.forEach { it.isSelected = checked }
|
|
|
|
|
|
|
+ viewModel.fingerprintData.forEach { it.isSelected = checked }
|
|
|
binding.listRv.adapter?.notifyDataSetChanged()
|
|
binding.listRv.adapter?.notifyDataSetChanged()
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -217,12 +206,12 @@ class SetFingerprintFragment : BaseFragment<FragmentSetFingerprintBinding>() {
|
|
|
|
|
|
|
|
private fun getData() {
|
|
private fun getData() {
|
|
|
viewModel.getFingerprintData().observe(this) {
|
|
viewModel.getFingerprintData().observe(this) {
|
|
|
- if (viewModel.sysBiometricDataVo.isEmpty()) {
|
|
|
|
|
|
|
+ if (viewModel.fingerprintData.isEmpty()) {
|
|
|
binding.state.showEmpty()
|
|
binding.state.showEmpty()
|
|
|
} else {
|
|
} else {
|
|
|
binding.state.showContent()
|
|
binding.state.showContent()
|
|
|
}
|
|
}
|
|
|
- binding.listRv.models = viewModel.sysBiometricDataVo
|
|
|
|
|
|
|
+ binding.listRv.models = viewModel.fingerprintData
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|