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
3 changes: 3 additions & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import java.util.Properties
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.compose)
id("dororong.rodi.android.hilt")
}

val localProperties = Properties().apply {
Expand Down Expand Up @@ -60,8 +61,10 @@ dependencies {
implementation(libs.androidx.compose.foundation)
implementation(libs.androidx.compose.ui)
implementation(libs.androidx.lifecycle.runtime.compose)
implementation(libs.hilt.android)
implementation(libs.kakao.maps)
implementation(libs.kakao.navi)
ksp(libs.hilt.compiler)
testImplementation(libs.junit)
androidTestImplementation(platform(libs.androidx.compose.bom))
androidTestImplementation(libs.androidx.compose.ui.test.junit4)
Expand Down
4 changes: 3 additions & 1 deletion app/src/main/java/com/dororong/rodi/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@ import androidx.activity.ComponentActivity
import androidx.activity.SystemBarStyle
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import com.dororong.rodi.ui.AppRoot
import com.dororong.rodi.core.ui.theme.RodiTheme
import com.dororong.rodi.ui.AppRoot
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/java/com/dororong/rodi/RodiApplication.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ package com.dororong.rodi
import android.app.Application
import com.kakao.sdk.common.KakaoSdk
import com.kakao.vectormap.KakaoMapSdk
import dagger.hilt.android.HiltAndroidApp

@HiltAndroidApp
class RodiApplication : Application() {
override fun onCreate() {
super.onCreate()
Expand Down
6 changes: 6 additions & 0 deletions build-logic/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ group = "com.dororong.rodi.buildlogic"
dependencies {
compileOnly(libs.android.gradlePlugin)
compileOnly(libs.compose.gradlePlugin)
compileOnly(libs.hilt.gradlePlugin)
compileOnly(libs.ksp.gradlePlugin)
compileOnly(libs.kotlin.gradlePlugin)
}

Expand All @@ -24,6 +26,10 @@ gradlePlugin {
id = "dororong.rodi.android.library.compose"
implementationClass = "AndroidLibraryComposeConventionPlugin"
}
register("androidHilt") {
id = "dororong.rodi.android.hilt"
implementationClass = "AndroidHiltConventionPlugin"
}
register("jvmLibrary") {
id = "dororong.rodi.jvm.library"
implementationClass = "JvmLibraryConventionPlugin"
Expand Down
11 changes: 11 additions & 0 deletions build-logic/src/main/kotlin/AndroidHiltConventionPlugin.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import org.gradle.api.Plugin
import org.gradle.api.Project

class AndroidHiltConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target.pluginManager) {
apply("com.google.devtools.ksp")
apply("com.google.dagger.hilt.android")
}
}
}
2 changes: 2 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
alias(libs.plugins.android.application) apply false
alias(libs.plugins.hilt) apply false
alias(libs.plugins.ksp) apply false
alias(libs.plugins.kotlin.compose) apply false
}
3 changes: 3 additions & 0 deletions core/data/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import java.util.Properties

plugins {
id("dororong.rodi.android.library")
id("dororong.rodi.android.hilt")
}

val localProperties = Properties().apply {
Expand All @@ -24,6 +25,8 @@ dependencies {
implementation(project(":core:common"))
implementation(project(":core:domain"))
implementation(libs.androidx.datastore.preferences)
implementation(libs.hilt.android)
implementation(libs.kakao.maps)
implementation(libs.kotlinx.coroutines.android)
ksp(libs.hilt.compiler)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.dororong.rodi.core.data

import com.dororong.rodi.core.data.directions.KakaoDirectionsClient
import com.dororong.rodi.core.domain.Course
import javax.inject.Inject

interface CourseRepository {
fun getCourses(): List<Course>
suspend fun getRoute(course: Course): KakaoDirectionsClient.RouteResult
}

class CourseRepositoryImpl @Inject constructor() : CourseRepository {
override fun getCourses(): List<Course> = SampleCourses.RODI_COURSES
override suspend fun getRoute(course: Course): KakaoDirectionsClient.RouteResult =
KakaoDirectionsClient.getRoute(course)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.dororong.rodi.core.data

import android.content.Context
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.flow.Flow
import javax.inject.Inject

interface EntryRepository {
val isCompleted: Flow<Boolean?>
suspend fun setCompleted()
}

class EntryRepositoryImpl @Inject constructor(
@ApplicationContext context: Context,
) : EntryRepository {
private val prefs = EntryPreferences(context)

override val isCompleted: Flow<Boolean?> = prefs.isCompleted

override suspend fun setCompleted() = prefs.setCompleted()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.dororong.rodi.core.data.di

import com.dororong.rodi.core.data.CourseRepository
import com.dororong.rodi.core.data.CourseRepositoryImpl
import com.dororong.rodi.core.data.EntryRepository
import com.dororong.rodi.core.data.EntryRepositoryImpl
import com.dororong.rodi.core.data.navi.NaviPreferenceRepository
import com.dororong.rodi.core.data.navi.NaviPreferenceRepositoryImpl
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent

@Module
@InstallIn(SingletonComponent::class)
abstract class DataModule {
@Binds
abstract fun bindCourseRepository(impl: CourseRepositoryImpl): CourseRepository

@Binds
abstract fun bindNaviPreferenceRepository(impl: NaviPreferenceRepositoryImpl): NaviPreferenceRepository

@Binds
abstract fun bindEntryRepository(impl: EntryRepositoryImpl): EntryRepository
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.dororong.rodi.core.data.navi

import android.content.Context
import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject

interface NaviPreferenceRepository {
fun getAlways(): NaviApp?
fun setAlways(app: NaviApp)
}

class NaviPreferenceRepositoryImpl @Inject constructor(
@param:ApplicationContext private val context: Context,
) : NaviPreferenceRepository {
override fun getAlways(): NaviApp? = NaviPreference.getAlways(context)
override fun setAlways(app: NaviApp) = NaviPreference.setAlways(context, app)
}
3 changes: 3 additions & 0 deletions docs/BACKLOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
> 한 줄씩 누적하고, 착수 시 `docs/handoff/HANDOFF.md`로 옮겨 작업한다.

## 열린 항목
- [ ] **Repository 인터페이스 domain 이동 검토** — 현재 `RouteResult`(Kakao `LatLng` 포함)와 `NaviApp`이
`core:data` 타입이라 Hilt 도입 작업에서는 Repository 인터페이스/구현체를 함께 `core:data`에 둠.
domain purity를 위해 vendor 타입 분리 후 `core:domain` 이동 여부를 별도 작업으로 검토.
- [ ] **Kotlin 2.2.10 → 2.4.0 / AGP 버전 업그레이드** — Google Maven 기준 Kotlin 최신 안정은 2.4.0,
AGP는 현재 프로젝트(9.2.1)가 이미 공개 릴리스 노트보다 앞서 있음. 컴파일러 호환성(compose
compiler, KSP 등) 검증이 필요해 Java 21 통일 작업(2026-07-01)에서 범위 밖으로 뺌.
Expand Down
Loading
Loading