Skip to content

Commit

Permalink
Adding compose nav and DI setup.
Browse files Browse the repository at this point in the history
  • Loading branch information
AdamMc331 committed Dec 1, 2024
1 parent 76e18c6 commit f0367b0
Show file tree
Hide file tree
Showing 13 changed files with 162 additions and 49 deletions.
4 changes: 1 addition & 3 deletions android/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -50,14 +50,12 @@ android {
}

dependencies {
implementation(projects.shared.appLegacy)
implementation(projects.shared.ui)
implementation(projects.shared.app)
implementation(compose.foundation)
implementation(compose.material3)
implementation(libs.accompanist.systemuicontroller)
implementation(libs.activity.compose)
implementation(libs.androidx.core.ktx)
implementation(libs.koin.android)
implementation(libs.ui.graphics)

testImplementation(libs.junit)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,8 @@ package com.adammcneilly.pocketleague.android.app
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.SideEffect
import androidx.compose.ui.graphics.Color
import androidx.core.view.WindowCompat
import androidx.activity.enableEdgeToEdge
import com.adammcneilly.pocketleague.shared.app.PocketLeagueApp
import com.adammcneilly.pocketleague.shared.ui.theme.PocketLeagueTheme
import com.google.accompanist.systemuicontroller.rememberSystemUiController

/**
* The main entry point into the application from the Android side.
Expand All @@ -21,27 +15,10 @@ class MainActivity : ComponentActivity() {
) {
super.onCreate(savedInstanceState)

WindowCompat.setDecorFitsSystemWindows(window, false)

setContent {
PocketLeagueTheme {
SetSystemBarsTransparent()

PocketLeagueApp()
}
}
}

@Composable
private fun SetSystemBarsTransparent() {
val systemUiController = rememberSystemUiController()
val useDarkIcons = !isSystemInDarkTheme()
enableEdgeToEdge()

SideEffect {
systemUiController.setSystemBarsColor(
color = Color.Transparent,
darkIcons = useDarkIcons,
)
PocketLeagueApp()
}
}
}
Original file line number Diff line number Diff line change
@@ -1,21 +1,8 @@
package com.adammcneilly.pocketleague.android.app

import android.app.Application
import android.content.Context
import com.adammcneilly.pocketleague.shared.app.di.initKoin
import org.koin.dsl.module

/**
* The [Application] instance for Pocket League.
*/
class PocketLeagueApp : Application() {
override fun onCreate() {
super.onCreate()

initKoin(
appModule = module {
single<Context> { this@PocketLeagueApp }
},
)
}
}
class PocketLeagueApp : Application()
2 changes: 2 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ ktor = "3.0.1"
lifecycle = "2.8.4"
material = "1.12.0"
minSdk = "26"
navigation = "2.8.0-alpha10"
okio = "3.9.1"
palette = "1.0.0"
paparazzi = "1.3.5"
Expand All @@ -55,6 +56,7 @@ androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "androidx
androidx-glance = { module = "androidx.glance:glance", version.ref = "glance" }
androidx-glance-appwidget = { module = "androidx.glance:glance-appwidget", version.ref = "glance" }
androidx-lifecycle-viewmodel = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel", version.ref = "lifecycle" }
androidx-navigation-compose = { module = "org.jetbrains.androidx.navigation:navigation-compose", version.ref = "navigation" }
androidx-palette-ktx = { module = "androidx.palette:palette-ktx", version.ref = "palette" }
androidx-test-espresso-core = { module = "androidx.test.espresso:espresso-core", version.ref = "espresso" }
androidx-test-junit = { module = "androidx.test.ext:junit", version.ref = "androidx-test" }
Expand Down
1 change: 1 addition & 0 deletions shared/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ kotlin {
implementation(compose.material3)
implementation(compose.materialIconsExtended)
implementation(libs.androidx.lifecycle.viewmodel)
implementation(libs.androidx.navigation.compose)
implementation(libs.cketti.codepoints)
implementation(libs.koin.core)
implementation(libs.koin.compose)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
package com.adammcneilly.pocketleague.shared.app

import androidx.compose.material3.Text
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import com.adammcneilly.pocketleague.shared.app.di.allModules
import com.adammcneilly.pocketleague.shared.app.feature.feed.FeedScreen
import com.adammcneilly.pocketleague.shared.app.ui.theme.PocketLeagueTheme
import org.koin.compose.KoinApplication

/**
* Main composable entrypoint to the shared multiplatform version of
Expand All @@ -12,8 +19,26 @@ import androidx.compose.ui.Modifier
fun PocketLeagueApp(
modifier: Modifier = Modifier,
) {
Text(
text = "Entry Point",
modifier = modifier,
)
KoinApplication(
application = {
modules(allModules)
},
) {
PocketLeagueTheme {
val navController = rememberNavController()

NavHost(
navController = navController,
startDestination = "feed",
modifier = modifier,
) {
composable("feed") {
FeedScreen(
modifier = Modifier
.fillMaxSize(),
)
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.adammcneilly.pocketleague.shared.app.di

val allModules = listOf(
utilModule,
remoteModule,
repositoryModule,
useCaseModule,
viewModelModule,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.adammcneilly.pocketleague.shared.app.di

import com.adammcneilly.pocketleague.shared.app.data.octanegg.OctaneGGKtorClient
import com.adammcneilly.pocketleague.shared.app.data.remote.BaseKtorClient
import org.koin.core.qualifier.named
import org.koin.dsl.module

const val OCTANEGG_CLIENT = "octanegg"

val remoteModule = module {
single<BaseKtorClient>(named(OCTANEGG_CLIENT)) {
OctaneGGKtorClient
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.adammcneilly.pocketleague.shared.app.di

import com.adammcneilly.pocketleague.shared.app.data.event.EventRepository
import com.adammcneilly.pocketleague.shared.app.data.match.MatchRepository
import com.adammcneilly.pocketleague.shared.app.data.octanegg.event.OctaneGGEventRepository
import com.adammcneilly.pocketleague.shared.app.data.octanegg.match.OctaneGGMatchRepository
import org.koin.core.qualifier.named
import org.koin.dsl.module

val repositoryModule = module {
single<EventRepository> {
OctaneGGEventRepository(
apiClient = get(named(OCTANEGG_CLIENT)),
)
}

single<MatchRepository> {
OctaneGGMatchRepository(
apiClient = get(named(OCTANEGG_CLIENT)),
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.adammcneilly.pocketleague.shared.app.di

import com.adammcneilly.pocketleague.shared.app.domain.usecases.GetOngoingEventsUseCase
import com.adammcneilly.pocketleague.shared.app.domain.usecases.GetPastWeeksMatchesUseCase
import com.adammcneilly.pocketleague.shared.app.domain.usecases.GetUpcomingEventsUseCase
import org.koin.dsl.module

val useCaseModule = module {
single {
GetPastWeeksMatchesUseCase(
dateTimeFormatter = get(),
matchRepository = get(),
timeProvider = get(),
)
}

single {
GetOngoingEventsUseCase(
dateTimeFormatter = get(),
eventRepository = get(),
localeHelper = get(),
timeProvider = get(),
)
}

single {
GetUpcomingEventsUseCase(
dateTimeFormatter = get(),
eventRepository = get(),
localeHelper = get(),
timeProvider = get(),
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.adammcneilly.pocketleague.shared.app.di

import com.adammcneilly.pocketleague.shared.app.core.currency.CurrencyFormatter
import com.adammcneilly.pocketleague.shared.app.core.currency.currencyFormatter
import com.adammcneilly.pocketleague.shared.app.core.datetime.DateTimeFormatter
import com.adammcneilly.pocketleague.shared.app.core.datetime.SystemTimeProvider
import com.adammcneilly.pocketleague.shared.app.core.datetime.TimeProvider
import com.adammcneilly.pocketleague.shared.app.core.datetime.dateTimeFormatter
import com.adammcneilly.pocketleague.shared.app.core.locale.LocaleHelper
import com.adammcneilly.pocketleague.shared.app.core.locale.localeHelper
import org.koin.dsl.module

val utilModule = module {
single<DateTimeFormatter> {
dateTimeFormatter()
}

single<CurrencyFormatter> {
currencyFormatter()
}

single<LocaleHelper> {
localeHelper()
}

single<TimeProvider> {
SystemTimeProvider
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.adammcneilly.pocketleague.shared.app.di

import com.adammcneilly.pocketleague.shared.app.feature.feed.FeedViewModel
import org.koin.core.module.dsl.viewModel
import org.koin.dsl.module

val viewModelModule = module {
viewModel {
FeedViewModel(
getPastWeeksMatchesUseCase = get(),
getOngoingEventsUseCase = get(),
getUpcomingEventsUseCase = get(),
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ class FeedViewModel(
.collect { eventList ->
mutableState.update { currentState ->
currentState.copy(
ongoingEvents = eventList,
upcomingEvents = eventList,
)
}
}
Expand Down

0 comments on commit f0367b0

Please sign in to comment.