Procházet zdrojové kódy

指纹、刷卡登录不需要按钮触发

Frankensteinly před 7 měsíci
rodič
revize
a4cb9a18b1

+ 61 - 11
app/src/main/java/com/grkj/iscs/view/activity/LoginActivity.kt

@@ -1,12 +1,20 @@
 package com.grkj.iscs.view.activity
 
 import android.content.Intent
+import android.graphics.Bitmap
+import android.view.InputDevice
+import android.view.KeyEvent
 import android.widget.ImageView
 import com.grkj.iscs.BusinessManager
 import com.grkj.iscs.R
 import com.grkj.iscs.databinding.ActivityLoginBinding
+import com.grkj.iscs.extentions.toByteArrays
+import com.grkj.iscs.extentions.toHexStrings
 import com.grkj.iscs.modbus.ModBusController
+import com.grkj.iscs.model.vo.card.CardInfoRespVO
+import com.grkj.iscs.model.vo.user.UserInfoRespVO
 import com.grkj.iscs.util.AppUtils
+import com.grkj.iscs.util.FingerprintUtil
 import com.grkj.iscs.util.log.LogUtil
 import com.grkj.iscs.view.base.BaseMvpActivity
 import com.grkj.iscs.view.dialog.LoginDialog
@@ -18,6 +26,7 @@ import com.zhy.adapter.recyclerview.base.ViewHolder
 class LoginActivity : BaseMvpActivity<ILoginView, LoginPresenter, ActivityLoginBinding>() {
 
     private var cardLoginDialog: LoginDialog? = null
+    private var cardNo = ""
 
     override val viewBinding: ActivityLoginBinding
         get() = ActivityLoginBinding.inflate(layoutInflater)
@@ -40,7 +49,9 @@ class LoginActivity : BaseMvpActivity<ILoginView, LoginPresenter, ActivityLoginB
                     holder.setText(R.id.tv_name, pair.first)
                     holder.getView<ImageView>(R.id.iv_icon).setImageResource(pair.second)
                     holder.setOnClickListener(R.id.root) {
-                        showLoginDialog(position)
+                        if (position == 0 || position == 3) {
+                            showLoginDialog(position)
+                        }
                     }
                 }
             }
@@ -50,22 +61,14 @@ class LoginActivity : BaseMvpActivity<ILoginView, LoginPresenter, ActivityLoginB
     }
 
     /**
-     * @param loginType 0:人脸 1:工卡 2:账号 3:指纹
+     * @param loginType 0:人脸 1:指纹 2:工卡 3:账号
      */
     private fun showLoginDialog(loginType: Int) {
         cardLoginDialog ?: run {
             LogUtil.i("创建Swipe dialog : ${presenter == null}")
             cardLoginDialog = LoginDialog(presenter, this) { isSuccess, cardInfoRespVO, userInfoRespVO ->
                 if (isSuccess) {
-                    val intent = Intent(this, HomeActivity::class.java)
-                    if (cardInfoRespVO != null) {
-                        intent.putExtra("cardInfo", cardInfoRespVO)
-                    }
-                    if (userInfoRespVO != null) {
-                        intent.putExtra("userInfo", userInfoRespVO)
-                    }
-                    startActivity(intent)
-                    BusinessManager.submitKeyData(this@LoginActivity)
+                    goHome(cardInfoRespVO, userInfoRespVO)
                 }
             }
         }
@@ -78,12 +81,59 @@ class LoginActivity : BaseMvpActivity<ILoginView, LoginPresenter, ActivityLoginB
             BusinessManager.connectDock(true)
         }
         presenter?.registerListener()
+
+        FingerprintUtil.init(this)
+        FingerprintUtil.start()
+        FingerprintUtil.setScanListener(object : FingerprintUtil.OnScanListener {
+            override fun onScan(bitmap: Bitmap) {
+                presenter?.fingerprintLogin(bitmap) { isSuccess, cardInfoRespVO, userInfoRespVO ->
+                    if (isSuccess) {
+                        goHome(cardInfoRespVO, userInfoRespVO)
+                    }
+                }
+            }
+        })
+    }
+
+    override fun dispatchKeyEvent(event: KeyEvent): Boolean {
+        if (event.action == KeyEvent.ACTION_UP && event.source == InputDevice.SOURCE_KEYBOARD) {
+            // 检测到回车开始处理
+            if (event.keyCode == 66) {
+                cardNo = cardNo.toLong().toByteArrays().toHexStrings(false)
+                LogUtil.i("Swipe card login: $cardNo")
+                presenter?.cardLogin(cardNo) { isSuccess, cardInfoRespVO, userInfoRespVO ->
+                    if (isSuccess) {
+                        goHome(cardInfoRespVO, userInfoRespVO)
+                    }
+                }
+                // 重置cardNo
+                cardNo = ""
+                return super.dispatchKeyEvent(event)
+            }
+            cardNo += event.keyCharacterMap.getDisplayLabel(event.keyCode)
+        }
+        return super.dispatchKeyEvent(event)
+    }
+
+    private fun goHome(cardInfoRespVO: CardInfoRespVO?, userInfoRespVO: UserInfoRespVO?) {
+        val intent = Intent(this@LoginActivity, HomeActivity::class.java)
+        if (cardInfoRespVO != null) {
+            intent.putExtra("cardInfo", cardInfoRespVO)
+        }
+        if (userInfoRespVO != null) {
+            intent.putExtra("userInfo", userInfoRespVO)
+        }
+        startActivity(intent)
+        BusinessManager.submitKeyData(this@LoginActivity)
     }
 
     override fun onStop() {
         super.onStop()
         cardLoginDialog?.dismiss()
         presenter?.unregisterListener()
+        cardNo = ""
+        FingerprintUtil.stop()
+        FingerprintUtil.unInit()
     }
 
     override fun initPresenter(): LoginPresenter {