Răsfoiți Sursa

1. 指纹登录功能对接中

bjb 4 luni în urmă
părinte
comite
5cba0e42fd

+ 3 - 0
app/build.gradle.kts

@@ -66,6 +66,9 @@ dependencies {
     implementation(libs.androidx.compose.ui.tooling.preview)
     implementation(libs.androidx.compose.material3)
     implementation(libs.androidx.compose.navigation)
+    // 指纹组件
+    implementation(libs.androidx.biometric)
+    implementation(libs.androidx.compose.biometric)
 
     // 携程相关包的导入
     implementation(libs.coroutines.core)

+ 3 - 0
app/src/main/AndroidManifest.xml

@@ -3,6 +3,9 @@
 
     <!--  网络请求  -->
     <uses-permission android:name="android.permission.INTERNET" />
+    <!--  指纹验证  -->
+    <uses-permission android:name="android.permission.USE_BIOMETRIC"/>
+
 
     <application
         android:name=".Entry"

+ 1 - 1
app/src/main/java/com/iscs/bozzys/ui/pages/PageSplash.kt

@@ -88,7 +88,7 @@ class PageSplash : PageBase() {
             override fun onSuccess(msg: String?) {
                 // 消息推送初始化成功
                 // 这里可能要告知服务端当前推送的设备id,便于后续设备推送通知
-                Log.i("MPS", "消息推送注册成功")
+                Log.i("MPS", "消息推送注册成功:${pushService.deviceId}")
             }
 
             override fun onFailed(errCode: String?, errMsg: String?) {

+ 58 - 48
app/src/main/java/com/iscs/bozzys/ui/pages/login/PageLogin.kt

@@ -2,6 +2,7 @@ package com.iscs.bozzys.ui.pages.login
 
 import android.content.Context
 import android.content.Intent
+import androidx.biometric.BiometricPrompt
 import androidx.compose.foundation.background
 import androidx.compose.foundation.border
 import androidx.compose.foundation.clickable
@@ -35,6 +36,7 @@ import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.clip
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.platform.LocalContext
 import androidx.compose.ui.platform.LocalSoftwareKeyboardController
 import androidx.compose.ui.platform.SoftwareKeyboardController
 import androidx.compose.ui.res.painterResource
@@ -52,6 +54,8 @@ import com.iscs.bozzys.ui.pages.vm.VMLogin
 import com.iscs.bozzys.ui.theme.Main
 import com.iscs.bozzys.ui.theme.Text
 import com.iscs.bozzys.ui.theme.TextDesc
+import com.iscs.bozzys.utils.SystemUtil.isBiometricCanUse
+import com.iscs.bozzys.utils.SystemUtil.showFingerAuth
 
 /**
  * 打开登录页面
@@ -115,7 +119,10 @@ class PageLogin : PageBase() {
 
     @Composable
     fun LoginCompose(kb: SoftwareKeyboardController?, vm: VMLogin = viewModel()) {
+        val ctx = LocalContext.current
         val state = vm.state
+        // 指纹登录是否可用
+        val finger = ctx.isBiometricCanUse()
         LaunchedEffect(Unit) {
             // 处理基础Toast和Loading提示
             vm.toast.showToast()
@@ -270,54 +277,57 @@ class PageLogin : PageBase() {
                 Text("工业安全系统,请妥善保管账号信息", Modifier.padding(start = 5.dp), fontSize = 12.sp, color = Color(0xFF6B7280))
             }
             // 其他登录方式
-//            Box(Modifier.padding(top = 20.dp), contentAlignment = Alignment.Center) {
-//                Spacer(
-//                    Modifier
-//                        .size(335.dp, 1.dp)
-//                        .background(Color(0xFFEEEEEE))
-//                )
-//                Text(
-//                    "其他登录方式", Modifier
-//                        .background(Color.White)
-//                        .padding(horizontal = 5.dp),
-//                    fontSize = 14.sp, color = Color(0xFF999999)
-//                )
-//            }
-//            Row(Modifier.padding(top = 30.dp, bottom = 10.dp), verticalAlignment = Alignment.CenterVertically) {
-//                Icon(
-//                    painter = painterResource(R.drawable.fingerprint),
-//                    contentDescription = null,
-//                    Modifier
-//                        .padding(horizontal = 10.dp)
-//                        .size(50.dp)
-//                        .clip(RoundedCornerShape(50))
-//                        .background(Color(0xFFF5F5F5))
-//                        .padding(13.dp),
-//                    tint = Color(0xFF6B7280)
-//                )
-//                Icon(
-//                    painter = painterResource(R.drawable.qrcode),
-//                    contentDescription = null,
-//                    Modifier
-//                        .padding(horizontal = 10.dp)
-//                        .size(50.dp)
-//                        .clip(RoundedCornerShape(50))
-//                        .background(Color(0xFFF5F5F5))
-//                        .padding(13.dp),
-//                    tint = Color(0xFF6B7280)
-//                )
-//                Icon(
-//                    painter = painterResource(R.drawable.bluetooth),
-//                    contentDescription = null,
-//                    Modifier
-//                        .padding(horizontal = 10.dp)
-//                        .size(50.dp)
-//                        .clip(RoundedCornerShape(50))
-//                        .background(Color(0xFFF5F5F5))
-//                        .padding(15.dp),
-//                    tint = Color(0xFF6B7280)
-//                )
-//            }
+            if (finger) Box(Modifier.padding(top = 20.dp), contentAlignment = Alignment.Center) {
+                Spacer(
+                    Modifier
+                        .size(335.dp, 1.dp)
+                        .background(Color(0xFFEEEEEE))
+                )
+                Text(
+                    "其他登录方式", Modifier
+                        .background(Color.White)
+                        .padding(horizontal = 5.dp),
+                    fontSize = 14.sp, color = Color(0xFF999999)
+                )
+            }
+            Row(Modifier.padding(top = 30.dp, bottom = 10.dp), verticalAlignment = Alignment.CenterVertically) {
+                if (finger) Icon(
+                    painter = painterResource(R.drawable.fingerprint),
+                    contentDescription = null,
+                    Modifier
+                        .padding(horizontal = 10.dp)
+                        .size(50.dp)
+                        .clip(RoundedCornerShape(50))
+                        .clickable {
+                            // BiometricPrompt
+                        }
+                        .background(Color(0xFFF5F5F5))
+                        .padding(13.dp),
+                    tint = Color(0xFF6B7280)
+                )
+                Icon(
+                    painter = painterResource(R.drawable.qrcode),
+                    contentDescription = null,
+                    Modifier
+                        .padding(horizontal = 10.dp)
+                        .size(50.dp)
+                        .clip(RoundedCornerShape(50))
+                        .background(Color(0xFFF5F5F5))
+                        .padding(13.dp),
+                    tint = Color(0xFF6B7280)
+                )
+                Icon(
+                    painter = painterResource(R.drawable.bluetooth),
+                    contentDescription = null,
+                    Modifier
+                        .padding(horizontal = 10.dp)
+                        .size(50.dp)
+                        .clip(RoundedCornerShape(50))
+                        .background(Color(0xFFF5F5F5))
+                        .padding(15.dp),
+                    tint = Color(0xFF6B7280)
+                )
+            }
             Spacer(Modifier.weight(2f))
             // 底部版本等提示
             Column(Modifier.width(335.dp), horizontalAlignment = Alignment.CenterHorizontally) {

+ 34 - 0
app/src/main/java/com/iscs/bozzys/utils/SystemUtil.kt

@@ -0,0 +1,34 @@
+package com.iscs.bozzys.utils
+
+import android.content.Context
+import android.util.Log
+import androidx.biometric.BiometricManager
+
+/**
+ * 用于系统相关操作的功能
+ */
+object SystemUtil {
+
+
+    /**
+     * 指纹组件是否可用
+     */
+    fun Context.isBiometricCanUse(): Boolean {
+        val bm = BiometricManager.from(this)
+        val canAuth = bm.canAuthenticate(BiometricManager.Authenticators.BIOMETRIC_STRONG)
+        Log.d("xiaoming", "指纹功能是否可用:$canAuth")
+        return when (canAuth) {
+            // 可以使用指纹
+            BiometricManager.BIOMETRIC_SUCCESS -> true
+            // 设备不支持
+            BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE -> false
+            // 硬件不可用
+            BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE -> false
+            // 用户未录入
+            BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED -> false
+            // 其他认为不可用
+            else -> false
+        }
+    }
+
+}

+ 3 - 1
gradle/libs.versions.toml

@@ -1,5 +1,5 @@
 [versions]
-agp = "8.13.1"
+agp = "8.13.2"
 kotlin = "2.0.21"
 coreKtx = "1.10.1"
 junit = "4.13.2"
@@ -30,6 +30,8 @@ androidx-compose-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-
 androidx-compose-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" }
 androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3" }
 androidx-compose-navigation = { group = "androidx.navigation", name = "navigation-compose", version = "2.8.0" }
+androidx-biometric = { group = "androidx.biometric", name = "biometric", version = "1.4.0-alpha05" }
+androidx-compose-biometric = { group = "androidx.biometric", name = "biometric-compose", version = "1.0.0-alpha02" }
 
 # 网络请求
 retrofit-core = { group = "com.squareup.retrofit2", name = "retrofit", version = "3.0.0" }