diff --git a/Near/app/build.gradle.kts b/Near/app/build.gradle.kts
index 50357e74..7165d602 100644
--- a/Near/app/build.gradle.kts
+++ b/Near/app/build.gradle.kts
@@ -4,6 +4,7 @@ plugins {
alias(libs.plugins.kotlin.compose)
alias(libs.plugins.hilt.application)
alias(libs.plugins.kotlin.kapt)
+ alias(libs.plugins.kotlin.serialization)
}
android {
@@ -73,4 +74,8 @@ dependencies {
implementation(libs.room.ktx)
kapt(libs.room.compiler)
implementation(libs.room.paging)
+ // Navigation
+ implementation(libs.navigation.compose)
+ // Serialization
+ implementation(libs.kotlin.serialization.json)
}
diff --git a/Near/app/src/main/AndroidManifest.xml b/Near/app/src/main/AndroidManifest.xml
index 1101a1e5..1a2cc18e 100644
--- a/Near/app/src/main/AndroidManifest.xml
+++ b/Near/app/src/main/AndroidManifest.xml
@@ -14,7 +14,7 @@
android:theme="@style/Theme.Near"
tools:targetApi="31">
@@ -26,4 +26,4 @@
-
\ No newline at end of file
+
diff --git a/Near/app/src/main/java/com/alarmy/near/MainActivity.kt b/Near/app/src/main/java/com/alarmy/near/MainActivity.kt
deleted file mode 100644
index 738551df..00000000
--- a/Near/app/src/main/java/com/alarmy/near/MainActivity.kt
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.alarmy.near
-
-import android.os.Bundle
-import androidx.activity.ComponentActivity
-import androidx.activity.compose.setContent
-import androidx.activity.enableEdgeToEdge
-import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.padding
-import androidx.compose.material3.Scaffold
-import androidx.compose.material3.Text
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.tooling.preview.Preview
-import com.alarmy.near.ui.theme.NearTheme
-
-class MainActivity : ComponentActivity() {
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- enableEdgeToEdge()
- setContent {
- NearTheme {
- Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
- Greeting(
- name = "Android",
- modifier = Modifier.padding(innerPadding),
- )
- }
- }
- }
- }
-}
-
-@Composable
-fun Greeting(
- name: String,
- modifier: Modifier = Modifier,
-) {
- Text(
- text = "Hello $name!",
- modifier = modifier,
- )
-}
-
-@Preview(showBackground = true)
-@Composable
-fun GreetingPreview() {
- NearTheme {
- Greeting("Android")
- }
-}
diff --git a/Near/app/src/main/java/com/alarmy/near/data/di/RepositoryModule.kt b/Near/app/src/main/java/com/alarmy/near/data/di/RepositoryModule.kt
new file mode 100644
index 00000000..f63b55df
--- /dev/null
+++ b/Near/app/src/main/java/com/alarmy/near/data/di/RepositoryModule.kt
@@ -0,0 +1,17 @@
+package com.alarmy.near.data.di
+
+import com.alarmy.near.data.repository.ExampleRepository
+import com.alarmy.near.data.repository.ExampleRepositoryImpl
+import dagger.Binds
+import dagger.Module
+import dagger.hilt.InstallIn
+import dagger.hilt.components.SingletonComponent
+import javax.inject.Singleton
+
+@Module
+@InstallIn(SingletonComponent::class)
+interface RepositoryModule {
+ @Binds
+ @Singleton
+ abstract fun bindExampleRepository(exampleRepositoryImpl: ExampleRepositoryImpl): ExampleRepository
+}
diff --git a/Near/app/src/main/java/com/alarmy/near/data/mapper/ExampleMapper.kt b/Near/app/src/main/java/com/alarmy/near/data/mapper/ExampleMapper.kt
new file mode 100644
index 00000000..67093aaf
--- /dev/null
+++ b/Near/app/src/main/java/com/alarmy/near/data/mapper/ExampleMapper.kt
@@ -0,0 +1,9 @@
+package com.alarmy.near.data.mapper
+
+import com.alarmy.near.model.Example
+import com.alarmy.near.network.response.ExampleEntity
+
+fun ExampleEntity.toModel(): Example =
+ Example(
+ id = id.toString(),
+ )
diff --git a/Near/app/src/main/java/com/alarmy/near/data/repository/ExampleRepository.kt b/Near/app/src/main/java/com/alarmy/near/data/repository/ExampleRepository.kt
new file mode 100644
index 00000000..631d9a57
--- /dev/null
+++ b/Near/app/src/main/java/com/alarmy/near/data/repository/ExampleRepository.kt
@@ -0,0 +1,10 @@
+package com.alarmy.near.data.repository
+
+import com.alarmy.near.model.Example
+import kotlinx.coroutines.flow.Flow
+
+interface ExampleRepository {
+ fun getExampleData(): String
+
+ fun getData(): Flow
+}
diff --git a/Near/app/src/main/java/com/alarmy/near/data/repository/ExampleRepositoryImpl.kt b/Near/app/src/main/java/com/alarmy/near/data/repository/ExampleRepositoryImpl.kt
new file mode 100644
index 00000000..f98375eb
--- /dev/null
+++ b/Near/app/src/main/java/com/alarmy/near/data/repository/ExampleRepositoryImpl.kt
@@ -0,0 +1,18 @@
+package com.alarmy.near.data.repository
+
+import com.alarmy.near.model.Example
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.flow
+import javax.inject.Inject
+
+class ExampleRepositoryImpl
+ @Inject
+ constructor() : ExampleRepository {
+ override fun getExampleData(): String = "Hello from Repository"
+
+ override fun getData(): Flow =
+ flow {
+ // val result = exampleService.fetchExample()
+ // emit(result.data.toModel())
+ }
+ }
diff --git a/Near/app/src/main/java/com/alarmy/near/model/.gitkeep b/Near/app/src/main/java/com/alarmy/near/model/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/Near/app/src/main/java/com/alarmy/near/model/Example.kt b/Near/app/src/main/java/com/alarmy/near/model/Example.kt
new file mode 100644
index 00000000..c6c1dd7c
--- /dev/null
+++ b/Near/app/src/main/java/com/alarmy/near/model/Example.kt
@@ -0,0 +1,5 @@
+package com.alarmy.near.model
+
+data class Example(
+ val id: String,
+)
diff --git a/Near/app/src/main/java/com/alarmy/near/di/AppModule.kt b/Near/app/src/main/java/com/alarmy/near/network/di/AppModule.kt
similarity index 96%
rename from Near/app/src/main/java/com/alarmy/near/di/AppModule.kt
rename to Near/app/src/main/java/com/alarmy/near/network/di/AppModule.kt
index 464b8cda..369900cc 100644
--- a/Near/app/src/main/java/com/alarmy/near/di/AppModule.kt
+++ b/Near/app/src/main/java/com/alarmy/near/network/di/AppModule.kt
@@ -1,4 +1,4 @@
-package com.alarmy.near.di
+package com.alarmy.near.network.di
// @Module
// @InstallIn(SingletonComponent::class)
diff --git a/Near/app/src/main/java/com/alarmy/near/network/response/ExampleEntity.kt b/Near/app/src/main/java/com/alarmy/near/network/response/ExampleEntity.kt
new file mode 100644
index 00000000..b2c04583
--- /dev/null
+++ b/Near/app/src/main/java/com/alarmy/near/network/response/ExampleEntity.kt
@@ -0,0 +1,5 @@
+package com.alarmy.near.network.response
+
+data class ExampleEntity(
+ val id: Long,
+)
diff --git a/Near/app/src/main/java/com/alarmy/near/presentation/feature/home/HomeScreen.kt b/Near/app/src/main/java/com/alarmy/near/presentation/feature/home/HomeScreen.kt
new file mode 100644
index 00000000..fd8eebb9
--- /dev/null
+++ b/Near/app/src/main/java/com/alarmy/near/presentation/feature/home/HomeScreen.kt
@@ -0,0 +1,51 @@
+package com.alarmy.near.presentation.feature.home
+
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.hilt.navigation.compose.hiltViewModel
+import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import com.alarmy.near.presentation.feature.home.model.HomeUiState
+import com.alarmy.near.presentation.ui.theme.NearTheme
+
+@Composable
+internal fun HomeRoute(
+ viewModel: HomeViewModel = hiltViewModel(),
+ onShowErrorSnackBar: (throwable: Throwable?) -> Unit,
+) {
+ val uiState = viewModel.uiStateFlow.collectAsStateWithLifecycle()
+ HomeScreen(
+ uiState = uiState.value,
+ onContactClick = {},
+ onRemoveContact = viewModel::removeContact,
+ )
+}
+
+@Composable
+internal fun HomeScreen(
+ modifier: Modifier = Modifier,
+ uiState: HomeUiState,
+ onContactClick: (Long) -> Unit = { _ -> },
+ onRemoveContact: (Long) -> Unit = { _ -> },
+) {
+ Column(modifier = Modifier.fillMaxSize().background(Color.White)) {
+ Text("홈 화면")
+ }
+}
+
+@Preview
+@Composable
+internal fun HomeScreenPreview() {
+ NearTheme {
+ HomeScreen(
+ uiState = HomeUiState.Loading,
+ onContactClick = {},
+ onRemoveContact = {},
+ )
+ }
+}
diff --git a/Near/app/src/main/java/com/alarmy/near/presentation/feature/home/HomeViewModel.kt b/Near/app/src/main/java/com/alarmy/near/presentation/feature/home/HomeViewModel.kt
new file mode 100644
index 00000000..6a0b0496
--- /dev/null
+++ b/Near/app/src/main/java/com/alarmy/near/presentation/feature/home/HomeViewModel.kt
@@ -0,0 +1,54 @@
+package com.alarmy.near.presentation.feature.home
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import com.alarmy.near.data.repository.ExampleRepository
+import com.alarmy.near.presentation.feature.home.model.HomeUiState
+import dagger.hilt.android.lifecycle.HiltViewModel
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.SharingStarted
+import kotlinx.coroutines.flow.asStateFlow
+import kotlinx.coroutines.flow.catch
+import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.flow.stateIn
+import kotlinx.coroutines.launch
+import javax.inject.Inject
+
+@HiltViewModel
+class HomeViewModel
+ @Inject
+ constructor(
+ private val exampleRepository: ExampleRepository,
+ ) : ViewModel() {
+ // Example: 여러번 초기화되는 StateFlow
+ private val _uiStateFlow = MutableStateFlow(HomeUiState.Loading)
+ val uiStateFlow = _uiStateFlow.asStateFlow()
+
+ // Example: 한 번만 초기화되는 StateFlow
+ private val exampleStateFlow =
+ exampleRepository
+ .getData()
+ .map {
+ // Mapping to UIState
+ }.stateIn(
+ scope = viewModelScope,
+ started = SharingStarted.WhileSubscribed(5_000),
+ initialValue = HomeUiState.Loading,
+ )
+
+ fun fetchContacts() {
+ viewModelScope.launch {
+ exampleRepository
+ .getData()
+ .catch {
+ // handle error
+ }.collect {
+ // updateUI
+ }
+ }
+ }
+
+ fun removeContact(id: Long) {
+ // contactRepository.removeContact(id)
+ }
+ }
diff --git a/Near/app/src/main/java/com/alarmy/near/presentation/feature/home/model/HomeUiState.kt b/Near/app/src/main/java/com/alarmy/near/presentation/feature/home/model/HomeUiState.kt
new file mode 100644
index 00000000..c4510aef
--- /dev/null
+++ b/Near/app/src/main/java/com/alarmy/near/presentation/feature/home/model/HomeUiState.kt
@@ -0,0 +1,9 @@
+package com.alarmy.near.presentation.feature.home.model
+
+sealed interface HomeUiState {
+ data object Loading : HomeUiState
+
+ data class Success(
+ val data: Any,
+ ) : HomeUiState
+}
diff --git a/Near/app/src/main/java/com/alarmy/near/presentation/feature/home/navigation/HomeNavigation.kt b/Near/app/src/main/java/com/alarmy/near/presentation/feature/home/navigation/HomeNavigation.kt
new file mode 100644
index 00000000..748b9ab4
--- /dev/null
+++ b/Near/app/src/main/java/com/alarmy/near/presentation/feature/home/navigation/HomeNavigation.kt
@@ -0,0 +1,29 @@
+package com.alarmy.near.presentation.feature.home.navigation
+
+import androidx.navigation.NavController
+import androidx.navigation.NavGraphBuilder
+import androidx.navigation.NavOptions
+import androidx.navigation.compose.composable
+import com.alarmy.near.presentation.feature.home.HomeRoute
+import kotlinx.serialization.Serializable
+
+@Serializable
+object RouteHome
+
+/*
+* 추후 홈으로 화면 이동이 필요할 때 이 함수를 사용합니다.
+* */
+fun NavController.navigateToHome(navOptions: NavOptions) {
+ navigate(RouteHome, navOptions)
+}
+
+fun NavGraphBuilder.homeNavGraph(
+ onShowErrorSnackBar: (throwable: Throwable?) -> Unit,
+ onClickContact: (id: Long) -> Unit,
+) {
+ composable { backStackEntry ->
+ HomeRoute(
+ onShowErrorSnackBar = onShowErrorSnackBar,
+ )
+ }
+}
diff --git a/Near/app/src/main/java/com/alarmy/near/presentation/feature/main/MainActivity.kt b/Near/app/src/main/java/com/alarmy/near/presentation/feature/main/MainActivity.kt
new file mode 100644
index 00000000..35f00fdc
--- /dev/null
+++ b/Near/app/src/main/java/com/alarmy/near/presentation/feature/main/MainActivity.kt
@@ -0,0 +1,21 @@
+package com.alarmy.near.presentation.feature.main
+
+import android.os.Bundle
+import androidx.activity.ComponentActivity
+import androidx.activity.compose.setContent
+import androidx.activity.enableEdgeToEdge
+import com.alarmy.near.presentation.ui.theme.NearTheme
+import dagger.hilt.android.AndroidEntryPoint
+
+@AndroidEntryPoint
+class MainActivity : ComponentActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ enableEdgeToEdge()
+ setContent {
+ NearTheme {
+ NearApp()
+ }
+ }
+ }
+}
diff --git a/Near/app/src/main/java/com/alarmy/near/presentation/feature/main/NearApp.kt b/Near/app/src/main/java/com/alarmy/near/presentation/feature/main/NearApp.kt
new file mode 100644
index 00000000..4730b2ac
--- /dev/null
+++ b/Near/app/src/main/java/com/alarmy/near/presentation/feature/main/NearApp.kt
@@ -0,0 +1,57 @@
+package com.alarmy.near.presentation.feature.main
+
+import androidx.compose.foundation.layout.WindowInsets
+import androidx.compose.foundation.layout.exclude
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.ime
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.safeDrawing
+import androidx.compose.foundation.layout.windowInsetsPadding
+import androidx.compose.material3.Scaffold
+import androidx.compose.material3.SnackbarDuration
+import androidx.compose.material3.SnackbarHost
+import androidx.compose.material3.SnackbarHostState
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.ui.Modifier
+import androidx.navigation.NavHostController
+import androidx.navigation.compose.rememberNavController
+import kotlinx.coroutines.launch
+
+@Composable
+internal fun NearApp(
+ modifier: Modifier = Modifier,
+ navController: NavHostController = rememberNavController(),
+) {
+ val snackBarState = remember { SnackbarHostState() }
+ val scope = rememberCoroutineScope()
+
+ Scaffold(
+ modifier = Modifier.fillMaxSize(),
+ snackbarHost = {
+ SnackbarHost(
+ hostState = snackBarState,
+ modifier =
+ Modifier.windowInsetsPadding(
+ WindowInsets.safeDrawing.exclude(
+ WindowInsets.ime,
+ ),
+ ),
+ )
+ },
+ ) { innerPadding ->
+ NearNavHost(
+ modifier = Modifier.padding(innerPadding),
+ navController = navController,
+ onShowSnackbar = {
+ scope.launch {
+ snackBarState.showSnackbar(
+ message = it?.message ?: return@launch,
+ duration = SnackbarDuration.Short,
+ )
+ }
+ },
+ )
+ }
+}
diff --git a/Near/app/src/main/java/com/alarmy/near/presentation/feature/main/NearNavHost.kt b/Near/app/src/main/java/com/alarmy/near/presentation/feature/main/NearNavHost.kt
new file mode 100644
index 00000000..ee75ae08
--- /dev/null
+++ b/Near/app/src/main/java/com/alarmy/near/presentation/feature/main/NearNavHost.kt
@@ -0,0 +1,28 @@
+package com.alarmy.near.presentation.feature.main
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.navigation.NavHostController
+import androidx.navigation.compose.NavHost
+import com.alarmy.near.presentation.feature.home.navigation.RouteHome
+import com.alarmy.near.presentation.feature.home.navigation.homeNavGraph
+
+@Composable
+internal fun NearNavHost(
+ modifier: Modifier = Modifier,
+ navController: NavHostController,
+ onShowSnackbar: (Throwable?) -> Unit = { _ -> },
+) {
+ /*
+ * 화면 이동 및 구성을 위한 컴포저블 함수입니다.
+ * */
+ NavHost(
+ modifier = modifier,
+ navController = navController,
+ startDestination = RouteHome,
+ ) {
+ homeNavGraph(onShowErrorSnackBar = onShowSnackbar, onClickContact = {
+ // 예시: navController.navigate(RouteContact(it))
+ })
+ }
+}
diff --git a/Near/app/src/main/java/com/alarmy/near/ui/theme/Color.kt b/Near/app/src/main/java/com/alarmy/near/presentation/ui/theme/Color.kt
similarity index 73%
rename from Near/app/src/main/java/com/alarmy/near/ui/theme/Color.kt
rename to Near/app/src/main/java/com/alarmy/near/presentation/ui/theme/Color.kt
index 869c5ab5..f20e42a3 100644
--- a/Near/app/src/main/java/com/alarmy/near/ui/theme/Color.kt
+++ b/Near/app/src/main/java/com/alarmy/near/presentation/ui/theme/Color.kt
@@ -1,4 +1,4 @@
-package com.alarmy.near.ui.theme
+package com.alarmy.near.presentation.ui.theme
import androidx.compose.ui.graphics.Color
@@ -8,4 +8,4 @@ val Pink80 = Color(0xFFEFB8C8)
val Purple40 = Color(0xFF6650a4)
val PurpleGrey40 = Color(0xFF625b71)
-val Pink40 = Color(0xFF7D5260)
\ No newline at end of file
+val Pink40 = Color(0xFF7D5260)
diff --git a/Near/app/src/main/java/com/alarmy/near/ui/theme/Theme.kt b/Near/app/src/main/java/com/alarmy/near/presentation/ui/theme/Theme.kt
similarity index 55%
rename from Near/app/src/main/java/com/alarmy/near/ui/theme/Theme.kt
rename to Near/app/src/main/java/com/alarmy/near/presentation/ui/theme/Theme.kt
index 7ed827c7..f99afa1d 100644
--- a/Near/app/src/main/java/com/alarmy/near/ui/theme/Theme.kt
+++ b/Near/app/src/main/java/com/alarmy/near/presentation/ui/theme/Theme.kt
@@ -1,6 +1,5 @@
-package com.alarmy.near.ui.theme
+package com.alarmy.near.presentation.ui.theme
-import android.app.Activity
import android.os.Build
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material3.MaterialTheme
@@ -11,17 +10,18 @@ import androidx.compose.material3.lightColorScheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.LocalContext
-private val DarkColorScheme = darkColorScheme(
- primary = Purple80,
- secondary = PurpleGrey80,
- tertiary = Pink80
-)
-
-private val LightColorScheme = lightColorScheme(
- primary = Purple40,
- secondary = PurpleGrey40,
- tertiary = Pink40
+private val DarkColorScheme =
+ darkColorScheme(
+ primary = Purple80,
+ secondary = PurpleGrey80,
+ tertiary = Pink80,
+ )
+private val LightColorScheme =
+ lightColorScheme(
+ primary = Purple40,
+ secondary = PurpleGrey40,
+ tertiary = Pink40,
/* Other default colors to override
background = Color(0xFFFFFBFE),
surface = Color(0xFFFFFBFE),
@@ -30,29 +30,30 @@ private val LightColorScheme = lightColorScheme(
onTertiary = Color.White,
onBackground = Color(0xFF1C1B1F),
onSurface = Color(0xFF1C1B1F),
- */
-)
+ */
+ )
@Composable
fun NearTheme(
darkTheme: Boolean = isSystemInDarkTheme(),
// Dynamic color is available on Android 12+
dynamicColor: Boolean = true,
- content: @Composable () -> Unit
+ content: @Composable () -> Unit,
) {
- val colorScheme = when {
- dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
- val context = LocalContext.current
- if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context)
- }
+ val colorScheme =
+ when {
+ dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
+ val context = LocalContext.current
+ if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context)
+ }
- darkTheme -> DarkColorScheme
- else -> LightColorScheme
- }
+ darkTheme -> DarkColorScheme
+ else -> LightColorScheme
+ }
MaterialTheme(
colorScheme = colorScheme,
typography = Typography,
- content = content
+ content = content,
)
-}
\ No newline at end of file
+}
diff --git a/Near/app/src/main/java/com/alarmy/near/ui/theme/Type.kt b/Near/app/src/main/java/com/alarmy/near/presentation/ui/theme/Type.kt
similarity index 67%
rename from Near/app/src/main/java/com/alarmy/near/ui/theme/Type.kt
rename to Near/app/src/main/java/com/alarmy/near/presentation/ui/theme/Type.kt
index fdc85618..10ec1df7 100644
--- a/Near/app/src/main/java/com/alarmy/near/ui/theme/Type.kt
+++ b/Near/app/src/main/java/com/alarmy/near/presentation/ui/theme/Type.kt
@@ -1,4 +1,4 @@
-package com.alarmy.near.ui.theme
+package com.alarmy.near.presentation.ui.theme
import androidx.compose.material3.Typography
import androidx.compose.ui.text.TextStyle
@@ -7,14 +7,16 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.sp
// Set of Material typography styles to start with
-val Typography = Typography(
- bodyLarge = TextStyle(
- fontFamily = FontFamily.Default,
- fontWeight = FontWeight.Normal,
- fontSize = 16.sp,
- lineHeight = 24.sp,
- letterSpacing = 0.5.sp
- )
+val Typography =
+ Typography(
+ bodyLarge =
+ TextStyle(
+ fontFamily = FontFamily.Default,
+ fontWeight = FontWeight.Normal,
+ fontSize = 16.sp,
+ lineHeight = 24.sp,
+ letterSpacing = 0.5.sp,
+ ),
/* Other default text styles to override
titleLarge = TextStyle(
fontFamily = FontFamily.Default,
@@ -30,5 +32,5 @@ val Typography = Typography(
lineHeight = 16.sp,
letterSpacing = 0.5.sp
)
- */
-)
\ No newline at end of file
+ */
+ )
diff --git a/Near/app/src/main/java/com/alarmy/near/repository/ExampleRepository.kt b/Near/app/src/main/java/com/alarmy/near/repository/ExampleRepository.kt
deleted file mode 100644
index d6ea4d99..00000000
--- a/Near/app/src/main/java/com/alarmy/near/repository/ExampleRepository.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-package com.alarmy.near.repository
-
-interface ExampleRepository {
- fun getExampleData(): String
-}
diff --git a/Near/app/src/main/java/com/alarmy/near/repository/ExampleRepositoryImpl.kt b/Near/app/src/main/java/com/alarmy/near/repository/ExampleRepositoryImpl.kt
deleted file mode 100644
index 4709a51f..00000000
--- a/Near/app/src/main/java/com/alarmy/near/repository/ExampleRepositoryImpl.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-package com.alarmy.near.repository
-
-class ExampleRepositoryImpl : ExampleRepository {
- override fun getExampleData(): String = "Hello from Repository"
-}
diff --git a/Near/gradle/libs.versions.toml b/Near/gradle/libs.versions.toml
index b5aa516e..b0336eb5 100644
--- a/Near/gradle/libs.versions.toml
+++ b/Near/gradle/libs.versions.toml
@@ -1,6 +1,6 @@
[versions]
agp = "8.10.1"
-kotlin = "2.0.21"
+kotlin = "2.2.0"
coreKtx = "1.16.0"
junit = "4.13.2"
junitVersion = "1.2.1"
@@ -9,7 +9,7 @@ lifecycleRuntimeKtx = "2.9.1"
activityCompose = "1.10.1"
composeBom = "2024.09.00"
# Hilt
-hiltVersion = "2.51.1"
+hiltVersion = "2.57"
hiltNavigationVersion = "1.2.0"
# Retrofit
retrofitVersion = "2.9.0"
@@ -19,6 +19,10 @@ glideVersion = "4.16.0"
roomVersion = "2.6.1"
# Ktlint
ktlintVersion = "13.0.0"
+# Navigation
+navigationVersion = "2.9.2"
+# Kotlin Serialization
+kotlinSerializationVersion = "1.9.0"
[libraries]
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
@@ -46,6 +50,8 @@ room-runtime = { group = "androidx.room", name = "room-runtime", version.ref = "
room-ktx = { group = "androidx.room", name = "room-ktx", version.ref = "roomVersion" }
room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "roomVersion" }
room-paging = { group = "androidx.room", name = "room-paging", version.ref = "roomVersion" }
+navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigationVersion" }
+kotlin-serialization-json = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version.ref = "kotlinSerializationVersion" }
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
@@ -54,4 +60,5 @@ kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "ko
hilt-application = { id = "com.google.dagger.hilt.android", version.ref = "hiltVersion" }
kotlin-kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "kotlin" }
ktlint = { id = "org.jlleitschuh.gradle.ktlint", version.ref = "ktlintVersion" }
+kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }