diff --git a/.github/workflows/Build.yaml b/.github/workflows/Build.yaml
index cb6c4ed..a657f3c 100644
--- a/.github/workflows/Build.yaml
+++ b/.github/workflows/Build.yaml
@@ -3,7 +3,7 @@ name: Build
on:
push:
branches:
- - main
+ - develop
pull_request:
concurrency:
diff --git a/.gitignore b/.gitignore
index 273b7e9..b1740b0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,4 @@ build/
.externalNativeBuild
app/build
build
+/.kotlin
diff --git a/.run/spotlessApply.run.xml b/.run/spotlessApply.run.xml
new file mode 100644
index 0000000..5c4dac8
--- /dev/null
+++ b/.run/spotlessApply.run.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+ true
+ true
+ false
+
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
index 55dea7b..db39014 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,9 @@
-
Breaking Bad - Jetpack Compose
+ 🧪 Breaking Bad - Jetpack Compose
-
-
+
+
@@ -36,7 +36,7 @@
- [Coil-Compose](https://coil-kt.github.io/coil/compose)
- [Timber](https://github.com/JakeWharton/timber)
- [Haze](https://github.com/chrisbanes/haze)
-- [sharedElement](https://developer.android.com/guide/fragments/animate#shared)
+- [SharedElement](https://developer.android.com/guide/fragments/animate#shared)
## Multi Module
@@ -60,22 +60,5 @@
  └── setting
```
+## Module Graphs
![](project.dot.png)
-
-# License
-
-```xml
- Designed and developed by 2021 shinhyo
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-```
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 181db15..212e492 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -1,52 +1,3 @@
plugins {
id("brba.android.application")
}
-
-android {
- namespace = "io.github.shinhyo.brba"
-
- defaultConfig {
- applicationId = "io.github.shinhyo.brba"
- versionCode = 1
- versionName = "1.0"
- }
-
- signingConfigs {
- getByName("debug") {
- storeFile = rootProject.file("debug.keystore")
- storePassword = "android"
- keyAlias = "androiddebugkey"
- keyPassword = "android"
- }
- }
-
- buildTypes {
- getByName("debug") {
- isDebuggable = false
- }
-
- getByName("release") {
- isDebuggable = false
- isShrinkResources = true
- isMinifyEnabled = true
- proguardFiles(
- getDefaultProguardFile("proguard-android-optimize.txt"),
- "proguard-rules.pro",
- )
- signingConfig = signingConfigs.getByName("debug")
- }
- }
-
- buildFeatures {
- buildConfig = true
- }
-}
-
-dependencies {
- implementation(project(":feature:main"))
-
- implementation(libs.androidx.startup)
- implementation(libs.androidx.compose.material3)
- implementation(libs.timber)
- implementation(libs.coil.kt)
-}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b8ba5ab..f60b984 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -6,8 +6,10 @@
-
diff --git a/app/src/main/res/xml/backup_rules.xml b/app/src/main/res/xml/backup_rules.xml
new file mode 100644
index 0000000..fa0f996
--- /dev/null
+++ b/app/src/main/res/xml/backup_rules.xml
@@ -0,0 +1,13 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/xml/data_extraction_rules.xml b/app/src/main/res/xml/data_extraction_rules.xml
new file mode 100644
index 0000000..9ee9997
--- /dev/null
+++ b/app/src/main/res/xml/data_extraction_rules.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/build-logic/convention/build.gradle.kts b/build-logic/convention/build.gradle.kts
index 011b12c..f818f57 100644
--- a/build-logic/convention/build.gradle.kts
+++ b/build-logic/convention/build.gradle.kts
@@ -20,6 +20,7 @@ tasks.withType().configureEach {
dependencies {
compileOnly(libs.android.gradlePlugin)
compileOnly(libs.android.tools.common)
+ compileOnly(libs.compose.gradlePlugin)
compileOnly(libs.kotlin.gradlePlugin)
compileOnly(libs.ksp.gradlePlugin)
}
diff --git a/build-logic/convention/src/main/kotlin/brba.android.application.gradle.kts b/build-logic/convention/src/main/kotlin/brba.android.application.gradle.kts
index fad027e..3371540 100644
--- a/build-logic/convention/src/main/kotlin/brba.android.application.gradle.kts
+++ b/build-logic/convention/src/main/kotlin/brba.android.application.gradle.kts
@@ -2,6 +2,7 @@ import com.android.build.api.dsl.ApplicationExtension
import io.github.shinhyo.brba.buildlogic.configureAndroidCompose
import io.github.shinhyo.brba.buildlogic.configureHiltAndroid
import io.github.shinhyo.brba.buildlogic.configureKotlinAndroid
+import io.github.shinhyo.brba.buildlogic.findLibrary
import io.github.shinhyo.brba.buildlogic.findVersion
with(pluginManager) {
@@ -9,9 +10,58 @@ with(pluginManager) {
}
extensions.configure {
- defaultConfig.targetSdk = findVersion("targetSdkVer").toString().toInt()
-}
+ namespace = "io.github.shinhyo.brba"
+
+ defaultConfig.applicationId = "io.github.shinhyo.brba"
+ defaultConfig.targetSdk = findVersion("targetSdkVer").toInt()
+ defaultConfig.versionCode = findVersion("versionCode").toInt()
+ defaultConfig.versionName = findVersion("versionName")
+ defaultConfig.testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
+ defaultConfig.vectorDrawables.useSupportLibrary = true
+
+ buildFeatures.buildConfig = true
+
+ signingConfigs {
+ getByName("debug") {
+ storeFile = rootProject.file("debug.keystore")
+ storePassword = "android"
+ keyAlias = "androiddebugkey"
+ keyPassword = "android"
+ }
+ }
+
+ buildTypes {
+ getByName("debug") {
+ isDebuggable = false
+ }
+
+ getByName("release") {
+ isDebuggable = false
+ isShrinkResources = true
+ isMinifyEnabled = true
+ proguardFiles(
+ getDefaultProguardFile("proguard-android-optimize.txt"),
+ "proguard-rules.pro",
+ )
+ signingConfig = signingConfigs.getByName("debug")
+ }
+ }
+
+ packaging {
+ resources {
+ excludes += "/META-INF/{AL2.0,LGPL2.1}"
+ }
+ }
+
+ configureKotlinAndroid()
+ configureAndroidCompose()
+ configureHiltAndroid()
+
+ dependencies {
+ add("implementation", project(":feature:main"))
-configureKotlinAndroid()
-configureAndroidCompose()
-configureHiltAndroid()
+ add("implementation", findLibrary("androidx.startup"))
+ add("implementation", findLibrary("timber"))
+ add("implementation", findLibrary("coil.kt"))
+ }
+}
\ No newline at end of file
diff --git a/build-logic/convention/src/main/kotlin/io/github/shinhyo/brba/buildlogic/AndroidCompose.kt b/build-logic/convention/src/main/kotlin/io/github/shinhyo/brba/buildlogic/AndroidCompose.kt
index 197a443..eb58675 100644
--- a/build-logic/convention/src/main/kotlin/io/github/shinhyo/brba/buildlogic/AndroidCompose.kt
+++ b/build-logic/convention/src/main/kotlin/io/github/shinhyo/brba/buildlogic/AndroidCompose.kt
@@ -1,22 +1,33 @@
package io.github.shinhyo.brba.buildlogic
-
import org.gradle.api.Project
+import org.gradle.kotlin.dsl.assign
+import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.dependencies
+import org.jetbrains.kotlin.compose.compiler.gradle.ComposeCompilerGradlePluginExtension
internal fun Project.configureAndroidCompose() {
androidExtension.apply {
- buildFeatures {
- compose = true
+ with(plugins) {
+ apply("org.jetbrains.kotlin.plugin.compose")
}
- composeOptions {
- kotlinCompilerExtensionVersion = findVersion("androidxComposeCompiler").toString()
+ buildFeatures {
+ compose = true
}
dependencies {
val bom = libs.findLibrary("androidx-compose-bom").get()
add("implementation", platform(bom))
+ add("androidTestImplementation", platform(bom))
+ add("implementation", libs.findLibrary("androidx-compose-ui-tooling-preview").get())
+ add("debugImplementation", libs.findLibrary("androidx-compose-ui-tooling").get())
}
}
+
+ extensions.configure {
+ enableStrongSkippingMode = true
+ includeSourceInformation = true
+ }
}
+
diff --git a/build-logic/convention/src/main/kotlin/io/github/shinhyo/brba/buildlogic/Extension.kt b/build-logic/convention/src/main/kotlin/io/github/shinhyo/brba/buildlogic/Extension.kt
index 37873b3..e6e7336 100644
--- a/build-logic/convention/src/main/kotlin/io/github/shinhyo/brba/buildlogic/Extension.kt
+++ b/build-logic/convention/src/main/kotlin/io/github/shinhyo/brba/buildlogic/Extension.kt
@@ -23,6 +23,6 @@ internal val Project.androidExtension: CommonExtension<*, *, *, *, *, *>
internal val Project.libs
get(): VersionCatalog = extensions.getByType().named("libs")
-internal fun Project.findVersion(alias: String) = libs.findVersion(alias).get()
+internal fun Project.findVersion(alias: String) = libs.findVersion(alias).get().toString()
internal fun Project.findLibrary(alias: String) = libs.findLibrary(alias).get()
\ No newline at end of file
diff --git a/build-logic/convention/src/main/kotlin/io/github/shinhyo/brba/buildlogic/KotlinAndroid.kt b/build-logic/convention/src/main/kotlin/io/github/shinhyo/brba/buildlogic/KotlinAndroid.kt
index b7f3dd2..f03659d 100644
--- a/build-logic/convention/src/main/kotlin/io/github/shinhyo/brba/buildlogic/KotlinAndroid.kt
+++ b/build-logic/convention/src/main/kotlin/io/github/shinhyo/brba/buildlogic/KotlinAndroid.kt
@@ -2,18 +2,23 @@ package io.github.shinhyo.brba.buildlogic
import org.gradle.api.JavaVersion
import org.gradle.api.Project
+import org.gradle.kotlin.dsl.assign
+import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.dependencies
-import org.gradle.kotlin.dsl.withType
-import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+import org.gradle.kotlin.dsl.provideDelegate
+import org.jetbrains.kotlin.gradle.dsl.JvmTarget
+import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension
+import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension
+import org.jetbrains.kotlin.gradle.dsl.KotlinTopLevelExtension
internal fun Project.configureKotlinAndroid() {
pluginManager.apply("org.jetbrains.kotlin.android")
androidExtension.apply {
- compileSdk = findVersion("compileSdkVer").toString().toInt()
+ compileSdk = findVersion("compileSdkVer").toInt()
defaultConfig {
- minSdk = findVersion("minSdkVer").toString().toInt()
+ minSdk = findVersion("minSdkVer").toInt()
}
compileOptions {
@@ -23,34 +28,32 @@ internal fun Project.configureKotlinAndroid() {
}
}
- configureKotlin()
- configureDependencies()
+ configureKotlin()
}
-private fun Project.configureKotlin() {
- tasks.withType().configureEach {
- kotlinOptions {
- jvmTarget = JavaVersion.VERSION_17.toString()
- allWarningsAsErrors = properties["warningsAsErrors"] as? Boolean ?: false
- compilerOptions.freeCompilerArgs.addAll(
- "-P",
- "plugin:androidx.compose.compiler.plugins.kotlin:strongSkipping=true",
- )
- freeCompilerArgs = freeCompilerArgs + listOf(
+private inline fun Project.configureKotlin() = configure {
+ val warningsAsErrors: String? by project
+ when (this) {
+ is KotlinAndroidProjectExtension -> compilerOptions
+ is KotlinJvmProjectExtension -> compilerOptions
+ else -> TODO("Unsupported project extension $this ${T::class}")
+ }.apply {
+ jvmTarget = JvmTarget.JVM_17
+ allWarningsAsErrors = warningsAsErrors.toBoolean()
+ freeCompilerArgs.addAll(
+ listOf(
"-Xcontext-receivers",
"-opt-in=kotlin.RequiresOptIn",
"-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",
"-opt-in=androidx.compose.material3.ExperimentalMaterial3Api",
"-opt-in=androidx.compose.foundation.layout.ExperimentalLayoutApi",
"-opt-in=androidx.compose.animation.ExperimentalSharedTransitionApi",
- )
- }
+ ),
+ )
}
-}
-private fun Project.configureDependencies() {
dependencies {
add("coreLibraryDesugaring", findLibrary("android.desugarJdkLibs"))
add("implementation", findLibrary("kotlinx.coroutines.android"))
}
-}
+}
\ No newline at end of file
diff --git a/build.gradle.kts b/build.gradle.kts
index 95e184d..3774560 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -9,6 +9,7 @@ plugins {
alias(libs.plugins.android.application) apply false
alias(libs.plugins.android.library) apply false
alias(libs.plugins.kotlin.android) apply false
+ alias(libs.plugins.compose.compiler) apply false
alias(libs.plugins.hilt) apply false
alias(libs.plugins.ksp) apply false
}
diff --git a/feature/list/src/main/java/io/github/shinhyo/brba/feature/main/ListScreen.kt b/feature/list/src/main/java/io/github/shinhyo/brba/feature/main/ListScreen.kt
index 53790a9..47d6c3f 100644
--- a/feature/list/src/main/java/io/github/shinhyo/brba/feature/main/ListScreen.kt
+++ b/feature/list/src/main/java/io/github/shinhyo/brba/feature/main/ListScreen.kt
@@ -19,6 +19,7 @@ import android.content.res.Configuration
import androidx.compose.animation.AnimatedVisibilityScope
import androidx.compose.animation.SharedTransitionScope
import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.lazy.staggeredgrid.LazyVerticalStaggeredGrid
@@ -75,82 +76,135 @@ private fun SharedTransitionScope.ListScreen(
onFavoriteClick: (BrbaCharacter) -> Unit = {},
onChangeThemeClick: (BrbaThemeMode) -> Unit = {},
) {
- val hazeState: HazeState = remember { HazeState() }
+ val hazeState = remember { HazeState() }
Scaffold(
topBar = {
- BrbaTopAppBar(
+ ListTopAppBar(
hazeState = hazeState,
- actions = {
- when (uiState) {
- is ListUiState.Loading,
- is ListUiState.Error,
- -> {
- }
-
- is ListUiState.Success -> {
- if (uiState.themeMode != BrbaThemeMode.System) {
- val icTheme = if (uiState.themeMode == BrbaThemeMode.Light) {
- io.github.shinhyo.brba.core.designsystem.R.drawable.ic_theme_light
- } else {
- io.github.shinhyo.brba.core.designsystem.R.drawable.ic_theme_dark
- }
- IconButton(
- onClick = { onChangeThemeClick.invoke(uiState.themeMode) },
- ) {
- Icon(
- painterResource(id = icTheme),
- contentDescription = "ic_theme",
- tint = MaterialTheme.colorScheme.tertiary,
- )
- }
- }
- }
- }
- },
+ uiState = uiState,
+ onChangeThemeClick = onChangeThemeClick,
)
},
contentWindowInsets = WindowInsets(16.dp, 4.dp, 16.dp, 16.dp),
) { contentPadding ->
-
when (uiState) {
- is ListUiState.Loading -> {
- BrBaCircleProgress(modifier)
- }
+ is ListUiState.Loading -> LoadingContent()
+ is ListUiState.Error -> ErrorContent(uiState.exception)
+ is ListUiState.Success -> SuccessContent(
+ modifier = modifier,
+ animatedVisibilityScope = animatedVisibilityScope,
+ contentPadding = contentPadding,
+ hazeState = hazeState,
+ characters = uiState.characters,
+ onCharacterClick = onCharacterClick,
+ onFavoriteClick = onFavoriteClick,
+ )
+ }
+ }
+}
- is ListUiState.Error -> {
- uiState.exception?.printStackTrace()
+@Composable
+private fun ListTopAppBar(
+ hazeState: HazeState,
+ uiState: ListUiState,
+ onChangeThemeClick: (BrbaThemeMode) -> Unit,
+) {
+ BrbaTopAppBar(
+ hazeState = hazeState,
+ actions = {
+ if (uiState is ListUiState.Success) {
+ ThemeToggleButton(
+ themeMode = uiState.themeMode,
+ onClick = onChangeThemeClick,
+ )
}
+ },
+ )
+}
- is ListUiState.Success -> {
- LazyVerticalStaggeredGrid(
- horizontalArrangement = Arrangement.spacedBy(6.dp),
- verticalItemSpacing = 6.dp,
- contentPadding = contentPadding,
- columns = StaggeredGridCells.Adaptive(
- minSize = 100.dp,
- ),
- modifier = modifier
- .haze(
- state = hazeState,
- style = HazeDefaults.style(backgroundColor = MaterialTheme.colorScheme.surface),
- )
- .fillMaxSize(),
- ) {
- items(
- items = uiState.characters,
- key = { character -> character.charId },
- ) { character ->
- BrbaCharacterCard(
- modifier = Modifier,
- animatedVisibilityScope = animatedVisibilityScope,
- character = character,
- onCharacterClick = onCharacterClick,
- onFavoriteClick = onFavoriteClick,
- )
- }
- }
- }
+@Composable
+private fun LoadingContent() {
+ BrBaCircleProgress(Modifier.fillMaxSize())
+}
+
+@Composable
+private fun ErrorContent(exception: Throwable?) {
+ // Display error message
+}
+
+@Composable
+private fun SharedTransitionScope.SuccessContent(
+ modifier: Modifier,
+ animatedVisibilityScope: AnimatedVisibilityScope,
+ contentPadding: PaddingValues,
+ hazeState: HazeState,
+ characters: List,
+ onCharacterClick: (BrbaCharacter) -> Unit,
+ onFavoriteClick: (BrbaCharacter) -> Unit,
+) {
+ val columns = remember { StaggeredGridCells.Adaptive(minSize = 100.dp) }
+
+ LazyVerticalStaggeredGrid(
+ columns = columns,
+ horizontalArrangement = Arrangement.spacedBy(6.dp),
+ verticalItemSpacing = 6.dp,
+ contentPadding = contentPadding,
+ modifier = modifier
+ .haze(
+ state = hazeState,
+ style = HazeDefaults.style(backgroundColor = MaterialTheme.colorScheme.surface),
+ )
+ .fillMaxSize(),
+ ) {
+ items(
+ items = characters,
+ key = { it.charId },
+ contentType = { "character" },
+ ) { character ->
+ CharacterCard(
+ animatedVisibilityScope = animatedVisibilityScope,
+ character = character,
+ onCharacterClick = onCharacterClick,
+ onFavoriteClick = onFavoriteClick,
+ )
+ }
+ }
+}
+
+@Composable
+private fun SharedTransitionScope.CharacterCard(
+ animatedVisibilityScope: AnimatedVisibilityScope,
+ character: BrbaCharacter,
+ onCharacterClick: (BrbaCharacter) -> Unit,
+ onFavoriteClick: (BrbaCharacter) -> Unit,
+) {
+ BrbaCharacterCard(
+ modifier = Modifier,
+ animatedVisibilityScope = animatedVisibilityScope,
+ character = character,
+ onCharacterClick = onCharacterClick,
+ onFavoriteClick = onFavoriteClick,
+ )
+}
+
+@Composable
+private fun ThemeToggleButton(
+ themeMode: BrbaThemeMode,
+ onClick: (BrbaThemeMode) -> Unit,
+) {
+ if (themeMode != BrbaThemeMode.System) {
+ val iconRes = if (themeMode == BrbaThemeMode.Light) {
+ io.github.shinhyo.brba.core.designsystem.R.drawable.ic_theme_light
+ } else {
+ io.github.shinhyo.brba.core.designsystem.R.drawable.ic_theme_dark
+ }
+ IconButton(onClick = { onClick(themeMode) }) {
+ Icon(
+ painter = painterResource(id = iconRes),
+ contentDescription = "Change theme",
+ tint = MaterialTheme.colorScheme.tertiary,
+ )
}
}
}
diff --git a/app/src/main/res/values-night/themes.xml b/feature/main/src/main/res/values-night/themes.xml
similarity index 100%
rename from app/src/main/res/values-night/themes.xml
rename to feature/main/src/main/res/values-night/themes.xml
diff --git a/app/src/main/res/values/themes.xml b/feature/main/src/main/res/values/themes.xml
similarity index 100%
rename from app/src/main/res/values/themes.xml
rename to feature/main/src/main/res/values/themes.xml
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 7526a13..957feb4 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -1,32 +1,33 @@
[versions]
+versionCode = "1"
+versionName = "1.0.0"
compileSdkVer = "34"
targetSdkVer = "34"
minSdkVer = "28"
-androidGradlePlugin = "8.4.0"
-androidTools = "31.4.0"
+androidGradlePlugin = "8.5.1"
+androidTools = "31.5.1"
-kotlin = "1.9.23"
-#https://github.com/google/ksp/releases
-ksp = "1.9.23-1.0.20"
-#https://developer.android.com/jetpack/androidx/releases/compose-kotlin
-androidxComposeCompiler = "1.5.13"
+# https://github.com/JetBrains/kotlin/releases
+kotlin = "2.0.10-RC"
+# https://github.com/google/ksp/releases
+ksp = "2.0.10-RC-1.0.23"
androidDesugarJdkLibs = "2.0.4"
-kotlinxCoroutines = "1.8.0"
+kotlinxCoroutines = "1.8.1"
androidxCore = "1.13.1"
androidxCoreSplashscreen = "1.0.1"
-androidxAppCompat = "1.6.1"
-androidxActivity = "1.9.0"
+androidxAppCompat = "1.7.0"
+androidxActivity = "1.9.1"
androidxStartup = "1.1.1"
androidxHiltNavigationCompose = "1.2.0"
androidxConstraintlayoutCompose = "1.0.1"
-androidxLifecycle = "2.7.0"
+androidxLifecycle = "2.8.4"
androidxDataStore = "1.1.1"
-androidxComposeBom = "2024.05.00"
-androidxCompose = "1.7.0-alpha08"
+androidxComposeBom = "2024.06.00"
+androidxCompose = "1.7.0-beta06"
androidxComposeMaterial3 = "1.1.2"
hilt = "2.51.1"
@@ -35,9 +36,9 @@ hiltExt = "1.0.0"
androidxNavigation = "2.7.7"
junit4 = "4.13.2"
-androidxTestCore = "1.5.0"
-androidxTestExt = "1.1.5"
-androidxEspresso = "3.5.1"
+androidxTestCore = "1.6.1"
+androidxTestExt = "1.2.1"
+androidxEspresso = "3.6.1"
coil = "2.6.0"
javaxInject = "1"
@@ -47,7 +48,7 @@ retrofit = "2.11.0"
gson = "2.10.1"
room = "2.6.1"
turbine = "1.1.0"
-junit = "1.1.5"
+junit = "1.2.1"
material = "1.12.0"
haze = "0.7.1"
@@ -63,6 +64,7 @@ android-gradlePlugin = { group = "com.android.tools.build", name = "gradle", ver
android-tools-common = { group = "com.android.tools", name = "common", version.ref = "androidTools" }
kotlin-gradlePlugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" }
ksp-gradlePlugin = { group = "com.google.devtools.ksp", name = "com.google.devtools.ksp.gradle.plugin", version.ref = "ksp" }
+compose-gradlePlugin = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" }
# android
android-desugarJdkLibs = { group = "com.android.tools", name = "desugar_jdk_libs", version.ref = "androidDesugarJdkLibs" }
@@ -133,6 +135,7 @@ haze = { group = "dev.chrisbanes.haze", name = "haze", version.ref = "haze" }
[plugins]
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
+compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
android-application = { id = "com.android.application", version.ref = "androidGradlePlugin" }
android-library = { id = "com.android.library", version.ref = "androidGradlePlugin" }
hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" }
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index c3b331f..d4bf247 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Fri Sep 29 07:27:22 KST 2023
+#Tue Jun 25 15:56:57 KST 2024
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists