Sfoglia il codice sorgente

refactor(更新) :
- 优化 WorkshopFragment 中票据图标的加载方式,由异步回调改为同步加载,简化代码逻辑
- 调整 WorkshopPresenter 中获取工单列表的方法以支持协程
- CustomMarkLayer 绘制图标时启用位图滤波和抖动,提高图像渲染质量
- 修复 LoginDialog 关闭后,人脸识别仍可能尝试重新启动的问题
- 移除 LoginDialog 中多余的 ArcSoft 引擎初始化调用

周文健 1 mese fa
parent
commit
952a112a07

+ 2 - 0
app/src/main/java/com/grkj/iscs_mars/util/BitmapUtil.kt

@@ -1,5 +1,6 @@
 package com.grkj.iscs_mars.util
 
+import android.annotation.SuppressLint
 import android.content.Context
 import android.graphics.Bitmap
 import android.graphics.BitmapFactory
@@ -503,6 +504,7 @@ object BitmapUtil {
         }
     }
 
+    @SuppressLint("NewApi")
     private fun readExifRotation(file: File): Int {
         return try {
             if (!isJpeg(file)) return 0

+ 2 - 2
app/src/main/java/com/grkj/iscs_mars/util/IconCache.kt

@@ -4,8 +4,8 @@ import android.graphics.Bitmap
 
 // 一个很小的位图缓存(按字节数)
 class IconCache(maxBytes: Int = 12 * 1024 * 1024) {
-    private val cache = object : android.util.LruCache<String, android.graphics.Bitmap>(maxBytes) {
-        override fun sizeOf(key: String, value: android.graphics.Bitmap): Int = value.byteCount
+    private val cache = object : android.util.LruCache<String, Bitmap>(maxBytes) {
+        override fun sizeOf(key: String, value: Bitmap): Int = value.byteCount
     }
     fun get(original: Bitmap, targetPx: Int): Bitmap {
         val key = "${System.identityHashCode(original)}@$targetPx"

+ 4 - 4
app/src/main/java/com/grkj/iscs_mars/view/dialog/LoginDialog.kt

@@ -46,7 +46,6 @@ class LoginDialog(
 
     override fun initView() {
         window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN)
-
         mBinding?.tvLogin?.setOnClickListener {
             presenter?.login(
                 ctx,
@@ -133,11 +132,10 @@ class LoginDialog(
             }
             return true // 消费 HID 事件
         }
-        return  super.dispatchKeyEvent(event)
+        return super.dispatchKeyEvent(event)
     }
 
     private fun startFace() {
-        ArcSoftUtil.initEngine(context)
         ArcSoftUtil.initCamera(
             context,
             ctx.windowManager,
@@ -162,7 +160,9 @@ class LoginDialog(
                         dismiss()
                     } else {
                         ThreadUtils.runOnMainDelayed(1300) {
-                            startFace()
+                            if (isShowing) {
+                                startFace()
+                            }
                         }
                     }
                     callBack?.invoke(isSuccess, userInfoRespVO)

+ 22 - 24
app/src/main/java/com/grkj/iscs_mars/view/fragment/WorkshopFragment.kt

@@ -96,23 +96,22 @@ class WorkshopFragment(val changePage: (PageChangeBO) -> Unit) :
                                     .toMutableList()
                             itPoint.ticketList.take(4).forEachIndexed { index, itTicket ->
                                 if (itPoint.ticketList.size > 3 && index == 3) {
-                                    BitmapUtil.loadBitmapFromUrl(
+                                    val itBitmap = BitmapUtil.loadBitmapSmall(
                                         requireContext(),
                                         SPUtils.getAttributeValue(
                                             requireContext(),
                                             Constants.getTicketKey(5)
                                         ),
-                                        R.mipmap.ticket_type_placeholder,
-                                        60, 60
-                                    ) { itBitmap ->
-                                        itTicket.bitmap =
-                                            itBitmap ?: BitmapUtil.getResizedBitmapFromMipmap(
-                                                requireContext(),
-                                                R.mipmap.ticket_type_placeholder,
-                                                60,
-                                                60
-                                            )
-                                    }
+                                        60,
+                                        60, R.mipmap.ticket_type_placeholder
+                                    )
+                                    itTicket.bitmap =
+                                        itBitmap ?: BitmapUtil.getResizedBitmapFromMipmap(
+                                            requireContext(),
+                                            R.mipmap.ticket_type_placeholder,
+                                            60,
+                                            60
+                                        )
                                 } else {
                                     if (itTicket.ticketType == null) {
                                         itTicket.bitmap = BitmapUtil.getResizedBitmapFromMipmap(
@@ -122,23 +121,22 @@ class WorkshopFragment(val changePage: (PageChangeBO) -> Unit) :
                                             60
                                         )
                                     } else {
-                                        BitmapUtil.loadBitmapFromUrl(
+                                        val itBitmap = BitmapUtil.loadBitmapSmall(
                                             requireContext(),
                                             SPUtils.getAttributeValue(
                                                 requireContext(),
                                                 Constants.getTicketKey(itTicket.ticketType.toInt())
                                             ),
-                                            R.mipmap.ticket_type_placeholder,
-                                            60, 60
-                                        ) { itBitmap ->
-                                            itTicket.bitmap =
-                                                itBitmap ?: BitmapUtil.getResizedBitmapFromMipmap(
-                                                    requireContext(),
-                                                    R.mipmap.ticket_type_placeholder,
-                                                    60,
-                                                    60
-                                                )
-                                        }
+                                            60,
+                                            60, R.mipmap.ticket_type_placeholder
+                                        )
+                                        itTicket.bitmap =
+                                            itBitmap ?: BitmapUtil.getResizedBitmapFromMipmap(
+                                                requireContext(),
+                                                R.mipmap.ticket_type_placeholder,
+                                                60,
+                                                60
+                                            )
                                     }
                                 }
                             }

+ 5 - 2
app/src/main/java/com/grkj/iscs_mars/view/presenter/WorkshopPresenter.kt

@@ -11,13 +11,16 @@ import com.grkj.iscs_mars.util.SPUtils
 import com.grkj.iscs_mars.view.base.BasePresenter
 import com.grkj.iscs_mars.view.fragment.WorkshopFragment
 import com.grkj.iscs_mars.view.iview.IWorkshopView
+import com.sik.sikcore.thread.ThreadUtils
 
 class WorkshopPresenter : BasePresenter<IWorkshopView>() {
 
-    fun getWorkstationTicketList(callBack: (MutableList<WorkstationTicketListRespVO>?) -> Unit) {
+    fun getWorkstationTicketList(callBack: suspend (MutableList<WorkstationTicketListRespVO>?) -> Unit) {
         NetApi.getWorkstationTicketList(0, 100) {
             Executor.runOnMain {
-                callBack(it)
+                ThreadUtils.runOnMain {
+                    callBack(it)
+                }
             }
         }
     }

+ 5 - 2
app/src/main/java/com/grkj/iscs_mars/view/widget/CustomMarkLayer.kt

@@ -245,10 +245,13 @@ class CustomMarkLayer @JvmOverloads constructor(
                             else
                                 list[j].bitmap!!
 
-                            val iconBm = iconCache.get(srcBm, mBitmapSize)   // 返回正方形 mBitmapSize×mBitmapSize
-                            iconBm.density = Bitmap.DENSITY_NONE
+                            val iconBm = iconCache.get(srcBm, mBitmapSize)   // 已是 mBitmapSize × mBitmapSize
+                            iconBm.density = Bitmap.DENSITY_NONE             // 不复制,不分配,直接用
+                            paint.isFilterBitmap = true
+                            paint.isDither = true
                             canvas.drawBitmap(iconBm, ticketX, ticketY, paint)
 
+
                             // ===== 序号徽章:正上方、大小=图标的90%、与图标垂直间隔=horizontalPadding =====
                             val iconLeft = ticketX
                             val iconTop = ticketY