From 1468d9d5a0b55dbf29bd1c84b083862845d448ba Mon Sep 17 00:00:00 2001 From: Jonas Lochmann Date: Mon, 6 Feb 2023 01:00:00 +0100 Subject: [PATCH] Refactor ignoring pending task reviews --- .../timelimit/android/ui/model/MainModel.kt | 5 +++-- .../android/ui/model/main/OverviewHandling.kt | 20 ++++++++++++------- .../ui/overview/overview/OverviewScreen.kt | 17 +++++++++++++--- 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/io/timelimit/android/ui/model/MainModel.kt b/app/src/main/java/io/timelimit/android/ui/model/MainModel.kt index 37f2693..535dc20 100644 --- a/app/src/main/java/io/timelimit/android/ui/model/MainModel.kt +++ b/app/src/main/java/io/timelimit/android/ui/model/MainModel.kt @@ -28,7 +28,6 @@ import io.timelimit.android.ui.model.main.OverviewHandling import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Job import kotlinx.coroutines.cancel -import kotlinx.coroutines.channels.BroadcastChannel import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.ReceiveChannel import kotlinx.coroutines.flow.* @@ -42,7 +41,7 @@ class MainModel(application: Application): AndroidViewModel(application) { private val logic = DefaultAppLogic.with(application) private val activityCommandInternal = Channel() - private val authenticationScreenClosed = MutableSharedFlow() + private val authenticationScreenClosed = MutableSharedFlow(extraBufferCapacity = 1) private val authenticationModelApi = object: AuthenticationModelApi { override val authenticatedParentOnly: Flow = @@ -58,6 +57,8 @@ class MainModel(application: Application): AndroidViewModel(application) { } override suspend fun doParentAuthentication(): AuthenticationModelApi.Parent? { + authenticatedParentOnly.firstOrNull()?.let { return it } + triggerAuthenticationScreen() authenticationScreenClosed.firstOrNull() diff --git a/app/src/main/java/io/timelimit/android/ui/model/main/OverviewHandling.kt b/app/src/main/java/io/timelimit/android/ui/model/main/OverviewHandling.kt index c3ccffb..8e1a642 100644 --- a/app/src/main/java/io/timelimit/android/ui/model/main/OverviewHandling.kt +++ b/app/src/main/java/io/timelimit/android/ui/model/main/OverviewHandling.kt @@ -92,13 +92,19 @@ object OverviewHandling { } }, skipTaskReview = { task -> - stateLive.update { oldState -> - if (oldState is State.Overview) oldState.copy( - state = oldState.state.copy( - hiddenTaskIds = oldState.state.hiddenTaskIds + task.task.childTask.taskId - ) - ) - else oldState + scope.launch { + lock.tryWithLock { + if (authentication.doParentAuthentication() != null) { + stateLive.update { oldState -> + if (oldState is State.Overview) oldState.copy( + state = oldState.state.copy( + hiddenTaskIds = oldState.state.hiddenTaskIds + task.task.childTask.taskId + ) + ) + else oldState + } + } + } } } ) diff --git a/app/src/main/java/io/timelimit/android/ui/overview/overview/OverviewScreen.kt b/app/src/main/java/io/timelimit/android/ui/overview/overview/OverviewScreen.kt index 840960e..7352fed 100644 --- a/app/src/main/java/io/timelimit/android/ui/overview/overview/OverviewScreen.kt +++ b/app/src/main/java/io/timelimit/android/ui/overview/overview/OverviewScreen.kt @@ -35,6 +35,7 @@ import io.timelimit.android.ui.MainActivity import io.timelimit.android.ui.model.UpdateStateCommand import io.timelimit.android.ui.model.main.OverviewHandling import io.timelimit.android.ui.payment.RequiresPurchaseDialogFragment +import io.timelimit.android.ui.util.DateUtil import io.timelimit.android.util.TimeTextUtil @OptIn(ExperimentalFoundationApi::class, ExperimentalMaterialApi::class) @@ -172,14 +173,24 @@ fun OverviewScreen( style = MaterialTheme.typography.subtitle1 ) + screen.taskToReview.task.childTask.lastGrantTimestamp.let { lastGrantTimestamp -> + if (lastGrantTimestamp != 0L) { + Text( + stringResource( + R.string.task_review_last_grant, + DateUtil.formatAbsoluteDate(LocalContext.current, lastGrantTimestamp) + ), + style = MaterialTheme.typography.subtitle1 + ) + } + } + Row { val auth = activity.getActivityViewModel() val logic = auth.logic TextButton(onClick = { - if (activity.getActivityViewModel().isParentAuthenticated()) { - screen.actions.skipTaskReview(screen.taskToReview) - } else activity.showAuthenticationScreen() + screen.actions.skipTaskReview(screen.taskToReview) }) { Text(stringResource(R.string.generic_skip)) }