Skip to content

Commit

Permalink
Use constructor injection instead of KoinComponent
Browse files Browse the repository at this point in the history
  • Loading branch information
meikpiep committed Jan 25, 2024
1 parent 6945054 commit 93755a5
Show file tree
Hide file tree
Showing 13 changed files with 184 additions and 184 deletions.
1 change: 1 addition & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ plugins {
alias(libs.plugins.kotlin.jvm) apply false
alias(libs.plugins.sonarqube)
alias(libs.plugins.ktlint)
alias(libs.plugins.ksp)
}

sonarqube {
Expand Down
2 changes: 2 additions & 0 deletions gauguin-app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,8 @@ dependencies {
implementation(libs.thirdparty.ferriswheel)
implementation(libs.thirdparty.navigationdrawer)
implementation(libs.thirdparty.balloon)

implementation(libs.bundles.koin)
}

sonarqube {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ class MainNavigationViewService(
private val binding: ActivityMainBinding,
) : KoinComponent {
private val savedGamesService: SavedGamesService by inject()
private val currentGameSaver: CurrentGameSaver by inject()

fun initialize() {
binding.container.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
Expand Down Expand Up @@ -135,7 +136,7 @@ class MainNavigationViewService(
mainActivity.startActivityForResult(i, 7)
}
saveGameItem -> {
CurrentGameSaver(mainActivity.filesDir).save()
currentGameSaver.save()

mainActivity.gameSaved()
}
Expand Down
8 changes: 7 additions & 1 deletion gauguin-core/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@ plugins {
jacoco
`jvm-test-suite`
kotlin("plugin.serialization") version "1.9.21"
id("com.google.devtools.ksp")
}

// Used by Koin
sourceSets.main {
java.srcDirs("build/generated/ksp/main/kotlin")
}

tasks {
Expand All @@ -25,7 +31,7 @@ dependencies {
implementation(libs.kotlin.coroutines.core)
api(libs.kotlin.serialization)

implementation(libs.koin.core)
implementation(libs.bundles.koin)

api(libs.bundles.logging)

Expand Down
37 changes: 22 additions & 15 deletions gauguin-core/src/main/kotlin/org/piepmeyer/gauguin/CoreModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ import org.piepmeyer.gauguin.grid.GridSize
import org.piepmeyer.gauguin.grid.GridView
import org.piepmeyer.gauguin.options.GameOptionsVariant
import org.piepmeyer.gauguin.options.GameVariant
import org.piepmeyer.gauguin.preferences.ApplicationPreferences
import org.piepmeyer.gauguin.preferences.StatisticsManager
import org.piepmeyer.gauguin.undo.UndoManager
import java.io.File

Expand All @@ -25,10 +27,27 @@ class CoreModule(
fun module(): Module =
module {
single {
initialGame()
MigrateOldSavedGamesService(
this@CoreModule.filesDir,
get(ApplicationPreferences::class),
).migrateFiles()

val grid = initialGrid()

Game(
grid,
UndoManager { },
initialGridView(grid),
get(StatisticsManager::class),
get(ApplicationPreferences::class),
)
}
single {
GameLifecycle(filesDir)
GameLifecycle(
filesDir,
get(Game::class),
get(ApplicationPreferences::class),
)
}
single {
GridCalculationService(initialGameVariant())
Expand All @@ -37,23 +56,11 @@ class CoreModule(
SavedGamesService(filesDir)
}
single {
GameSolveService()
GameSolveService(get(Game::class))
}
}

private fun initialGame(): Game {
val grid = initialGrid()

return Game(
grid,
UndoManager { },
initialGridView(grid),
)
}

private fun initialGrid(): Grid {
MigrateOldSavedGamesService(this.filesDir).migrateFiles()

SaveGame.autosaveByDirectory(this.filesDir).restore()?.let {
return it
}
Expand Down
10 changes: 4 additions & 6 deletions gauguin-core/src/main/kotlin/org/piepmeyer/gauguin/game/Game.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package org.piepmeyer.gauguin.game

import org.koin.core.component.KoinComponent
import org.koin.core.component.inject
import org.koin.core.annotation.InjectedParam
import org.piepmeyer.gauguin.creation.cage.GridCageType
import org.piepmeyer.gauguin.grid.Grid
import org.piepmeyer.gauguin.grid.GridCell
Expand All @@ -14,10 +13,9 @@ data class Game(
var grid: Grid,
var undoManager: UndoManager,
var gridUI: GridView,
) : KoinComponent {
private val statisticsManager: StatisticsManager by inject()
private val applicationPreferences: ApplicationPreferences by inject()

@InjectedParam private val statisticsManager: StatisticsManager,
@InjectedParam private val applicationPreferences: ApplicationPreferences,
) {
private var lastCellWithModifiedPossibles: GridCell? = null
private var solvedListener: GameSolvedListener? = null

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ import kotlinx.coroutines.asCoroutineDispatcher
import kotlinx.coroutines.async
import kotlinx.coroutines.delay
import kotlinx.coroutines.isActive
import org.koin.core.component.KoinComponent
import org.koin.core.component.inject
import org.koin.core.annotation.InjectedParam
import org.piepmeyer.gauguin.game.save.SaveGame
import org.piepmeyer.gauguin.preferences.ApplicationPreferences
import java.io.File
Expand All @@ -17,10 +16,9 @@ import kotlin.time.Duration.Companion.milliseconds

class GameLifecycle(
private var saveGameDirectory: File,
) : KoinComponent {
private val game: Game by inject()
private val applicationPreferences: ApplicationPreferences by inject()

@InjectedParam private val game: Game,
@InjectedParam private val applicationPreferences: ApplicationPreferences,
) {
private lateinit var scope: CoroutineScope
private var playTimerThreadContext: CoroutineContext = Executors.newSingleThreadExecutor().asCoroutineDispatcher()

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package org.piepmeyer.gauguin.game

import org.koin.core.component.KoinComponent
import org.koin.core.component.inject

class GameSolveService : KoinComponent {
private val game: Game by inject()
import org.koin.core.annotation.InjectedParam

class GameSolveService(
@InjectedParam private val game: Game,
) {
fun revealSelectedCage(): Boolean {
game.grid.selectedCell ?: return false

Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
package org.piepmeyer.gauguin.game.save

import org.koin.core.component.KoinComponent
import org.koin.core.component.inject
import org.koin.core.annotation.InjectedParam
import org.piepmeyer.gauguin.game.Game
import java.io.File
import java.io.IOException

class CurrentGameSaver(
private val saveGameDirectory: File,
) : KoinComponent {
private val game: Game by inject()
private val savedGamesService: SavedGamesService by inject()

@InjectedParam private val game: Game,
@InjectedParam private val savedGamesService: SavedGamesService,
) {
fun save() {
val saver = SaveGame.autosaveByDirectory(saveGameDirectory)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
package org.piepmeyer.gauguin.game.save

import io.github.oshai.kotlinlogging.KotlinLogging
import org.koin.core.component.KoinComponent
import org.koin.core.component.inject
import org.koin.core.annotation.InjectedParam
import org.piepmeyer.gauguin.creation.cage.GridCageType
import org.piepmeyer.gauguin.difficulty.GridDifficultyCalculator
import org.piepmeyer.gauguin.grid.Grid
Expand All @@ -22,9 +21,8 @@ private val logger = KotlinLogging.logger {}

class MigrateOldSavedGamesService(
private val filesDir: File,
) : KoinComponent {
private val applicationPreferences: ApplicationPreferences by inject()

@InjectedParam private val applicationPreferences: ApplicationPreferences,
) {
private fun restore(saveGameFile: File): Grid? {
return if (saveGameFile.length() == 0L) {
null
Expand Down
Loading

0 comments on commit 93755a5

Please sign in to comment.