Skip to content

Commit

Permalink
Merge pull request #115 from VictorKabata/develop
Browse files Browse the repository at this point in the history
Develop -> Main
  • Loading branch information
VictorKabata committed Aug 1, 2024
2 parents 3a24e6f + 009e04c commit b26c47d
Show file tree
Hide file tree
Showing 47 changed files with 349 additions and 499 deletions.
4 changes: 1 addition & 3 deletions appiOS/Notflix/Koin.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,7 @@ extension KoinApplication {
}

extension KoinApplication {
private static let keyPaths: [PartialKeyPath<Koin>] = [
\.homeViewModel

private static let keyPaths: [PartialKeyPath<Koin>] = [
]

static func inject<T>() -> T {
Expand Down
38 changes: 21 additions & 17 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"
datastore = "1.1.1"

#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,12 @@ 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"}
datastore-preferences = { module = "androidx.datastore:datastore-preferences-core", version.ref = "datastore" }
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 @@ -97,21 +97,21 @@ sqlDelight-native = { module = "app.cash.sqldelight:native-driver", version.ref
sqlDelight-JVM = { module = "app.cash.sqldelight:sqlite-driver", version.ref = "sqlDelight" }
napier = { module = "io.github.aakira:napier", version.ref = "napier" }
kotlinX-dateTime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinxDateTime" }
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 +133,8 @@ 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"]
Binary file added notflix.preferences_pb
Binary file not shown.
26 changes: 12 additions & 14 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,32 +50,28 @@ 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)

api(libs.napier)

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

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

implementation(libs.sqlDelight.coroutine)

implementation(libs.datastore.preferences)

// implementation(libs.material.windowSizeClass)
}

Expand All @@ -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
4 changes: 2 additions & 2 deletions shared/src/androidMain/kotlin/com/vickbt/shared/di/Module.kt
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package com.vickbt.shared.di

import com.vickbt.shared.utils.DatabaseDriverFactory
import com.vickbt.shared.utils.MultiplatformSettingsWrapper
import com.vickbt.shared.utils.DatastoreFactory
import org.koin.core.module.Module
import org.koin.dsl.module

actual fun platformModule(): Module = module {
single { DatabaseDriverFactory(context = get()) }
single { MultiplatformSettingsWrapper().createSettings() }
single { DatastoreFactory(context = get()).createDatastore() }
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.vickbt.shared.utils

import android.content.Context
import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.Preferences
import com.vickbt.shared.domain.utils.Constants

actual class DatastoreFactory(private val context: Context) {
actual fun createDatastore(): DataStore<Preferences> {
return initDataStore {
context.filesDir.resolve(Constants.dataStoreFileName).absolutePath
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,25 +1,34 @@
package com.vickbt.shared.data.datasources

import com.russhwolf.settings.ExperimentalSettingsApi
import com.russhwolf.settings.ObservableSettings
import com.russhwolf.settings.coroutines.getIntFlow
import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.Preferences
import androidx.datastore.preferences.core.edit
import androidx.datastore.preferences.core.intPreferencesKey
import com.vickbt.shared.domain.repositories.SettingsRepository
import com.vickbt.shared.domain.utils.Constants.KEY_IMAGE_QUALITY
import com.vickbt.shared.domain.utils.Constants.KEY_THEME
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map

@ExperimentalSettingsApi
class SettingsRepositoryImpl(private val observableSettings: ObservableSettings) :
SettingsRepository {
class SettingsRepositoryImpl(
private val dataStore: DataStore<Preferences>
) : SettingsRepository {

override suspend fun savePreferenceSelection(key: String, selection: Int) =
observableSettings.putInt(key = key, value = selection)
override suspend fun savePreferenceSelection(key: String, selection: Int) {
dataStore.edit { preferences ->
preferences[intPreferencesKey(key)] = selection
}
}

override suspend fun getThemePreference(): Flow<Int> {
return observableSettings.getIntFlow(key = KEY_THEME, defaultValue = 2)
return dataStore.data.map { preferences ->
preferences[intPreferencesKey(KEY_THEME)] ?: 2
}
}

override suspend fun getImageQualityPreference(): Flow<Int> {
return observableSettings.getIntFlow(key = KEY_IMAGE_QUALITY, defaultValue = 1)
return dataStore.data.map { preferences ->
preferences[intPreferencesKey(KEY_IMAGE_QUALITY)] ?: 1
}
}
}
21 changes: 10 additions & 11 deletions shared/src/commonMain/kotlin/com/vickbt/shared/di/CommonModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@ 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.settings.SettingsViewModel
import com.vickbt.shared.ui.screens.details.DetailsViewModel
import com.vickbt.shared.ui.screens.favorites.FavoritesViewModel
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 io.github.aakira.napier.DebugAntilog
import io.github.aakira.napier.Napier
import io.ktor.client.HttpClient
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 @@ -85,13 +84,13 @@ fun commonModule(enableNetworkLogs: Boolean) = module {
MovieDetailsRepositoryImpl(httpClient = get(), favoriteMovieDao = get())
}
single<FavoritesRepository> { FavoritesRepositoryImpl(favoriteMovieDao = get()) }
single<SettingsRepository> { SettingsRepositoryImpl(observableSettings = get()) }
single<SettingsRepository> { SettingsRepositoryImpl(dataStore = 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
13 changes: 0 additions & 13 deletions shared/src/commonMain/kotlin/com/vickbt/shared/di/Koin.kt
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
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.settings.SettingsViewModel
import org.koin.core.Koin
import org.koin.core.KoinApplication
import org.koin.core.context.startKoin
import org.koin.dsl.KoinAppDeclaration
Expand All @@ -18,12 +14,3 @@ fun initKoin(enableNetworkLogs: Boolean = true, appDeclaration: KoinAppDeclarati
// fun initKoin() = initKoin(enableNetworkLogs = false) {}

fun KoinApplication.Companion.start(): KoinApplication = initKoin { }

val Koin.mainViewModel: MainViewModel
get() = get()

val Koin.homeViewModel: HomeViewModel
get() = get()

val Koin.settingsViewModel: SettingsViewModel
get() = get()
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,6 @@ object Constants {
const val KEY_THEME = "theme"
const val KEY_LANGUAGE = "language"
const val KEY_IMAGE_QUALITY = "image_quality"

internal const val dataStoreFileName = "notflix.preferences_pb"
}
Loading

0 comments on commit b26c47d

Please sign in to comment.