Skip to content

Commit b3fc61a

Browse files
committed
s/Event/UiEvent
1 parent 84d1ac3 commit b3fc61a

5 files changed

Lines changed: 40 additions & 41 deletions

File tree

app/src/main/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsLayout.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ import org.cru.godtools.base.ui.theme.GodToolsTheme
6969
import org.cru.godtools.base.ui.youtubeplayer.YouTubePlayer
7070
import org.cru.godtools.model.getName
7171
import org.cru.godtools.ui.drawer.DrawerMenuLayout
72-
import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.Event
7372
import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.Page
73+
import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.UiEvent
7474
import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.UiState
7575
import org.cru.godtools.ui.tooldetails.analytics.model.ToolDetailsScreenEvent
7676
import org.cru.godtools.ui.tools.AvailableInLanguage
@@ -97,7 +97,7 @@ fun ToolDetailsLayout(state: UiState, modifier: Modifier = Modifier) = DrawerMen
9797
title = {},
9898
navigationIcon = {
9999
IconButton(
100-
onClick = { eventSink(Event.NavigateUp) },
100+
onClick = { eventSink(UiEvent.NavigateUp) },
101101
modifier = Modifier.testTag(TEST_TAG_ACTION_NAVIGATE_UP),
102102
) {
103103
Icon(Icons.AutoMirrored.Filled.ArrowBack, null)
@@ -116,7 +116,7 @@ fun ToolDetailsLayout(state: UiState, modifier: Modifier = Modifier) = DrawerMen
116116
DropdownMenu(expanded = showOverflow, onDismissRequest = { showOverflow = false }) {
117117
DropdownMenuItem(
118118
text = { Text(stringResource(R.string.menu_add_to_home)) },
119-
onClick = { eventSink(Event.PinShortcut) },
119+
onClick = { eventSink(UiEvent.PinShortcut) },
120120
modifier = Modifier.testTag(TEST_TAG_ACTION_PIN_SHORTCUT),
121121
)
122122
}
@@ -273,13 +273,13 @@ internal fun ToolDetailsActions(state: UiState, modifier: Modifier = Modifier) =
273273
val eventSink by rememberUpdatedState(state.eventSink)
274274

275275
Button(
276-
onClick = { eventSink(Event.OpenTool) },
276+
onClick = { eventSink(UiEvent.OpenTool) },
277277
modifier = Modifier.fillMaxWidth()
278278
) { Text(stringResource(R.string.action_tools_open_tool)) }
279279

280280
if (state.hasTips) {
281281
Button(
282-
onClick = { eventSink(Event.OpenToolTraining) },
282+
onClick = { eventSink(UiEvent.OpenToolTraining) },
283283
modifier = Modifier
284284
.testTag(TEST_TAG_ACTION_TOOL_TRAINING)
285285
.fillMaxWidth()
@@ -288,7 +288,7 @@ internal fun ToolDetailsActions(state: UiState, modifier: Modifier = Modifier) =
288288

289289
val isFavorite by remember { derivedStateOf { tool?.isFavorite == true } }
290290
OutlinedButton(
291-
onClick = { eventSink(if (isFavorite) Event.UnpinTool else Event.PinTool) },
291+
onClick = { eventSink(if (isFavorite) UiEvent.UnpinTool else UiEvent.PinTool) },
292292
colors = ButtonDefaults.outlinedButtonColors(
293293
contentColor = if (isFavorite) GodToolsTheme.GT_RED else MaterialTheme.colorScheme.primary
294294
),

app/src/main/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsPresenter.kt

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ import org.cru.godtools.model.Translation
6363
import org.cru.godtools.shortcuts.GodToolsShortcutManager
6464
import org.cru.godtools.sync.GodToolsSyncService
6565
import org.cru.godtools.ui.drawer.DrawerMenuPresenter
66-
import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.Event
6766
import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.Page
67+
import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.UiEvent
6868
import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.UiState
6969
import org.cru.godtools.ui.tools.ToolCard
7070
import org.cru.godtools.ui.tools.ToolCardPresenter
@@ -114,12 +114,12 @@ class ToolDetailsPresenter @AssistedInject constructor(
114114
val manifest by manifestManager.produceManifestState(translation)
115115
val secondManifest by manifestManager.produceManifestState(secondTranslation)
116116

117-
val eventSink: (Event) -> Unit = remember {
117+
val eventSink: (UiEvent) -> Unit = remember {
118118
{
119119
when (it) {
120-
Event.NavigateUp -> navigator.pop()
120+
UiEvent.NavigateUp -> navigator.pop()
121121

122-
Event.OpenTool -> tool?.let { tool ->
122+
UiEvent.OpenTool -> tool?.let { tool ->
123123
val intent = tool.createToolIntent(
124124
context = context,
125125
languages = when (tool.type) {
@@ -138,7 +138,7 @@ class ToolDetailsPresenter @AssistedInject constructor(
138138
}
139139
}
140140

141-
Event.OpenToolTraining -> tool?.let {
141+
UiEvent.OpenToolTraining -> tool?.let {
142142
// TODO: handle opening training tips and optionally showing the tutorial locally once the
143143
// tutorial uses Circuit.
144144
navigator.goTo(
@@ -151,20 +151,20 @@ class ToolDetailsPresenter @AssistedInject constructor(
151151
)
152152
}
153153

154-
Event.PinTool -> coroutineScope.launch {
154+
UiEvent.PinTool -> coroutineScope.launch {
155155
settings.setFeatureDiscovered(Settings.FEATURE_TOOL_FAVORITE)
156156
toolsRepository.pinTool(toolCode)
157157
syncService.syncDirtyFavoriteTools()
158158
}
159159

160-
Event.UnpinTool -> coroutineScope.launch {
160+
UiEvent.UnpinTool -> coroutineScope.launch {
161161
toolsRepository.unpinTool(toolCode)
162162
syncService.syncDirtyFavoriteTools()
163163
}
164164

165-
is Event.SwitchVariant -> toolCode = it.variant
165+
is UiEvent.SwitchVariant -> toolCode = it.variant
166166

167-
Event.PinShortcut -> pendingShortcut?.let { shortcutManager.pinShortcut(it) }
167+
UiEvent.PinShortcut -> pendingShortcut?.let { shortcutManager.pinShortcut(it) }
168168
}
169169
}
170170
}
@@ -210,7 +210,7 @@ class ToolDetailsPresenter @AssistedInject constructor(
210210
private fun rememberVariants(
211211
metaToolCode: String?,
212212
secondLanguage: Language?,
213-
eventSink: (Event) -> Unit,
213+
eventSink: (UiEvent) -> Unit,
214214
): ImmutableList<ToolCard.State> {
215215
if (metaToolCode == null) return persistentListOf()
216216

@@ -227,7 +227,7 @@ class ToolDetailsPresenter @AssistedInject constructor(
227227
loadAvailableLanguages = true,
228228
eventSink = {
229229
when (it) {
230-
ToolCard.Event.Click -> tool.code?.let { eventSink(Event.SwitchVariant(it)) }
230+
ToolCard.Event.Click -> tool.code?.let { eventSink(UiEvent.SwitchVariant(it)) }
231231
else -> Unit
232232
}
233233
}

app/src/main/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsScreen.kt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,21 +34,21 @@ data class ToolDetailsScreen(val initialTool: String, val secondLanguage: Locale
3434
val availableLanguages: ImmutableList<String> = persistentListOf(),
3535
val variants: ImmutableList<ToolCard.State> = persistentListOf(),
3636
val drawerState: DrawerMenuScreen.State = DrawerMenuScreen.State(),
37-
val eventSink: (Event) -> Unit = {},
37+
val eventSink: (UiEvent) -> Unit = {},
3838
) : CircuitUiState
3939

4040
enum class Page(@StringRes val tabLabel: Int) {
4141
DESCRIPTION(R.string.label_tools_about),
4242
VARIANTS(R.string.tool_details_section_variants_label)
4343
}
4444

45-
sealed interface Event : CircuitUiEvent {
46-
data object NavigateUp : Event
47-
data object OpenTool : Event
48-
data object OpenToolTraining : Event
49-
data object PinTool : Event
50-
data object UnpinTool : Event
51-
data class SwitchVariant(val variant: String) : Event
52-
data object PinShortcut : Event
45+
sealed interface UiEvent : CircuitUiEvent {
46+
data object NavigateUp : UiEvent
47+
data object OpenTool : UiEvent
48+
data object OpenToolTraining : UiEvent
49+
data object PinTool : UiEvent
50+
data object UnpinTool : UiEvent
51+
data class SwitchVariant(val variant: String) : UiEvent
52+
data object PinShortcut : UiEvent
5353
}
5454
}

app/src/testDebug/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsLayoutTest.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import com.slack.circuit.test.TestEventSink
1515
import kotlin.test.Test
1616
import kotlinx.collections.immutable.persistentListOf
1717
import org.cru.godtools.base.ui.compose.LocalEventBus
18-
import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.Event
18+
import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.UiEvent
1919
import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.UiState
2020
import org.greenrobot.eventbus.EventBus
2121
import org.junit.Rule
@@ -28,7 +28,7 @@ class ToolDetailsLayoutTest {
2828
@get:Rule
2929
val composeTestRule = createAndroidComposeRule<ComponentActivity>()
3030

31-
private val events = TestEventSink<Event>()
31+
private val events = TestEventSink<UiEvent>()
3232

3333
private fun renderToolDetailsLayout(state: UiState = UiState(eventSink = events)) = composeTestRule.setContent {
3434
CompositionLocalProvider(
@@ -44,7 +44,7 @@ class ToolDetailsLayoutTest {
4444
renderToolDetailsLayout()
4545

4646
composeTestRule.onNodeWithTag(TEST_TAG_ACTION_NAVIGATE_UP).assertExists().performClick()
47-
events.assertEvent(Event.NavigateUp)
47+
events.assertEvent(UiEvent.NavigateUp)
4848
}
4949
// endregion Action - Navigate Up
5050

@@ -58,7 +58,7 @@ class ToolDetailsLayoutTest {
5858
events.assertNoEvents()
5959

6060
composeTestRule.onNodeWithTag(TEST_TAG_ACTION_PIN_SHORTCUT).assertExists().performClick()
61-
events.assertEvent(Event.PinShortcut)
61+
events.assertEvent(UiEvent.PinShortcut)
6262
}
6363

6464
@Test
@@ -82,7 +82,7 @@ class ToolDetailsLayoutTest {
8282
)
8383

8484
composeTestRule.onNodeWithTag(TEST_TAG_ACTION_TOOL_TRAINING).assertExists().performClick()
85-
events.assertEvent(Event.OpenToolTraining)
85+
events.assertEvent(UiEvent.OpenToolTraining)
8686
}
8787

8888
@Test

app/src/testDebug/kotlin/org/cru/godtools/ui/tooldetails/ToolDetailsPresenterTest.kt

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ import org.cru.godtools.downloadmanager.compose.DownloadLatestTranslation
5959
import org.cru.godtools.model.Attachment
6060
import org.cru.godtools.model.Language
6161
import org.cru.godtools.model.Tool
62-
import org.cru.godtools.model.Translation
6362
import org.cru.godtools.model.randomTool
6463
import org.cru.godtools.model.randomTranslation
6564
import org.cru.godtools.shared.tool.parser.model.Manifest
@@ -68,7 +67,7 @@ import org.cru.godtools.shortcuts.PendingShortcut
6867
import org.cru.godtools.sync.GodToolsSyncService
6968
import org.cru.godtools.ui.drawer.DrawerMenuPresenter
7069
import org.cru.godtools.ui.drawer.DrawerMenuScreen
71-
import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.Event
70+
import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.UiEvent
7271
import org.cru.godtools.ui.tools.ToolCard
7372
import org.cru.godtools.ui.tools.ToolCardPresenter
7473
import org.cru.godtools.util.createToolIntent
@@ -387,7 +386,7 @@ class ToolDetailsPresenterTest {
387386
.returns(flowOf(randomTranslation(TOOL, Locale.ENGLISH)))
388387

389388
createPresenter().test {
390-
expectMostRecentItem().eventSink(Event.OpenTool)
389+
expectMostRecentItem().eventSink(UiEvent.OpenTool)
391390
}
392391

393392
with(navigator.awaitNextScreen()) {
@@ -411,7 +410,7 @@ class ToolDetailsPresenterTest {
411410
.returns(flowOf(randomTranslation(TOOL, Locale.FRENCH)))
412411

413412
createPresenter(ToolDetailsScreen(TOOL, secondLanguage = Locale.FRENCH)).test {
414-
expectMostRecentItem().eventSink(Event.OpenTool)
413+
expectMostRecentItem().eventSink(UiEvent.OpenTool)
415414
}
416415

417416
with(navigator.awaitNextScreen()) {
@@ -440,7 +439,7 @@ class ToolDetailsPresenterTest {
440439
} returns flowOf(randomTranslation(TOOL, Locale.ENGLISH))
441440

442441
createPresenter().test {
443-
expectMostRecentItem().eventSink(Event.OpenToolTraining)
442+
expectMostRecentItem().eventSink(UiEvent.OpenToolTraining)
444443
}
445444

446445
with(navigator.awaitNextScreen()) {
@@ -461,7 +460,7 @@ class ToolDetailsPresenterTest {
461460
every { shortcutManager.pinShortcut(pendingShortcut) } just Runs
462461

463462
createPresenter().test {
464-
expectMostRecentItem().eventSink(Event.PinShortcut)
463+
expectMostRecentItem().eventSink(UiEvent.PinShortcut)
465464
}
466465

467466
verify {
@@ -478,7 +477,7 @@ class ToolDetailsPresenterTest {
478477
coEvery { syncService.syncDirtyFavoriteTools() } returns true
479478

480479
createPresenter().test {
481-
expectMostRecentItem().eventSink(Event.PinTool)
480+
expectMostRecentItem().eventSink(UiEvent.PinTool)
482481
}
483482

484483
coVerify {
@@ -496,7 +495,7 @@ class ToolDetailsPresenterTest {
496495
coEvery { syncService.syncDirtyFavoriteTools() } returns true
497496

498497
createPresenter().test {
499-
expectMostRecentItem().eventSink(Event.UnpinTool)
498+
expectMostRecentItem().eventSink(UiEvent.UnpinTool)
500499
}
501500

502501
coVerify {
@@ -514,7 +513,7 @@ class ToolDetailsPresenterTest {
514513
assertNotNull(expectMostRecentItem()) {
515514
assertEquals("initial", it.toolCode)
516515

517-
it.eventSink(Event.SwitchVariant("new"))
516+
it.eventSink(UiEvent.SwitchVariant("new"))
518517
}
519518

520519
assertEquals("new", expectMostRecentItem().toolCode)
@@ -591,7 +590,7 @@ class ToolDetailsPresenterTest {
591590
DownloadLatestTranslation(downloadManager, TOOL, Locale.ENGLISH, true)
592591
DownloadLatestTranslation(downloadManager, TOOL, Locale.FRENCH, true)
593592
}
594-
expectMostRecentItem().eventSink(Event.SwitchVariant("variant"))
593+
expectMostRecentItem().eventSink(UiEvent.SwitchVariant("variant"))
595594

596595
verifyComposable {
597596
DownloadLatestTranslation(downloadManager, "variant", Locale.ENGLISH, true)

0 commit comments

Comments
 (0)