From 0768842405b6c149818bd7a9eb1864c8679aeac6 Mon Sep 17 00:00:00 2001 From: Kirill Kamakin Date: Fri, 8 Apr 2022 21:25:14 +0500 Subject: [PATCH] Fix restarting count down in disclaimer --- .../mealient/ui/disclaimer/DisclaimerViewModel.kt | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/gq/kirmanak/mealient/ui/disclaimer/DisclaimerViewModel.kt b/app/src/main/java/gq/kirmanak/mealient/ui/disclaimer/DisclaimerViewModel.kt index 0c796d7..7e8e000 100644 --- a/app/src/main/java/gq/kirmanak/mealient/ui/disclaimer/DisclaimerViewModel.kt +++ b/app/src/main/java/gq/kirmanak/mealient/ui/disclaimer/DisclaimerViewModel.kt @@ -5,10 +5,7 @@ import androidx.lifecycle.* import dagger.hilt.android.lifecycle.HiltViewModel import gq.kirmanak.mealient.data.disclaimer.DisclaimerStorage import kotlinx.coroutines.delay -import kotlinx.coroutines.flow.flow -import kotlinx.coroutines.flow.launchIn -import kotlinx.coroutines.flow.onEach -import kotlinx.coroutines.flow.take +import kotlinx.coroutines.flow.* import kotlinx.coroutines.launch import timber.log.Timber import java.util.concurrent.TimeUnit @@ -18,11 +15,12 @@ import javax.inject.Inject class DisclaimerViewModel @Inject constructor( private val disclaimerStorage: DisclaimerStorage ) : ViewModel() { + val isAccepted: LiveData get() = disclaimerStorage.isDisclaimerAcceptedFlow.asLiveData() - private val _okayCountDown = MutableLiveData(FULL_COUNT_DOWN_SEC) val okayCountDown: LiveData = _okayCountDown + private var isCountDownStarted = false fun acceptDisclaimer() { Timber.v("acceptDisclaimer() called") @@ -31,9 +29,12 @@ class DisclaimerViewModel @Inject constructor( fun startCountDown() { Timber.v("startCountDown() called") + if (isCountDownStarted) return + isCountDownStarted = true tickerFlow(COUNT_DOWN_TICK_PERIOD_SEC.toLong(), TimeUnit.SECONDS) .take(FULL_COUNT_DOWN_SEC - COUNT_DOWN_TICK_PERIOD_SEC + 1) .onEach { _okayCountDown.value = FULL_COUNT_DOWN_SEC - it } + .onCompletion { isCountDownStarted = false } .launchIn(viewModelScope) }