|
|
@@ -18,13 +18,20 @@ import com.grkj.iscs.databinding.ItemSetFingerprintBinding
|
|
|
import com.grkj.iscs.features.main.dialog.user_info.AddFingerprintDialog
|
|
|
import com.grkj.iscs.features.main.viewmodel.user_info.UserInfoViewModel
|
|
|
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.utils.CommonUtils
|
|
|
import com.grkj.ui_base.utils.fingerprint.FingerprintUtil
|
|
|
+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.setDebouncedClickListener
|
|
|
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
|
|
|
|
|
|
/**
|
|
|
@@ -33,7 +40,7 @@ import dagger.hilt.android.AndroidEntryPoint
|
|
|
@AndroidEntryPoint
|
|
|
class SetFingerprintFragment : BaseFragment<FragmentSetFingerprintBinding>() {
|
|
|
private val viewModel: UserInfoViewModel by viewModels()
|
|
|
-
|
|
|
+ private var fingerprintTempData = mutableListOf<ByteArray>()
|
|
|
override fun getLayoutId(): Int {
|
|
|
return R.layout.fragment_set_fingerprint
|
|
|
}
|
|
|
@@ -43,35 +50,11 @@ class SetFingerprintFragment : BaseFragment<FragmentSetFingerprintBinding>() {
|
|
|
navController.popBackStack()
|
|
|
}
|
|
|
binding.add.setDebouncedClickListener {
|
|
|
+ fingerprintTempData.clear()
|
|
|
AddFingerprintDialog.show {
|
|
|
FingerprintUtil.stop()
|
|
|
- FingerprintUtil.unInit()
|
|
|
}.apply {
|
|
|
- FingerprintUtil.init(requireContext())
|
|
|
- FingerprintUtil.start()
|
|
|
- FingerprintUtil.setScanListener(object : FingerprintUtil.OnScanListener {
|
|
|
- override fun onScan(bitmap: Bitmap) {
|
|
|
- FingerprintUtil.stop()
|
|
|
- FingerprintUtil.unInit()
|
|
|
- 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) {
|
|
|
- getData()
|
|
|
- TipDialog.showSuccess(getString(com.grkj.ui_base.R.string.save_success))
|
|
|
- this@apply.dismiss()
|
|
|
- }
|
|
|
- }
|
|
|
- })
|
|
|
+ startCaptureFingerprint(this)
|
|
|
}
|
|
|
}
|
|
|
binding.delete.setDebouncedClickListener {
|
|
|
@@ -140,6 +123,86 @@ class SetFingerprintFragment : BaseFragment<FragmentSetFingerprintBinding>() {
|
|
|
setSelectAllListener()
|
|
|
}
|
|
|
|
|
|
+ private fun startCaptureFingerprint(dialog: CustomDialog) {
|
|
|
+ FingerprintUtil.init(requireContext())
|
|
|
+ FingerprintUtil.start()
|
|
|
+ FingerprintUtil.setScanListener(object : FingerprintUtil.OnScanListener {
|
|
|
+ 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) {
|
|
|
+ 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
|
|
|
+ )
|
|
|
+ viewModel.saveUserFingerprint(savePath)
|
|
|
+ .observe(this@SetFingerprintFragment) {
|
|
|
+ FingerprintUtil.stop()
|
|
|
+ getData()
|
|
|
+ TipDialog.showSuccess(getString(com.grkj.ui_base.R.string.save_success))
|
|
|
+ dialog.dismiss()
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ PopTip.tip(R.string.fingerprint_register_failed)
|
|
|
+ fingerprintTempData.clear()
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ PopTip.tip(R.string.please_press_the_fingerprint_again)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
private fun setSelectAllListener() {
|
|
|
binding.selectAll.setOnCheckedChangeListener { v, checked ->
|
|
|
viewModel.sysBiometricDataVo.forEach { it.isSelected = checked }
|