diff --git a/app/src/main/kotlin/org/cru/godtools/ui/drawer/DrawerMenuLayout.kt b/app/src/main/kotlin/org/cru/godtools/ui/drawer/DrawerMenuLayout.kt index 56ede5b8ce..090cbe90a4 100644 --- a/app/src/main/kotlin/org/cru/godtools/ui/drawer/DrawerMenuLayout.kt +++ b/app/src/main/kotlin/org/cru/godtools/ui/drawer/DrawerMenuLayout.kt @@ -5,6 +5,7 @@ import android.content.Context import android.content.Intent import androidx.activity.compose.BackHandler import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons @@ -53,7 +54,6 @@ import com.google.android.play.core.ktx.launchReview import com.google.android.play.core.ktx.requestReview import com.google.android.play.core.review.ReviewManagerFactory import kotlinx.coroutines.launch -import org.ccci.gto.android.common.androidx.compose.foundation.layout.padding import org.ccci.gto.android.common.androidx.compose.material3.ui.navigationdrawer.NavigationDrawerHeadline import org.cru.godtools.R import org.cru.godtools.analytics.model.AnalyticsScreenEvent diff --git a/app/src/main/kotlin/org/cru/godtools/ui/drawer/DrawerMenuPresenter.kt b/app/src/main/kotlin/org/cru/godtools/ui/drawer/DrawerMenuPresenter.kt index 2e318a8fab..7c5ca9aef0 100644 --- a/app/src/main/kotlin/org/cru/godtools/ui/drawer/DrawerMenuPresenter.kt +++ b/app/src/main/kotlin/org/cru/godtools/ui/drawer/DrawerMenuPresenter.kt @@ -11,6 +11,7 @@ import javax.inject.Inject import javax.inject.Singleton import kotlinx.coroutines.NonCancellable import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import org.cru.godtools.account.GodToolsAccountManager import org.cru.godtools.ui.drawer.DrawerMenuScreen.Event import org.cru.godtools.ui.drawer.DrawerMenuScreen.State @@ -28,7 +29,7 @@ class DrawerMenuPresenter @Inject constructor(private val accountManager: GodToo eventSink = { when (it) { Event.Logout -> scope.launch { - launch(NonCancellable) { accountManager.logout() } + launch { withContext(NonCancellable) { accountManager.logout() } } drawerState.close() } diff --git a/app/src/main/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsAbout.kt b/app/src/main/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsAbout.kt index 48ee32efdb..0eef27cc88 100644 --- a/app/src/main/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsAbout.kt +++ b/app/src/main/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsAbout.kt @@ -44,11 +44,12 @@ import org.cru.godtools.R import org.cru.godtools.analytics.model.ExitLinkActionEvent import org.cru.godtools.base.ui.compose.LocalEventBus import org.cru.godtools.model.getDescription +import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.UiState internal const val TEST_TAG_LANGUAGES_AVAILABLE = "languages_available" @Composable -internal fun ToolDetailsAbout(state: ToolDetailsScreen.State, modifier: Modifier = Modifier) { +internal fun ToolDetailsAbout(state: UiState, modifier: Modifier = Modifier) { val tool by rememberUpdatedState(state.tool) val translation by rememberUpdatedState(state.translation) @@ -123,7 +124,7 @@ private enum class ToolDetailsAboutAccordionSection { OUTLINE, BIBLE_REFERENCES, @Composable @VisibleForTesting internal fun ToolDetailsLanguages( - state: ToolDetailsScreen.State, + state: UiState, expanded: Boolean, onToggleLanguages: () -> Unit, modifier: Modifier = Modifier, @@ -188,7 +189,7 @@ private fun ToolDetailsAboutAccordionSection( } @Composable -private fun ToolDetailsLinkifiedText(text: String?, state: ToolDetailsScreen.State, modifier: Modifier = Modifier) { +private fun ToolDetailsLinkifiedText(text: String?, state: UiState, modifier: Modifier = Modifier) { val eventBus = LocalEventBus.current val uriHandler = LocalUriHandler.current val tool by rememberUpdatedState(state.tool?.code) diff --git a/app/src/main/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsLayout.kt b/app/src/main/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsLayout.kt index 4f956dce8a..a502eef33e 100644 --- a/app/src/main/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsLayout.kt +++ b/app/src/main/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsLayout.kt @@ -69,9 +69,9 @@ import org.cru.godtools.base.ui.theme.GodToolsTheme import org.cru.godtools.base.ui.youtubeplayer.YouTubePlayer import org.cru.godtools.model.getName import org.cru.godtools.ui.drawer.DrawerMenuLayout -import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.Event import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.Page -import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.State +import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.UiEvent +import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.UiState import org.cru.godtools.ui.tooldetails.analytics.model.ToolDetailsScreenEvent import org.cru.godtools.ui.tools.AvailableInLanguage import org.cru.godtools.ui.tools.DownloadProgressIndicator @@ -87,7 +87,7 @@ internal const val TEST_TAG_ACTION_TOOL_TRAINING = "action_tool_training" @Composable @CircuitInject(ToolDetailsScreen::class, SingletonComponent::class) @OptIn(ExperimentalMaterial3Api::class) -fun ToolDetailsLayout(state: State, modifier: Modifier = Modifier) = DrawerMenuLayout(state.drawerState, modifier) { +fun ToolDetailsLayout(state: UiState, modifier: Modifier = Modifier) = DrawerMenuLayout(state.drawerState, modifier) { val hasShortcut by rememberUpdatedState(state.hasShortcut) val eventSink by rememberUpdatedState(state.eventSink) @@ -97,7 +97,7 @@ fun ToolDetailsLayout(state: State, modifier: Modifier = Modifier) = DrawerMenuL title = {}, navigationIcon = { IconButton( - onClick = { eventSink(Event.NavigateUp) }, + onClick = { eventSink(UiEvent.NavigateUp) }, modifier = Modifier.testTag(TEST_TAG_ACTION_NAVIGATE_UP), ) { Icon(Icons.AutoMirrored.Filled.ArrowBack, null) @@ -116,7 +116,7 @@ fun ToolDetailsLayout(state: State, modifier: Modifier = Modifier) = DrawerMenuL DropdownMenu(expanded = showOverflow, onDismissRequest = { showOverflow = false }) { DropdownMenuItem( text = { Text(stringResource(R.string.menu_add_to_home)) }, - onClick = { eventSink(Event.PinShortcut) }, + onClick = { eventSink(UiEvent.PinShortcut) }, modifier = Modifier.testTag(TEST_TAG_ACTION_PIN_SHORTCUT), ) } @@ -132,7 +132,7 @@ fun ToolDetailsLayout(state: State, modifier: Modifier = Modifier) = DrawerMenuL @Composable @OptIn(ExperimentalFoundationApi::class) -private fun ToolDetailsContent(state: State, modifier: Modifier = Modifier) { +private fun ToolDetailsContent(state: UiState, modifier: Modifier = Modifier) { val tool by rememberUpdatedState(state.tool) val translation by rememberUpdatedState(state.translation) val secondLanguage by rememberUpdatedState(state.secondLanguage) @@ -231,7 +231,7 @@ private fun ToolDetailsContent(state: State, modifier: Modifier = Modifier) { } @Composable -private fun ToolDetailsBanner(state: State, modifier: Modifier = Modifier) { +private fun ToolDetailsBanner(state: UiState, modifier: Modifier = Modifier) { val youtubeVideo = state.tool?.detailsBannerYoutubeVideoId when { @@ -268,18 +268,18 @@ private fun ToolDetailsBanner(state: State, modifier: Modifier = Modifier) { @Composable @VisibleForTesting -internal fun ToolDetailsActions(state: State, modifier: Modifier = Modifier) = Column(modifier = modifier) { +internal fun ToolDetailsActions(state: UiState, modifier: Modifier = Modifier) = Column(modifier = modifier) { val tool by rememberUpdatedState(state.tool) val eventSink by rememberUpdatedState(state.eventSink) Button( - onClick = { eventSink(Event.OpenTool) }, + onClick = { eventSink(UiEvent.OpenTool) }, modifier = Modifier.fillMaxWidth() ) { Text(stringResource(R.string.action_tools_open_tool)) } if (state.hasTips) { Button( - onClick = { eventSink(Event.OpenToolTraining) }, + onClick = { eventSink(UiEvent.OpenToolTraining) }, modifier = Modifier .testTag(TEST_TAG_ACTION_TOOL_TRAINING) .fillMaxWidth() @@ -288,7 +288,7 @@ internal fun ToolDetailsActions(state: State, modifier: Modifier = Modifier) = C val isFavorite by remember { derivedStateOf { tool?.isFavorite == true } } OutlinedButton( - onClick = { eventSink(if (isFavorite) Event.UnpinTool else Event.PinTool) }, + onClick = { eventSink(if (isFavorite) UiEvent.UnpinTool else UiEvent.PinTool) }, colors = ButtonDefaults.outlinedButtonColors( contentColor = if (isFavorite) GodToolsTheme.GT_RED else MaterialTheme.colorScheme.primary ), @@ -308,7 +308,7 @@ internal fun ToolDetailsActions(state: State, modifier: Modifier = Modifier) = C } @Composable -private fun ToolDetailsVariants(state: State, modifier: Modifier = Modifier) { +private fun ToolDetailsVariants(state: UiState, modifier: Modifier = Modifier) { val currentTool by rememberUpdatedState(state.toolCode) val variants by rememberUpdatedState(state.variants) diff --git a/app/src/main/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsPresenter.kt b/app/src/main/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsPresenter.kt index a138449b44..49a5517157 100644 --- a/app/src/main/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsPresenter.kt +++ b/app/src/main/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsPresenter.kt @@ -63,9 +63,9 @@ import org.cru.godtools.model.Translation import org.cru.godtools.shortcuts.GodToolsShortcutManager import org.cru.godtools.sync.GodToolsSyncService import org.cru.godtools.ui.drawer.DrawerMenuPresenter -import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.Event import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.Page -import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.State +import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.UiEvent +import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.UiState import org.cru.godtools.ui.tools.ToolCard import org.cru.godtools.ui.tools.ToolCardPresenter import org.cru.godtools.util.createToolIntent @@ -91,9 +91,9 @@ class ToolDetailsPresenter @AssistedInject constructor( @Named(IS_CONNECTED_STATE_FLOW) private val isConnected: StateFlow, @Assisted private val screen: ToolDetailsScreen, @Assisted private val navigator: Navigator, -) : Presenter { +) : Presenter { @Composable - override fun present(): State { + override fun present(): UiState { val coroutineScope = rememberCoroutineScope() var toolCode by rememberSaveable { mutableStateOf(screen.initialTool) } @@ -114,12 +114,12 @@ class ToolDetailsPresenter @AssistedInject constructor( val manifest by manifestManager.produceManifestState(translation) val secondManifest by manifestManager.produceManifestState(secondTranslation) - val eventSink: (Event) -> Unit = remember { + val eventSink: (UiEvent) -> Unit = remember { { when (it) { - Event.NavigateUp -> navigator.pop() + UiEvent.NavigateUp -> navigator.pop() - Event.OpenTool -> tool?.let { tool -> + UiEvent.OpenTool -> tool?.let { tool -> val intent = tool.createToolIntent( context = context, languages = when (tool.type) { @@ -138,7 +138,7 @@ class ToolDetailsPresenter @AssistedInject constructor( } } - Event.OpenToolTraining -> tool?.let { + UiEvent.OpenToolTraining -> tool?.let { // TODO: handle opening training tips and optionally showing the tutorial locally once the // tutorial uses Circuit. navigator.goTo( @@ -151,20 +151,20 @@ class ToolDetailsPresenter @AssistedInject constructor( ) } - Event.PinTool -> coroutineScope.launch { + UiEvent.PinTool -> coroutineScope.launch { settings.setFeatureDiscovered(Settings.FEATURE_TOOL_FAVORITE) toolsRepository.pinTool(toolCode) syncService.syncDirtyFavoriteTools() } - Event.UnpinTool -> coroutineScope.launch { + UiEvent.UnpinTool -> coroutineScope.launch { toolsRepository.unpinTool(toolCode) syncService.syncDirtyFavoriteTools() } - is Event.SwitchVariant -> toolCode = it.variant + is UiEvent.SwitchVariant -> toolCode = it.variant - Event.PinShortcut -> pendingShortcut?.let { shortcutManager.pinShortcut(it) } + UiEvent.PinShortcut -> pendingShortcut?.let { shortcutManager.pinShortcut(it) } } } } @@ -176,7 +176,7 @@ class ToolDetailsPresenter @AssistedInject constructor( DownloadLatestTranslation(downloadManager, toolCode, translation?.languageCode, isConnected) DownloadLatestTranslation(downloadManager, toolCode, secondTranslation?.languageCode, isConnected) - return State( + return UiState( toolCode = toolCode, tool = tool, banner = attachmentsRepository.rememberAttachmentFile( @@ -210,7 +210,7 @@ class ToolDetailsPresenter @AssistedInject constructor( private fun rememberVariants( metaToolCode: String?, secondLanguage: Language?, - eventSink: (Event) -> Unit, + eventSink: (UiEvent) -> Unit, ): ImmutableList { if (metaToolCode == null) return persistentListOf() @@ -227,7 +227,7 @@ class ToolDetailsPresenter @AssistedInject constructor( loadAvailableLanguages = true, eventSink = { when (it) { - ToolCard.Event.Click -> tool.code?.let { eventSink(Event.SwitchVariant(it)) } + ToolCard.Event.Click -> tool.code?.let { eventSink(UiEvent.SwitchVariant(it)) } else -> Unit } } diff --git a/app/src/main/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsScreen.kt b/app/src/main/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsScreen.kt index 022c808562..944983fc6f 100644 --- a/app/src/main/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsScreen.kt +++ b/app/src/main/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsScreen.kt @@ -14,13 +14,12 @@ import org.cru.godtools.downloadmanager.DownloadProgress import org.cru.godtools.model.Language import org.cru.godtools.model.Tool import org.cru.godtools.model.Translation -import org.cru.godtools.shared.tool.parser.model.Manifest import org.cru.godtools.ui.drawer.DrawerMenuScreen import org.cru.godtools.ui.tools.ToolCard @Parcelize data class ToolDetailsScreen(val initialTool: String, val secondLanguage: Locale? = null) : Screen { - data class State( + data class UiState( val toolCode: String? = null, val tool: Tool? = null, val banner: File? = null, @@ -35,7 +34,7 @@ data class ToolDetailsScreen(val initialTool: String, val secondLanguage: Locale val availableLanguages: ImmutableList = persistentListOf(), val variants: ImmutableList = persistentListOf(), val drawerState: DrawerMenuScreen.State = DrawerMenuScreen.State(), - val eventSink: (Event) -> Unit = {}, + val eventSink: (UiEvent) -> Unit = {}, ) : CircuitUiState enum class Page(@StringRes val tabLabel: Int) { @@ -43,13 +42,13 @@ data class ToolDetailsScreen(val initialTool: String, val secondLanguage: Locale VARIANTS(R.string.tool_details_section_variants_label) } - sealed interface Event : CircuitUiEvent { - data object NavigateUp : Event - data object OpenTool : Event - data object OpenToolTraining : Event - data object PinTool : Event - data object UnpinTool : Event - data class SwitchVariant(val variant: String) : Event - data object PinShortcut : Event + sealed interface UiEvent : CircuitUiEvent { + data object NavigateUp : UiEvent + data object OpenTool : UiEvent + data object OpenToolTraining : UiEvent + data object PinTool : UiEvent + data object UnpinTool : UiEvent + data class SwitchVariant(val variant: String) : UiEvent + data object PinShortcut : UiEvent } } diff --git a/app/src/testDebug/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsLayoutPaparazziTest.kt b/app/src/testDebug/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsLayoutPaparazziTest.kt index bbe442823c..ffbec07d5c 100644 --- a/app/src/testDebug/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsLayoutPaparazziTest.kt +++ b/app/src/testDebug/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsLayoutPaparazziTest.kt @@ -26,7 +26,7 @@ import org.cru.godtools.model.Language import org.cru.godtools.model.randomTool import org.cru.godtools.model.randomTranslation import org.cru.godtools.ui.drawer.DrawerMenuScreenStateTestData -import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.State +import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.UiState import org.cru.godtools.ui.tools.ToolCard import org.cru.godtools.ui.tools.ToolCardStateTestData import org.junit.runner.RunWith @@ -43,7 +43,7 @@ class ToolDetailsLayoutPaparazziTest( ToolCardStateTestData.tool.copy(secondLanguage = null) ) - private val state = State( + private val state = UiState( tool = randomTool( detailsBannerYoutubeVideoId = null, shares = 123355, diff --git a/app/src/testDebug/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsLayoutTest.kt b/app/src/testDebug/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsLayoutTest.kt index 3fd8f2c2d6..57e338862b 100644 --- a/app/src/testDebug/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsLayoutTest.kt +++ b/app/src/testDebug/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsLayoutTest.kt @@ -12,13 +12,11 @@ import androidx.compose.ui.test.onRoot import androidx.compose.ui.test.performClick import androidx.test.ext.junit.runners.AndroidJUnit4 import com.slack.circuit.test.TestEventSink -import io.mockk.every -import io.mockk.mockk import kotlin.test.Test import kotlinx.collections.immutable.persistentListOf import org.cru.godtools.base.ui.compose.LocalEventBus -import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.Event -import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.State +import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.UiEvent +import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.UiState import org.greenrobot.eventbus.EventBus import org.junit.Rule import org.junit.runner.RunWith @@ -30,9 +28,9 @@ class ToolDetailsLayoutTest { @get:Rule val composeTestRule = createAndroidComposeRule() - private val events = TestEventSink() + private val events = TestEventSink() - private fun renderToolDetailsLayout(state: State = State(eventSink = events)) = composeTestRule.setContent { + private fun renderToolDetailsLayout(state: UiState = UiState(eventSink = events)) = composeTestRule.setContent { CompositionLocalProvider( LocalEventBus provides EventBus() ) { @@ -46,26 +44,26 @@ class ToolDetailsLayoutTest { renderToolDetailsLayout() composeTestRule.onNodeWithTag(TEST_TAG_ACTION_NAVIGATE_UP).assertExists().performClick() - events.assertEvent(Event.NavigateUp) + events.assertEvent(UiEvent.NavigateUp) } // endregion Action - Navigate Up // region Action - Pin Shortcut @Test fun `Action - Pin Shortcut`() { - renderToolDetailsLayout(State(hasShortcut = true, eventSink = events)) + renderToolDetailsLayout(UiState(hasShortcut = true, eventSink = events)) composeTestRule.onNodeWithTag(TEST_TAG_ACTION_PIN_SHORTCUT).assertDoesNotExist() composeTestRule.onNodeWithTag(TEST_TAG_ACTION_OVERFLOW).assertExists().performClick() events.assertNoEvents() composeTestRule.onNodeWithTag(TEST_TAG_ACTION_PIN_SHORTCUT).assertExists().performClick() - events.assertEvent(Event.PinShortcut) + events.assertEvent(UiEvent.PinShortcut) } @Test fun `Action - Pin Shortcut - hasShortcut=false`() { - renderToolDetailsLayout(State(hasShortcut = false, eventSink = events)) + renderToolDetailsLayout(UiState(hasShortcut = false, eventSink = events)) composeTestRule.onNodeWithTag(TEST_TAG_ACTION_PIN_SHORTCUT).assertDoesNotExist() composeTestRule.onNodeWithTag(TEST_TAG_ACTION_OVERFLOW).assertDoesNotExist() @@ -77,20 +75,20 @@ class ToolDetailsLayoutTest { @Test fun `Action - Tool Training Button - visible when manifest has tips`() { renderToolDetailsLayout( - State( + UiState( hasTips = true, eventSink = events, ) ) composeTestRule.onNodeWithTag(TEST_TAG_ACTION_TOOL_TRAINING).assertExists().performClick() - events.assertEvent(Event.OpenToolTraining) + events.assertEvent(UiEvent.OpenToolTraining) } @Test fun `Action - Tool Training Button - gone when manifest does not have tips`() { renderToolDetailsLayout( - State( + UiState( hasTips = false, eventSink = events, ) @@ -104,7 +102,7 @@ class ToolDetailsLayoutTest { // region ToolDetailsLanguages() @Test fun `ToolDetailsLanguages() - No Languages`() { - val state = State(availableLanguages = persistentListOf()) + val state = UiState(availableLanguages = persistentListOf()) composeTestRule.setContent { ToolDetailsLanguages(state, true, {}) } // The entire ToolDetailsLanguages() composable should be gone if there are no languages @@ -113,7 +111,7 @@ class ToolDetailsLayoutTest { @Test fun `ToolDetailsLanguages() - Sorted Languages`() { - val state = State( + val state = UiState( availableLanguages = persistentListOf("Language 1", "Language 2") ) composeTestRule.setContent { ToolDetailsLanguages(state, true, {}) } diff --git a/app/src/testDebug/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsPresenterTest.kt b/app/src/testDebug/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsPresenterTest.kt index f9dd2406fe..f74ac36e48 100644 --- a/app/src/testDebug/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsPresenterTest.kt +++ b/app/src/testDebug/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsPresenterTest.kt @@ -59,7 +59,6 @@ import org.cru.godtools.downloadmanager.compose.DownloadLatestTranslation import org.cru.godtools.model.Attachment import org.cru.godtools.model.Language import org.cru.godtools.model.Tool -import org.cru.godtools.model.Translation import org.cru.godtools.model.randomTool import org.cru.godtools.model.randomTranslation import org.cru.godtools.shared.tool.parser.model.Manifest @@ -68,7 +67,7 @@ import org.cru.godtools.shortcuts.PendingShortcut import org.cru.godtools.sync.GodToolsSyncService import org.cru.godtools.ui.drawer.DrawerMenuPresenter import org.cru.godtools.ui.drawer.DrawerMenuScreen -import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.Event +import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.UiEvent import org.cru.godtools.ui.tools.ToolCard import org.cru.godtools.ui.tools.ToolCardPresenter import org.cru.godtools.util.createToolIntent @@ -387,7 +386,7 @@ class ToolDetailsPresenterTest { .returns(flowOf(randomTranslation(TOOL, Locale.ENGLISH))) createPresenter().test { - expectMostRecentItem().eventSink(Event.OpenTool) + expectMostRecentItem().eventSink(UiEvent.OpenTool) } with(navigator.awaitNextScreen()) { @@ -411,7 +410,7 @@ class ToolDetailsPresenterTest { .returns(flowOf(randomTranslation(TOOL, Locale.FRENCH))) createPresenter(ToolDetailsScreen(TOOL, secondLanguage = Locale.FRENCH)).test { - expectMostRecentItem().eventSink(Event.OpenTool) + expectMostRecentItem().eventSink(UiEvent.OpenTool) } with(navigator.awaitNextScreen()) { @@ -440,7 +439,7 @@ class ToolDetailsPresenterTest { } returns flowOf(randomTranslation(TOOL, Locale.ENGLISH)) createPresenter().test { - expectMostRecentItem().eventSink(Event.OpenToolTraining) + expectMostRecentItem().eventSink(UiEvent.OpenToolTraining) } with(navigator.awaitNextScreen()) { @@ -461,7 +460,7 @@ class ToolDetailsPresenterTest { every { shortcutManager.pinShortcut(pendingShortcut) } just Runs createPresenter().test { - expectMostRecentItem().eventSink(Event.PinShortcut) + expectMostRecentItem().eventSink(UiEvent.PinShortcut) } verify { @@ -478,7 +477,7 @@ class ToolDetailsPresenterTest { coEvery { syncService.syncDirtyFavoriteTools() } returns true createPresenter().test { - expectMostRecentItem().eventSink(Event.PinTool) + expectMostRecentItem().eventSink(UiEvent.PinTool) } coVerify { @@ -496,7 +495,7 @@ class ToolDetailsPresenterTest { coEvery { syncService.syncDirtyFavoriteTools() } returns true createPresenter().test { - expectMostRecentItem().eventSink(Event.UnpinTool) + expectMostRecentItem().eventSink(UiEvent.UnpinTool) } coVerify { @@ -514,7 +513,7 @@ class ToolDetailsPresenterTest { assertNotNull(expectMostRecentItem()) { assertEquals("initial", it.toolCode) - it.eventSink(Event.SwitchVariant("new")) + it.eventSink(UiEvent.SwitchVariant("new")) } assertEquals("new", expectMostRecentItem().toolCode) @@ -591,7 +590,7 @@ class ToolDetailsPresenterTest { DownloadLatestTranslation(downloadManager, TOOL, Locale.ENGLISH, true) DownloadLatestTranslation(downloadManager, TOOL, Locale.FRENCH, true) } - expectMostRecentItem().eventSink(Event.SwitchVariant("variant")) + expectMostRecentItem().eventSink(UiEvent.SwitchVariant("variant")) verifyComposable { DownloadLatestTranslation(downloadManager, "variant", Locale.ENGLISH, true)