Pārlūkot izejas kodu

完善人脸设置相关功能:人脸录入、人脸数据删除

Frankensteinly 7 mēneši atpakaļ
vecāks
revīzija
eabb9f715a

+ 4 - 0
app/src/main/java/com/grkj/iscs/model/UrlConsts.kt

@@ -247,4 +247,8 @@ object UrlConsts {
      */
     const val EXCEPTION_LEVEL = "$DICT_PREFIX/severity_level"
 
+    /**
+     * 新增人脸录入-人脸识别后裁剪存储-arcsoft
+     */
+    const val INSERT_FACE = "/system/user/characteristic/insertUserFace"
 }

+ 20 - 0
app/src/main/java/com/grkj/iscs/util/NetApi.kt

@@ -957,4 +957,24 @@ object NetApi {
             }, isGet = true, isAuth = true
         )
     }
+
+    /**
+     * 新增人脸录入-人脸识别后裁剪存储-arcsoft
+     */
+    fun insertFace(
+        userName: String,
+        fileList: MutableList<FileStreamReqParam>?,
+        callBack: (Boolean) -> Unit
+    ) {
+        NetHttpManager.getInstance().doRequestNet(
+            UrlConsts.INSERT_FACE,
+            false,
+            mapOf(
+                "userName" to userName
+            ),
+            { res, _, _ ->
+                callBack.invoke(res != null)
+            }, isGet = false, isAuth = true, fileList = fileList
+        )
+    }
 }

+ 9 - 0
app/src/main/java/com/grkj/iscs/view/dialog/FaceCaptureDialog.kt

@@ -14,6 +14,8 @@ import com.grkj.iscs.view.base.BaseDialog
 class FaceCaptureDialog(val ctx: BaseActivity<*>, var callback: (Bitmap?) -> Unit) :
     BaseDialog<DialogFaceCaptureBinding>(ctx) {
 
+    private var mCapturedBitmap: Bitmap? = null
+
     private val faceDetectorHelper by lazy {
         FaceDetectorHelper()
     }
@@ -36,6 +38,11 @@ class FaceCaptureDialog(val ctx: BaseActivity<*>, var callback: (Bitmap?) -> Uni
             mBinding?.cbConfirm?.visibility = View.GONE
             dismiss()
         }
+
+        mBinding?.cbConfirm?.setOnClickListener {
+            callback(mCapturedBitmap)
+            dismiss()
+        }
     }
 
     override fun show() {
@@ -46,6 +53,7 @@ class FaceCaptureDialog(val ctx: BaseActivity<*>, var callback: (Bitmap?) -> Uni
         faceDetectorHelper.startPreview(ctx, mBinding?.preview!!) {
             // 注意切换线程
             Executor.runOnMain {
+                mCapturedBitmap = it
                 // 关闭识别
                 faceDetectorHelper.stopDetector()
                 // 设置图片
@@ -62,6 +70,7 @@ class FaceCaptureDialog(val ctx: BaseActivity<*>, var callback: (Bitmap?) -> Uni
 
     override fun dismiss() {
         super.dismiss()
+        mCapturedBitmap = null
         faceDetectorHelper.release()
     }
 }

+ 28 - 8
app/src/main/java/com/grkj/iscs/view/fragment/FaceConfigFragment.kt

@@ -7,6 +7,7 @@ import com.grkj.iscs.util.ToastUtils
 import com.grkj.iscs.view.base.BaseActivity
 import com.grkj.iscs.view.base.BaseMvpFragment
 import com.grkj.iscs.view.dialog.FaceCaptureDialog
+import com.grkj.iscs.view.dialog.TipDialog
 import com.grkj.iscs.view.iview.IFaceConfigView
 import com.grkj.iscs.view.presenter.FaceConfigPresenter
 import com.zhy.adapter.recyclerview.CommonAdapter
@@ -20,6 +21,7 @@ class FaceConfigFragment :
 
     private val mFaceList = mutableListOf<CharacteristicPageRespVO.Record>()
     private var mCaptureDialog: FaceCaptureDialog? = null
+    private var mTipDialog: TipDialog? = null
 
     override val viewBinding: FragmentFaceConfigBinding
         get() = FragmentFaceConfigBinding.inflate(layoutInflater)
@@ -43,14 +45,9 @@ class FaceConfigFragment :
                 record: CharacteristicPageRespVO.Record,
                 position: Int
             ) {
-                holder.setText(R.id.tv_name, "${getString(R.string.fingerprint)}${position + 1}")
+                holder.setText(R.id.tv_name, getString(R.string.my_face))
                 holder.setOnClickListener(R.id.root) {
-//                    showTipDialog(
-//                        getString(
-//                            R.string.fingerprint_delete_confirm_tip,
-//                            "${getString(R.string.fingerprint)}${position + 1}"
-//                        ), record.recordId
-//                    )
+                    showTipDialog(getString(R.string.face_delete_confirm_tip), record.recordId)
                 }
             }
         }
@@ -68,10 +65,33 @@ class FaceConfigFragment :
         }
     }
 
+    private fun showTipDialog(tip: String, recordId: Long? = null, isAdd: Boolean = false) {
+        mTipDialog ?: let {
+            mTipDialog = TipDialog(requireContext())
+        }
+        mTipDialog?.setTip(tip)
+        mTipDialog?.setType(if (isAdd) TipDialog.TYPE_CONFIRM else TipDialog.TYPE_ALL)
+        mTipDialog?.setConfirmListener {
+            if (!isAdd) {
+                recordId?.let {
+                    presenter?.deleteFace(it) {
+                        refreshFaceList()
+                    }
+                }
+            }
+        }
+        mTipDialog?.show()
+    }
+
     private fun showCaptureDialog() {
         mCaptureDialog ?: let {
             mCaptureDialog = FaceCaptureDialog(activity as BaseActivity<*>) {
-
+                it ?: return@FaceCaptureDialog
+                presenter?.insertFace(it) {
+                    if (it) {
+                        refreshFaceList()
+                    }
+                }
             }
         }
         mCaptureDialog?.show()

+ 22 - 0
app/src/main/java/com/grkj/iscs/view/presenter/FaceConfigPresetner.kt

@@ -1,7 +1,10 @@
 package com.grkj.iscs.view.presenter
 
+import android.graphics.Bitmap
 import com.grkj.iscs.MyApplication
+import com.grkj.iscs.model.vo.FileStreamReqParam
 import com.grkj.iscs.model.vo.characteristic.CharacteristicPageRespVO
+import com.grkj.iscs.util.BitmapUtil
 import com.grkj.iscs.util.Executor
 import com.grkj.iscs.util.NetApi
 import com.grkj.iscs.util.SPUtils
@@ -19,4 +22,23 @@ class FaceConfigPresenter : BasePresenter<IFaceConfigView>() {
             }
         }
     }
+
+    fun insertFace(bitmap: Bitmap, callBack: (Boolean) -> Unit) {
+        NetApi.insertFace(
+            SPUtils.getLoginUser(MyApplication.instance!!.applicationContext)?.userName!!,
+            mutableListOf(FileStreamReqParam("file", BitmapUtil.bitmapToByteArray(bitmap), ".bmp"))
+        ) {
+            Executor.runOnMain {
+                callBack(it)
+            }
+        }
+    }
+
+    fun deleteFace(recordId: Long, callBack: (Boolean) -> Unit) {
+        NetApi.deleteUserCharacteristic(recordId.toString()) {
+            Executor.runOnMain {
+                callBack(it)
+            }
+        }
+    }
 }

+ 3 - 0
app/src/main/res/values/strings.xml

@@ -237,4 +237,7 @@
      \n · 表情⾃然
 \n2. 拍摄完成后,您可以点击确认按钮进行提交,也可以点击重拍按钮重新进行拍摄。
 \n3. 取消录入,请点击取消按钮</string>
+    <string name="face_add_success_tip">已成功录入您的人脸数据</string>
+    <string name="face_delete_confirm_tip">确定要删除人脸数据吗?</string>
+    <string name="my_face">我的人脸</string>
 </resources>