|
@@ -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
|
|
|
}
|