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

Develop -> Main #115

Merged
merged 22 commits into from
Aug 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
12f3b74
Added jetpack viewmodel
VictorKabata Jul 22, 2024
30c2081
Migrate all viewmodel to jetpack viewmodel
VictorKabata Jul 22, 2024
bc79615
Migrate singleton viewmodel to koin viewmodel
VictorKabata Jul 22, 2024
504254a
Added jetpack navigation lib
VictorKabata Jul 22, 2024
0e0bc3f
Migrate to jetpack navigation
VictorKabata Jul 22, 2024
8ed2382
Migrate navigation to jetpack navigation
VictorKabata Jul 22, 2024
195a451
Replaced image loader with coil
VictorKabata Jul 22, 2024
8f7ba28
Set up memory cache for coil
VictorKabata Jul 22, 2024
b594f23
Added coil lib to project
VictorKabata Jul 22, 2024
475db30
Added coroutines support for swing
VictorKabata Jul 22, 2024
8977607
Move to jetpack viewmodel
VictorKabata Jul 22, 2024
d8cb05e
Moved home screen code to vm init block
VictorKabata Jul 22, 2024
97c8838
Linting
VictorKabata Jul 22, 2024
921a2f5
Update jvmMain to desktopMain
VictorKabata Jul 22, 2024
5dd8174
Merge pull request #113 from VictorKabata/ktx_viewmodel
VictorKabata Jul 22, 2024
292ffde
Added datastore preferences lib
VictorKabata Jul 24, 2024
59dcdbc
Created datastore factory
VictorKabata Jul 24, 2024
f616f7d
Added datastore factory to koin module
VictorKabata Jul 24, 2024
f1eecee
Set up dataStore in settings repository
VictorKabata Jul 24, 2024
aa908f4
Added dataStore file name to constants
VictorKabata Jul 24, 2024
646edea
Removed multiplatform settings
VictorKabata Jul 24, 2024
009e04c
Merge pull request #114 from VictorKabata/ktx-datastore
VictorKabata Jul 24, 2024
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
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
Loading