Skip to content

Commit e2fb243

Browse files
committed
present content on intro
1 parent 38fe3d8 commit e2fb243

File tree

17 files changed

+120
-52
lines changed

17 files changed

+120
-52
lines changed

Diff for: app/src/main/kotlin/br/com/mob1st/bet/features/launch/presentation/LauncherActivity.kt

+8-8
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import br.com.mob1st.features.finances.publicapi.domain.ui.BudgetBuilderNavGraph
1414
import br.com.mob1st.features.finances.publicapi.domain.ui.FinancesNavGraph
1515
import br.com.mob1st.features.utils.observability.LocalAnalyticsReporter
1616
import org.koin.android.ext.android.inject
17+
import org.koin.compose.KoinContext
1718
import org.koin.compose.koinInject
1819

1920
class LauncherActivity : ComponentActivity() {
@@ -22,10 +23,12 @@ class LauncherActivity : ComponentActivity() {
2223
override fun onCreate(savedInstanceState: Bundle?) {
2324
super.onCreate(savedInstanceState)
2425
setContent {
25-
CompositionLocalProvider(LocalAnalyticsReporter provides analyticsReporter) {
26-
UiContrast {
27-
TwoCentsTheme {
28-
NavigationGraph(this)
26+
KoinContext {
27+
CompositionLocalProvider(LocalAnalyticsReporter provides analyticsReporter) {
28+
UiContrast {
29+
TwoCentsTheme {
30+
NavigationGraph(this)
31+
}
2932
}
3033
}
3134
}
@@ -36,14 +39,11 @@ class LauncherActivity : ComponentActivity() {
3639
@Composable
3740
internal fun NavigationGraph(activity: ComponentActivity) {
3841
val navController = rememberNavController()
39-
navController.addOnDestinationChangedListener { _, destination, _ ->
40-
activity.title = destination.label?.toString() ?: ""
41-
}
4242
val financesNavGraph = koinInject<FinancesNavGraph>()
4343
val budgetBuilderNavGraph = koinInject<BudgetBuilderNavGraph>()
4444
NavHost(
4545
navController = navController,
46-
startDestination = budgetBuilderNavGraph.root,
46+
startDestination = BudgetBuilderNavGraph.Root,
4747
) {
4848
financesNavGraph.graph(
4949
navController = navController,

Diff for: core/design/src/main/kotlin/br/com/mob1st/core/design/molecules/buttons/IconButton.kt

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package br.com.mob1st.core.design.molecules.buttons
22

3+
import androidx.compose.foundation.layout.size
34
import androidx.compose.material3.IconButton
45
import androidx.compose.runtime.Composable
6+
import androidx.compose.ui.Modifier
7+
import androidx.compose.ui.unit.dp
58
import br.com.mob1st.core.design.atoms.icons.BackIcon
69
import br.com.mob1st.core.design.atoms.theme.TwoCentsTheme
710
import br.com.mob1st.core.design.utils.ThemedPreview
@@ -13,7 +16,7 @@ fun TopBackButton(
1316
IconButton(
1417
onClick = onBackClicked,
1518
) {
16-
BackIcon()
19+
BackIcon(modifier = Modifier.size(24.dp))
1720
}
1821
}
1922

Diff for: core/design/src/main/kotlin/br/com/mob1st/core/design/templates/FeatureStepScaffold.kt

+3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import androidx.compose.foundation.layout.Spacer
66
import androidx.compose.foundation.layout.fillMaxSize
77
import androidx.compose.foundation.layout.height
88
import androidx.compose.foundation.layout.padding
9+
import androidx.compose.foundation.layout.size
910
import androidx.compose.material3.ExperimentalMaterial3Api
1011
import androidx.compose.material3.ExtendedFloatingActionButton
1112
import androidx.compose.material3.FabPosition
@@ -20,6 +21,7 @@ import androidx.compose.runtime.remember
2021
import androidx.compose.ui.Modifier
2122
import androidx.compose.ui.input.nestedscroll.nestedScroll
2223
import androidx.compose.ui.res.stringResource
24+
import androidx.compose.ui.unit.dp
2325
import br.com.mob1st.core.design.R
2426
import br.com.mob1st.core.design.atoms.icons.CheckIcon
2527
import br.com.mob1st.core.design.atoms.spacing.Spacings
@@ -72,6 +74,7 @@ fun FeatureStepScaffold(
7274
text = { buttonContent() },
7375
icon = {
7476
CheckIcon(
77+
modifier = Modifier.size(16.dp),
7578
contentDescription = stringResource(R.string.core_design_back_button_content_description),
7679
)
7780
},
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
package br.com.mob1st.features.finances.impl.dependencies
22

3+
import br.com.mob1st.features.finances.impl.domain.entities.Category
34
import br.com.mob1st.features.finances.impl.domain.usecases.GetBudgetBuilderForStepUseCase
45
import br.com.mob1st.features.finances.impl.domain.usecases.ProceedBuilderUseCase
56
import br.com.mob1st.features.finances.impl.domain.usecases.StartBuilderStepUseCase
67
import org.koin.core.module.dsl.factoryOf
8+
import org.koin.dsl.bind
79
import org.koin.dsl.module
810

9-
internal val domainModule
10-
get() = module {
11-
factoryOf(::GetBudgetBuilderForStepUseCase)
12-
factoryOf(::StartBuilderStepUseCase)
13-
factoryOf(::ProceedBuilderUseCase)
14-
}
11+
internal val domainModule = module {
12+
single { Category } bind Category.Factory::class
13+
factoryOf(::GetBudgetBuilderForStepUseCase)
14+
factoryOf(::StartBuilderStepUseCase)
15+
factoryOf(::ProceedBuilderUseCase)
16+
}

Diff for: features/finances/impl/src/main/kotlin/br/com/mob1st/features/finances/impl/dependencies/InfraModule.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ private val repositoriesModule = module {
2323
DatabaseFactory.create(get())
2424
}
2525
factory { SuggestionListPerStep() }
26-
single { CategoriesDataMap }
26+
single { CategoriesDataMap } bind CategoriesDataMap::class
2727
factoryOf(::CategoryRepositoryImpl) bind CategoriesRepository::class
2828
factoryOf(::CategorySuggestionsRepositoryImpl) bind CategorySuggestionRepository::class
2929
}

Diff for: features/finances/impl/src/main/kotlin/br/com/mob1st/features/finances/impl/dependencies/UiModule.kt

+5-4
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@ import org.koin.androidx.viewmodel.dsl.viewModel
1111
import org.koin.dsl.bind
1212
import org.koin.dsl.module
1313

14-
internal val uiModule = module {
15-
single { FinancesNavGraphImpl } bind FinancesNavGraph::class
16-
includes(builderModule)
17-
}
14+
internal val uiModule
15+
get() = module {
16+
single { FinancesNavGraphImpl } bind FinancesNavGraph::class
17+
includes(builderModule)
18+
}
1819

1920
internal val builderModule = module {
2021
single { BudgetBuilderNavGraphImpl } bind BudgetBuilderNavGraph::class

Diff for: features/finances/impl/src/main/kotlin/br/com/mob1st/features/finances/impl/domain/entities/BudgetBuilder.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,6 @@ data class BudgetBuilder(
5151
/**
5252
* Returns the first step of the category builder.
5353
*/
54-
fun firstStep(): BuilderNextAction.Step = FixedExpensesStep
54+
fun firstStep(): BuilderNextAction.Step = VariableExpensesStep
5555
}
5656
}

Diff for: features/finances/impl/src/main/kotlin/br/com/mob1st/features/finances/impl/domain/entities/BuilderNextAction.kt

+4-4
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ sealed interface BuilderNextAction {
4242
data object FixedExpensesStep : BuilderNextAction.Step {
4343
private const val REQUIRED_INPUTS = 3
4444
override val minimumRequiredToProceed: Int = REQUIRED_INPUTS
45-
override val next: BuilderNextAction = VariableExpensesStep
45+
override val next: BuilderNextAction = SeasonalExpensesStep
4646
override val type: RecurrenceType = RecurrenceType.Fixed
4747
override val isExpense: Boolean = true
4848
}
@@ -52,9 +52,9 @@ data object FixedExpensesStep : BuilderNextAction.Step {
5252
* It is used to add variable expenses.
5353
*/
5454
data object VariableExpensesStep : BuilderNextAction.Step {
55-
private const val REQUIRED_INPUTS = 3
55+
private const val REQUIRED_INPUTS = 2
5656
override val minimumRequiredToProceed: Int = REQUIRED_INPUTS
57-
override val next: BuilderNextAction = FixedIncomesStep
57+
override val next: BuilderNextAction = FixedExpensesStep
5858
override val type: RecurrenceType = RecurrenceType.Variable
5959
override val isExpense: Boolean = true
6060
}
@@ -75,7 +75,7 @@ data object SeasonalExpensesStep : BuilderNextAction.Step {
7575
* It is used to add fixed incomes.
7676
*/
7777
data object FixedIncomesStep : BuilderNextAction.Step {
78-
override val minimumRequiredToProceed: Int = 1
78+
override val minimumRequiredToProceed: Int = 0
7979
override val next: BuilderNextAction = BuilderNextAction.Complete
8080
override val type: RecurrenceType = RecurrenceType.Fixed
8181
override val isExpense: Boolean = false

Diff for: features/finances/impl/src/main/kotlin/br/com/mob1st/features/finances/impl/ui/navgraph/BudgetBuilderNavGraphImpl.kt

+1-7
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,16 @@ import br.com.mob1st.features.finances.impl.ui.builder.navigation.BuilderRouter
1212
import br.com.mob1st.features.finances.impl.ui.builder.navigation.BuilderStepNavType
1313
import br.com.mob1st.features.finances.impl.ui.builder.steps.BudgetBuilderStepPage
1414
import br.com.mob1st.features.finances.publicapi.domain.ui.BudgetBuilderNavGraph
15-
import kotlinx.serialization.Serializable
1615
import org.koin.compose.koinInject
1716
import kotlin.reflect.typeOf
1817

1918
object BudgetBuilderNavGraphImpl : BudgetBuilderNavGraph {
20-
override val root: BudgetBuilderNavGraph.Root = Root
21-
2219
context(NavGraphBuilder)
2320
override fun graph(
2421
navController: NavController,
2522
onComplete: () -> Unit,
2623
) {
27-
navigation<Root>(
24+
navigation<BudgetBuilderNavGraph.Root>(
2825
startDestination = BuilderRoute.Intro,
2926
) {
3027
composable<BuilderRoute.Intro> {
@@ -47,7 +44,4 @@ object BudgetBuilderNavGraphImpl : BudgetBuilderNavGraph {
4744
}
4845
}
4946
}
50-
51-
@Serializable
52-
object Root : BudgetBuilderNavGraph.Root
5347
}

Diff for: features/finances/impl/src/main/kotlin/br/com/mob1st/features/finances/impl/ui/navgraph/FinancesNavGraphImpl.kt

+4-6
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,20 @@ import br.com.mob1st.features.finances.publicapi.domain.ui.FinancesNavGraph
99
import kotlinx.serialization.Serializable
1010

1111
internal object FinancesNavGraphImpl : FinancesNavGraph {
12-
override val root: FinancesNavGraph.Root = Root
13-
1412
context(NavGraphBuilder)
1513
override fun graph(
1614
navController: NavController,
1715
onClickClose: () -> Unit,
1816
) {
19-
navigation<Root>(
20-
startDestination = "main",
17+
navigation<FinancesNavGraph.Root>(
18+
startDestination = Main,
2119
) {
22-
composable("main") {
20+
composable<Main> {
2321
Text(text = "Main")
2422
}
2523
}
2624
}
2725

2826
@Serializable
29-
data object Root : FinancesNavGraph.Root
27+
data object Main
3028
}

Diff for: features/finances/impl/src/test/kotlin/br/com/mob1st/features/finances/impl/domain/entities/BudgetBuilderTest.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ class BudgetBuilderTest {
5757
@Test
5858
fun `WHEN get the first step THEN assert it is fixed expense`() {
5959
val actual = BudgetBuilder.firstStep()
60-
assertEquals(FixedExpensesStep, actual)
60+
assertEquals(VariableExpensesStep, actual)
6161
}
6262

6363
@Test
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package br.com.mob1st.features.finances.impl.domain.entities
2+
3+
import org.junit.jupiter.params.ParameterizedTest
4+
import org.junit.jupiter.params.provider.Arguments.arguments
5+
import org.junit.jupiter.params.provider.MethodSource
6+
import kotlin.test.assertEquals
7+
8+
class RootNextActionStepTest {
9+
@ParameterizedTest
10+
@MethodSource("stepSource")
11+
fun `GIVEN a step WHEN get next THEN assert is expected`(
12+
step: BuilderNextAction.Step,
13+
expectedIsExpense: Boolean,
14+
expectedMinimumRequiredToProceed: Int,
15+
expectedType: RecurrenceType,
16+
expectedNext: BuilderNextAction,
17+
) {
18+
assertEquals(
19+
expectedIsExpense,
20+
step.isExpense,
21+
)
22+
assertEquals(
23+
expectedMinimumRequiredToProceed,
24+
step.minimumRequiredToProceed,
25+
)
26+
assertEquals(
27+
expectedType,
28+
step.type,
29+
)
30+
assertEquals(
31+
expectedNext,
32+
step.next,
33+
)
34+
}
35+
36+
companion object {
37+
@JvmStatic
38+
fun stepSource() = listOf(
39+
arguments(
40+
VariableExpensesStep,
41+
true,
42+
2,
43+
RecurrenceType.Variable,
44+
FixedExpensesStep,
45+
),
46+
arguments(
47+
FixedExpensesStep,
48+
true,
49+
3,
50+
RecurrenceType.Fixed,
51+
SeasonalExpensesStep,
52+
),
53+
arguments(
54+
SeasonalExpensesStep,
55+
true,
56+
0,
57+
RecurrenceType.Seasonal,
58+
FixedIncomesStep,
59+
),
60+
arguments(
61+
FixedIncomesStep,
62+
false,
63+
0,
64+
RecurrenceType.Fixed,
65+
BuilderNextAction.Complete,
66+
),
67+
)
68+
}
69+
}

Diff for: features/finances/impl/src/test/kotlin/br/com/mob1st/features/finances/impl/ui/builder/BudgetBuilderStepViewModelTest.kt renamed to features/finances/impl/src/test/kotlin/br/com/mob1st/features/finances/impl/ui/builder/BudgetRootStepViewModelTest.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ import org.junit.jupiter.api.extension.ExtendWith
4545

4646
@OptIn(ExperimentalCoroutinesApi::class)
4747
@ExtendWith(MainDispatcherTestExtension::class)
48-
class BudgetBuilderStepViewModelTest {
48+
class BudgetRootStepViewModelTest {
4949
private lateinit var getCategoryBuilder: GetBudgetBuilderForStepUseCase
5050
private lateinit var proceedBuilder: ProceedBuilderUseCase
5151
private lateinit var router: BuilderRouter

Diff for: features/finances/impl/src/test/kotlin/br/com/mob1st/features/finances/impl/ui/builder/navigation/BuilderRouterTest.kt renamed to features/finances/impl/src/test/kotlin/br/com/mob1st/features/finances/impl/ui/builder/navigation/RootRouterTest.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import org.junit.jupiter.params.ParameterizedTest
1414
import org.junit.jupiter.params.provider.Arguments.arguments
1515
import org.junit.jupiter.params.provider.MethodSource
1616

17-
class BuilderRouterTest {
17+
class RootRouterTest {
1818
@ParameterizedTest
1919
@MethodSource("sendActionSource")
2020
fun `GIVEN a action WHEN send THEN return the next route`(

Diff for: features/finances/public-api/build.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ plugins {
55
id("org.jetbrains.kotlin.android")
66
id("kotlin-parcelize")
77
id("commonSetup")
8+
alias(libs.plugins.kotlin.serialization)
89
}
910

1011
android {

Diff for: features/finances/public-api/src/main/kotlin/br/com/mob1st/features/finances/publicapi/domain/ui/BudgetBuilderNavGraph.kt

+4-3
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ package br.com.mob1st.features.finances.publicapi.domain.ui
22

33
import androidx.navigation.NavController
44
import androidx.navigation.NavGraphBuilder
5-
import br.com.mob1st.core.androidx.navigation.FeatureNavGraph
5+
import kotlinx.serialization.Serializable
66

77
/**
88
* Builds the navigation graph for the category builder flow.
99
*/
10-
interface BudgetBuilderNavGraph : FeatureNavGraph<BudgetBuilderNavGraph.Root> {
10+
interface BudgetBuilderNavGraph {
1111
/**
1212
* Builds the navigation graph for the finances feature.
1313
* @param navController The navigation controller.
@@ -22,5 +22,6 @@ interface BudgetBuilderNavGraph : FeatureNavGraph<BudgetBuilderNavGraph.Root> {
2222
/**
2323
* The root of the navigation graph.
2424
*/
25-
interface Root
25+
@Serializable
26+
data object Root
2627
}

Diff for: features/finances/public-api/src/main/kotlin/br/com/mob1st/features/finances/publicapi/domain/ui/FinancesNavGraph.kt

+4-8
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,13 @@ package br.com.mob1st.features.finances.publicapi.domain.ui
22

33
import androidx.navigation.NavController
44
import androidx.navigation.NavGraphBuilder
5-
import br.com.mob1st.core.androidx.navigation.FeatureNavGraph
5+
import kotlinx.serialization.Serializable
66

77
/**
88
* Builds the navigation graph for the finances feature.
99
* It's the entry point for the feature navigation.
1010
*/
11-
interface FinancesNavGraph : FeatureNavGraph<FinancesNavGraph.Root> {
12-
/**
13-
* The root of the navigation graph.
14-
*/
15-
override val root: Root
16-
11+
interface FinancesNavGraph {
1712
/**
1813
* Builds the navigation graph for the finances feature.
1914
* @param onClickClose Callback to be called when the close button is clicked.
@@ -27,5 +22,6 @@ interface FinancesNavGraph : FeatureNavGraph<FinancesNavGraph.Root> {
2722
/**
2823
* The root of the navigation graph.
2924
*/
30-
interface Root
25+
@Serializable
26+
data object Root
3127
}

0 commit comments

Comments
 (0)