Frankensteinly 1 жил өмнө
parent
commit
e70eeafc35

+ 2 - 0
app/build.gradle

@@ -102,4 +102,6 @@ dependencies {
     implementation 'com.leon:lfilepickerlibrary:1.8.0'
 
     implementation 'com.github.jzmanu:MDatePickerSample:v1.0.5'
+
+    implementation 'com.wang.avi:library:2.1.3'
 }

+ 0 - 1
app/src/main/java/com/grkj/iscs/BusinessManager.kt

@@ -86,7 +86,6 @@ object BusinessManager {
                                         ModBusController.readPortalCaseCardRfid(dockBean.addr.toInt() - 1) { res ->
                                             val rfid = res.copyOfRange(3, 11).toHexStrings(false).removeLeadingZeros()
                                             println("卡片RFID : $rfid")
-                                            ToastUtils.tip("卡片RFID : $rfid")
                                         }
                                     }
                                     DEVICE_TYPE_FINGERPRINT -> {

+ 10 - 0
app/src/main/java/com/grkj/iscs/activity/PresentationLoginActivity.kt

@@ -18,6 +18,7 @@ import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_KEY
 import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_LOCK
 import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_PORTABLE
 import com.grkj.iscs.presentation.PresentationActivity
+import com.grkj.iscs.util.Executor
 import com.grkj.iscs.util.FileUtil
 import com.grkj.iscs.util.ToastUtils
 import com.grkj.iscs.util.log.LogUtil
@@ -42,7 +43,11 @@ class PresentationLoginActivity : BaseActivity<ActivityPresentationLoginBinding>
         val cardList: List<CardInfoBean> =
             Gson().fromJson(str, object : TypeToken<List<CardInfoBean>>() {}.type)
 
+        handleLoading(true, "正在初始化设备...")
         BusinessManager.connectDock(1, true)
+        Executor.delayOnMain(2000) {
+            handleLoading(false)
+        }
 
         ModBusController.registerStatusListener(this) { res ->
             (res as List<ByteArray>).forEach { bytes ->
@@ -73,5 +78,10 @@ class PresentationLoginActivity : BaseActivity<ActivityPresentationLoginBinding>
         }
     }
 
+    override fun onDestroy() {
+        super.onDestroy()
+        ModBusController.unregisterListener(this)
+    }
+
     data class CardInfoBean(val rfid: String, val mac: String)
 }

+ 12 - 2
app/src/main/java/com/grkj/iscs/base/BaseActivity.kt

@@ -4,6 +4,7 @@ import android.os.Bundle
 import android.view.View
 import androidx.appcompat.app.AppCompatActivity
 import androidx.viewbinding.ViewBinding
+import com.grkj.iscs.dialog.LoadingProgressDialog
 import com.grkj.iscs.util.ActivityUtils
 import pub.devrel.easypermissions.EasyPermissions
 
@@ -14,6 +15,7 @@ abstract class BaseActivity<T : ViewBinding?> : AppCompatActivity() {
 
     protected var mBinding: T? = null
     abstract val viewBinding: T
+    var loadingProgressDialog: LoadingProgressDialog? = null
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
@@ -34,8 +36,16 @@ abstract class BaseActivity<T : ViewBinding?> : AppCompatActivity() {
         ActivityUtils.removeActivity(this)
     }
 
-    fun handleLoading(isShow: Boolean) {
-
+    fun handleLoading(isShow: Boolean, progressStr: String? = null) {
+        if (isShow) {
+            loadingProgressDialog ?: let {
+                loadingProgressDialog = LoadingProgressDialog(this)
+            }
+            loadingProgressDialog?.show()
+            loadingProgressDialog?.setProgress(progressStr)
+        } else {
+            loadingProgressDialog?.dismiss()
+        }
     }
 
     override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {

+ 42 - 0
app/src/main/java/com/grkj/iscs/dialog/LoadingProgressDialog.kt

@@ -0,0 +1,42 @@
+package com.grkj.iscs.dialog
+
+import android.content.Context
+import android.view.View
+import android.view.View.GONE
+import com.grkj.iscs.base.BaseDialog
+import com.grkj.iscs.databinding.CommonDialogLoadingProgressBinding
+
+class LoadingProgressDialog(context: Context) :
+    BaseDialog<CommonDialogLoadingProgressBinding>(context) {
+
+    override val viewBinding: CommonDialogLoadingProgressBinding
+        get() = CommonDialogLoadingProgressBinding.inflate(layoutInflater)
+
+    override fun initView() {
+        setCanceledOnTouchOutside(false)
+    }
+
+    override fun showDialog() {
+        if (!mBinding!!.avlivCommon.isShown) mBinding!!.avlivCommon.smoothToShow()
+    }
+
+    override fun cancel() {
+        super.cancel()
+        try {
+            mBinding?.avlivCommon?.smoothToHide()
+        } catch (e: Exception) {
+        }
+    }
+
+    fun setProgress(proStr: String?) {
+        try {
+            if (proStr.isNullOrEmpty()) {
+                mBinding?.tvCommonProgress?.visibility = GONE
+            } else {
+                mBinding?.tvCommonProgress?.visibility = View.VISIBLE
+                mBinding?.tvCommonProgress?.text = proStr
+            }
+        } catch (e: Exception) {
+        }
+    }
+}

+ 2 - 2
app/src/main/java/com/grkj/iscs/modbus/PortManager.kt

@@ -89,13 +89,13 @@ class PortManager private constructor(
         fun open(port: Int, bps: Int, usb: Boolean) : PortManager? {
             var blocked = true
             val thread = Thread.currentThread()
-            Executor.delayOnMain({
+            Executor.delayOnMain(500) {
                 // 如果线程被阻塞达到 1 秒,则打断唤醒
                 if (blocked) {
                     LogUtil.w("超 0.5 秒未打开串口,打断唤醒")
                     thread.interrupt()
                 }
-            }, 500)
+            }
             try {
                 val file = File(if(usb) "/dev/ttyUSB${port}" else "/dev/ttyS${port}")
                 LogUtil.i("连接 port file")

+ 5 - 5
app/src/main/java/com/grkj/iscs/util/Executor.kt

@@ -39,7 +39,7 @@ object Executor {
         main.post(run)
     }
 
-    fun delayOnMain(run: Runnable, delayMills: Long) {
+    fun delayOnMain(delayMills: Long, run: Runnable) {
         main.postDelayed(run, delayMills)
     }
 
@@ -73,13 +73,13 @@ object Executor {
         repeat(ioHandler, {
             var blocked = true
             val thread = Thread.currentThread()
-            delayOnMain({
+            delayOnMain(runnableTimeoutMillis) {
                 // 如果线程被阻塞达到 1 秒,则打断唤醒
                 if (blocked) {
                     printTimeoutTraces(traces)
                     thread.interrupt()
                 }
-            }, runnableTimeoutMillis)
+            }
             val res = run()
             blocked = false
             return@repeat res
@@ -89,13 +89,13 @@ object Executor {
     private fun runWithTraces(traces: Array<StackTraceElement>, run: Runnable, runnableTimeoutMillis: Long = 10_000) {
         var blocked = true
         val thread = Thread.currentThread()
-        delayOnMain({
+        delayOnMain(runnableTimeoutMillis) {
             // 如果线程被阻塞达到 1 秒,则打断唤醒
             if (blocked) {
                 printTimeoutTraces(traces)
                 thread.interrupt()
             }
-        }, runnableTimeoutMillis)
+        }
         run.run()
         blocked = false
     }

+ 38 - 0
app/src/main/res/layout/common_dialog_loading_progress.xml

@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:gravity="center_horizontal"
+    android:orientation="vertical"
+    android:paddingHorizontal="60px"
+    android:paddingVertical="10px"
+    tools:background="@android:color/darker_gray">
+
+    <TextView
+        android:id="@+id/tv_common_title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textColor="@android:color/white"
+        android:visibility="gone"
+        tools:text="title"
+        tools:visibility="visible" />
+
+    <com.wang.avi.AVLoadingIndicatorView
+        android:id="@+id/avliv_common"
+        style="@style/AVLoadingIndicatorView.Large"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        app:indicatorColor="@android:color/white"
+        app:indicatorName="PacmanIndicator" />
+
+    <TextView
+        android:id="@+id/tv_common_progress"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textColor="@android:color/white"
+        android:visibility="gone"
+        tools:text="adjfksadfj"
+        tools:visibility="visible" />
+</LinearLayout>