Selaa lähdekoodia

通用提示弹框支持取消倒计时

Frankensteinly 9 kuukautta sitten
vanhempi
sitoutus
5f09fef0f3

+ 36 - 2
app/src/main/java/com/grkj/iscs/view/dialog/TipDialog.kt

@@ -1,8 +1,12 @@
 package com.grkj.iscs.view.dialog
 
 import android.content.Context
+import android.view.View
+import com.grkj.iscs.R
 import com.grkj.iscs.view.base.BaseDialog
 import com.grkj.iscs.databinding.DialogTipBinding
+import java.util.Timer
+import java.util.TimerTask
 
 /**
  * 通用提示弹框
@@ -11,6 +15,7 @@ class TipDialog(ctx: Context) : BaseDialog<DialogTipBinding>(ctx) {
 
     private var confirmListener: (() -> Unit)? = null
     private var cancelListener: (() -> Unit)? = null
+    private var mTimer: Timer? = null
 
     companion object {
         const val TYPE_CONFIRM = 0
@@ -39,14 +44,38 @@ class TipDialog(ctx: Context) : BaseDialog<DialogTipBinding>(ctx) {
     fun setType(type: Int) {
         when (type) {
             TYPE_CONFIRM -> {
-                mBinding?.btnCancel?.visibility = android.view.View.GONE
+                mBinding?.btnCancel?.visibility = View.GONE
             }
             TYPE_ALL -> {
-                mBinding?.btnCancel?.visibility = android.view.View.VISIBLE
+                mBinding?.btnCancel?.visibility = View.VISIBLE
             }
         }
     }
 
+    /**
+     * 自动倒计时取消模式显示
+     */
+    fun showCancelCountdown(seconds: Int) {
+        mBinding?.btnCancel?.visibility = View.VISIBLE
+        mBinding?.btnCancel?.text = context.getString(R.string.cancel_countdown, seconds)
+
+        show()
+
+        var countSeconds = seconds
+        mTimer = Timer().apply {
+            schedule(object : TimerTask() {
+                override fun run() {
+                    mBinding?.btnCancel?.text = context.getString(R.string.cancel_countdown, countSeconds)
+                    if (countSeconds == 0) {
+                        dismiss()
+                        cancelListener?.invoke()
+                    }
+                    countSeconds--
+                }
+            }, 0, 1000)
+        }
+    }
+
     fun setConfirmListener(listener: () -> Unit) {
         confirmListener = listener
     }
@@ -54,4 +83,9 @@ class TipDialog(ctx: Context) : BaseDialog<DialogTipBinding>(ctx) {
     fun setCancelListener(listener: () -> Unit) {
         cancelListener = listener
     }
+
+    override fun dismiss() {
+        super.dismiss()
+        mTimer?.cancel()
+    }
 }

+ 2 - 1
app/src/main/res/values/strings.xml

@@ -54,7 +54,6 @@
     <string name="ready_to_unlock">待解锁</string>
     <string name="finished">已结束</string>
     <string name="key_return_confirm_tip">工作票尚未完成,是否确认归还钥匙?</string>
-    <string name="cancel">取消</string>
     <string name="ticket_id_is_null">作业票编号不能为空</string>
     <string name="lock_is_not_enough">锁具数量不足</string>
     <string name="key_is_not_enough">钥匙数量不足</string>
@@ -168,4 +167,6 @@
     <string name="action_confirm_restore">确定要执行拆锁恢复开关吗?</string>
     <string name="action_confirm_finish_ticket">还有隔离开关被其他作业票锁定,确定要结束作业吗?</string>
     <string name="logout">退出登录</string>
+    <string name="cancel">取消</string>
+    <string name="cancel_countdown">取消(%d秒)</string>
 </resources>