Просмотр исходного кода

refactor(更新)
- 取钥匙之后,待取出设备状态没有更新的问题处理
- 新增指纹动画组件

周文健 4 месяцев назад
Родитель
Сommit
82b1a33513

+ 1 - 0
data/src/main/java/com/grkj/data/repository/impl/standard/JobTicketRepository.kt

@@ -511,6 +511,7 @@ class JobTicketRepository @Inject constructor(
         }
         isJobTicketKey.collectTime = TimeUtils.nowString(TimeUtils.DEFAULT_DATE_HOUR_MIN_SEC_FORMAT)
         jobTicketDao.saveIsJobTicketKey(listOf(isJobTicketKey))
+        callback(true)
     }
 
     override fun updateLockReturn(

+ 8 - 7
ui-base/src/main/java/com/grkj/ui_base/business/ModbusBusinessManager.kt

@@ -30,6 +30,7 @@ import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.async
 import kotlinx.coroutines.withContext
 import org.slf4j.LoggerFactory
+import kotlin.math.log
 import kotlin.plus
 
 /**
@@ -121,10 +122,10 @@ object ModbusBusinessManager {
      * 处理设备取出
      */
     private fun handleDeviceTake(deviceTakeUpdateBO: DeviceTakeUpdateEvent, rfid: String? = null) {
-        logger.info("$deviceTakeUpdateBO")
+        logger.info("设备取出:$deviceTakeUpdateBO")
         when (deviceTakeUpdateBO.deviceType) {
             // 钥匙
-            0 -> {
+            DeviceConst.DEVICE_TYPE_KEY -> {
                 mDeviceTakeList.find { it.deviceType == DeviceConst.DEVICE_TYPE_KEY && it.nfc == deviceTakeUpdateBO.nfc }
                     ?.let { info ->
                         LoadingEvent.sendLoadingEvent()
@@ -135,7 +136,9 @@ object ModbusBusinessManager {
                             if (isSuccess) {
                                 UpdateTicketProgressEvent.sendUpdateTicketProgressEvent(info.ticketId)
                                 //钥匙取出之后重新再连一把钥匙待机
+                                logger.info("钥匙取出,移除设备取出信息:${info.nfc}")
                                 removeDeviceTake(DeviceConst.DEVICE_TYPE_KEY, info.nfc)
+                                logger.info("设备取出信息:${mDeviceTakeList}")
                                 ModBusController.getKeyByRfid(
                                     info.nfc
                                 )?.mac?.let {
@@ -151,12 +154,14 @@ object ModbusBusinessManager {
                                         )
                                     }
                                 }
+                            }else{
+                                logger.info("更新钥匙取出异常")
                             }
                         }
                     } ?: LoadingEvent.sendLoadingEvent()
             }
             // 挂锁
-            1 -> {
+            DeviceConst.DEVICE_TYPE_LOCK -> {
                 mDeviceTakeList.find { it.deviceType == DeviceConst.DEVICE_TYPE_LOCK && it.nfc == deviceTakeUpdateBO.nfc }
                     ?.let { info ->
                         RepositoryManager.hardwareRepo.updateLockTake(
@@ -560,10 +565,6 @@ object ModbusBusinessManager {
                 }
             }
         } else if (!keyBean.isCharging) {//增加充电判断,防止无线充电干扰锁仓状态导致判断为取出
-            // 移出待连监听集合,防止connectKey循环失败
-            keyBean.mac?.let {
-                BleConnectionManager.unregisterConnectListener(it)
-            }
             handleDeviceTake(
                 DeviceTakeUpdateEvent(DeviceConst.DEVICE_TYPE_KEY, keyBean.rfid),
                 keyBean.rfid

+ 15 - 15
ui-base/src/main/java/com/grkj/ui_base/utils/ble/BleConnectionManager.kt

@@ -15,6 +15,7 @@ import com.grkj.ui_base.utils.modbus.ModBusController
 import com.kongzue.dialogx.dialogs.PopTip
 import com.sik.sikcore.activity.ActivityTracker
 import com.sik.sikcore.bluetooth.BLEScanner
+import com.sik.sikcore.bluetooth.BluetoothManager
 import com.sik.sikcore.bluetooth.IBluetoothScanCallback
 import com.sik.sikcore.thread.ThreadUtils
 import kotlinx.coroutines.Dispatchers
@@ -56,7 +57,7 @@ object BleConnectionManager {
      * 当前正在连接的mac
      */
     @Volatile
-    private var currentConnectingMac: String? = null
+    private var currentConnectingMac: MutableList<String> = mutableListOf()
 
     /**
      * 有问题的钥匙的列表 - rfid
@@ -101,8 +102,10 @@ object BleConnectionManager {
                     ModBusController.updateKeyPower(power, bleBean.bleDevice.mac)
                     logger.info("电量(${bleBean.bleDevice.mac}):${power}")
                     ThreadUtils.runOnIODelayed(30 * 1000) {
-                        //尝试使用命令作为心跳
-                        tryHeartBeatWithCmd(bleBean.bleDevice)
+                        if (BleManager.getInstance().isConnected(bleBean.bleDevice)) {
+                            //尝试使用命令作为心跳
+                            tryHeartBeatWithCmd(bleBean.bleDevice)
+                        }
                     }
                     if (power < 50) {//如果电量小于50就打开仓位充电
                         ModBusController.controlKeyCharge(true, bleBean.bleDevice.mac) {
@@ -156,10 +159,10 @@ object BleConnectionManager {
             logger.warn("蓝牙连接-立即连接 mac: $mac")
             BleManager.getInstance().disconnectAllDevice()
             unregisterConnectListener(mac)
-            currentConnectingMac = null
+            currentConnectingMac.removeIf { it == mac }
         }
         // 重复注册检查
-        if (currentConnectingMac == mac) {
+        if (currentConnectingMac.contains(mac)) {
             logger.warn("忽略重复注册 mac: $mac")
             callBack?.invoke(false, null)
             return
@@ -218,7 +221,7 @@ object BleConnectionManager {
      * 检查是否能进行蓝牙连接准备的下一步,防止未准备完但是已经取消订阅
      */
     private fun checkProcess(mac: String?, hideLoading: Boolean = true): Boolean {
-        val canProcess = connectListeners.any { it.mac == mac }
+        val canProcess = currentConnectingMac.contains(mac)
         if (!canProcess && hideLoading) LoadingEvent.sendLoadingEvent(null, false)
         return canProcess
     }
@@ -234,16 +237,16 @@ object BleConnectionManager {
             return
         }
         val listener = connectListeners.first()
-        currentConnectingMac = listener.mac
+        currentConnectingMac.add(listener.mac)
         ThreadUtils.runOnIODelayed(10 * 1000) {
             isPreparing = false
-            currentConnectingMac = null
+            currentConnectingMac.removeIf { it == listener.mac }
         }
         isPreparing = true
         if (ActivityTracker.getCurrentActivity() == null) {
             logger.warn("蓝牙连接-Ignore connectKey : ${listener.mac} no current activity")
             isPreparing = false
-            currentConnectingMac = null
+            currentConnectingMac.removeIf { it == listener.mac }
             return
         }
         prepareBle(
@@ -251,13 +254,10 @@ object BleConnectionManager {
         ) { isDone, bleBean ->
             ThreadUtils.runOnMain {
                 isPreparing = false
-                currentConnectingMac = null
+                currentConnectingMac.removeIf { it == listener.mac }
                 if (!isDone) {
-                    // 判断是否仍然待连,防止拿走;移到末尾,防止循环影响
-                    if (checkProcess(listener.mac, false)) {
-                        listener.callBack?.invoke(false, null)
-                        unregisterConnectListener(listener.mac)
-                    }
+                    listener.callBack?.invoke(false, null)
+                    unregisterConnectListener(listener.mac)
                     return@runOnMain
                 }
                 // 判断是否仍然待连,防止拿走

+ 5 - 0
ui-base/src/main/java/com/grkj/ui_base/utils/event/DeviceTakeUpdateEvent.kt

@@ -10,6 +10,7 @@ class DeviceTakeUpdateEvent(
     val deviceType: Int,    // 0:钥匙 1:挂锁
     val nfc: String?
 ) {
+
     companion object {
         /**
          * 发送设备取出通知
@@ -26,4 +27,8 @@ class DeviceTakeUpdateEvent(
             EventHelper.sendEvent(deviceTakeUpdateEventBean)
         }
     }
+
+    override fun toString(): String {
+        return "DeviceTakeUpdateEvent(deviceType=$deviceType, nfc=$nfc)"
+    }
 }

+ 81 - 0
ui-base/src/main/java/com/grkj/ui_base/widget/FingerprintFillView.kt

@@ -0,0 +1,81 @@
+package com.grkj.ui_base.widget
+
+import android.animation.ObjectAnimator
+import android.content.Context
+import android.graphics.Canvas
+import android.graphics.Paint
+import android.util.AttributeSet
+import android.view.View
+import android.view.animation.AccelerateDecelerateInterpolator
+import androidx.core.content.ContextCompat
+import androidx.core.graphics.PathParser
+import com.grkj.ui_base.R
+import kotlin.math.ceil
+
+class FingerprintFillView @JvmOverloads constructor(
+    context: Context,
+    attrs: AttributeSet? = null,
+    defStyle: Int = 0
+) : View(context, attrs, defStyle) {
+
+    // 1. 读取 pathData 并解析成 Path 对象列表
+    private val pathDataArray = context.resources.getStringArray(R.array.fingerprint_paths)
+    private val paths = pathDataArray.map {
+        PathParser.createPathFromPathData(it)
+    }
+
+    // 2. 两支画笔:灰底 & 绿填
+    private val greyPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
+        style = Paint.Style.FILL
+        color = ContextCompat.getColor(context, R.color.fingerprint_grey) // #888888
+    }
+    private val greenPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
+        style = Paint.Style.FILL
+        color = ContextCompat.getColor(context, R.color.fingerprint_green) // #34C759
+    }
+
+    // 3. 总步数 & 当前进度([0, totalSteps])
+    private var totalSteps = 8
+    private var progress = 0f
+
+    /** 设置分段总数 */
+    fun setTotalSteps(steps: Int) {
+        totalSteps = steps.coerceAtLeast(1)
+        invalidate()
+    }
+
+    /** 设置当前填充步数,可选动画 */
+    fun setProgress(stepsFilled: Int, animate: Boolean = true) {
+        val target = stepsFilled.coerceIn(0, totalSteps).toFloat()
+        if (!animate) {
+            progress = target
+            invalidate()
+            return
+        }
+        ObjectAnimator.ofFloat(this, "progress", progress, target).apply {
+            duration = 600
+            interpolator = AccelerateDecelerateInterpolator()
+            addUpdateListener { invalidate() }
+            start()
+        }
+    }
+
+    // 用于 ObjectAnimator 修改 progress
+    @Suppress("unused")
+    fun setProgress(value: Float) {
+        progress = value
+    }
+
+    override fun onDraw(canvas: Canvas) {
+        super.onDraw(canvas)
+        // 4. 先画灰色底
+        for (path in paths) {
+            canvas.drawPath(path, greyPaint)
+        }
+        // 5. 然后画绿色,计算当前要填几条
+        val count = ceil(paths.size * (progress / totalSteps)).toInt()
+        for (i in 0 until count.coerceAtMost(paths.size)) {
+            canvas.drawPath(paths[i], greenPaint)
+        }
+    }
+}

+ 23 - 0
ui-base/src/main/res/drawable/icon_fingerprint.xml

@@ -0,0 +1,23 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:autoMirrored="true" android:height="200dp" android:viewportHeight="1024" android:viewportWidth="1024" android:width="200dp">
+      
+    <path android:fillColor="#707070" android:pathData="M85.3,608c-6.4,0 -10.7,-4.3 -10.7,-8.5 -10.7,-51.2 -12.8,-102.4 -4.3,-151.5 6.4,-49.1 21.3,-96 44.8,-140.8 2.1,-6.4 10.7,-8.5 14.9,-4.3 6.4,2.1 8.5,10.7 4.3,14.9 -21.3,42.7 -36.3,85.3 -42.7,132.3 -6.4,46.9 -6.4,96 4.3,145.1 2.1,6.4 -2.1,12.8 -8.5,12.8H85.3m74.7,-341.3c-2.1,0 -4.3,0 -6.4,-2.1 -4.3,-4.3 -6.4,-10.7 -2.1,-17.1 66.1,-89.6 162.1,-151.5 273.1,-174.9 98.1,-19.2 196.3,-6.4 285.9,36.3 6.4,2.1 8.5,10.7 6.4,14.9 -2.1,6.4 -10.7,8.5 -14.9,6.4 -85.3,-40.5 -177.1,-53.3 -270.9,-34.1 -104.5,21.3 -196.3,78.9 -258.1,164.3 -4.3,4.3 -8.5,6.4 -12.8,6.4m778.7,170.7c-6.4,0 -10.7,-4.3 -10.7,-8.5 -21.3,-106.7 -83.2,-200.5 -170.7,-262.4 -4.3,-4.3 -6.4,-10.7 -2.1,-17.1 4.3,-4.3 10.7,-6.4 17.1,-2.1 93.9,66.1 157.9,164.3 181.3,277.3 2.1,6.4 -2.1,12.8 -8.5,12.8H938.7"/>
+      
+    <path android:fillColor="#707070" android:pathData="M947.2,531.2c-6.4,0 -12.8,-6.4 -10.7,-12.8 0,-29.9 -2.1,-61.9 -8.5,-91.7 -2.1,-6.4 2.1,-12.8 8.5,-12.8 6.4,-2.1 12.8,2.1 12.8,8.5 6.4,32 8.5,64 8.5,98.1 2.1,6.4 -4.3,10.7 -10.7,10.7M89.6,627.2c-4.3,0 -10.7,-4.3 -10.7,-8.5 -2.1,-6.4 -2.1,-12.8 -4.3,-19.2 -2.1,-6.4 2.1,-12.8 8.5,-12.8 6.4,-2.1 12.8,2.1 12.8,8.5 2.1,6.4 2.1,12.8 4.3,17.1 2.1,6.4 -2.1,12.8 -8.5,14.9h-2.1m311.5,315.7c-2.1,0 -6.4,0 -8.5,-2.1 -4.3,-4.3 -6.4,-10.7 -2.1,-17.1 46.9,-53.3 83.2,-119.5 102.4,-187.7 19.2,-72.5 23.5,-147.2 8.5,-221.9 -2.1,-6.4 2.1,-12.8 8.5,-12.8 6.4,-2.1 12.8,2.1 12.8,8.5 14.9,78.9 12.8,155.7 -8.5,232.5 -19.2,72.5 -57.6,140.8 -106.7,198.4 0,2.1 -4.3,2.1 -6.4,2.1"/>
+      
+    <path android:fillColor="#707070" android:pathData="M343.5,923.7c-2.1,0 -6.4,-2.1 -8.5,-4.3 -4.3,-4.3 -4.3,-12.8 0,-17.1 40.5,-40.5 70.4,-89.6 91.7,-142.9 2.1,-6.4 8.5,-8.5 14.9,-6.4 6.4,2.1 8.5,8.5 6.4,14.9 -21.3,55.5 -55.5,106.7 -96,149.3 -2.1,6.4 -4.3,6.4 -8.5,6.4"/>
+      
+    <path android:fillColor="#707070" android:pathData="M460.8,955.7c-2.1,0 -4.3,0 -6.4,-2.1 -4.3,-4.3 -6.4,-10.7 -2.1,-17.1 96,-123.7 134.4,-281.6 102.4,-433.1v-4.3c-2.1,-10.7 -8.5,-17.1 -17.1,-23.5 -8.5,-6.4 -21.3,-8.5 -32,-6.4 -21.3,4.3 -36.3,23.5 -34.1,44.8l2.1,6.4c12.8,59.7 12.8,121.6 0,181.3 -2.1,6.4 -8.5,10.7 -14.9,8.5 -6.4,-2.1 -10.7,-8.5 -8.5,-14.9 10.7,-53.3 12.8,-106.7 2.1,-160l-4.3,-10.7c-6.4,-36.3 17.1,-70.4 51.2,-78.9 17.1,-4.3 34.1,0 49.1,10.7 14.9,10.7 25.6,25.6 27.7,42.7l2.1,10.7c27.7,155.7 -10.7,315.7 -108.8,441.6 -2.1,2.1 -4.3,4.3 -8.5,4.3m-168.5,-57.6c-2.1,0 -6.4,-2.1 -8.5,-4.3 -4.3,-4.3 -4.3,-12.8 0,-17.1 87.5,-81.1 130.1,-200.5 113.1,-320 0,-6.4 4.3,-12.8 10.7,-12.8s12.8,4.3 12.8,10.7c17.1,125.9 -27.7,251.7 -121.6,339.2 0,4.3 -4.3,4.3 -6.4,4.3"/>
+      
+    <path android:fillColor="#707070" android:pathData="M631.5,618.7c-6.4,0 -10.7,-4.3 -10.7,-10.7 0,-38.4 -4.3,-76.8 -10.7,-115.2v-4.3c-6.4,-23.5 -19.2,-44.8 -40.5,-57.6 -21.3,-14.9 -46.9,-19.2 -72.5,-14.9 -38.4,8.5 -68.3,38.4 -76.8,74.7 -2.1,6.4 -8.5,10.7 -14.9,8.5 -6.4,-2.1 -10.7,-8.5 -8.5,-14.9 10.7,-46.9 46.9,-83.2 93.9,-93.9 32,-6.4 64,0 91.7,17.1 27.7,17.1 44.8,44.8 51.2,76.8l2.1,8.5c6.4,36.3 10.7,72.5 10.7,110.9 -4.3,10.7 -8.5,14.9 -14.9,14.9zM526.9,957.9c-2.1,0 -4.3,0 -6.4,-2.1 -6.4,-4.3 -6.4,-10.7 -2.1,-17.1 53.3,-78.9 87.5,-170.7 98.1,-264.5 0,-6.4 6.4,-10.7 12.8,-10.7s10.7,6.4 10.7,12.8c-10.7,98.1 -46.9,194.1 -102.4,275.2 -4.3,4.3 -8.5,6.4 -10.7,6.4"/>
+      
+    <path android:fillColor="#707070" android:pathData="M245.3,866.1c-4.3,0 -6.4,-2.1 -8.5,-4.3 -4.3,-4.3 -4.3,-12.8 2.1,-17.1 40.5,-36.3 72.5,-83.2 91.7,-134.4 17.1,-49.1 21.3,-102.4 12.8,-155.7l-2.1,-8.5c-8.5,-46.9 0,-91.7 25.6,-132.3 25.6,-38.4 66.1,-66.1 110.9,-74.7 14.9,-4.3 32,-4.3 49.1,-2.1 6.4,0 10.7,6.4 10.7,12.8s-6.4,10.7 -12.8,10.7c-14.9,-2.1 -27.7,0 -42.7,2.1 -40.5,8.5 -74.7,32 -96,64s-29.9,68.3 -23.5,104.5l2.1,8.5c12.8,59.7 8.5,121.6 -12.8,179.2 -19.2,55.5 -53.3,104.5 -98.1,145.1 -2.1,2.1 -4.3,2.1 -8.5,2.1m349.9,83.2c-2.1,0 -4.3,0 -6.4,-2.1 -6.4,-4.3 -8.5,-10.7 -4.3,-17.1 78.9,-136.5 106.7,-296.5 74.7,-450.1v-4.3c-10.7,-40.5 -36.3,-76.8 -74.7,-98.1 -6.4,-4.3 -8.5,-10.7 -4.3,-17.1 4.3,-6.4 10.7,-8.5 17.1,-4.3 44.8,25.6 76.8,68.3 87.5,117.3l2.1,10.7c29.9,157.9 0,320 -81.1,456.5 -2.1,6.4 -6.4,8.5 -10.7,8.5"/>
+      
+    <path android:fillColor="#707070" android:pathData="M204.8,829.9c-4.3,0 -6.4,-2.1 -8.5,-4.3 -4.3,-4.3 -4.3,-10.7 0,-14.9 34.1,-27.7 61.9,-66.1 78.9,-108.8 2.1,-6.4 8.5,-8.5 14.9,-6.4 6.4,2.1 8.5,8.5 6.4,14.9 -17.1,44.8 -46.9,85.3 -85.3,117.3 -2.1,2.1 -4.3,2.1 -6.4,2.1m524.8,-96c-8.5,-2.1 -12.8,-6.4 -10.7,-12.8 12.8,-83.2 12.8,-166.4 -4.3,-249.6v-4.3c-10.7,-53.3 -42.7,-98.1 -87.5,-128 -44.8,-29.9 -100.3,-40.5 -155.7,-29.9 -53.3,10.7 -100.3,42.7 -130.1,87.5 -27.7,42.7 -40.5,93.9 -32,145.1l2.1,10.7c6.4,27.7 6.4,57.6 4.3,87.5 0,6.4 -6.4,10.7 -12.8,10.7s-10.7,-6.4 -10.7,-12.8c2.1,-23.5 2.1,-44.8 -2.1,-68.3l-2.1,-10.7c-12.8,-59.7 0,-121.6 34.1,-172.8s85.3,-85.3 145.1,-98.1c59.7,-12.8 121.6,0 172.8,34.1s85.3,85.3 98.1,145.1l2.1,6.4c14.9,81.1 14.9,166.4 2.1,251.7 -2.1,4.3 -6.4,8.5 -12.8,8.5m-61.9,196.3c-2.1,0 -4.3,0 -4.3,-2.1 -6.4,-2.1 -8.5,-10.7 -6.4,-14.9 19.2,-40.5 36.3,-81.1 46.9,-123.7 2.1,-6.4 8.5,-10.7 14.9,-8.5 6.4,2.1 10.7,8.5 8.5,14.9 -12.8,44.8 -27.7,87.5 -49.1,128 -2.1,2.1 -6.4,6.4 -10.7,6.4"/>
+      
+    <path android:fillColor="#707070" android:pathData="M744.5,891.7h-4.3c-6.4,-2.1 -8.5,-8.5 -6.4,-14.9 51.2,-132.3 61.9,-273.1 34.1,-411.7v-2.1c-8.5,-36.3 -23.5,-70.4 -44.8,-102.4 -4.3,-4.3 -2.1,-12.8 2.1,-17.1 4.3,-4.3 12.8,-2.1 17.1,2.1 23.5,32 38.4,68.3 46.9,106.7v4.3c29.9,142.9 17.1,292.3 -36.3,428.8 0,2.1 -4.3,6.4 -8.5,6.4m-59.7,-578.1c-2.1,0 -4.3,0 -6.4,-2.1 -59.7,-49.1 -138.7,-70.4 -215.5,-53.3 -19.2,4.3 -38.4,10.7 -57.6,19.2 -6.4,2.1 -12.8,0 -14.9,-6.4 -2.1,-6.4 0,-12.8 6.4,-14.9 19.2,-8.5 40.5,-14.9 61.9,-19.2 83.2,-17.1 170.7,4.3 236.8,59.7 4.3,4.3 6.4,10.7 2.1,17.1 -6.4,-2.1 -8.5,0 -12.8,0M168.5,789.3c-4.3,0 -6.4,-2.1 -8.5,-4.3 -4.3,-4.3 -4.3,-12.8 2.1,-17.1 57.6,-46.9 85.3,-119.5 74.7,-192l-2.1,-8.5c-21.3,-104.5 17.1,-209.1 100.3,-277.3 4.3,-4.3 12.8,-4.3 17.1,2.1 4.3,4.3 4.3,12.8 -2.1,17.1 -72.5,59.7 -108.8,151.5 -93.9,243.2l2.1,10.7c17.1,85.3 -14.9,170.7 -81.1,224 -4.3,2.1 -6.4,2.1 -8.5,2.1"/>
+      
+    <path android:fillColor="#707070" android:pathData="M138.7,744.5c-4.3,0 -6.4,-2.1 -8.5,-4.3 -4.3,-4.3 -4.3,-12.8 2.1,-17.1 40.5,-34.1 59.7,-87.5 51.2,-138.7l-2.1,-6.4c-4.3,-17.1 -6.4,-36.3 -6.4,-53.3 0,-6.4 4.3,-12.8 10.7,-12.8s12.8,4.3 12.8,10.7c0,12.8 2.1,25.6 4.3,40.5l2.1,10.7c12.8,61.9 -10.7,128 -57.6,168.5 -4.3,2.1 -6.4,2.1 -8.5,2.1m701.9,-243.2c-6.4,0 -10.7,-4.3 -10.7,-10.7 -2.1,-12.8 -4.3,-23.5 -6.4,-36.3l-2.1,-6.4c-17.1,-83.2 -64,-153.6 -134.4,-200.5s-153.6,-64 -236.8,-46.9c-64,12.8 -119.5,44.8 -164.3,91.7 -42.7,44.8 -72.5,102.4 -83.2,164.3 -2.1,6.4 -6.4,10.7 -12.8,8.5 -6.4,-2.1 -10.7,-6.4 -10.7,-12.8 10.7,-66.1 42.7,-128 89.6,-177.1 46.9,-49.1 108.8,-83.2 177.1,-98.1 87.5,-17.1 179.2,0 253.9,49.1 72.5,49.1 123.7,121.6 142.9,206.9l2.1,8.5c2.1,14.9 6.4,27.7 8.5,42.7 0,8.5 -6.4,14.9 -12.8,17.1m-19.2,328.5h-2.1c-6.4,-2.1 -10.7,-8.5 -8.5,-14.9 21.3,-83.2 29.9,-170.7 25.6,-256 0,-6.4 4.3,-12.8 10.7,-12.8s12.8,4.3 12.8,10.7c6.4,89.6 -4.3,177.1 -25.6,264.5 -2.1,4.3 -8.5,8.5 -12.8,8.5"/>
+      
+    <path android:fillColor="#707070" android:pathData="M113.1,693.3c-2.1,0 -6.4,0 -8.5,-2.1 -4.3,-4.3 -4.3,-12.8 0,-17.1 21.3,-21.3 29.9,-51.2 25.6,-81.1v-4.3c-21.3,-102.4 0,-206.9 57.6,-294.4s147.2,-147.2 249.6,-168.5c42.7,-8.5 87.5,-10.7 130.1,-4.3 4.3,2.1 8.5,6.4 8.5,12.8s-6.4,10.7 -12.8,10.7c-40.5,-6.4 -81.1,-4.3 -121.6,4.3 -96,19.2 -179.2,74.7 -234.7,157.9 -55.5,81.1 -74.7,174.9 -57.6,270.9l2.1,6.4c8.5,38.4 -4.3,76.8 -29.9,106.7 -2.1,2.1 -6.4,2.1 -8.5,2.1M896,727.5c-8.5,0 -12.8,-6.4 -10.7,-12.8 10.7,-89.6 8.5,-179.2 -8.5,-268.8l-2.1,-8.5c-25.6,-130.1 -121.6,-236.8 -249.6,-279.5 -6.4,-2.1 -8.5,-8.5 -8.5,-14.9 2.1,-6.4 8.5,-10.7 14.9,-8.5 132.3,42.7 232.5,151.5 262.4,285.9l2.1,10.7c19.2,93.9 23.5,189.9 10.7,283.7 0,8.5 -4.3,12.8 -10.7,12.8"/>
+    
+</vector>

+ 24 - 0
ui-base/src/main/res/values/arrays.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android">
+    <string-array name="fingerprint_paths">
+        <item>M85.3,608c-6.4,0 -10.7,-4.3 -10.7,-8.5 -10.7,-51.2 -12.8,-102.4 -4.3,-151.5 6.4,-49.1 21.3,-96 44.8,-140.8 2.1,-6.4 10.7,-8.5 14.9,-4.3 6.4,2.1 8.5,10.7 4.3,14.9 -21.3,42.7 -36.3,85.3 -42.7,132.3 -6.4,46.9 -6.4,96 4.3,145.1 2.1,6.4 -2.1,12.8 -8.5,12.8H85.3m74.7,-341.3c-2.1,0 -4.3,0 -6.4,-2.1 -4.3,-4.3 -6.4,-10.7 -2.1,-17.1 66.1,-89.6 162.1,-151.5 273.1,-174.9 98.1,-19.2 196.3,-6.4 285.9,36.3 6.4,2.1 8.5,10.7 6.4,14.9 -2.1,6.4 -10.7,8.5 -14.9,6.4 -85.3,-40.5 -177.1,-53.3 -270.9,-34.1 -104.5,21.3 -196.3,78.9 -258.1,164.3 -4.3,4.3 -8.5,6.4 -12.8,6.4m778.7,170.7c-6.4,0 -10.7,-4.3 -10.7,-8.5 -21.3,-106.7 -83.2,-200.5 -170.7,-262.4 -4.3,-4.3 -6.4,-10.7 -2.1,-17.1 4.3,-4.3 10.7,-6.4 17.1,-2.1 93.9,66.1 157.9,164.3 181.3,277.3 2.1,6.4 -2.1,12.8 -8.5,12.8H938.7</item>
+
+        <item>M947.2,531.2c-6.4,0 -12.8,-6.4 -10.7,-12.8 0,-29.9 -2.1,-61.9 -8.5,-91.7 -2.1,-6.4 2.1,-12.8 8.5,-12.8 6.4,-2.1 12.8,2.1 12.8,8.5 6.4,32 8.5,64 8.5,98.1 2.1,6.4 -4.3,10.7 -10.7,10.7M89.6,627.2c-4.3,0 -10.7,-4.3 -10.7,-8.5 -2.1,-6.4 -2.1,-12.8 -4.3,-19.2 -2.1,-6.4 2.1,-12.8 8.5,-12.8 6.4,-2.1 12.8,2.1 12.8,8.5 2.1,6.4 2.1,12.8 4.3,17.1 2.1,6.4 -2.1,12.8 -8.5,14.9h-2.1m311.5,315.7c-2.1,0 -6.4,0 -8.5,-2.1 -4.3,-4.3 -6.4,-10.7 -2.1,-17.1 46.9,-53.3 83.2,-119.5 102.4,-187.7 19.2,-72.5 23.5,-147.2 8.5,-221.9 -2.1,-6.4 2.1,-12.8 8.5,-12.8 6.4,-2.1 12.8,2.1 12.8,8.5 14.9,78.9 12.8,155.7 -8.5,232.5 -19.2,72.5 -57.6,140.8 -106.7,198.4 0,2.1 -4.3,2.1 -6.4,2.1</item>
+
+        <item>M343.5,923.7c-2.1,0 -6.4,-2.1 -8.5,-4.3 -4.3,-4.3 -4.3,-12.8 0,-17.1 40.5,-40.5 70.4,-89.6 91.7,-142.9 2.1,-6.4 8.5,-8.5 14.9,-6.4 6.4,2.1 8.5,8.5 6.4,14.9 -21.3,55.5 -55.5,106.7 -96,149.3 -2.1,6.4 -4.3,6.4 -8.5,6.4</item>
+
+        <item>M460.8,955.7c-2.1,0 -4.3,0 -6.4,-2.1 -4.3,-4.3 -6.4,-10.7 -2.1,-17.1 96,-123.7 134.4,-281.6 102.4,-433.1v-4.3c-2.1,-10.7 -8.5,-17.1 -17.1,-23.5 -8.5,-6.4 -21.3,-8.5 -32,-6.4 -21.3,4.3 -36.3,23.5 -34.1,44.8l2.1,6.4c12.8,59.7 12.8,121.6 0,181.3 -2.1,6.4 -8.5,10.7 -14.9,8.5 -6.4,-2.1 -10.7,-8.5 -8.5,-14.9 10.7,-53.3 12.8,-106.7 2.1,-160l-4.3,-10.7c-6.4,-36.3 17.1,-70.4 51.2,-78.9 17.1,-4.3 34.1,0 49.1,10.7 14.9,10.7 25.6,25.6 27.7,42.7l2.1,10.7c27.7,155.7 -10.7,315.7 -108.8,441.6 -2.1,2.1 -4.3,4.3 -8.5,4.3m-168.5,-57.6c-2.1,0 -6.4,-2.1 -8.5,-4.3 -4.3,-4.3 -4.3,-12.8 0,-17.1 87.5,-81.1 130.1,-200.5 113.1,-320 0,-6.4 4.3,-12.8 10.7,-12.8s12.8,4.3 12.8,10.7c17.1,125.9 -27.7,251.7 -121.6,339.2 0,4.3 -4.3,4.3 -6.4,4.3</item>
+
+        <item>M631.5,618.7c-6.4,0 -10.7,-4.3 -10.7,-10.7 0,-38.4 -4.3,-76.8 -10.7,-115.2v-4.3c-6.4,-23.5 -19.2,-44.8 -40.5,-57.6 -21.3,-14.9 -46.9,-19.2 -72.5,-14.9 -38.4,8.5 -68.3,38.4 -76.8,74.7 -2.1,6.4 -8.5,10.7 -14.9,8.5 -6.4,-2.1 -10.7,-8.5 -8.5,-14.9 10.7,-46.9 46.9,-83.2 93.9,-93.9 32,-6.4 64,0 91.7,17.1 27.7,17.1 44.8,44.8 51.2,76.8l2.1,8.5c6.4,36.3 10.7,72.5 10.7,110.9 -4.3,10.7 -8.5,14.9 -14.9,14.9zM526.9,957.9c-2.1,0 -4.3,0 -6.4,-2.1 -6.4,-4.3 -6.4,-10.7 -2.1,-17.1 53.3,-78.9 87.5,-170.7 98.1,-264.5 0,-6.4 6.4,-10.7 12.8,-10.7s10.7,6.4 10.7,12.8c-10.7,98.1 -46.9,194.1 -102.4,275.2 -4.3,4.3 -8.5,6.4 -10.7,6.4</item>
+
+        <item>M245.3,866.1c-4.3,0 -6.4,-2.1 -8.5,-4.3 -4.3,-4.3 -4.3,-12.8 2.1,-17.1 40.5,-36.3 72.5,-83.2 91.7,-134.4 17.1,-49.1 21.3,-102.4 12.8,-155.7l-2.1,-8.5c-8.5,-46.9 0,-91.7 25.6,-132.3 25.6,-38.4 66.1,-66.1 110.9,-74.7 14.9,-4.3 32,-4.3 49.1,-2.1 6.4,0 10.7,6.4 10.7,12.8s-6.4,10.7 -12.8,10.7c-14.9,-2.1 -27.7,0 -42.7,2.1 -40.5,8.5 -74.7,32 -96,64s-29.9,68.3 -23.5,104.5l2.1,8.5c12.8,59.7 8.5,121.6 -12.8,179.2 -19.2,55.5 -53.3,104.5 -98.1,145.1 -2.1,2.1 -4.3,2.1 -8.5,2.1m349.9,83.2c-2.1,0 -4.3,0 -6.4,-2.1 -6.4,-4.3 -8.5,-10.7 -4.3,-17.1 78.9,-136.5 106.7,-296.5 74.7,-450.1v-4.3c-10.7,-40.5 -36.3,-76.8 -74.7,-98.1 -6.4,-4.3 -8.5,-10.7 -4.3,-17.1 4.3,-6.4 10.7,-8.5 17.1,-4.3 44.8,25.6 76.8,68.3 87.5,117.3l2.1,10.7c29.9,157.9 0,320 -81.1,456.5 -2.1,6.4 -6.4,8.5 -10.7,8.5</item>
+
+        <item>M204.8,829.9c-4.3,0 -6.4,-2.1 -8.5,-4.3 -4.3,-4.3 -4.3,-10.7 0,-14.9 34.1,-27.7 61.9,-66.1 78.9,-108.8 2.1,-6.4 8.5,-8.5 14.9,-6.4 6.4,2.1 8.5,8.5 6.4,14.9 -17.1,44.8 -46.9,85.3 -85.3,117.3 -2.1,2.1 -4.3,2.1 -6.4,2.1m524.8,-96c-8.5,-2.1 -12.8,-6.4 -10.7,-12.8 12.8,-83.2 12.8,-166.4 -4.3,-249.6v-4.3c-10.7,-53.3 -42.7,-98.1 -87.5,-128 -44.8,-29.9 -100.3,-40.5 -155.7,-29.9 -53.3,10.7 -100.3,42.7 -130.1,87.5 -27.7,42.7 -40.5,93.9 -32,145.1l2.1,10.7c6.4,27.7 6.4,57.6 4.3,87.5 0,6.4 -6.4,10.7 -12.8,10.7s-10.7,-6.4 -10.7,-12.8c2.1,-23.5 2.1,-44.8 -2.1,-68.3l-2.1,-10.7c-12.8,-59.7 0,-121.6 34.1,-172.8s85.3,-85.3 145.1,-98.1c59.7,-12.8 121.6,0 172.8,34.1s85.3,85.3 98.1,145.1l2.1,6.4c14.9,81.1 14.9,166.4 2.1,251.7 -2.1,4.3 -6.4,8.5 -12.8,8.5m-61.9,196.3c-2.1,0 -4.3,0 -4.3,-2.1 -6.4,-2.1 -8.5,-10.7 -6.4,-14.9 19.2,-40.5 36.3,-81.1 46.9,-123.7 2.1,-6.4 8.5,-10.7 14.9,-8.5 6.4,2.1 10.7,8.5 8.5,14.9 -12.8,44.8 -27.7,87.5 -49.1,128 -2.1,2.1 -6.4,6.4 -10.7,6.4</item>
+
+        <item>M744.5,891.7h-4.3c-6.4,-2.1 -8.5,-8.5 -6.4,-14.9 51.2,-132.3 61.9,-273.1 34.1,-411.7v-2.1c-8.5,-36.3 -23.5,-70.4 -44.8,-102.4 -4.3,-4.3 -2.1,-12.8 2.1,-17.1 4.3,-4.3 12.8,-2.1 17.1,2.1 23.5,32 38.4,68.3 46.9,106.7v4.3c29.9,142.9 17.1,292.3 -36.3,428.8 0,2.1 -4.3,6.4 -8.5,6.4m-59.7,-578.1c-2.1,0 -4.3,0 -6.4,-2.1 -59.7,-49.1 -138.7,-70.4 -215.5,-53.3 -19.2,4.3 -38.4,10.7 -57.6,19.2 -6.4,2.1 -12.8,0 -14.9,-6.4 -2.1,-6.4 0,-12.8 6.4,-14.9 19.2,-8.5 40.5,-14.9 61.9,-19.2 83.2,-17.1 170.7,4.3 236.8,59.7 4.3,4.3 6.4,10.7 2.1,17.1 -6.4,-2.1 -8.5,0 -12.8,0M168.5,789.3c-4.3,0 -6.4,-2.1 -8.5,-4.3 -4.3,-4.3 -4.3,-12.8 2.1,-17.1 57.6,-46.9 85.3,-119.5 74.7,-192l-2.1,-8.5c-21.3,-104.5 17.1,-209.1 100.3,-277.3 4.3,-4.3 12.8,-4.3 17.1,2.1 4.3,4.3 4.3,12.8 -2.1,17.1 -72.5,59.7 -108.8,151.5 -93.9,243.2l2.1,10.7c17.1,85.3 -14.9,170.7 -81.1,224 -4.3,2.1 -6.4,2.1 -8.5,2.1</item>
+
+        <item>M138.7,744.5c-4.3,0 -6.4,-2.1 -8.5,-4.3 -4.3,-4.3 -4.3,-12.8 2.1,-17.1 40.5,-34.1 59.7,-87.5 51.2,-138.7l-2.1,-6.4c-4.3,-17.1 -6.4,-36.3 -6.4,-53.3 0,-6.4 4.3,-12.8 10.7,-12.8s12.8,4.3 12.8,10.7c0,12.8 2.1,25.6 4.3,40.5l2.1,10.7c12.8,61.9 -10.7,128 -57.6,168.5 -4.3,2.1 -6.4,2.1 -8.5,2.1m701.9,-243.2c-6.4,0 -10.7,-4.3 -10.7,-10.7 -2.1,-12.8 -4.3,-23.5 -6.4,-36.3l-2.1,-6.4c-17.1,-83.2 -64,-153.6 -134.4,-200.5s-153.6,-64 -236.8,-46.9c-64,12.8 -119.5,44.8 -164.3,91.7 -42.7,44.8 -72.5,102.4 -83.2,164.3 -2.1,6.4 -6.4,10.7 -12.8,8.5 -6.4,-2.1 -10.7,-6.4 -10.7,-12.8 10.7,-66.1 42.7,-128 89.6,-177.1 46.9,-49.1 108.8,-83.2 177.1,-98.1 87.5,-17.1 179.2,0 253.9,49.1 72.5,49.1 123.7,121.6 142.9,206.9l2.1,8.5c2.1,14.9 6.4,27.7 8.5,42.7 0,8.5 -6.4,14.9 -12.8,17.1m-19.2,328.5h-2.1c-6.4,-2.1 -10.7,-8.5 -8.5,-14.9 21.3,-83.2 29.9,-170.7 25.6,-256 0,-6.4 4.3,-12.8 10.7,-12.8s12.8,4.3 12.8,10.7c6.4,89.6 -4.3,177.1 -25.6,264.5 -2.1,4.3 -8.5,8.5 -12.8,8.5</item>
+
+        <item>M113.1,693.3c-2.1,0 -6.4,0 -8.5,-2.1 -4.3,-4.3 -4.3,-12.8 0,-17.1 21.3,-21.3 29.9,-51.2 25.6,-81.1v-4.3c-21.3,-102.4 0,-206.9 57.6,-294.4s147.2,-147.2 249.6,-168.5c42.7,-8.5 87.5,-10.7 130.1,-4.3 4.3,2.1 8.5,6.4 8.5,12.8s-6.4,10.7 -12.8,10.7c-40.5,-6.4 -81.1,-4.3 -121.6,4.3 -96,19.2 -179.2,74.7 -234.7,157.9 -55.5,81.1 -74.7,174.9 -57.6,270.9l2.1,6.4c8.5,38.4 -4.3,76.8 -29.9,106.7 -2.1,2.1 -6.4,2.1 -8.5,2.1M896,727.5c-8.5,0 -12.8,-6.4 -10.7,-12.8 10.7,-89.6 8.5,-179.2 -8.5,-268.8l-2.1,-8.5c-25.6,-130.1 -121.6,-236.8 -249.6,-279.5 -6.4,-2.1 -8.5,-8.5 -8.5,-14.9 2.1,-6.4 8.5,-10.7 14.9,-8.5 132.3,42.7 232.5,151.5 262.4,285.9l2.1,10.7c19.2,93.9 23.5,189.9 10.7,283.7 0,8.5 -4.3,12.8 -10.7,12.8</item>
+    </string-array>
+</resources>

+ 2 - 0
ui-base/src/main/res/values/colors.xml

@@ -55,4 +55,6 @@
     <color name="color_008000">#008000</color>
     <color name="color_ff0000">#ff0000</color>
     <color name="color_e9ecf4">#e9ecf4</color>
+    <color name="fingerprint_grey">#888888</color>
+    <color name="fingerprint_green">#34C759</color>
 </resources>