Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 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