Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ import org.cru.godtools.db.repository.ToolsRepository
import org.cru.godtools.model.Tool
import org.cru.godtools.ui.dashboard.home.AllFavoritesPresenter.UiState
import org.cru.godtools.ui.tooldetails.ToolDetailsScreen
import org.cru.godtools.ui.tools.ToolCard
import org.cru.godtools.ui.tools.ToolCardPresenter
import org.cru.godtools.ui.tools.ToolCardPresenter.ToolCardEvent
import org.cru.godtools.util.createToolIntent
import org.greenrobot.eventbus.EventBus

Expand All @@ -48,7 +48,7 @@ class AllFavoritesPresenter @AssistedInject constructor(
) : Presenter<UiState> {
@ConsistentCopyVisibility
data class UiState internal constructor(
val tools: List<ToolCard.State> = emptyList(),
val tools: List<ToolCardPresenter.UiState> = emptyList(),
internal val eventSink: (UiEvent) -> Unit = {},
) : CircuitUiState

Expand All @@ -66,11 +66,11 @@ class AllFavoritesPresenter @AssistedInject constructor(
tools = tools.mapNotNull { tool ->
val toolCode = tool.code ?: return@mapNotNull null
key(toolCode) {
lateinit var state: ToolCard.State
lateinit var state: ToolCardPresenter.UiState
state = toolCardPresenter.present(tool) {
when (it) {
ToolCard.Event.Click,
ToolCard.Event.OpenTool -> {
ToolCardEvent.Click,
ToolCardEvent.OpenTool -> {
val intent = context.createToolIntent(
tool = tool,
languages = listOfNotNull(
Expand All @@ -88,15 +88,12 @@ class AllFavoritesPresenter @AssistedInject constructor(
}
}

ToolCard.Event.OpenToolDetails -> {
ToolCardEvent.OpenToolDetails -> {
eventBus.post(
OpenAnalyticsActionEvent(ACTION_OPEN_TOOL_DETAILS, toolCode, SOURCE_FAVORITE)
)
navigator.goTo(ToolDetailsScreen(toolCode))
}

ToolCard.Event.PinTool,
ToolCard.Event.UnpinTool -> error("$it should be handled by the ToolCardPresenter")
}
}
state
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ import org.cru.godtools.ui.banner.BannerPresenter
import org.cru.godtools.ui.banner.tutorial.TutorialFeaturesBannerPresenter
import org.cru.godtools.ui.dashboard.home.HomePresenter.UiState
import org.cru.godtools.ui.tooldetails.ToolDetailsScreen
import org.cru.godtools.ui.tools.ToolCard
import org.cru.godtools.ui.tools.ToolCardPresenter
import org.cru.godtools.ui.tools.ToolCardPresenter.ToolCardEvent
import org.cru.godtools.util.createToolIntent
import org.greenrobot.eventbus.EventBus

Expand All @@ -54,8 +54,8 @@ class HomePresenter @AssistedInject constructor(
data class UiState(
val dataLoaded: Boolean = true,
val banner: Banner.UiState? = null,
val spotlightLessons: List<ToolCard.State> = emptyList(),
val favoriteTools: List<ToolCard.State> = emptyList(),
val spotlightLessons: List<ToolCardPresenter.UiState> = emptyList(),
val favoriteTools: List<ToolCardPresenter.UiState> = emptyList(),
val eventSink: (UiEvent) -> Unit = {},
) : CircuitUiState

Expand Down Expand Up @@ -91,10 +91,10 @@ class HomePresenter @AssistedInject constructor(
val lessonCode = lesson.code ?: return@mapNotNull null

key(lessonCode) {
lateinit var lessonState: ToolCard.State
lateinit var lessonState: ToolCardPresenter.UiState
lessonState = toolCardPresenter.present(lesson) {
when (it) {
ToolCard.Event.Click -> {
ToolCardEvent.Click -> {
val intent = context.createToolIntent(
tool = lesson,
languages = listOfNotNull(lessonState.translation?.languageCode),
Expand Down Expand Up @@ -130,11 +130,11 @@ class HomePresenter @AssistedInject constructor(
val toolCode = tool.code ?: return@mapNotNull null

key(toolCode) {
lateinit var state: ToolCard.State
lateinit var state: ToolCardPresenter.UiState
state = toolCardPresenter.present(tool) {
when (it) {
ToolCard.Event.Click,
ToolCard.Event.OpenTool -> {
ToolCardEvent.Click,
ToolCardEvent.OpenTool -> {
val intent = context.createToolIntent(
tool = tool,
languages = listOfNotNull(
Expand All @@ -152,15 +152,12 @@ class HomePresenter @AssistedInject constructor(
}
}

ToolCard.Event.OpenToolDetails -> {
ToolCardEvent.OpenToolDetails -> {
eventBus.post(
OpenAnalyticsActionEvent(ACTION_OPEN_TOOL_DETAILS, toolCode, SOURCE_FAVORITE)
)
navigator.goTo(ToolDetailsScreen(toolCode))
}

ToolCard.Event.PinTool,
ToolCard.Event.UnpinTool -> error("$it should be handled by the ToolCardPresenter")
}
}
state
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ import org.cru.godtools.model.Language
import org.cru.godtools.model.Language.Companion.filterByDisplayAndNativeName
import org.cru.godtools.ui.dashboard.filters.FilterMenu
import org.cru.godtools.ui.dashboard.lessons.LessonsPresenter.UiState
import org.cru.godtools.ui.tools.ToolCard
import org.cru.godtools.ui.tools.ToolCardPresenter
import org.cru.godtools.ui.tools.ToolCardPresenter.ToolCardEvent
import org.cru.godtools.util.createToolIntent
import org.greenrobot.eventbus.EventBus

Expand All @@ -65,7 +65,7 @@ class LessonsPresenter @AssistedInject constructor(
// region UiState
data class UiState(
val languageFilter: FilterMenu.UiState<Language> = FilterMenu.UiState(),
val lessons: List<ToolCard.State> = emptyList(),
val lessons: List<ToolCardPresenter.UiState> = emptyList(),
) : CircuitUiState
// endregion UiState

Expand Down Expand Up @@ -140,21 +140,21 @@ class LessonsPresenter @AssistedInject constructor(
}

@Composable
private fun rememberLessons(locale: Locale): List<ToolCard.State> {
private fun rememberLessons(locale: Locale): List<ToolCardPresenter.UiState> {
val lessons by remember(locale) {
toolsRepository.getLessonsFlowByLanguage(locale)
.map { it.filterNot { it.isHidden }.sortedBy { it.defaultOrder } }
}.collectAsState(emptyList())

return lessons.map { tool ->
key(tool.code) {
lateinit var toolState: ToolCard.State
lateinit var toolState: ToolCardPresenter.UiState
toolState = toolCardPresenter.present(
tool = tool,
customLocale = locale,
eventSink = {
when (it) {
ToolCard.Event.Click -> {
ToolCardEvent.Click, ToolCardEvent.OpenTool -> {
eventBus.post(OpenAnalyticsActionEvent(ACTION_OPEN_LESSON, tool.code, SOURCE_LESSONS))
navigator.goTo(
IntentScreen(
Expand All @@ -167,10 +167,7 @@ class LessonsPresenter @AssistedInject constructor(
)
}

ToolCard.Event.OpenTool,
ToolCard.Event.OpenToolDetails,
ToolCard.Event.PinTool,
ToolCard.Event.UnpinTool -> Unit
ToolCardEvent.OpenToolDetails -> Unit
}
}
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import org.cru.godtools.ui.dashboard.tools.ToolsPresenter.UiEvent
import org.cru.godtools.ui.dashboard.tools.ToolsPresenter.UiState
import org.cru.godtools.ui.tools.SquareToolCard
import org.cru.godtools.ui.tools.ToolCard
import org.cru.godtools.ui.tools.ToolCardPresenter

internal val MARGIN_TOOLS_LAYOUT_HORIZONTAL = 16.dp

Expand Down Expand Up @@ -163,7 +164,7 @@ private fun ToolsHeader(mode: UiState.Mode, modifier: Modifier = Modifier) = Col
}

@Composable
private fun ToolSpotlight(tools: List<ToolCard.State>, modifier: Modifier = Modifier) {
private fun ToolSpotlight(tools: List<ToolCardPresenter.UiState>, modifier: Modifier = Modifier) {
Column(modifier = modifier.fillMaxWidth()) {
Text(
stringResource(R.string.dashboard_tools_section_spotlight_label),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ import org.cru.godtools.ui.dashboard.tools.ToolFiltersStateProducer.Filters
import org.cru.godtools.ui.dashboard.tools.ToolsPresenter.UiState
import org.cru.godtools.ui.dashboard.tools.ToolsPresenter.UiState.Mode
import org.cru.godtools.ui.tooldetails.ToolDetailsScreen
import org.cru.godtools.ui.tools.ToolCard
import org.cru.godtools.ui.tools.ToolCardPresenter
import org.cru.godtools.ui.tools.ToolCardPresenter.ToolCardEvent
import org.greenrobot.eventbus.EventBus

class ToolsPresenter @AssistedInject internal constructor(
Expand All @@ -66,9 +66,9 @@ class ToolsPresenter @AssistedInject internal constructor(
val mode: Mode = Mode.ALL_TOOLS,
val banner: Banner.UiState? = null,
val dataLoaded: Boolean = true,
val spotlightTools: List<ToolCard.State> = emptyList(),
val spotlightTools: List<ToolCardPresenter.UiState> = emptyList(),
val filters: Filters = Filters(),
val tools: List<ToolCard.State> = emptyList(),
val tools: List<ToolCardPresenter.UiState> = emptyList(),
// TODO: temporary until personalization is rolled out to everyone,
// then this can be removed and the mode logic simplified
val isPersonalizationEnabled: Boolean = false,
Expand Down Expand Up @@ -151,7 +151,7 @@ class ToolsPresenter @AssistedInject internal constructor(
private fun rememberSpotlightTools(
secondLanguage: Language?,
eventSink: (UiEvent) -> Unit,
): List<ToolCard.State>? {
): List<ToolCardPresenter.UiState>? {
val tools by remember {
toolsRepository.getNormalToolsFlow()
.map { it.filter { !it.isHidden && it.isSpotlight }.sortedWith(Tool.COMPARATOR_DEFAULT_ORDER) }
Expand All @@ -166,13 +166,10 @@ class ToolsPresenter @AssistedInject internal constructor(
secondLanguage = secondLanguage,
eventSink = {
when (it) {
ToolCard.Event.Click,
ToolCard.Event.OpenTool,
ToolCard.Event.OpenToolDetails ->
ToolCardEvent.Click,
ToolCardEvent.OpenTool,
ToolCardEvent.OpenToolDetails ->
toolCode?.let { eventSink(UiEvent.OpenToolDetails(it, SOURCE_SPOTLIGHT)) }

ToolCard.Event.PinTool,
ToolCard.Event.UnpinTool -> error("$it should be handled by the ToolCardPresenter")
}
}
)
Expand All @@ -185,7 +182,7 @@ class ToolsPresenter @AssistedInject internal constructor(
category: String?,
language: Language?,
eventSink: (UiEvent) -> Unit,
): List<ToolCard.State>? {
): List<ToolCardPresenter.UiState>? {
val locale = language?.code
val tools by remember(mode, category, locale) { filteredToolsFlowProducer.getFlow(mode, category, locale) }
.collectAsState(null)
Expand All @@ -199,13 +196,10 @@ class ToolsPresenter @AssistedInject internal constructor(
secondLanguage = language,
eventSink = {
when (it) {
ToolCard.Event.Click,
ToolCard.Event.OpenTool,
ToolCard.Event.OpenToolDetails ->
ToolCardEvent.Click,
ToolCardEvent.OpenTool,
ToolCardEvent.OpenToolDetails ->
toolCode?.let { eventSink(UiEvent.OpenToolDetails(it, SOURCE_ALL_TOOLS)) }

ToolCard.Event.PinTool,
ToolCard.Event.UnpinTool -> error("$it should be handled by the ToolCardPresenter")
}
}
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ 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
import org.cru.godtools.ui.tools.ToolCardPresenter
import org.cru.godtools.ui.tools.VariantToolCard

private val TOOL_DETAILS_HORIZONTAL_MARGIN = 32.dp
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,8 @@ import org.cru.godtools.ui.drawer.DrawerMenuPresenter
import org.cru.godtools.ui.tooldetails.ToolDetailsScreen.Page
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.ui.tools.ToolCardPresenter.ToolCardEvent
import org.cru.godtools.util.createToolIntent
import org.greenrobot.eventbus.EventBus

Expand Down Expand Up @@ -221,7 +221,7 @@ class ToolDetailsPresenter @AssistedInject constructor(
metaToolCode: String?,
secondLanguage: Language?,
onVariantSelect: (String) -> Unit,
): ImmutableList<ToolCard.State> {
): List<ToolCardPresenter.UiState> {
if (metaToolCode == null) return persistentListOf()

val onVariantSelect by rememberUpdatedState(onVariantSelect)
Expand All @@ -237,14 +237,13 @@ class ToolDetailsPresenter @AssistedInject constructor(
loadAvailableLanguages = true,
eventSink = {
when (it) {
ToolCard.Event.Click -> tool.code?.let { onVariantSelect(it) }
ToolCardEvent.Click -> tool.code?.let { onVariantSelect(it) }
else -> Unit
}
}
)
}
}
.toImmutableList()
}

@Composable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import org.cru.godtools.model.Language
import org.cru.godtools.model.Tool
import org.cru.godtools.model.Translation
import org.cru.godtools.ui.drawer.DrawerMenuScreen
import org.cru.godtools.ui.tools.ToolCard
import org.cru.godtools.ui.tools.ToolCardPresenter

@Parcelize
data class ToolDetailsScreen(val initialTool: String, val secondLanguage: Locale? = null) : Screen {
Expand All @@ -32,7 +32,7 @@ data class ToolDetailsScreen(val initialTool: String, val secondLanguage: Locale
val secondLanguage: Language? = null,
val pages: ImmutableList<Page> = persistentListOf(Page.DESCRIPTION),
val availableLanguages: ImmutableList<String> = persistentListOf(),
val variants: ImmutableList<ToolCard.State> = persistentListOf(),
val variants: List<ToolCardPresenter.UiState> = listOf(),
val drawerState: DrawerMenuScreen.State = DrawerMenuScreen.State(),
val eventSink: (UiEvent) -> Unit = {},
) : CircuitUiState
Expand Down
Loading