Ver Fonte

fix 在loading时暂停倒计时

RobinTan1024 há 4 anos atrás
pai
commit
bb8837815b

+ 7 - 0
app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentBasic.kt

@@ -20,7 +20,10 @@ abstract class FragmentBasic : Fragment() {
     private var basicDialog: AlertDialog? = null
     private var displayAfterDelay = false
 
+    private var mToolbar: FragmentToolbar? = null
+
     fun setToolBar(toolbar: FragmentToolbar) {
+        mToolbar = toolbar
         toolbar.setBackHandler { back() }
         toolbar.setOnCountdownFinish { home() }
         toolbar.setHomeHandler { home() }
@@ -34,6 +37,8 @@ abstract class FragmentBasic : Fragment() {
             delay(500)
             // 在 delay 时,可能已手动关闭
             if (displayAfterDelay) {
+                mToolbar?.pauseCountdown()
+
                 val view = LayoutInflater.from(requireContext()).inflate(R.layout.fragment_loading, null)
                 view.findViewById<AppCompatTextView>(R.id.loadingTip)?.text = msg
                 basicDialog = MaterialAlertDialogBuilder(requireContext())
@@ -45,6 +50,8 @@ abstract class FragmentBasic : Fragment() {
     }
 
     fun hideLoading() {
+        mToolbar?.resumeCountdown()
+
         displayAfterDelay = false
         basicDialog?.let {
             if (isVisible) it.dismiss()

+ 0 - 2
app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentNozzle.kt

@@ -14,8 +14,6 @@ import com.doverfuelingsolutions.issp.fusion.FusionManager
 import com.doverfuelingsolutions.issp.view.MainActivity
 import com.doverfuelingsolutions.issp.view.adapter.ChooseListAdapter
 import com.scwang.smart.refresh.header.ClassicsHeader
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.GlobalScope
 import kotlinx.coroutines.launch
 
 class FragmentNozzle private constructor(private val pumpList: List<PumpInfo>) : FragmentBasic() {

+ 29 - 8
app/src/main/java/com/doverfuelingsolutions/issp/view/widget/FragmentToolbar.kt

@@ -31,6 +31,7 @@ class FragmentToolbar(context: Context, attrs: AttributeSet) : FrameLayout(conte
         }
 
     private val countdownTime: Int
+    private var currentTime: Int = 0
     private var countdownAutoStart = true
     private var countdownEvent: (() -> Unit)? = null
 
@@ -60,19 +61,39 @@ class FragmentToolbar(context: Context, attrs: AttributeSet) : FrameLayout(conte
         super.onWindowVisibilityChanged(visibility)
 
         if (visibility == VISIBLE) {
-            job = GlobalScope.launch(Dispatchers.Main) {
-                repeat(countdownTime) {
-                    val num = countdownTime - it
-                    countdownNum.text = num.toString()
-                    delay(1000)
-                    if (num <= 1) countdownEvent?.invoke()
-                }
+            startCountdown()
+        } else {
+            stopCountdown()
+        }
+    }
+
+    private fun startCountdown(repeatTime: Int = countdownTime) {
+        stopCountdown()
+        job = GlobalScope.launch(Dispatchers.Main) {
+            repeat(repeatTime) {
+                val num = repeatTime - it
+                currentTime = num
+                countdownNum.text = num.toString()
+                delay(1000)
+                if (num <= 1) countdownEvent?.invoke()
             }
-        } else if (job.isActive) {
+        }
+    }
+
+    private fun stopCountdown() {
+        if (this::job.isInitialized && job.isActive) {
             job.cancel()
         }
     }
 
+    fun pauseCountdown() {
+        job.cancel()
+    }
+
+    fun resumeCountdown() {
+        startCountdown(currentTime)
+    }
+
     fun setOnCountdownFinish(listener: () -> Unit) {
         countdownEvent = listener
     }