Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrate to some Jetpack libs #113

Merged
merged 14 commits into from
Jul 22, 2024
33 changes: 20 additions & 13 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,22 @@ nativeCocoapod = "1.9.0"
# Kotlin Multiplatform Version
kotlinxCoroutines = "1.7.3"
koinCore = "3.5.3"
koinCompose = "1.1.2"
koinCompose = "1.1.5"
koinComposeViewModel = "1.2.0-Beta4"
koinAndroid = "3.5.3"
koinAndroidxCompose = "3.5.3"
composeMultiplatform = "1.5.11"
kotlinxSerializationJson = "1.6.2"
kotlinxDateTime = "0.5.0"
napier = "2.6.1"
ktor = "2.3.7"
sqlDelight = "2.0.1"
multiplatformSettings = "1.1.1"
kmpNativeCoroutines = "0.12.1-new-mm"
buildKonfig = "0.13.3"
kover = "0.6.1"
preCompose = "1.5.10"
imageLoader = "1.7.1"
materialWindowSizeClass = "0.3.0"
navigation = "2.7.0-alpha07"
coil = "3.0.0-alpha06"

#Android Versions
androidxActivity = "1.8.2"
Expand All @@ -50,7 +51,6 @@ espresso = "3.5.1"
test = "1.5.0"
archTestCore = "2.2.0"
turbine = "0.12.3"
composeMultiplatform = "1.5.11"

[plugins]
ktLint = { id = "org.jlleitschuh.gradle.ktlint", version.ref = "ktLint" }
Expand All @@ -64,7 +64,6 @@ android-library = { id = "com.android.library", version.ref = "gradle" }
android-application = { id = "com.android.application", version.ref = "gradle" }
jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
kotlinX-serialization-plugin = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
kmp-NativeCoroutines-plugin = { id = "com.rickclephas.kmp.nativecoroutines", version.ref = "kmpNativeCoroutines" }
buildKonfig = { id = "com.codingfeline.buildkonfig", version.ref = "buildKonfig" }
compose = { id = "org.jetbrains.compose", version.ref = "composeMultiplatform" }
sqlDelight = { id = "app.cash.sqldelight", version.ref = "sqlDelight" }
Expand All @@ -77,11 +76,11 @@ firebase-performance-plugin = { id = "com.google.firebase.firebase-perf", versio

[libraries]
#Kotlin Multiplatform Lib Dependencies
kotlinX-coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinxCoroutines" }
coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinxCoroutines" }
coroutines-swing={module="org.jetbrains.kotlinx:kotlinx-coroutines-swing", version.ref="coroutines"}
koin-core = { module = "io.insert-koin:koin-core", version.ref = "koinCore" }
kotlinX-serializationJson = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerializationJson" }
ktor-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor" }
ktor-serialization = { module = "io.ktor:ktor-client-serialization", version.ref = "ktor" }
ktor-contentNegotiation = { module = "io.ktor:ktor-client-content-negotiation", version.ref = "ktor" }
ktor-json = { module = "io.ktor:ktor-serialization-kotlinx-json", version.ref = "ktor" }
ktor-logging = { module = "io.ktor:ktor-client-logging", version.ref = "ktor" }
Expand All @@ -100,18 +99,21 @@ kotlinX-dateTime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.
multiplatformSettings-noArg = { module = "com.russhwolf:multiplatform-settings-no-arg", version.ref = "multiplatformSettings" }
multiplatformSettings-coroutines = { module = "com.russhwolf:multiplatform-settings-coroutines", version.ref = "multiplatformSettings" }
multiplatformSettings-test = { module = "com.russhwolf:multiplatform-settings-test", version.ref = "multiplatformSettings" }
imageLoader = { module = "io.github.qdsfdhvh:image-loader", version.ref = "imageLoader" }
preCompose = { module = "moe.tlaster:precompose", version.ref = "preCompose" }
preCompose-viewmodel = { module = "moe.tlaster:precompose-viewmodel", version.ref = "preCompose" }
material-windowSizeClass = { module = "dev.chrisbanes.material3:material3-window-size-class-multiplatform", version.ref = "materialWindowSizeClass" }
navigation = { module = "org.jetbrains.androidx.navigation:navigation-compose", version.ref = "navigation" }
coil-compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coil" }
coil-compose-core = { module = "io.coil-kt.coil3:coil-compose-core", version.ref = "coil" }
coil-ktor = { module = "io.coil-kt.coil3:coil-network-ktor", version.ref = "coil" }
coil-multiplatform = { module = "io.coil-kt.coil3:coil", version.ref = "coil" }

#Android Lib Dependencies
androidX-core = { module = "androidx.core:core-ktx", version.ref = "androidxCore" }
androidX-activity={module="androidx.activity:activity-compose", version.ref="androidxActivity"}
androidX-activity = { module = "androidx.activity:activity-compose", version.ref = "androidxActivity" }
material = { module = "com.google.android.material:material", version.ref = "material" }
koin-android = { module = "io.insert-koin:koin-android", version.ref = "koinAndroid" }
koin-androidx-compose = { module = "io.insert-koin:koin-androidx-compose", version.ref = "koinAndroidxCompose" }
koin-compose = { module = "io.insert-koin:koin-compose", version.ref = "koinCompose" }
koin-composeViewModel = { module = "io.insert-koin:koin-compose-viewmodel", version.ref = "koinComposeViewModel" }
leakCanary = { module = "com.squareup.leakcanary:leakcanary-android", version.ref = "leakCanary" }
firebase-BOM = { module = "com.google.firebase:firebase-bom", version.ref = "firebaseBOM" }
firebase-analytics = { module = "com.google.firebase:firebase-analytics-ktx" }
Expand All @@ -133,4 +135,9 @@ test-core = { module = "androidx.test:core-ktx", version.ref = "test" }
archTestCore = { module = "androidx.arch.core:core-testing", version.ref = "archTestCore" }
test-rules = { module = "androidx.test:rules", version.ref = "test" }
test-runner = { module = "androidx.test:runner", version.ref = "test" }
turbine = { module = "app.cash.turbine:turbine", version.ref = "turbine" }
turbine = { module = "app.cash.turbine:turbine", version.ref = "turbine" }

[bundles]
ktor = ["ktor-core", "ktor-contentNegotiation", "ktor-json", "ktor-logging"]
coil = ["coil-compose-core", "coil-compose", "coil-ktor", "coil-multiplatform"]
multiplatformSettings = ["multiplatformSettings-coroutines", "multiplatformSettings-noArg"]
24 changes: 11 additions & 13 deletions shared/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ kotlin {
}
iosTarget("ios") {}

jvm()
jvm("desktop")

cocoapods {
summary = "Some description for the Shared Module"
Expand All @@ -50,29 +50,25 @@ kotlin {
api(compose.components.resources)
api(compose.materialIconsExtended)

implementation(libs.kotlinX.coroutines)
implementation(libs.coroutines)

api(libs.ktor.core)
implementation(libs.ktor.contentNegotiation)
implementation(libs.ktor.json)
implementation(libs.ktor.logging)
implementation(libs.bundles.ktor)

api(libs.koin.core)
implementation(libs.koin.compose)
implementation(libs.koin.composeViewModel)

implementation(libs.kotlinX.serializationJson)

implementation(libs.kotlinX.dateTime)

implementation(libs.multiplatformSettings.noArg)
implementation(libs.multiplatformSettings.coroutines)
implementation(libs.bundles.multiplatformSettings)

api(libs.napier)

implementation(libs.imageLoader)
implementation(libs.bundles.coil)

api(libs.preCompose)
api(libs.preCompose.viewmodel)
implementation(libs.navigation)

implementation(libs.sqlDelight.coroutine)

Expand Down Expand Up @@ -101,11 +97,13 @@ kotlin {

sourceSets["iosTest"].dependencies {}

sourceSets["jvmMain"].dependencies {
sourceSets["desktopMain"].dependencies {
implementation(libs.ktor.java)
implementation(libs.sqlDelight.jvm)
implementation(libs.coroutines.swing)
}

sourceSets["jvmTest"].dependencies {}
sourceSets["desktopTest"].dependencies {}
}
}

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ import com.vickbt.shared.domain.repositories.MoviesRepository
import com.vickbt.shared.domain.repositories.SettingsRepository
import com.vickbt.shared.domain.utils.Constants.BASE_URL
import com.vickbt.shared.domain.utils.Constants.URL_PATH
import com.vickbt.shared.presentation.ui.screens.home.HomeViewModel
import com.vickbt.shared.presentation.ui.screens.main.MainViewModel
import com.vickbt.shared.ui.screens.home.HomeViewModel
import com.vickbt.shared.ui.screens.main.MainViewModel
import com.vickbt.shared.ui.screens.settings.SettingsViewModel
import com.vickbt.shared.ui.screens.details.DetailsViewModel
import com.vickbt.shared.ui.screens.favorites.FavoritesViewModel
Expand All @@ -30,9 +30,8 @@ import io.ktor.http.URLProtocol
import io.ktor.http.path
import io.ktor.serialization.kotlinx.json.json
import kotlinx.serialization.json.Json
import org.koin.compose.viewmodel.dsl.viewModelOf
import org.koin.core.module.Module
import org.koin.core.module.dsl.factoryOf
import org.koin.core.module.dsl.singleOf
import org.koin.dsl.module

fun commonModule(enableNetworkLogs: Boolean) = module {
Expand Down Expand Up @@ -87,11 +86,11 @@ fun commonModule(enableNetworkLogs: Boolean) = module {
single<FavoritesRepository> { FavoritesRepositoryImpl(favoriteMovieDao = get()) }
single<SettingsRepository> { SettingsRepositoryImpl(observableSettings = get()) }

singleOf(::MainViewModel)
singleOf(::HomeViewModel)
factoryOf(::DetailsViewModel)
singleOf(::SettingsViewModel)
singleOf(::FavoritesViewModel)
viewModelOf(::MainViewModel)
viewModelOf(::HomeViewModel)
viewModelOf(::DetailsViewModel)
viewModelOf(::SettingsViewModel)
viewModelOf(::FavoritesViewModel)
}

expect fun platformModule(): Module
4 changes: 2 additions & 2 deletions shared/src/commonMain/kotlin/com/vickbt/shared/di/Koin.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.vickbt.shared.di

import com.vickbt.shared.presentation.ui.screens.home.HomeViewModel
import com.vickbt.shared.presentation.ui.screens.main.MainViewModel
import com.vickbt.shared.ui.screens.home.HomeViewModel
import com.vickbt.shared.ui.screens.main.MainViewModel
import com.vickbt.shared.ui.screens.settings.SettingsViewModel
import org.koin.core.Koin
import org.koin.core.KoinApplication
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,16 @@ import androidx.compose.material3.NavigationBarItem
import androidx.compose.material3.NavigationBarItemDefaults
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.ui.Modifier
import com.vickbt.shared.presentation.ui.navigation.NavigationItem
import androidx.navigation.NavHostController
import androidx.navigation.compose.currentBackStackEntryAsState
import com.vickbt.shared.ui.navigation.NavigationItem
import com.vickbt.shared.ui.theme.Gray
import moe.tlaster.precompose.navigation.Navigator

@Composable
fun BottomNavBar(
modifier: Modifier = Modifier,
navigator: Navigator,
navHostController: NavHostController,
bottomNavItems: List<NavigationItem>
) {
NavigationBar(
Expand All @@ -27,7 +27,7 @@ fun BottomNavBar(
bottomNavItems.iterator().forEach { item ->

val currentDestination =
navigator.currentEntry.collectAsState(null).value?.route?.route
navHostController.currentBackStackEntryAsState().value?.destination?.route
val isSelected = item.route == currentDestination

NavigationBarItem(
Expand All @@ -45,7 +45,7 @@ fun BottomNavBar(
),
selected = isSelected,
onClick = {
if (item.route != currentDestination) navigator.navigate(route = item.route)
if (item.route != currentDestination) navHostController.navigate(route = item.route)
}
)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.vickbt.shared.ui.components

import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.size
Expand All @@ -17,10 +16,9 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.seiko.imageloader.rememberImagePainter
import coil3.compose.AsyncImage
import com.vickbt.shared.domain.models.Actor
import com.vickbt.shared.ui.theme.TextSecondary
import com.vickbt.shared.utils.commonImageLoader
import com.vickbt.shared.utils.loadImage

@Composable
Expand All @@ -30,16 +28,12 @@ fun ItemMovieCast(modifier: Modifier = Modifier, actor: Actor) {
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(space = 1.dp)
) {
commonImageLoader {
val painter = rememberImagePainter(actor.profilePath?.loadImage() ?: "")

Image(
modifier = Modifier.size(80.dp).clip(CircleShape),
painter = painter,
contentDescription = "Cast",
contentScale = ContentScale.Crop
)
}
AsyncImage(
modifier = Modifier.size(80.dp).clip(CircleShape),
model = actor.profilePath?.loadImage(),
contentDescription = "Cast",
contentScale = ContentScale.Crop,
)

Text(
modifier = Modifier.width(78.dp),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.vickbt.shared.ui.components

import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
Expand All @@ -26,9 +25,8 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.seiko.imageloader.rememberImagePainter
import coil3.compose.AsyncImage
import com.vickbt.shared.domain.models.MovieDetails
import com.vickbt.shared.utils.commonImageLoader
import com.vickbt.shared.utils.loadImage

@Composable
Expand All @@ -45,19 +43,15 @@ fun MovieCardDescription(
Card(modifier = modifier.clickable { onItemClick(movie) }) {
Box {
//region Movie Cover Image
commonImageLoader {
val painter = rememberImagePainter(movie.backdropPath?.loadImage() ?: "")

Image(
modifier = Modifier
.fillMaxSize()
.align(Alignment.Center),
alignment = Alignment.Center,
contentScale = ContentScale.Crop,
painter = painter,
contentDescription = null
)
}
AsyncImage(
modifier = Modifier
.fillMaxSize()
.align(Alignment.Center),
model = movie.backdropPath?.loadImage(),
contentDescription = null,
contentScale = ContentScale.Crop,
alignment = Alignment.Center,
)
//endregion

//region Fading Edge Box
Expand Down
Loading
Loading