From 4a77a80f97fff1e67c399b34b46ebed6400a52ca Mon Sep 17 00:00:00 2001 From: michaelbel Date: Sun, 21 Jul 2024 14:50:45 +0300 Subject: [PATCH] iOS app --- .gitignore | 1 + core/analytics/build.gradle.kts | 6 +- .../di/MoviesAnalyticsKoinModule.desktop.kt | 0 .../analytics/impl/MoviesAnalyticsImpl.kt | 0 core/common/build.gradle.kts | 11 ++- .../movies/common/browser/Browser.desktop.kt | 0 .../dispatchers/UiDispatcher.desktop.kt | 0 .../common/ktx/SavedStateHandleKtx.desktop.kt | 0 .../movies/common/log/Logger.desktop.kt | 0 .../movies/common/viewmodel/BaseViewModel.kt | 0 core/interactor/build.gradle.kts | 5 +- .../interactor/MovieBlockingInteractor.kt | 0 .../InteractorBlockingKoinModule.desktop.kt | 0 .../di/InteractorLocaleKoinModule.desktop.kt | 0 .../interactor/impl/LocaleInteractorImpl.kt | 0 .../impl/MovieBlockingInteractorImpl.kt | 0 core/navigation/build.gradle.kts | 5 +- core/network/build.gradle.kts | 7 +- .../network/config/Interceptor.desktop.kt | 0 .../network/config/TmdbConfig.desktop.kt | 0 .../network/connectivity/NetworkManager.kt | 0 .../network/ktor/di/KtorKoinModule.desktop.kt | 0 core/notifications/build.gradle.kts | 2 +- core/persistence/build.gradle.kts | 11 +-- .../persistence/database/db/AppDatabase.kt | 2 +- .../database/di/DatabaseKoinModule.ios.kt | 13 ++- .../database/MovieBlockingPersistence.kt | 0 .../persistence/database/MoviesDatabase.kt | 0 .../database/dao/MovieBlockingDao.kt | 0 .../database/di/DatabaseKoinModule.desktop.kt | 0 .../di/MoviesDatabaseKoinModule.desktop.kt | 0 .../PersistenceBlockingKoinModule.desktop.kt | 0 .../di/DataStoreKoinModule.desktop.kt | 0 core/platform-services/foss/build.gradle.kts | 6 +- .../impl/analytics/AnalyticsServiceImpl.kt | 0 .../platform/impl/review/ReviewServiceImpl.kt | 0 .../platform/impl/update/UpdateServiceImpl.kt | 0 core/platform-services/gms/build.gradle.kts | 5 +- core/platform-services/hms/build.gradle.kts | 5 +- .../inject-android/build.gradle.kts | 7 +- .../inject-desktop/build.gradle.kts | 4 +- .../inject-ios/build.gradle.kts | 2 - .../interactor/build.gradle.kts | 4 +- .../platform/analytics/AnalyticsService.kt | 0 .../movies/platform/review/ReviewService.kt | 0 .../movies/platform/update/UpdateService.kt | 0 core/repository/build.gradle.kts | 3 +- .../repository/MovieBlockingRepository.kt | 0 .../RepositoryBlockingKoinModule.desktop.kt | 0 .../impl/MovieBlockingRepositoryImpl.kt | 0 .../movies/repository/ktx/BuildKtx.desktop.kt | 0 .../repository/ktx/ExceptionKtx.desktop.kt | 0 core/ui/build.gradle.kts | 30 ++++--- .../ui/compose/page/PageContent.desktop.kt | 0 .../ui/compose/page/PageFailure.desktop.kt | 0 .../ui/compose/page/PageLoading.desktop.kt | 0 .../movies/ui/ktx/ConfigurationKtx.desktop.kt | 0 .../ui/ktx/LazyPagingItemsKtx.desktop.kt | 0 .../movies/ui/ktx/LifecycleKtx.desktop.kt | 0 .../movies/ui/ktx/WindowInsetsKtx.desktop.kt | 0 .../movies/ui/theme/Theme.desktop.kt | 0 core/widget/build.gradle.kts | 5 +- core/work/build.gradle.kts | 3 +- desktopApp/build.gradle.kts | 9 --- .../org/michaelbel/movies/di/AppKoinModule.kt | 2 +- desktopApp/user_preferences.preferences_pb | Bin 146 -> 0 bytes feature/account-impl/build.gradle.kts | 11 +-- .../movies/account/ui/AccountRoute.ios.kt | 11 ++- .../movies/account/AccountViewModel.kt | 0 .../account/di/AccountKoinModule.desktop.kt | 0 .../movies/account/ui/AccountRoute.desktop.kt | 0 feature/account/build.gradle.kts | 6 +- .../account/AccountNavigation.desktop.kt | 0 feature/auth-impl/build.gradle.kts | 13 +-- .../movies/auth/ui/AuthRoute.ios.kt | 9 ++- .../michaelbel/movies/auth/AuthViewModel.kt | 0 .../movies/auth/di/AuthKoinModule.desktop.kt | 0 .../movies/auth/ui/AuthRoute.desktop.kt | 0 feature/auth/build.gradle.kts | 7 +- .../movies/auth/AuthNavigation.desktop.kt | 0 .../movies/auth/Settings.desktop.kt | 0 feature/debug-impl/build.gradle.kts | 1 - feature/details-impl/build.gradle.kts | 14 +--- .../movies/details/DetailsViewModel.kt | 2 +- .../movies/details/ui/DetailsRoute.ios.kt | 15 +++- .../movies/details/DetailsViewModel.kt | 0 .../details/di/DetailsKoinModule.desktop.kt | 0 .../details/ui/DetailsContent.desktop.kt | 0 .../details/ui/DetailsLoading.desktop.kt | 0 .../movies/details/ui/DetailsRoute.desktop.kt | 0 .../ui/DetailsScreenContent.desktop.kt | 0 feature/details/build.gradle.kts | 7 +- .../details/DetailsNavigation.desktop.kt | 0 feature/feed-impl/build.gradle.kts | 18 +---- .../movies/feed/ui/FeedRoute.desktop.kt | 17 ++-- .../michaelbel/movies/feed/FeedViewModel.kt | 0 .../movies/feed/di/FeedKoinModule.desktop.kt | 0 .../movies/feed/ui/FeedRoute.desktop.kt | 0 .../feed/ui/FeedScreenContent.desktop.kt | 0 feature/feed/build.gradle.kts | 7 +- .../movies/feed/FeedNavigation.desktop.kt | 0 feature/gallery-impl/build.gradle.kts | 12 +-- .../movies/gallery/ui/GalleryRoute.ios.kt | 4 +- .../movies/gallery/GalleryViewModel.kt | 0 .../gallery/di/GalleryKoinModule.desktop.kt | 0 .../movies/gallery/ui/GalleryRoute.desktop.kt | 0 feature/gallery/build.gradle.kts | 7 +- .../gallery/GalleryNavigation.desktop.kt | 0 feature/main-impl/build.gradle.kts | 6 +- .../movies/main/MainContent.desktop.kt | 0 .../michaelbel/movies/main/MainViewModel.kt | 0 .../movies/main/di/MainKoinModule.desktop.kt | 0 feature/search-impl/build.gradle.kts | 14 +--- .../movies/search/ui/SearchRoute.ios.kt | 4 +- .../movies/search/SearchViewModel.kt | 0 .../search/di/SearchKoinModule.desktop.kt | 0 .../movies/search/ui/SearchRoute.desktop.kt | 0 feature/search/build.gradle.kts | 7 +- .../movies/search/SearchNavigation.desktop.kt | 0 feature/settings-impl/build.gradle.kts | 14 +--- .../movies/settings/ui/SettingsRoute.ios.kt | 42 +++++++--- .../movies/settings/SettingsViewModel.kt | 0 .../settings/di/SettingsKoinModule.desktop.kt | 0 .../settings/ktx/GenderStringKtx.desktop.kt | 0 .../movies/settings/model/Features.desktop.kt | 0 .../settings/ui/SettingsRoute.desktop.kt | 0 feature/settings/build.gradle.kts | 7 +- .../settings/SettingsNavigation.desktop.kt | 0 gradle/libs.versions.toml | 14 ++-- .../UserInterfaceState.xcuserstate | Bin 34244 -> 34490 bytes iosAppCompose/build.gradle.kts | 40 +--------- .../org/michaelbel/movies/MainContent.kt | 75 ++++++++++++++++++ .../movies/{main => }/MainViewController.kt | 3 +- .../org/michaelbel/movies/di/AppKoinModule.kt | 26 ++++++ .../org/michaelbel/movies/main/MainContent.kt | 24 ------ 135 files changed, 264 insertions(+), 321 deletions(-) rename core/analytics/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/analytics/di/MoviesAnalyticsKoinModule.desktop.kt (100%) rename core/analytics/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/analytics/impl/MoviesAnalyticsImpl.kt (100%) rename core/common/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/common/browser/Browser.desktop.kt (100%) rename core/common/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/common/dispatchers/UiDispatcher.desktop.kt (100%) rename core/common/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/common/ktx/SavedStateHandleKtx.desktop.kt (100%) rename core/common/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/common/log/Logger.desktop.kt (100%) rename core/common/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/common/viewmodel/BaseViewModel.kt (100%) rename core/interactor/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/interactor/MovieBlockingInteractor.kt (100%) rename core/interactor/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/interactor/di/InteractorBlockingKoinModule.desktop.kt (100%) rename core/interactor/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/interactor/di/InteractorLocaleKoinModule.desktop.kt (100%) rename core/interactor/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/interactor/impl/LocaleInteractorImpl.kt (100%) rename core/interactor/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/interactor/impl/MovieBlockingInteractorImpl.kt (100%) rename core/network/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/network/config/Interceptor.desktop.kt (100%) rename core/network/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/network/config/TmdbConfig.desktop.kt (100%) rename core/network/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/network/connectivity/NetworkManager.kt (100%) rename core/network/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/network/ktor/di/KtorKoinModule.desktop.kt (100%) rename core/persistence/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/persistence/database/MovieBlockingPersistence.kt (100%) rename core/persistence/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/persistence/database/MoviesDatabase.kt (100%) rename core/persistence/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/persistence/database/dao/MovieBlockingDao.kt (100%) rename core/persistence/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/persistence/database/di/DatabaseKoinModule.desktop.kt (100%) rename core/persistence/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/persistence/database/di/MoviesDatabaseKoinModule.desktop.kt (100%) rename core/persistence/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/persistence/database/di/PersistenceBlockingKoinModule.desktop.kt (100%) rename core/persistence/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/persistence/datastore/di/DataStoreKoinModule.desktop.kt (100%) rename core/platform-services/foss/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/platform/impl/analytics/AnalyticsServiceImpl.kt (100%) rename core/platform-services/foss/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/platform/impl/review/ReviewServiceImpl.kt (100%) rename core/platform-services/foss/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/platform/impl/update/UpdateServiceImpl.kt (100%) rename core/platform-services/interactor/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/platform/analytics/AnalyticsService.kt (100%) rename core/platform-services/interactor/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/platform/review/ReviewService.kt (100%) rename core/platform-services/interactor/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/platform/update/UpdateService.kt (100%) rename core/repository/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/repository/MovieBlockingRepository.kt (100%) rename core/repository/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/repository/di/RepositoryBlockingKoinModule.desktop.kt (100%) rename core/repository/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/repository/impl/MovieBlockingRepositoryImpl.kt (100%) rename core/repository/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/repository/ktx/BuildKtx.desktop.kt (100%) rename core/repository/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/repository/ktx/ExceptionKtx.desktop.kt (100%) rename core/ui/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/ui/compose/page/PageContent.desktop.kt (100%) rename core/ui/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/ui/compose/page/PageFailure.desktop.kt (100%) rename core/ui/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/ui/compose/page/PageLoading.desktop.kt (100%) rename core/ui/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/ui/ktx/ConfigurationKtx.desktop.kt (100%) rename core/ui/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/ui/ktx/LazyPagingItemsKtx.desktop.kt (100%) rename core/ui/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/ui/ktx/LifecycleKtx.desktop.kt (100%) rename core/ui/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/ui/ktx/WindowInsetsKtx.desktop.kt (100%) rename core/ui/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/ui/theme/Theme.desktop.kt (100%) delete mode 100644 desktopApp/user_preferences.preferences_pb rename feature/account-impl/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/account/AccountViewModel.kt (100%) rename feature/account-impl/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/account/di/AccountKoinModule.desktop.kt (100%) rename feature/account-impl/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/account/ui/AccountRoute.desktop.kt (100%) rename feature/account/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/account/AccountNavigation.desktop.kt (100%) rename feature/auth-impl/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/auth/AuthViewModel.kt (100%) rename feature/auth-impl/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/auth/di/AuthKoinModule.desktop.kt (100%) rename feature/auth-impl/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/auth/ui/AuthRoute.desktop.kt (100%) rename feature/auth/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/auth/AuthNavigation.desktop.kt (100%) rename feature/auth/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/auth/Settings.desktop.kt (100%) rename feature/details-impl/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/details/DetailsViewModel.kt (100%) rename feature/details-impl/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/details/di/DetailsKoinModule.desktop.kt (100%) rename feature/details-impl/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/details/ui/DetailsContent.desktop.kt (100%) rename feature/details-impl/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/details/ui/DetailsLoading.desktop.kt (100%) rename feature/details-impl/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/details/ui/DetailsRoute.desktop.kt (100%) rename feature/details-impl/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/details/ui/DetailsScreenContent.desktop.kt (100%) rename feature/details/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/details/DetailsNavigation.desktop.kt (100%) rename feature/feed-impl/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/feed/FeedViewModel.kt (100%) rename feature/feed-impl/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/feed/di/FeedKoinModule.desktop.kt (100%) rename feature/feed-impl/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/feed/ui/FeedRoute.desktop.kt (100%) rename feature/feed-impl/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/feed/ui/FeedScreenContent.desktop.kt (100%) rename feature/feed/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/feed/FeedNavigation.desktop.kt (100%) rename feature/gallery-impl/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/gallery/GalleryViewModel.kt (100%) rename feature/gallery-impl/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/gallery/di/GalleryKoinModule.desktop.kt (100%) rename feature/gallery-impl/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/gallery/ui/GalleryRoute.desktop.kt (100%) rename feature/gallery/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/gallery/GalleryNavigation.desktop.kt (100%) rename feature/main-impl/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/main/MainContent.desktop.kt (100%) rename feature/main-impl/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/main/MainViewModel.kt (100%) rename feature/main-impl/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/main/di/MainKoinModule.desktop.kt (100%) rename feature/search-impl/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/search/SearchViewModel.kt (100%) rename feature/search-impl/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/search/di/SearchKoinModule.desktop.kt (100%) rename feature/search-impl/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/search/ui/SearchRoute.desktop.kt (100%) rename feature/search/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/search/SearchNavigation.desktop.kt (100%) rename feature/settings-impl/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/settings/SettingsViewModel.kt (100%) rename feature/settings-impl/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/settings/di/SettingsKoinModule.desktop.kt (100%) rename feature/settings-impl/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/settings/ktx/GenderStringKtx.desktop.kt (100%) rename feature/settings-impl/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/settings/model/Features.desktop.kt (100%) rename feature/settings-impl/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/settings/ui/SettingsRoute.desktop.kt (100%) rename feature/settings/src/{desktopMain => jvmMain}/kotlin/org/michaelbel/movies/settings/SettingsNavigation.desktop.kt (100%) create mode 100644 iosAppCompose/src/iosMain/kotlin/org/michaelbel/movies/MainContent.kt rename iosAppCompose/src/iosMain/kotlin/org/michaelbel/movies/{main => }/MainViewController.kt (77%) create mode 100644 iosAppCompose/src/iosMain/kotlin/org/michaelbel/movies/di/AppKoinModule.kt delete mode 100644 iosAppCompose/src/iosMain/kotlin/org/michaelbel/movies/main/MainContent.kt diff --git a/.gitignore b/.gitignore index 6d04bccee..867dcb603 100644 --- a/.gitignore +++ b/.gitignore @@ -3220,3 +3220,4 @@ /core/repository-kmp/build/generated/ksp/android/androidDebug/java/org/michaelbel/movies/repository/impl/SearchRepositoryImpl_Factory.java /core/repository-kmp/build/generated/ksp/android/androidDebug/java/org/michaelbel/movies/repository/impl/SettingsRepositoryImpl_Factory.java /core/repository-kmp/build/generated/ksp/android/androidDebug/java/org/michaelbel/movies/repository/impl/SuggestionRepositoryImpl_Factory.java +/.kotlin \ No newline at end of file diff --git a/core/analytics/build.gradle.kts b/core/analytics/build.gradle.kts index 92878353e..99b4aacba 100644 --- a/core/analytics/build.gradle.kts +++ b/core/analytics/build.gradle.kts @@ -9,7 +9,7 @@ plugins { kotlin { androidTarget() - jvm("desktop") + jvm() iosX64() iosArm64() iosSimulatorArm64() @@ -17,10 +17,6 @@ kotlin { sourceSets { commonMain.dependencies { implementation(project(":core:platform-services:interactor")) - implementation(libs.bundles.koin.common) - } - androidMain.dependencies { - implementation(libs.bundles.koin.android) } } diff --git a/core/analytics/src/desktopMain/kotlin/org/michaelbel/movies/analytics/di/MoviesAnalyticsKoinModule.desktop.kt b/core/analytics/src/jvmMain/kotlin/org/michaelbel/movies/analytics/di/MoviesAnalyticsKoinModule.desktop.kt similarity index 100% rename from core/analytics/src/desktopMain/kotlin/org/michaelbel/movies/analytics/di/MoviesAnalyticsKoinModule.desktop.kt rename to core/analytics/src/jvmMain/kotlin/org/michaelbel/movies/analytics/di/MoviesAnalyticsKoinModule.desktop.kt diff --git a/core/analytics/src/desktopMain/kotlin/org/michaelbel/movies/analytics/impl/MoviesAnalyticsImpl.kt b/core/analytics/src/jvmMain/kotlin/org/michaelbel/movies/analytics/impl/MoviesAnalyticsImpl.kt similarity index 100% rename from core/analytics/src/desktopMain/kotlin/org/michaelbel/movies/analytics/impl/MoviesAnalyticsImpl.kt rename to core/analytics/src/jvmMain/kotlin/org/michaelbel/movies/analytics/impl/MoviesAnalyticsImpl.kt diff --git a/core/common/build.gradle.kts b/core/common/build.gradle.kts index ea9dd60f6..9542c42dd 100644 --- a/core/common/build.gradle.kts +++ b/core/common/build.gradle.kts @@ -11,17 +11,17 @@ plugins { kotlin { androidTarget() - jvm("desktop") + jvm() iosX64() iosArm64() iosSimulatorArm64() sourceSets { commonMain.dependencies { + api(libs.bundles.kotlinx.coroutines.common) api(libs.bundles.kotlinx.datetime.common) api(libs.bundles.koin.common) implementation(compose.material3) - implementation(libs.bundles.kotlinx.coroutines.common) } androidMain.dependencies { api(libs.bundles.kotlinx.coroutines.android) @@ -32,13 +32,12 @@ kotlin { api(libs.bundles.startup.android) api(libs.bundles.work.android) api(libs.bundles.timber.android) - api(libs.bundles.koin.compose.work.android) + api(libs.bundles.koin.android) implementation(libs.bundles.appcompat.android) implementation(libs.bundles.browser.android) - implementation(libs.bundles.paging.common) // fixme ломает navigation + implementation(libs.bundles.paging.common) } - val desktopMain by getting - desktopMain.dependencies { + jvmMain.dependencies { api(libs.bundles.kotlinx.coroutines.desktop) api(libs.bundles.jetbrains.androidx.lifecycle.viewmodel.compose.common) } diff --git a/core/common/src/desktopMain/kotlin/org/michaelbel/movies/common/browser/Browser.desktop.kt b/core/common/src/jvmMain/kotlin/org/michaelbel/movies/common/browser/Browser.desktop.kt similarity index 100% rename from core/common/src/desktopMain/kotlin/org/michaelbel/movies/common/browser/Browser.desktop.kt rename to core/common/src/jvmMain/kotlin/org/michaelbel/movies/common/browser/Browser.desktop.kt diff --git a/core/common/src/desktopMain/kotlin/org/michaelbel/movies/common/dispatchers/UiDispatcher.desktop.kt b/core/common/src/jvmMain/kotlin/org/michaelbel/movies/common/dispatchers/UiDispatcher.desktop.kt similarity index 100% rename from core/common/src/desktopMain/kotlin/org/michaelbel/movies/common/dispatchers/UiDispatcher.desktop.kt rename to core/common/src/jvmMain/kotlin/org/michaelbel/movies/common/dispatchers/UiDispatcher.desktop.kt diff --git a/core/common/src/desktopMain/kotlin/org/michaelbel/movies/common/ktx/SavedStateHandleKtx.desktop.kt b/core/common/src/jvmMain/kotlin/org/michaelbel/movies/common/ktx/SavedStateHandleKtx.desktop.kt similarity index 100% rename from core/common/src/desktopMain/kotlin/org/michaelbel/movies/common/ktx/SavedStateHandleKtx.desktop.kt rename to core/common/src/jvmMain/kotlin/org/michaelbel/movies/common/ktx/SavedStateHandleKtx.desktop.kt diff --git a/core/common/src/desktopMain/kotlin/org/michaelbel/movies/common/log/Logger.desktop.kt b/core/common/src/jvmMain/kotlin/org/michaelbel/movies/common/log/Logger.desktop.kt similarity index 100% rename from core/common/src/desktopMain/kotlin/org/michaelbel/movies/common/log/Logger.desktop.kt rename to core/common/src/jvmMain/kotlin/org/michaelbel/movies/common/log/Logger.desktop.kt diff --git a/core/common/src/desktopMain/kotlin/org/michaelbel/movies/common/viewmodel/BaseViewModel.kt b/core/common/src/jvmMain/kotlin/org/michaelbel/movies/common/viewmodel/BaseViewModel.kt similarity index 100% rename from core/common/src/desktopMain/kotlin/org/michaelbel/movies/common/viewmodel/BaseViewModel.kt rename to core/common/src/jvmMain/kotlin/org/michaelbel/movies/common/viewmodel/BaseViewModel.kt diff --git a/core/interactor/build.gradle.kts b/core/interactor/build.gradle.kts index f1aa3b652..e4a3cb8b0 100644 --- a/core/interactor/build.gradle.kts +++ b/core/interactor/build.gradle.kts @@ -11,7 +11,7 @@ plugins { kotlin { androidTarget() - jvm("desktop") + jvm() iosX64() iosArm64() iosSimulatorArm64() @@ -20,9 +20,6 @@ kotlin { commonMain.dependencies { api(project(":core:analytics")) api(project(":core:repository")) - implementation(compose.runtime) - implementation(compose.runtimeSaveable) - implementation(libs.bundles.kotlinx.coroutines.common) implementation(libs.bundles.room.paging.common) } } diff --git a/core/interactor/src/desktopMain/kotlin/org/michaelbel/movies/interactor/MovieBlockingInteractor.kt b/core/interactor/src/jvmMain/kotlin/org/michaelbel/movies/interactor/MovieBlockingInteractor.kt similarity index 100% rename from core/interactor/src/desktopMain/kotlin/org/michaelbel/movies/interactor/MovieBlockingInteractor.kt rename to core/interactor/src/jvmMain/kotlin/org/michaelbel/movies/interactor/MovieBlockingInteractor.kt diff --git a/core/interactor/src/desktopMain/kotlin/org/michaelbel/movies/interactor/di/InteractorBlockingKoinModule.desktop.kt b/core/interactor/src/jvmMain/kotlin/org/michaelbel/movies/interactor/di/InteractorBlockingKoinModule.desktop.kt similarity index 100% rename from core/interactor/src/desktopMain/kotlin/org/michaelbel/movies/interactor/di/InteractorBlockingKoinModule.desktop.kt rename to core/interactor/src/jvmMain/kotlin/org/michaelbel/movies/interactor/di/InteractorBlockingKoinModule.desktop.kt diff --git a/core/interactor/src/desktopMain/kotlin/org/michaelbel/movies/interactor/di/InteractorLocaleKoinModule.desktop.kt b/core/interactor/src/jvmMain/kotlin/org/michaelbel/movies/interactor/di/InteractorLocaleKoinModule.desktop.kt similarity index 100% rename from core/interactor/src/desktopMain/kotlin/org/michaelbel/movies/interactor/di/InteractorLocaleKoinModule.desktop.kt rename to core/interactor/src/jvmMain/kotlin/org/michaelbel/movies/interactor/di/InteractorLocaleKoinModule.desktop.kt diff --git a/core/interactor/src/desktopMain/kotlin/org/michaelbel/movies/interactor/impl/LocaleInteractorImpl.kt b/core/interactor/src/jvmMain/kotlin/org/michaelbel/movies/interactor/impl/LocaleInteractorImpl.kt similarity index 100% rename from core/interactor/src/desktopMain/kotlin/org/michaelbel/movies/interactor/impl/LocaleInteractorImpl.kt rename to core/interactor/src/jvmMain/kotlin/org/michaelbel/movies/interactor/impl/LocaleInteractorImpl.kt diff --git a/core/interactor/src/desktopMain/kotlin/org/michaelbel/movies/interactor/impl/MovieBlockingInteractorImpl.kt b/core/interactor/src/jvmMain/kotlin/org/michaelbel/movies/interactor/impl/MovieBlockingInteractorImpl.kt similarity index 100% rename from core/interactor/src/desktopMain/kotlin/org/michaelbel/movies/interactor/impl/MovieBlockingInteractorImpl.kt rename to core/interactor/src/jvmMain/kotlin/org/michaelbel/movies/interactor/impl/MovieBlockingInteractorImpl.kt diff --git a/core/navigation/build.gradle.kts b/core/navigation/build.gradle.kts index 7c78af269..3ef95d072 100644 --- a/core/navigation/build.gradle.kts +++ b/core/navigation/build.gradle.kts @@ -9,7 +9,7 @@ plugins { kotlin { androidTarget() - jvm("desktop") + jvm() iosX64() iosArm64() iosSimulatorArm64() @@ -22,8 +22,7 @@ kotlin { api(libs.bundles.jetbrains.androidx.navigation.compose.common) api(libs.bundles.jetbrains.androidx.core.bundle.common) } - val desktopMain by getting - desktopMain.dependencies { + jvmMain.dependencies { api(libs.bundles.jetbrains.androidx.lifecycle.viewmodel.compose.common) } } diff --git a/core/network/build.gradle.kts b/core/network/build.gradle.kts index 44d30cb0b..3ceb0e818 100644 --- a/core/network/build.gradle.kts +++ b/core/network/build.gradle.kts @@ -19,22 +19,21 @@ private val tmdbApiKey: String by lazy { kotlin { androidTarget() - jvm("desktop") + jvm() iosX64() iosArm64() iosSimulatorArm64() sourceSets { commonMain.dependencies { - implementation(libs.bundles.kotlinx.serialization.common) + api(project(":core:common")) + api(libs.bundles.kotlinx.serialization.common) implementation(libs.bundles.ktor.common) - implementation(libs.bundles.koin.common) } androidMain.dependencies { implementation(libs.bundles.ktor.android) implementation(libs.bundles.startup.android) implementation(libs.bundles.okhttp.logging.interceptor.android) - implementation(libs.bundles.koin.android) } } diff --git a/core/network/src/desktopMain/kotlin/org/michaelbel/movies/network/config/Interceptor.desktop.kt b/core/network/src/jvmMain/kotlin/org/michaelbel/movies/network/config/Interceptor.desktop.kt similarity index 100% rename from core/network/src/desktopMain/kotlin/org/michaelbel/movies/network/config/Interceptor.desktop.kt rename to core/network/src/jvmMain/kotlin/org/michaelbel/movies/network/config/Interceptor.desktop.kt diff --git a/core/network/src/desktopMain/kotlin/org/michaelbel/movies/network/config/TmdbConfig.desktop.kt b/core/network/src/jvmMain/kotlin/org/michaelbel/movies/network/config/TmdbConfig.desktop.kt similarity index 100% rename from core/network/src/desktopMain/kotlin/org/michaelbel/movies/network/config/TmdbConfig.desktop.kt rename to core/network/src/jvmMain/kotlin/org/michaelbel/movies/network/config/TmdbConfig.desktop.kt diff --git a/core/network/src/desktopMain/kotlin/org/michaelbel/movies/network/connectivity/NetworkManager.kt b/core/network/src/jvmMain/kotlin/org/michaelbel/movies/network/connectivity/NetworkManager.kt similarity index 100% rename from core/network/src/desktopMain/kotlin/org/michaelbel/movies/network/connectivity/NetworkManager.kt rename to core/network/src/jvmMain/kotlin/org/michaelbel/movies/network/connectivity/NetworkManager.kt diff --git a/core/network/src/desktopMain/kotlin/org/michaelbel/movies/network/ktor/di/KtorKoinModule.desktop.kt b/core/network/src/jvmMain/kotlin/org/michaelbel/movies/network/ktor/di/KtorKoinModule.desktop.kt similarity index 100% rename from core/network/src/desktopMain/kotlin/org/michaelbel/movies/network/ktor/di/KtorKoinModule.desktop.kt rename to core/network/src/jvmMain/kotlin/org/michaelbel/movies/network/ktor/di/KtorKoinModule.desktop.kt diff --git a/core/notifications/build.gradle.kts b/core/notifications/build.gradle.kts index 55e5176a0..08777654b 100644 --- a/core/notifications/build.gradle.kts +++ b/core/notifications/build.gradle.kts @@ -9,7 +9,7 @@ plugins { kotlin { androidTarget() - jvm("desktop") + jvm() iosX64() iosArm64() iosSimulatorArm64() diff --git a/core/persistence/build.gradle.kts b/core/persistence/build.gradle.kts index c24bca869..65ba4333c 100644 --- a/core/persistence/build.gradle.kts +++ b/core/persistence/build.gradle.kts @@ -11,14 +11,13 @@ plugins { kotlin { androidTarget() - jvm("desktop") + jvm() iosX64() iosArm64() iosSimulatorArm64() sourceSets { commonMain.dependencies { - api(project(":core:common")) api(project(":core:network")) implementation(libs.bundles.datastore.common) implementation(libs.bundles.room.common) @@ -28,8 +27,7 @@ kotlin { androidMain.dependencies { implementation(libs.bundles.datastore.android) } - val desktopMain by getting - desktopMain.dependencies { + jvmMain.dependencies { implementation(libs.bundles.datastore.desktop) } } @@ -62,7 +60,10 @@ android { dependencies { add("kspAndroid", libs.bundles.room.compiler.common) - add("kspDesktop", libs.bundles.room.compiler.common) + add("kspJvm", libs.bundles.room.compiler.common) + add("kspIosX64", libs.bundles.room.compiler.common) + add("kspIosArm64", libs.bundles.room.compiler.common) + add("kspIosSimulatorArm64", libs.bundles.room.compiler.common) } room { diff --git a/core/persistence/src/commonMain/kotlin/org/michaelbel/movies/persistence/database/db/AppDatabase.kt b/core/persistence/src/commonMain/kotlin/org/michaelbel/movies/persistence/database/db/AppDatabase.kt index 9ca52ab18..4dbb3bf2a 100644 --- a/core/persistence/src/commonMain/kotlin/org/michaelbel/movies/persistence/database/db/AppDatabase.kt +++ b/core/persistence/src/commonMain/kotlin/org/michaelbel/movies/persistence/database/db/AppDatabase.kt @@ -39,6 +39,6 @@ abstract class AppDatabase: RoomDatabase() { companion object { const val DATABASE_NAME = "movies.db" - const val DATABASE_VERSION = 27 + const val DATABASE_VERSION = 28 } } \ No newline at end of file diff --git a/core/persistence/src/iosMain/kotlin/org/michaelbel/movies/persistence/database/di/DatabaseKoinModule.ios.kt b/core/persistence/src/iosMain/kotlin/org/michaelbel/movies/persistence/database/di/DatabaseKoinModule.ios.kt index 47469217c..a794e6f45 100644 --- a/core/persistence/src/iosMain/kotlin/org/michaelbel/movies/persistence/database/di/DatabaseKoinModule.ios.kt +++ b/core/persistence/src/iosMain/kotlin/org/michaelbel/movies/persistence/database/di/DatabaseKoinModule.ios.kt @@ -2,4 +2,15 @@ package org.michaelbel.movies.persistence.database.di import org.koin.dsl.module -actual val databaseKoinModule = module {} \ No newline at end of file +actual val databaseKoinModule = module { + //single { createRoomDatabase().build() } +} + +/* +private fun createRoomDatabase(): RoomDatabase.Builder { + val dbFile = NSHomeDirectory() + "/${AppDatabase.DATABASE_NAME}" + return Room.databaseBuilder( + name = dbFile, + factory = { AppDatabase::class.instantiateImpl() } // IDE may show error but there is none. + ) +}*/ diff --git a/core/persistence/src/desktopMain/kotlin/org/michaelbel/movies/persistence/database/MovieBlockingPersistence.kt b/core/persistence/src/jvmMain/kotlin/org/michaelbel/movies/persistence/database/MovieBlockingPersistence.kt similarity index 100% rename from core/persistence/src/desktopMain/kotlin/org/michaelbel/movies/persistence/database/MovieBlockingPersistence.kt rename to core/persistence/src/jvmMain/kotlin/org/michaelbel/movies/persistence/database/MovieBlockingPersistence.kt diff --git a/core/persistence/src/desktopMain/kotlin/org/michaelbel/movies/persistence/database/MoviesDatabase.kt b/core/persistence/src/jvmMain/kotlin/org/michaelbel/movies/persistence/database/MoviesDatabase.kt similarity index 100% rename from core/persistence/src/desktopMain/kotlin/org/michaelbel/movies/persistence/database/MoviesDatabase.kt rename to core/persistence/src/jvmMain/kotlin/org/michaelbel/movies/persistence/database/MoviesDatabase.kt diff --git a/core/persistence/src/desktopMain/kotlin/org/michaelbel/movies/persistence/database/dao/MovieBlockingDao.kt b/core/persistence/src/jvmMain/kotlin/org/michaelbel/movies/persistence/database/dao/MovieBlockingDao.kt similarity index 100% rename from core/persistence/src/desktopMain/kotlin/org/michaelbel/movies/persistence/database/dao/MovieBlockingDao.kt rename to core/persistence/src/jvmMain/kotlin/org/michaelbel/movies/persistence/database/dao/MovieBlockingDao.kt diff --git a/core/persistence/src/desktopMain/kotlin/org/michaelbel/movies/persistence/database/di/DatabaseKoinModule.desktop.kt b/core/persistence/src/jvmMain/kotlin/org/michaelbel/movies/persistence/database/di/DatabaseKoinModule.desktop.kt similarity index 100% rename from core/persistence/src/desktopMain/kotlin/org/michaelbel/movies/persistence/database/di/DatabaseKoinModule.desktop.kt rename to core/persistence/src/jvmMain/kotlin/org/michaelbel/movies/persistence/database/di/DatabaseKoinModule.desktop.kt diff --git a/core/persistence/src/desktopMain/kotlin/org/michaelbel/movies/persistence/database/di/MoviesDatabaseKoinModule.desktop.kt b/core/persistence/src/jvmMain/kotlin/org/michaelbel/movies/persistence/database/di/MoviesDatabaseKoinModule.desktop.kt similarity index 100% rename from core/persistence/src/desktopMain/kotlin/org/michaelbel/movies/persistence/database/di/MoviesDatabaseKoinModule.desktop.kt rename to core/persistence/src/jvmMain/kotlin/org/michaelbel/movies/persistence/database/di/MoviesDatabaseKoinModule.desktop.kt diff --git a/core/persistence/src/desktopMain/kotlin/org/michaelbel/movies/persistence/database/di/PersistenceBlockingKoinModule.desktop.kt b/core/persistence/src/jvmMain/kotlin/org/michaelbel/movies/persistence/database/di/PersistenceBlockingKoinModule.desktop.kt similarity index 100% rename from core/persistence/src/desktopMain/kotlin/org/michaelbel/movies/persistence/database/di/PersistenceBlockingKoinModule.desktop.kt rename to core/persistence/src/jvmMain/kotlin/org/michaelbel/movies/persistence/database/di/PersistenceBlockingKoinModule.desktop.kt diff --git a/core/persistence/src/desktopMain/kotlin/org/michaelbel/movies/persistence/datastore/di/DataStoreKoinModule.desktop.kt b/core/persistence/src/jvmMain/kotlin/org/michaelbel/movies/persistence/datastore/di/DataStoreKoinModule.desktop.kt similarity index 100% rename from core/persistence/src/desktopMain/kotlin/org/michaelbel/movies/persistence/datastore/di/DataStoreKoinModule.desktop.kt rename to core/persistence/src/jvmMain/kotlin/org/michaelbel/movies/persistence/datastore/di/DataStoreKoinModule.desktop.kt diff --git a/core/platform-services/foss/build.gradle.kts b/core/platform-services/foss/build.gradle.kts index d9ef063be..3b64058d6 100644 --- a/core/platform-services/foss/build.gradle.kts +++ b/core/platform-services/foss/build.gradle.kts @@ -9,16 +9,14 @@ plugins { kotlin { androidTarget() - jvm("desktop") + jvm() iosX64() iosArm64() iosSimulatorArm64() sourceSets { commonMain.dependencies { - implementation(project(":core:platform-services:interactor")) - implementation(libs.bundles.kotlinx.coroutines.common) - implementation(libs.bundles.koin.common) + api(project(":core:platform-services:interactor")) } } diff --git a/core/platform-services/foss/src/desktopMain/kotlin/org/michaelbel/movies/platform/impl/analytics/AnalyticsServiceImpl.kt b/core/platform-services/foss/src/jvmMain/kotlin/org/michaelbel/movies/platform/impl/analytics/AnalyticsServiceImpl.kt similarity index 100% rename from core/platform-services/foss/src/desktopMain/kotlin/org/michaelbel/movies/platform/impl/analytics/AnalyticsServiceImpl.kt rename to core/platform-services/foss/src/jvmMain/kotlin/org/michaelbel/movies/platform/impl/analytics/AnalyticsServiceImpl.kt diff --git a/core/platform-services/foss/src/desktopMain/kotlin/org/michaelbel/movies/platform/impl/review/ReviewServiceImpl.kt b/core/platform-services/foss/src/jvmMain/kotlin/org/michaelbel/movies/platform/impl/review/ReviewServiceImpl.kt similarity index 100% rename from core/platform-services/foss/src/desktopMain/kotlin/org/michaelbel/movies/platform/impl/review/ReviewServiceImpl.kt rename to core/platform-services/foss/src/jvmMain/kotlin/org/michaelbel/movies/platform/impl/review/ReviewServiceImpl.kt diff --git a/core/platform-services/foss/src/desktopMain/kotlin/org/michaelbel/movies/platform/impl/update/UpdateServiceImpl.kt b/core/platform-services/foss/src/jvmMain/kotlin/org/michaelbel/movies/platform/impl/update/UpdateServiceImpl.kt similarity index 100% rename from core/platform-services/foss/src/desktopMain/kotlin/org/michaelbel/movies/platform/impl/update/UpdateServiceImpl.kt rename to core/platform-services/foss/src/jvmMain/kotlin/org/michaelbel/movies/platform/impl/update/UpdateServiceImpl.kt diff --git a/core/platform-services/gms/build.gradle.kts b/core/platform-services/gms/build.gradle.kts index 97823e57a..1497b003e 100644 --- a/core/platform-services/gms/build.gradle.kts +++ b/core/platform-services/gms/build.gradle.kts @@ -9,19 +9,16 @@ plugins { kotlin { androidTarget() - jvm("desktop") sourceSets { commonMain.dependencies { - implementation(project(":core:platform-services:interactor")) + api(project(":core:platform-services:interactor")) implementation(project(":core:notifications")) - implementation(libs.bundles.koin.common) } androidMain.dependencies { api(libs.bundles.google.firebase.android) api(libs.bundles.google.services.android) api(libs.bundles.google.play.android) - implementation(libs.bundles.koin.android) } } diff --git a/core/platform-services/hms/build.gradle.kts b/core/platform-services/hms/build.gradle.kts index 4e0f59dd3..f130e3976 100644 --- a/core/platform-services/hms/build.gradle.kts +++ b/core/platform-services/hms/build.gradle.kts @@ -9,13 +9,10 @@ plugins { kotlin { androidTarget() - jvm("desktop") sourceSets { commonMain.dependencies { - implementation(project(":core:platform-services:interactor")) - implementation(libs.bundles.kotlinx.coroutines.common) - implementation(libs.bundles.koin.common) + api(project(":core:platform-services:interactor")) } } diff --git a/core/platform-services/inject-android/build.gradle.kts b/core/platform-services/inject-android/build.gradle.kts index 6f745a8c9..339611f3a 100644 --- a/core/platform-services/inject-android/build.gradle.kts +++ b/core/platform-services/inject-android/build.gradle.kts @@ -9,15 +9,10 @@ plugins { kotlin { androidTarget() - jvm("desktop") sourceSets { commonMain.dependencies { - implementation(project(":core:platform-services:interactor")) - implementation(libs.bundles.koin.common) - } - androidMain.dependencies { - implementation(libs.bundles.koin.android) + api(project(":core:platform-services:interactor")) } } diff --git a/core/platform-services/inject-desktop/build.gradle.kts b/core/platform-services/inject-desktop/build.gradle.kts index 33ce3bd87..a49668b64 100644 --- a/core/platform-services/inject-desktop/build.gradle.kts +++ b/core/platform-services/inject-desktop/build.gradle.kts @@ -3,13 +3,11 @@ plugins { } kotlin { - jvm("desktop") + jvm() sourceSets { commonMain.dependencies { - implementation(project(":core:platform-services:interactor")) implementation(project(":core:platform-services:foss")) - implementation(libs.bundles.koin.common) } } } \ No newline at end of file diff --git a/core/platform-services/inject-ios/build.gradle.kts b/core/platform-services/inject-ios/build.gradle.kts index 95b27f643..496541d50 100644 --- a/core/platform-services/inject-ios/build.gradle.kts +++ b/core/platform-services/inject-ios/build.gradle.kts @@ -9,9 +9,7 @@ kotlin { sourceSets { commonMain.dependencies { - implementation(project(":core:platform-services:interactor")) implementation(project(":core:platform-services:foss")) - implementation(libs.bundles.koin.common) } } } \ No newline at end of file diff --git a/core/platform-services/interactor/build.gradle.kts b/core/platform-services/interactor/build.gradle.kts index eadaa226e..c3a22acd9 100644 --- a/core/platform-services/interactor/build.gradle.kts +++ b/core/platform-services/interactor/build.gradle.kts @@ -9,14 +9,14 @@ plugins { kotlin { androidTarget() - jvm("desktop") + jvm() iosX64() iosArm64() iosSimulatorArm64() sourceSets { commonMain.dependencies { - implementation(libs.bundles.kotlinx.coroutines.common) + api(project(":core:common")) } } diff --git a/core/platform-services/interactor/src/desktopMain/kotlin/org/michaelbel/movies/platform/analytics/AnalyticsService.kt b/core/platform-services/interactor/src/jvmMain/kotlin/org/michaelbel/movies/platform/analytics/AnalyticsService.kt similarity index 100% rename from core/platform-services/interactor/src/desktopMain/kotlin/org/michaelbel/movies/platform/analytics/AnalyticsService.kt rename to core/platform-services/interactor/src/jvmMain/kotlin/org/michaelbel/movies/platform/analytics/AnalyticsService.kt diff --git a/core/platform-services/interactor/src/desktopMain/kotlin/org/michaelbel/movies/platform/review/ReviewService.kt b/core/platform-services/interactor/src/jvmMain/kotlin/org/michaelbel/movies/platform/review/ReviewService.kt similarity index 100% rename from core/platform-services/interactor/src/desktopMain/kotlin/org/michaelbel/movies/platform/review/ReviewService.kt rename to core/platform-services/interactor/src/jvmMain/kotlin/org/michaelbel/movies/platform/review/ReviewService.kt diff --git a/core/platform-services/interactor/src/desktopMain/kotlin/org/michaelbel/movies/platform/update/UpdateService.kt b/core/platform-services/interactor/src/jvmMain/kotlin/org/michaelbel/movies/platform/update/UpdateService.kt similarity index 100% rename from core/platform-services/interactor/src/desktopMain/kotlin/org/michaelbel/movies/platform/update/UpdateService.kt rename to core/platform-services/interactor/src/jvmMain/kotlin/org/michaelbel/movies/platform/update/UpdateService.kt diff --git a/core/repository/build.gradle.kts b/core/repository/build.gradle.kts index 032eae2a7..cbb4d80b7 100644 --- a/core/repository/build.gradle.kts +++ b/core/repository/build.gradle.kts @@ -9,7 +9,7 @@ plugins { kotlin { androidTarget() - jvm("desktop") + jvm() iosX64() iosArm64() iosSimulatorArm64() @@ -17,7 +17,6 @@ kotlin { sourceSets { commonMain.dependencies { api(project(":core:persistence")) - implementation(libs.bundles.kotlinx.coroutines.common) implementation(libs.bundles.room.paging.common) } } diff --git a/core/repository/src/desktopMain/kotlin/org/michaelbel/movies/repository/MovieBlockingRepository.kt b/core/repository/src/jvmMain/kotlin/org/michaelbel/movies/repository/MovieBlockingRepository.kt similarity index 100% rename from core/repository/src/desktopMain/kotlin/org/michaelbel/movies/repository/MovieBlockingRepository.kt rename to core/repository/src/jvmMain/kotlin/org/michaelbel/movies/repository/MovieBlockingRepository.kt diff --git a/core/repository/src/desktopMain/kotlin/org/michaelbel/movies/repository/di/RepositoryBlockingKoinModule.desktop.kt b/core/repository/src/jvmMain/kotlin/org/michaelbel/movies/repository/di/RepositoryBlockingKoinModule.desktop.kt similarity index 100% rename from core/repository/src/desktopMain/kotlin/org/michaelbel/movies/repository/di/RepositoryBlockingKoinModule.desktop.kt rename to core/repository/src/jvmMain/kotlin/org/michaelbel/movies/repository/di/RepositoryBlockingKoinModule.desktop.kt diff --git a/core/repository/src/desktopMain/kotlin/org/michaelbel/movies/repository/impl/MovieBlockingRepositoryImpl.kt b/core/repository/src/jvmMain/kotlin/org/michaelbel/movies/repository/impl/MovieBlockingRepositoryImpl.kt similarity index 100% rename from core/repository/src/desktopMain/kotlin/org/michaelbel/movies/repository/impl/MovieBlockingRepositoryImpl.kt rename to core/repository/src/jvmMain/kotlin/org/michaelbel/movies/repository/impl/MovieBlockingRepositoryImpl.kt diff --git a/core/repository/src/desktopMain/kotlin/org/michaelbel/movies/repository/ktx/BuildKtx.desktop.kt b/core/repository/src/jvmMain/kotlin/org/michaelbel/movies/repository/ktx/BuildKtx.desktop.kt similarity index 100% rename from core/repository/src/desktopMain/kotlin/org/michaelbel/movies/repository/ktx/BuildKtx.desktop.kt rename to core/repository/src/jvmMain/kotlin/org/michaelbel/movies/repository/ktx/BuildKtx.desktop.kt diff --git a/core/repository/src/desktopMain/kotlin/org/michaelbel/movies/repository/ktx/ExceptionKtx.desktop.kt b/core/repository/src/jvmMain/kotlin/org/michaelbel/movies/repository/ktx/ExceptionKtx.desktop.kt similarity index 100% rename from core/repository/src/desktopMain/kotlin/org/michaelbel/movies/repository/ktx/ExceptionKtx.desktop.kt rename to core/repository/src/jvmMain/kotlin/org/michaelbel/movies/repository/ktx/ExceptionKtx.desktop.kt diff --git a/core/ui/build.gradle.kts b/core/ui/build.gradle.kts index 2a749953b..08cf8cc09 100644 --- a/core/ui/build.gradle.kts +++ b/core/ui/build.gradle.kts @@ -11,25 +11,27 @@ plugins { kotlin { androidTarget() - jvm("desktop") + jvm() iosX64() iosArm64() iosSimulatorArm64() sourceSets { commonMain.dependencies { - implementation(project(":core:persistence")) - implementation(libs.bundles.lifecycle.common) + api(project(":core:persistence")) api(libs.bundles.coil.common) - implementation(libs.bundles.constraintlayout.common) - implementation(compose.components.resources) - implementation(compose.foundation) - implementation(compose.material) - implementation(compose.material3) - implementation(compose.runtime) - implementation(compose.runtimeSaveable) + api(libs.bundles.constraintlayout.common) + api(compose.animation) + api(compose.foundation) + api(compose.runtime) + api(compose.runtimeSaveable) + api(compose.ui) + api(compose.material) + api(compose.material3) + api(compose.components.resources) + api(compose.components.uiToolingPreview) implementation(compose.materialIconsExtended) - implementation(compose.ui) + implementation(libs.bundles.lifecycle.common) } androidMain.dependencies { api(libs.bundles.core.splashscreen.android) @@ -37,7 +39,11 @@ kotlin { api(libs.bundles.coil.android) api(libs.bundles.compose.android) api(libs.bundles.google.material.android) - implementation(libs.bundles.paging.common) // fixme ломает navigation + implementation(libs.bundles.paging.common) + } + jvmMain.dependencies { + api(compose.desktop.common) + api(compose.desktop.currentOs) } } diff --git a/core/ui/src/desktopMain/kotlin/org/michaelbel/movies/ui/compose/page/PageContent.desktop.kt b/core/ui/src/jvmMain/kotlin/org/michaelbel/movies/ui/compose/page/PageContent.desktop.kt similarity index 100% rename from core/ui/src/desktopMain/kotlin/org/michaelbel/movies/ui/compose/page/PageContent.desktop.kt rename to core/ui/src/jvmMain/kotlin/org/michaelbel/movies/ui/compose/page/PageContent.desktop.kt diff --git a/core/ui/src/desktopMain/kotlin/org/michaelbel/movies/ui/compose/page/PageFailure.desktop.kt b/core/ui/src/jvmMain/kotlin/org/michaelbel/movies/ui/compose/page/PageFailure.desktop.kt similarity index 100% rename from core/ui/src/desktopMain/kotlin/org/michaelbel/movies/ui/compose/page/PageFailure.desktop.kt rename to core/ui/src/jvmMain/kotlin/org/michaelbel/movies/ui/compose/page/PageFailure.desktop.kt diff --git a/core/ui/src/desktopMain/kotlin/org/michaelbel/movies/ui/compose/page/PageLoading.desktop.kt b/core/ui/src/jvmMain/kotlin/org/michaelbel/movies/ui/compose/page/PageLoading.desktop.kt similarity index 100% rename from core/ui/src/desktopMain/kotlin/org/michaelbel/movies/ui/compose/page/PageLoading.desktop.kt rename to core/ui/src/jvmMain/kotlin/org/michaelbel/movies/ui/compose/page/PageLoading.desktop.kt diff --git a/core/ui/src/desktopMain/kotlin/org/michaelbel/movies/ui/ktx/ConfigurationKtx.desktop.kt b/core/ui/src/jvmMain/kotlin/org/michaelbel/movies/ui/ktx/ConfigurationKtx.desktop.kt similarity index 100% rename from core/ui/src/desktopMain/kotlin/org/michaelbel/movies/ui/ktx/ConfigurationKtx.desktop.kt rename to core/ui/src/jvmMain/kotlin/org/michaelbel/movies/ui/ktx/ConfigurationKtx.desktop.kt diff --git a/core/ui/src/desktopMain/kotlin/org/michaelbel/movies/ui/ktx/LazyPagingItemsKtx.desktop.kt b/core/ui/src/jvmMain/kotlin/org/michaelbel/movies/ui/ktx/LazyPagingItemsKtx.desktop.kt similarity index 100% rename from core/ui/src/desktopMain/kotlin/org/michaelbel/movies/ui/ktx/LazyPagingItemsKtx.desktop.kt rename to core/ui/src/jvmMain/kotlin/org/michaelbel/movies/ui/ktx/LazyPagingItemsKtx.desktop.kt diff --git a/core/ui/src/desktopMain/kotlin/org/michaelbel/movies/ui/ktx/LifecycleKtx.desktop.kt b/core/ui/src/jvmMain/kotlin/org/michaelbel/movies/ui/ktx/LifecycleKtx.desktop.kt similarity index 100% rename from core/ui/src/desktopMain/kotlin/org/michaelbel/movies/ui/ktx/LifecycleKtx.desktop.kt rename to core/ui/src/jvmMain/kotlin/org/michaelbel/movies/ui/ktx/LifecycleKtx.desktop.kt diff --git a/core/ui/src/desktopMain/kotlin/org/michaelbel/movies/ui/ktx/WindowInsetsKtx.desktop.kt b/core/ui/src/jvmMain/kotlin/org/michaelbel/movies/ui/ktx/WindowInsetsKtx.desktop.kt similarity index 100% rename from core/ui/src/desktopMain/kotlin/org/michaelbel/movies/ui/ktx/WindowInsetsKtx.desktop.kt rename to core/ui/src/jvmMain/kotlin/org/michaelbel/movies/ui/ktx/WindowInsetsKtx.desktop.kt diff --git a/core/ui/src/desktopMain/kotlin/org/michaelbel/movies/ui/theme/Theme.desktop.kt b/core/ui/src/jvmMain/kotlin/org/michaelbel/movies/ui/theme/Theme.desktop.kt similarity index 100% rename from core/ui/src/desktopMain/kotlin/org/michaelbel/movies/ui/theme/Theme.desktop.kt rename to core/ui/src/jvmMain/kotlin/org/michaelbel/movies/ui/theme/Theme.desktop.kt diff --git a/core/widget/build.gradle.kts b/core/widget/build.gradle.kts index 185170e61..64e700dd0 100644 --- a/core/widget/build.gradle.kts +++ b/core/widget/build.gradle.kts @@ -11,7 +11,7 @@ plugins { kotlin { androidTarget() - jvm("desktop") + jvm() iosX64() iosArm64() iosSimulatorArm64() @@ -21,11 +21,8 @@ kotlin { implementation(project(":core:interactor")) implementation(project(":core:ui")) implementation(project(":core:work")) - implementation(libs.bundles.kotlinx.serialization.common) - implementation(libs.bundles.datastore.common) } androidMain.dependencies { - implementation(libs.bundles.datastore.android) implementation(libs.bundles.glance.android) } } diff --git a/core/work/build.gradle.kts b/core/work/build.gradle.kts index 52678acec..d01ba4c3d 100644 --- a/core/work/build.gradle.kts +++ b/core/work/build.gradle.kts @@ -9,7 +9,7 @@ plugins { kotlin { androidTarget() - jvm("desktop") + jvm() iosX64() iosArm64() iosSimulatorArm64() @@ -18,7 +18,6 @@ kotlin { commonMain.dependencies { implementation(project(":core:interactor")) implementation(project(":core:notifications")) - implementation(libs.bundles.kotlinx.serialization.common) } androidMain.dependencies { implementation(libs.bundles.work.android) diff --git a/desktopApp/build.gradle.kts b/desktopApp/build.gradle.kts index 4704eed3d..4cd521df5 100755 --- a/desktopApp/build.gradle.kts +++ b/desktopApp/build.gradle.kts @@ -13,15 +13,6 @@ kotlin { jvmMain.dependencies { implementation(project(":core:platform-services:inject-desktop")) implementation(project(":feature:main-impl")) - implementation(compose.desktop.currentOs) - implementation(compose.desktop.common) - implementation(compose.runtime) - implementation(compose.foundation) - implementation(compose.animation) - implementation(compose.material) - implementation(compose.material3) - implementation(compose.components.resources) - implementation(libs.koin.compose) } } } diff --git a/desktopApp/src/jvmMain/kotlin/org/michaelbel/movies/di/AppKoinModule.kt b/desktopApp/src/jvmMain/kotlin/org/michaelbel/movies/di/AppKoinModule.kt index 3ae5d8fd5..069b810a8 100644 --- a/desktopApp/src/jvmMain/kotlin/org/michaelbel/movies/di/AppKoinModule.kt +++ b/desktopApp/src/jvmMain/kotlin/org/michaelbel/movies/di/AppKoinModule.kt @@ -21,6 +21,6 @@ internal val appKoinModule = module { feedKoinModule, galleryKoinModule, searchKoinModule, - settingsKoinModule, + settingsKoinModule ) } \ No newline at end of file diff --git a/desktopApp/user_preferences.preferences_pb b/desktopApp/user_preferences.preferences_pb deleted file mode 100644 index a9531bb9ccda9814b6fb6d0470d08442666353c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146 zcmd-Q=i*FDO-+d}%S(oUv6f_{=B5g9YO(uere~D+<#TCpapmR%Es4(o8ZIQIB@vQe5R_Pw Unxc`Hn44-_l3x&C1mbD}0HCQj3IG5A diff --git a/feature/account-impl/build.gradle.kts b/feature/account-impl/build.gradle.kts index 5edf2ae97..8e851e820 100644 --- a/feature/account-impl/build.gradle.kts +++ b/feature/account-impl/build.gradle.kts @@ -11,7 +11,7 @@ plugins { kotlin { androidTarget() - jvm("desktop") + jvm() iosX64() iosArm64() iosSimulatorArm64() @@ -22,19 +22,10 @@ kotlin { api(project(":core:ui")) api(project(":core:common")) api(project(":core:interactor")) - implementation(compose.components.resources) - implementation(compose.foundation) - implementation(compose.material3) - implementation(compose.runtime) - implementation(libs.bundles.constraintlayout.common) } androidMain.dependencies { implementation(libs.bundles.work.android) } - val desktopMain by getting - desktopMain.dependencies { - implementation(libs.koin.compose) - } } compilerOptions { diff --git a/feature/account-impl/src/iosMain/kotlin/org/michaelbel/movies/account/ui/AccountRoute.ios.kt b/feature/account-impl/src/iosMain/kotlin/org/michaelbel/movies/account/ui/AccountRoute.ios.kt index f3704110a..36b4e9ab1 100644 --- a/feature/account-impl/src/iosMain/kotlin/org/michaelbel/movies/account/ui/AccountRoute.ios.kt +++ b/feature/account-impl/src/iosMain/kotlin/org/michaelbel/movies/account/ui/AccountRoute.ios.kt @@ -1,15 +1,20 @@ package org.michaelbel.movies.account.ui import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier +import org.koin.compose.koinInject +import org.michaelbel.movies.account.AccountViewModel +import org.michaelbel.movies.persistence.database.ktx.orEmpty +import org.michaelbel.movies.ui.ktx.collectAsStateCommon @Composable fun AccountRoute( onBackClick: () -> Unit, modifier: Modifier = Modifier, - //viewModel: AccountViewModel = koinInject() + viewModel: AccountViewModel = koinInject() ) { - /*val account by viewModel.account.collectAsStateCommon() + val account by viewModel.account.collectAsStateCommon() AccountScreenContent( account = account.orEmpty, @@ -17,5 +22,5 @@ fun AccountRoute( onBackClick = onBackClick, onLogoutClick = { viewModel.onLogoutClick(onBackClick) }, modifier = modifier - )*/ + ) } \ No newline at end of file diff --git a/feature/account-impl/src/desktopMain/kotlin/org/michaelbel/movies/account/AccountViewModel.kt b/feature/account-impl/src/jvmMain/kotlin/org/michaelbel/movies/account/AccountViewModel.kt similarity index 100% rename from feature/account-impl/src/desktopMain/kotlin/org/michaelbel/movies/account/AccountViewModel.kt rename to feature/account-impl/src/jvmMain/kotlin/org/michaelbel/movies/account/AccountViewModel.kt diff --git a/feature/account-impl/src/desktopMain/kotlin/org/michaelbel/movies/account/di/AccountKoinModule.desktop.kt b/feature/account-impl/src/jvmMain/kotlin/org/michaelbel/movies/account/di/AccountKoinModule.desktop.kt similarity index 100% rename from feature/account-impl/src/desktopMain/kotlin/org/michaelbel/movies/account/di/AccountKoinModule.desktop.kt rename to feature/account-impl/src/jvmMain/kotlin/org/michaelbel/movies/account/di/AccountKoinModule.desktop.kt diff --git a/feature/account-impl/src/desktopMain/kotlin/org/michaelbel/movies/account/ui/AccountRoute.desktop.kt b/feature/account-impl/src/jvmMain/kotlin/org/michaelbel/movies/account/ui/AccountRoute.desktop.kt similarity index 100% rename from feature/account-impl/src/desktopMain/kotlin/org/michaelbel/movies/account/ui/AccountRoute.desktop.kt rename to feature/account-impl/src/jvmMain/kotlin/org/michaelbel/movies/account/ui/AccountRoute.desktop.kt diff --git a/feature/account/build.gradle.kts b/feature/account/build.gradle.kts index 643a45777..0e55f201d 100644 --- a/feature/account/build.gradle.kts +++ b/feature/account/build.gradle.kts @@ -11,7 +11,7 @@ plugins { kotlin { androidTarget() - jvm("desktop") + jvm() iosX64() iosArm64() iosSimulatorArm64() @@ -20,10 +20,6 @@ kotlin { commonMain.dependencies { api(project(":feature:account-impl")) } - val desktopMain by getting - desktopMain.dependencies { - implementation(compose.material3) - } } compilerOptions { diff --git a/feature/account/src/desktopMain/kotlin/org/michaelbel/movies/account/AccountNavigation.desktop.kt b/feature/account/src/jvmMain/kotlin/org/michaelbel/movies/account/AccountNavigation.desktop.kt similarity index 100% rename from feature/account/src/desktopMain/kotlin/org/michaelbel/movies/account/AccountNavigation.desktop.kt rename to feature/account/src/jvmMain/kotlin/org/michaelbel/movies/account/AccountNavigation.desktop.kt diff --git a/feature/auth-impl/build.gradle.kts b/feature/auth-impl/build.gradle.kts index 4ae00dae8..2f01890ea 100644 --- a/feature/auth-impl/build.gradle.kts +++ b/feature/auth-impl/build.gradle.kts @@ -11,7 +11,7 @@ plugins { kotlin { androidTarget() - jvm("desktop") + jvm() iosX64() iosArm64() iosSimulatorArm64() @@ -22,17 +22,6 @@ kotlin { api(project(":core:ui")) api(project(":core:common")) api(project(":core:interactor")) - implementation(compose.components.resources) - implementation(compose.material3) - implementation(libs.bundles.constraintlayout.common) - } - val desktopMain by getting - desktopMain.dependencies { - implementation(compose.foundation) - implementation(compose.material) - implementation(compose.material3) - implementation(compose.runtime) - implementation(libs.koin.compose) } } diff --git a/feature/auth-impl/src/iosMain/kotlin/org/michaelbel/movies/auth/ui/AuthRoute.ios.kt b/feature/auth-impl/src/iosMain/kotlin/org/michaelbel/movies/auth/ui/AuthRoute.ios.kt index 470e17522..e52495e92 100644 --- a/feature/auth-impl/src/iosMain/kotlin/org/michaelbel/movies/auth/ui/AuthRoute.ios.kt +++ b/feature/auth-impl/src/iosMain/kotlin/org/michaelbel/movies/auth/ui/AuthRoute.ios.kt @@ -2,14 +2,17 @@ package org.michaelbel.movies.auth.ui import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import org.koin.compose.koinInject +import org.michaelbel.movies.auth.AuthViewModel +import org.michaelbel.movies.common.browser.openUrl @Composable fun AuthRoute( onBackClick: () -> Unit, modifier: Modifier = Modifier, - //viewModel: AuthViewModel = koinInject() + viewModel: AuthViewModel = koinInject() ) { - /*AuthScreenContent( + AuthScreenContent( error = null, signInLoading = false, loginLoading = false, @@ -20,5 +23,5 @@ fun AuthRoute( onResetRequestToken = {}, onUrlClick = { url -> openUrl(url) }, modifier = modifier - )*/ + ) } \ No newline at end of file diff --git a/feature/auth-impl/src/desktopMain/kotlin/org/michaelbel/movies/auth/AuthViewModel.kt b/feature/auth-impl/src/jvmMain/kotlin/org/michaelbel/movies/auth/AuthViewModel.kt similarity index 100% rename from feature/auth-impl/src/desktopMain/kotlin/org/michaelbel/movies/auth/AuthViewModel.kt rename to feature/auth-impl/src/jvmMain/kotlin/org/michaelbel/movies/auth/AuthViewModel.kt diff --git a/feature/auth-impl/src/desktopMain/kotlin/org/michaelbel/movies/auth/di/AuthKoinModule.desktop.kt b/feature/auth-impl/src/jvmMain/kotlin/org/michaelbel/movies/auth/di/AuthKoinModule.desktop.kt similarity index 100% rename from feature/auth-impl/src/desktopMain/kotlin/org/michaelbel/movies/auth/di/AuthKoinModule.desktop.kt rename to feature/auth-impl/src/jvmMain/kotlin/org/michaelbel/movies/auth/di/AuthKoinModule.desktop.kt diff --git a/feature/auth-impl/src/desktopMain/kotlin/org/michaelbel/movies/auth/ui/AuthRoute.desktop.kt b/feature/auth-impl/src/jvmMain/kotlin/org/michaelbel/movies/auth/ui/AuthRoute.desktop.kt similarity index 100% rename from feature/auth-impl/src/desktopMain/kotlin/org/michaelbel/movies/auth/ui/AuthRoute.desktop.kt rename to feature/auth-impl/src/jvmMain/kotlin/org/michaelbel/movies/auth/ui/AuthRoute.desktop.kt diff --git a/feature/auth/build.gradle.kts b/feature/auth/build.gradle.kts index 91e8ea382..4eb5e6124 100644 --- a/feature/auth/build.gradle.kts +++ b/feature/auth/build.gradle.kts @@ -11,7 +11,7 @@ plugins { kotlin { androidTarget() - jvm("desktop") + jvm() iosX64() iosArm64() iosSimulatorArm64() @@ -20,11 +20,6 @@ kotlin { commonMain.dependencies { api(project(":feature:auth-impl")) } - val desktopMain by getting - desktopMain.dependencies { - implementation(compose.material) - implementation(compose.material3) - } } compilerOptions { diff --git a/feature/auth/src/desktopMain/kotlin/org/michaelbel/movies/auth/AuthNavigation.desktop.kt b/feature/auth/src/jvmMain/kotlin/org/michaelbel/movies/auth/AuthNavigation.desktop.kt similarity index 100% rename from feature/auth/src/desktopMain/kotlin/org/michaelbel/movies/auth/AuthNavigation.desktop.kt rename to feature/auth/src/jvmMain/kotlin/org/michaelbel/movies/auth/AuthNavigation.desktop.kt diff --git a/feature/auth/src/desktopMain/kotlin/org/michaelbel/movies/auth/Settings.desktop.kt b/feature/auth/src/jvmMain/kotlin/org/michaelbel/movies/auth/Settings.desktop.kt similarity index 100% rename from feature/auth/src/desktopMain/kotlin/org/michaelbel/movies/auth/Settings.desktop.kt rename to feature/auth/src/jvmMain/kotlin/org/michaelbel/movies/auth/Settings.desktop.kt diff --git a/feature/debug-impl/build.gradle.kts b/feature/debug-impl/build.gradle.kts index c0773b505..ee535b60d 100644 --- a/feature/debug-impl/build.gradle.kts +++ b/feature/debug-impl/build.gradle.kts @@ -14,7 +14,6 @@ kotlin { sourceSets { commonMain.dependencies { - api(project(":core:common")) api(project(":core:ui")) implementation(project(":core:platform-services:interactor")) implementation(project(":core:interactor")) diff --git a/feature/details-impl/build.gradle.kts b/feature/details-impl/build.gradle.kts index 232f22d36..5b8cd0311 100644 --- a/feature/details-impl/build.gradle.kts +++ b/feature/details-impl/build.gradle.kts @@ -11,7 +11,7 @@ plugins { kotlin { androidTarget() - jvm("desktop") + jvm() iosX64() iosArm64() iosSimulatorArm64() @@ -20,19 +20,7 @@ kotlin { commonMain.dependencies { api(project(":core:navigation")) api(project(":core:ui")) - api(project(":core:common")) api(project(":core:interactor")) - implementation(compose.components.resources) - implementation(compose.material3) - implementation(libs.bundles.constraintlayout.common) - } - val desktopMain by getting - desktopMain.dependencies { - implementation(compose.foundation) - implementation(compose.material) - implementation(compose.material3) - implementation(compose.runtime) - implementation(libs.koin.compose) } } diff --git a/feature/details-impl/src/iosMain/kotlin/org/michaelbel/movies/details/DetailsViewModel.kt b/feature/details-impl/src/iosMain/kotlin/org/michaelbel/movies/details/DetailsViewModel.kt index 55451f266..8a35d6604 100644 --- a/feature/details-impl/src/iosMain/kotlin/org/michaelbel/movies/details/DetailsViewModel.kt +++ b/feature/details-impl/src/iosMain/kotlin/org/michaelbel/movies/details/DetailsViewModel.kt @@ -17,7 +17,7 @@ class DetailsViewModel( ): BaseViewModel() { private val movieList: PagingKey? = savedStateHandle["movieList"] - private val movieId: MovieId = 0//savedStateHandle.require("movieId") + private val movieId: MovieId = savedStateHandle["movieId"] ?: 0 private val _detailsState = MutableStateFlow(ScreenState.Loading) val detailsState = _detailsState.asStateFlow() diff --git a/feature/details-impl/src/iosMain/kotlin/org/michaelbel/movies/details/ui/DetailsRoute.ios.kt b/feature/details-impl/src/iosMain/kotlin/org/michaelbel/movies/details/ui/DetailsRoute.ios.kt index 9102a68ff..17b69ad65 100644 --- a/feature/details-impl/src/iosMain/kotlin/org/michaelbel/movies/details/ui/DetailsRoute.ios.kt +++ b/feature/details-impl/src/iosMain/kotlin/org/michaelbel/movies/details/ui/DetailsRoute.ios.kt @@ -1,22 +1,29 @@ package org.michaelbel.movies.details.ui import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier +import androidx.lifecycle.createSavedStateHandle +import androidx.lifecycle.viewmodel.compose.viewModel +import org.koin.compose.koinInject +import org.michaelbel.movies.details.DetailsViewModel +import org.michaelbel.movies.interactor.Interactor +import org.michaelbel.movies.ui.ktx.collectAsStateCommon @Composable fun DetailsRoute( onBackClick: () -> Unit, onNavigateToGallery: (Int) -> Unit, modifier: Modifier = Modifier, - //interactor: Interactor = koinInject(), - //viewModel: DetailsViewModel = viewModel { DetailsViewModel(createSavedStateHandle(), interactor) } + interactor: Interactor = koinInject(), + viewModel: DetailsViewModel = viewModel { DetailsViewModel(createSavedStateHandle(), interactor) } ) { - /*val detailsState by viewModel.detailsState.collectAsStateCommon() + val detailsState by viewModel.detailsState.collectAsStateCommon() DetailsScreenContent( onBackClick = onBackClick, onNavigateToGallery = onNavigateToGallery, detailsState = detailsState, modifier = modifier - )*/ + ) } \ No newline at end of file diff --git a/feature/details-impl/src/desktopMain/kotlin/org/michaelbel/movies/details/DetailsViewModel.kt b/feature/details-impl/src/jvmMain/kotlin/org/michaelbel/movies/details/DetailsViewModel.kt similarity index 100% rename from feature/details-impl/src/desktopMain/kotlin/org/michaelbel/movies/details/DetailsViewModel.kt rename to feature/details-impl/src/jvmMain/kotlin/org/michaelbel/movies/details/DetailsViewModel.kt diff --git a/feature/details-impl/src/desktopMain/kotlin/org/michaelbel/movies/details/di/DetailsKoinModule.desktop.kt b/feature/details-impl/src/jvmMain/kotlin/org/michaelbel/movies/details/di/DetailsKoinModule.desktop.kt similarity index 100% rename from feature/details-impl/src/desktopMain/kotlin/org/michaelbel/movies/details/di/DetailsKoinModule.desktop.kt rename to feature/details-impl/src/jvmMain/kotlin/org/michaelbel/movies/details/di/DetailsKoinModule.desktop.kt diff --git a/feature/details-impl/src/desktopMain/kotlin/org/michaelbel/movies/details/ui/DetailsContent.desktop.kt b/feature/details-impl/src/jvmMain/kotlin/org/michaelbel/movies/details/ui/DetailsContent.desktop.kt similarity index 100% rename from feature/details-impl/src/desktopMain/kotlin/org/michaelbel/movies/details/ui/DetailsContent.desktop.kt rename to feature/details-impl/src/jvmMain/kotlin/org/michaelbel/movies/details/ui/DetailsContent.desktop.kt diff --git a/feature/details-impl/src/desktopMain/kotlin/org/michaelbel/movies/details/ui/DetailsLoading.desktop.kt b/feature/details-impl/src/jvmMain/kotlin/org/michaelbel/movies/details/ui/DetailsLoading.desktop.kt similarity index 100% rename from feature/details-impl/src/desktopMain/kotlin/org/michaelbel/movies/details/ui/DetailsLoading.desktop.kt rename to feature/details-impl/src/jvmMain/kotlin/org/michaelbel/movies/details/ui/DetailsLoading.desktop.kt diff --git a/feature/details-impl/src/desktopMain/kotlin/org/michaelbel/movies/details/ui/DetailsRoute.desktop.kt b/feature/details-impl/src/jvmMain/kotlin/org/michaelbel/movies/details/ui/DetailsRoute.desktop.kt similarity index 100% rename from feature/details-impl/src/desktopMain/kotlin/org/michaelbel/movies/details/ui/DetailsRoute.desktop.kt rename to feature/details-impl/src/jvmMain/kotlin/org/michaelbel/movies/details/ui/DetailsRoute.desktop.kt diff --git a/feature/details-impl/src/desktopMain/kotlin/org/michaelbel/movies/details/ui/DetailsScreenContent.desktop.kt b/feature/details-impl/src/jvmMain/kotlin/org/michaelbel/movies/details/ui/DetailsScreenContent.desktop.kt similarity index 100% rename from feature/details-impl/src/desktopMain/kotlin/org/michaelbel/movies/details/ui/DetailsScreenContent.desktop.kt rename to feature/details-impl/src/jvmMain/kotlin/org/michaelbel/movies/details/ui/DetailsScreenContent.desktop.kt diff --git a/feature/details/build.gradle.kts b/feature/details/build.gradle.kts index 194ed8188..2ad95c61e 100644 --- a/feature/details/build.gradle.kts +++ b/feature/details/build.gradle.kts @@ -11,7 +11,7 @@ plugins { kotlin { androidTarget() - jvm("desktop") + jvm() iosX64() iosArm64() iosSimulatorArm64() @@ -20,11 +20,6 @@ kotlin { commonMain.dependencies { api(project(":feature:details-impl")) } - val desktopMain by getting - desktopMain.dependencies { - implementation(compose.material) - implementation(compose.material3) - } } compilerOptions { diff --git a/feature/details/src/desktopMain/kotlin/org/michaelbel/movies/details/DetailsNavigation.desktop.kt b/feature/details/src/jvmMain/kotlin/org/michaelbel/movies/details/DetailsNavigation.desktop.kt similarity index 100% rename from feature/details/src/desktopMain/kotlin/org/michaelbel/movies/details/DetailsNavigation.desktop.kt rename to feature/details/src/jvmMain/kotlin/org/michaelbel/movies/details/DetailsNavigation.desktop.kt diff --git a/feature/feed-impl/build.gradle.kts b/feature/feed-impl/build.gradle.kts index c8798ff3d..7590bc5bd 100644 --- a/feature/feed-impl/build.gradle.kts +++ b/feature/feed-impl/build.gradle.kts @@ -11,7 +11,7 @@ plugins { kotlin { androidTarget() - jvm("desktop") + jvm() iosX64() iosArm64() iosSimulatorArm64() @@ -19,27 +19,13 @@ kotlin { sourceSets { commonMain.dependencies { api(project(":core:ui")) - api(project(":core:common")) api(project(":core:navigation")) api(project(":core:interactor")) api(project(":core:platform-services:interactor")) implementation(project(":core:notifications")) - implementation(libs.bundles.constraintlayout.common) - implementation(compose.foundation) - implementation(compose.runtime) - implementation(compose.material3) - implementation(compose.components.resources) } androidMain.dependencies { - implementation(libs.bundles.paging.common) // fixme ломает navigation - } - val desktopMain by getting - desktopMain.dependencies { - implementation(compose.foundation) - implementation(compose.material) - implementation(compose.material3) - implementation(compose.runtime) - implementation(libs.koin.compose) + implementation(libs.bundles.paging.common) } } diff --git a/feature/feed-impl/src/iosMain/kotlin/org/michaelbel/movies/feed/ui/FeedRoute.desktop.kt b/feature/feed-impl/src/iosMain/kotlin/org/michaelbel/movies/feed/ui/FeedRoute.desktop.kt index 0e2d4ee2d..b7d643894 100644 --- a/feature/feed-impl/src/iosMain/kotlin/org/michaelbel/movies/feed/ui/FeedRoute.desktop.kt +++ b/feature/feed-impl/src/iosMain/kotlin/org/michaelbel/movies/feed/ui/FeedRoute.desktop.kt @@ -1,9 +1,11 @@ package org.michaelbel.movies.feed.ui -import androidx.compose.foundation.clickable -import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier +import org.koin.compose.koinInject +import org.michaelbel.movies.feed.FeedViewModel +import org.michaelbel.movies.ui.ktx.collectAsStateCommon @Composable fun FeedRoute( @@ -13,14 +15,9 @@ fun FeedRoute( onNavigateToSettings: () -> Unit, onNavigateToDetails: (String, Int) -> Unit, modifier: Modifier = Modifier, - //viewModel: FeedViewModel = koinInject() + viewModel: FeedViewModel = koinInject() ) { - Text( - text = "settings", - modifier = Modifier.clickable { onNavigateToSettings() } - ) - - /*val currentFeedView by viewModel.currentFeedView.collectAsStateCommon() + val currentFeedView by viewModel.currentFeedView.collectAsStateCommon() val currentMovieList by viewModel.currentMovieList.collectAsStateCommon() val pagingData by viewModel.pagingDataFlow.collectAsStateCommon() @@ -34,5 +31,5 @@ fun FeedRoute( onNavigateToSettings = onNavigateToSettings, onNavigateToDetails = onNavigateToDetails, modifier = modifier - )*/ + ) } \ No newline at end of file diff --git a/feature/feed-impl/src/desktopMain/kotlin/org/michaelbel/movies/feed/FeedViewModel.kt b/feature/feed-impl/src/jvmMain/kotlin/org/michaelbel/movies/feed/FeedViewModel.kt similarity index 100% rename from feature/feed-impl/src/desktopMain/kotlin/org/michaelbel/movies/feed/FeedViewModel.kt rename to feature/feed-impl/src/jvmMain/kotlin/org/michaelbel/movies/feed/FeedViewModel.kt diff --git a/feature/feed-impl/src/desktopMain/kotlin/org/michaelbel/movies/feed/di/FeedKoinModule.desktop.kt b/feature/feed-impl/src/jvmMain/kotlin/org/michaelbel/movies/feed/di/FeedKoinModule.desktop.kt similarity index 100% rename from feature/feed-impl/src/desktopMain/kotlin/org/michaelbel/movies/feed/di/FeedKoinModule.desktop.kt rename to feature/feed-impl/src/jvmMain/kotlin/org/michaelbel/movies/feed/di/FeedKoinModule.desktop.kt diff --git a/feature/feed-impl/src/desktopMain/kotlin/org/michaelbel/movies/feed/ui/FeedRoute.desktop.kt b/feature/feed-impl/src/jvmMain/kotlin/org/michaelbel/movies/feed/ui/FeedRoute.desktop.kt similarity index 100% rename from feature/feed-impl/src/desktopMain/kotlin/org/michaelbel/movies/feed/ui/FeedRoute.desktop.kt rename to feature/feed-impl/src/jvmMain/kotlin/org/michaelbel/movies/feed/ui/FeedRoute.desktop.kt diff --git a/feature/feed-impl/src/desktopMain/kotlin/org/michaelbel/movies/feed/ui/FeedScreenContent.desktop.kt b/feature/feed-impl/src/jvmMain/kotlin/org/michaelbel/movies/feed/ui/FeedScreenContent.desktop.kt similarity index 100% rename from feature/feed-impl/src/desktopMain/kotlin/org/michaelbel/movies/feed/ui/FeedScreenContent.desktop.kt rename to feature/feed-impl/src/jvmMain/kotlin/org/michaelbel/movies/feed/ui/FeedScreenContent.desktop.kt diff --git a/feature/feed/build.gradle.kts b/feature/feed/build.gradle.kts index 46e346b7d..aede5a62e 100644 --- a/feature/feed/build.gradle.kts +++ b/feature/feed/build.gradle.kts @@ -11,7 +11,7 @@ plugins { kotlin { androidTarget() - jvm("desktop") + jvm() iosX64() iosArm64() iosSimulatorArm64() @@ -20,11 +20,6 @@ kotlin { commonMain.dependencies { api(project(":feature:feed-impl")) } - val desktopMain by getting - desktopMain.dependencies { - implementation(compose.material) - implementation(compose.material3) - } } compilerOptions { diff --git a/feature/feed/src/desktopMain/kotlin/org/michaelbel/movies/feed/FeedNavigation.desktop.kt b/feature/feed/src/jvmMain/kotlin/org/michaelbel/movies/feed/FeedNavigation.desktop.kt similarity index 100% rename from feature/feed/src/desktopMain/kotlin/org/michaelbel/movies/feed/FeedNavigation.desktop.kt rename to feature/feed/src/jvmMain/kotlin/org/michaelbel/movies/feed/FeedNavigation.desktop.kt diff --git a/feature/gallery-impl/build.gradle.kts b/feature/gallery-impl/build.gradle.kts index 9c5d5b18e..8b4e1a2bd 100644 --- a/feature/gallery-impl/build.gradle.kts +++ b/feature/gallery-impl/build.gradle.kts @@ -11,7 +11,7 @@ plugins { kotlin { androidTarget() - jvm("desktop") + jvm() iosX64() iosArm64() iosSimulatorArm64() @@ -20,18 +20,8 @@ kotlin { commonMain.dependencies { api(project(":core:ui")) api(project(":core:work")) - api(project(":core:common")) api(project(":core:interactor")) api(project(":core:navigation")) - implementation(libs.bundles.constraintlayout.common) - } - val desktopMain by getting - desktopMain.dependencies { - implementation(compose.foundation) - implementation(compose.material) - implementation(compose.material3) - implementation(compose.runtime) - implementation(libs.koin.compose) } } diff --git a/feature/gallery-impl/src/iosMain/kotlin/org/michaelbel/movies/gallery/ui/GalleryRoute.ios.kt b/feature/gallery-impl/src/iosMain/kotlin/org/michaelbel/movies/gallery/ui/GalleryRoute.ios.kt index d2b8a38f2..697057f9c 100644 --- a/feature/gallery-impl/src/iosMain/kotlin/org/michaelbel/movies/gallery/ui/GalleryRoute.ios.kt +++ b/feature/gallery-impl/src/iosMain/kotlin/org/michaelbel/movies/gallery/ui/GalleryRoute.ios.kt @@ -4,12 +4,14 @@ import androidx.compose.foundation.clickable import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import org.koin.compose.koinInject +import org.michaelbel.movies.gallery.GalleryViewModel @Composable fun GalleryRoute( onBackClick: () -> Unit, modifier: Modifier = Modifier, - //viewModel: GalleryViewModel = koinInject() + viewModel: GalleryViewModel = koinInject() ) { Text( text = "Gallery", diff --git a/feature/gallery-impl/src/desktopMain/kotlin/org/michaelbel/movies/gallery/GalleryViewModel.kt b/feature/gallery-impl/src/jvmMain/kotlin/org/michaelbel/movies/gallery/GalleryViewModel.kt similarity index 100% rename from feature/gallery-impl/src/desktopMain/kotlin/org/michaelbel/movies/gallery/GalleryViewModel.kt rename to feature/gallery-impl/src/jvmMain/kotlin/org/michaelbel/movies/gallery/GalleryViewModel.kt diff --git a/feature/gallery-impl/src/desktopMain/kotlin/org/michaelbel/movies/gallery/di/GalleryKoinModule.desktop.kt b/feature/gallery-impl/src/jvmMain/kotlin/org/michaelbel/movies/gallery/di/GalleryKoinModule.desktop.kt similarity index 100% rename from feature/gallery-impl/src/desktopMain/kotlin/org/michaelbel/movies/gallery/di/GalleryKoinModule.desktop.kt rename to feature/gallery-impl/src/jvmMain/kotlin/org/michaelbel/movies/gallery/di/GalleryKoinModule.desktop.kt diff --git a/feature/gallery-impl/src/desktopMain/kotlin/org/michaelbel/movies/gallery/ui/GalleryRoute.desktop.kt b/feature/gallery-impl/src/jvmMain/kotlin/org/michaelbel/movies/gallery/ui/GalleryRoute.desktop.kt similarity index 100% rename from feature/gallery-impl/src/desktopMain/kotlin/org/michaelbel/movies/gallery/ui/GalleryRoute.desktop.kt rename to feature/gallery-impl/src/jvmMain/kotlin/org/michaelbel/movies/gallery/ui/GalleryRoute.desktop.kt diff --git a/feature/gallery/build.gradle.kts b/feature/gallery/build.gradle.kts index 49dcaf4a9..92f8d82a9 100644 --- a/feature/gallery/build.gradle.kts +++ b/feature/gallery/build.gradle.kts @@ -11,7 +11,7 @@ plugins { kotlin { androidTarget() - jvm("desktop") + jvm() iosX64() iosArm64() iosSimulatorArm64() @@ -20,11 +20,6 @@ kotlin { commonMain.dependencies { api(project(":feature:gallery-impl")) } - val desktopMain by getting - desktopMain.dependencies { - implementation(compose.material) - implementation(compose.material3) - } } compilerOptions { diff --git a/feature/gallery/src/desktopMain/kotlin/org/michaelbel/movies/gallery/GalleryNavigation.desktop.kt b/feature/gallery/src/jvmMain/kotlin/org/michaelbel/movies/gallery/GalleryNavigation.desktop.kt similarity index 100% rename from feature/gallery/src/desktopMain/kotlin/org/michaelbel/movies/gallery/GalleryNavigation.desktop.kt rename to feature/gallery/src/jvmMain/kotlin/org/michaelbel/movies/gallery/GalleryNavigation.desktop.kt diff --git a/feature/main-impl/build.gradle.kts b/feature/main-impl/build.gradle.kts index 8556090a2..d61064d12 100644 --- a/feature/main-impl/build.gradle.kts +++ b/feature/main-impl/build.gradle.kts @@ -11,7 +11,7 @@ plugins { kotlin { androidTarget() - jvm("desktop") + jvm() iosX64() iosArm64() iosSimulatorArm64() @@ -29,10 +29,6 @@ kotlin { androidMain.dependencies { api(project(":feature:debug")) } - val desktopMain by getting - desktopMain.dependencies { - implementation(libs.koin.compose) - } } compilerOptions { diff --git a/feature/main-impl/src/desktopMain/kotlin/org/michaelbel/movies/main/MainContent.desktop.kt b/feature/main-impl/src/jvmMain/kotlin/org/michaelbel/movies/main/MainContent.desktop.kt similarity index 100% rename from feature/main-impl/src/desktopMain/kotlin/org/michaelbel/movies/main/MainContent.desktop.kt rename to feature/main-impl/src/jvmMain/kotlin/org/michaelbel/movies/main/MainContent.desktop.kt diff --git a/feature/main-impl/src/desktopMain/kotlin/org/michaelbel/movies/main/MainViewModel.kt b/feature/main-impl/src/jvmMain/kotlin/org/michaelbel/movies/main/MainViewModel.kt similarity index 100% rename from feature/main-impl/src/desktopMain/kotlin/org/michaelbel/movies/main/MainViewModel.kt rename to feature/main-impl/src/jvmMain/kotlin/org/michaelbel/movies/main/MainViewModel.kt diff --git a/feature/main-impl/src/desktopMain/kotlin/org/michaelbel/movies/main/di/MainKoinModule.desktop.kt b/feature/main-impl/src/jvmMain/kotlin/org/michaelbel/movies/main/di/MainKoinModule.desktop.kt similarity index 100% rename from feature/main-impl/src/desktopMain/kotlin/org/michaelbel/movies/main/di/MainKoinModule.desktop.kt rename to feature/main-impl/src/jvmMain/kotlin/org/michaelbel/movies/main/di/MainKoinModule.desktop.kt diff --git a/feature/search-impl/build.gradle.kts b/feature/search-impl/build.gradle.kts index 52cb6c4e9..a646a2cf0 100644 --- a/feature/search-impl/build.gradle.kts +++ b/feature/search-impl/build.gradle.kts @@ -11,7 +11,7 @@ plugins { kotlin { androidTarget() - jvm("desktop") + jvm() iosX64() iosArm64() iosSimulatorArm64() @@ -20,21 +20,11 @@ kotlin { commonMain.dependencies { api(project(":core:navigation")) api(project(":core:ui")) - api(project(":core:common")) api(project(":core:interactor")) implementation(project(":core:notifications")) - implementation(libs.bundles.constraintlayout.common) } androidMain.dependencies { - implementation(libs.bundles.paging.common) // fixme ломает navigation - } - val desktopMain by getting - desktopMain.dependencies { - implementation(compose.foundation) - implementation(compose.material) - implementation(compose.material3) - implementation(compose.runtime) - implementation(libs.koin.compose) + implementation(libs.bundles.paging.common) } } diff --git a/feature/search-impl/src/iosMain/kotlin/org/michaelbel/movies/search/ui/SearchRoute.ios.kt b/feature/search-impl/src/iosMain/kotlin/org/michaelbel/movies/search/ui/SearchRoute.ios.kt index 5290b3bbb..aa2341dcc 100644 --- a/feature/search-impl/src/iosMain/kotlin/org/michaelbel/movies/search/ui/SearchRoute.ios.kt +++ b/feature/search-impl/src/iosMain/kotlin/org/michaelbel/movies/search/ui/SearchRoute.ios.kt @@ -4,15 +4,17 @@ import androidx.compose.foundation.clickable import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import org.koin.compose.koinInject import org.michaelbel.movies.persistence.database.typealiases.MovieId import org.michaelbel.movies.persistence.database.typealiases.PagingKey +import org.michaelbel.movies.search.SearchViewModel @Composable fun SearchRoute( onBackClick: () -> Unit, onNavigateToDetails: (PagingKey, MovieId) -> Unit, modifier: Modifier = Modifier, - //viewModel: SearchViewModel = koinInject() + viewModel: SearchViewModel = koinInject() ) { Text( text = "Feed", diff --git a/feature/search-impl/src/desktopMain/kotlin/org/michaelbel/movies/search/SearchViewModel.kt b/feature/search-impl/src/jvmMain/kotlin/org/michaelbel/movies/search/SearchViewModel.kt similarity index 100% rename from feature/search-impl/src/desktopMain/kotlin/org/michaelbel/movies/search/SearchViewModel.kt rename to feature/search-impl/src/jvmMain/kotlin/org/michaelbel/movies/search/SearchViewModel.kt diff --git a/feature/search-impl/src/desktopMain/kotlin/org/michaelbel/movies/search/di/SearchKoinModule.desktop.kt b/feature/search-impl/src/jvmMain/kotlin/org/michaelbel/movies/search/di/SearchKoinModule.desktop.kt similarity index 100% rename from feature/search-impl/src/desktopMain/kotlin/org/michaelbel/movies/search/di/SearchKoinModule.desktop.kt rename to feature/search-impl/src/jvmMain/kotlin/org/michaelbel/movies/search/di/SearchKoinModule.desktop.kt diff --git a/feature/search-impl/src/desktopMain/kotlin/org/michaelbel/movies/search/ui/SearchRoute.desktop.kt b/feature/search-impl/src/jvmMain/kotlin/org/michaelbel/movies/search/ui/SearchRoute.desktop.kt similarity index 100% rename from feature/search-impl/src/desktopMain/kotlin/org/michaelbel/movies/search/ui/SearchRoute.desktop.kt rename to feature/search-impl/src/jvmMain/kotlin/org/michaelbel/movies/search/ui/SearchRoute.desktop.kt diff --git a/feature/search/build.gradle.kts b/feature/search/build.gradle.kts index 5a93a4f01..2965ab4e2 100644 --- a/feature/search/build.gradle.kts +++ b/feature/search/build.gradle.kts @@ -11,7 +11,7 @@ plugins { kotlin { androidTarget() - jvm("desktop") + jvm() iosX64() iosArm64() iosSimulatorArm64() @@ -20,11 +20,6 @@ kotlin { commonMain.dependencies { api(project(":feature:search-impl")) } - val desktopMain by getting - desktopMain.dependencies { - implementation(compose.material) - implementation(compose.material3) - } } compilerOptions { diff --git a/feature/search/src/desktopMain/kotlin/org/michaelbel/movies/search/SearchNavigation.desktop.kt b/feature/search/src/jvmMain/kotlin/org/michaelbel/movies/search/SearchNavigation.desktop.kt similarity index 100% rename from feature/search/src/desktopMain/kotlin/org/michaelbel/movies/search/SearchNavigation.desktop.kt rename to feature/search/src/jvmMain/kotlin/org/michaelbel/movies/search/SearchNavigation.desktop.kt diff --git a/feature/settings-impl/build.gradle.kts b/feature/settings-impl/build.gradle.kts index 9ea8b05bc..ce652622b 100644 --- a/feature/settings-impl/build.gradle.kts +++ b/feature/settings-impl/build.gradle.kts @@ -11,7 +11,7 @@ plugins { kotlin { androidTarget() - jvm("desktop") + jvm() iosX64() iosArm64() iosSimulatorArm64() @@ -20,21 +20,9 @@ kotlin { commonMain.dependencies { api(project(":core:navigation")) api(project(":core:ui")) - api(project(":core:common")) api(project(":core:interactor")) api(project(":core:widget")) api(project(":core:platform-services:interactor")) - implementation(compose.components.resources) - implementation(compose.foundation) - implementation(compose.material3) - implementation(compose.runtime) - implementation(libs.bundles.constraintlayout.common) - } - val desktopMain by getting - desktopMain.dependencies { - implementation(compose.desktop.currentOs) - implementation(libs.bundles.kotlinx.coroutines.desktop) - implementation(libs.koin.compose) } } diff --git a/feature/settings-impl/src/iosMain/kotlin/org/michaelbel/movies/settings/ui/SettingsRoute.ios.kt b/feature/settings-impl/src/iosMain/kotlin/org/michaelbel/movies/settings/ui/SettingsRoute.ios.kt index aefac7a48..f6c0dfff9 100644 --- a/feature/settings-impl/src/iosMain/kotlin/org/michaelbel/movies/settings/ui/SettingsRoute.ios.kt +++ b/feature/settings-impl/src/iosMain/kotlin/org/michaelbel/movies/settings/ui/SettingsRoute.ios.kt @@ -1,21 +1,45 @@ package org.michaelbel.movies.settings.ui -import androidx.compose.foundation.clickable -import androidx.compose.material3.Text +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import org.jetbrains.compose.resources.stringResource +import org.koin.compose.koinInject +import org.michaelbel.movies.common.gender.GrammaticalGender +import org.michaelbel.movies.interactor.entity.AppLanguage +import org.michaelbel.movies.settings.SettingsViewModel +import org.michaelbel.movies.settings.model.SettingsData +import org.michaelbel.movies.settings.model.isAboutFeatureEnabled +import org.michaelbel.movies.settings.model.isAppIconFeatureEnabled +import org.michaelbel.movies.settings.model.isBiometricFeatureEnabled +import org.michaelbel.movies.settings.model.isDynamicColorsFeatureEnabled +import org.michaelbel.movies.settings.model.isFeedViewFeatureEnabled +import org.michaelbel.movies.settings.model.isGenderFeatureEnabled +import org.michaelbel.movies.settings.model.isGithubFeatureEnabled +import org.michaelbel.movies.settings.model.isLanguageFeatureEnabled +import org.michaelbel.movies.settings.model.isMovieListFeatureEnabled +import org.michaelbel.movies.settings.model.isNotificationsFeatureEnabled +import org.michaelbel.movies.settings.model.isReviewAppFeatureEnabled +import org.michaelbel.movies.settings.model.isScreenshotFeatureEnabled +import org.michaelbel.movies.settings.model.isThemeFeatureEnabled +import org.michaelbel.movies.settings.model.isTileFeatureEnabled +import org.michaelbel.movies.settings.model.isUpdateAppFeatureEnabled +import org.michaelbel.movies.settings.model.isWidgetFeatureEnabled +import org.michaelbel.movies.ui.appicon.IconAlias +import org.michaelbel.movies.ui.ktx.collectAsStateCommon +import org.michaelbel.movies.ui.strings.MoviesStrings @Composable fun SettingsRoute( onBackClick: () -> Unit, modifier: Modifier = Modifier, - //viewModel: SettingsViewModel = koinInject() + viewModel: SettingsViewModel = koinInject() ) { - Text( - text = "feed", - modifier = Modifier.clickable { onBackClick() } - ) - /*val currentLanguage = AppLanguage.transform(stringResource(MoviesStrings.language_code)) + val currentLanguage = AppLanguage.transform(stringResource(MoviesStrings.language_code)) val themeData by viewModel.themeData.collectAsStateCommon() val currentFeedView by viewModel.currentFeedView.collectAsStateCommon() val currentMovieList by viewModel.currentMovieList.collectAsStateCommon() @@ -118,5 +142,5 @@ fun SettingsRoute( windowInsets = WindowInsets(0.dp, 0.dp, 0.dp, 0.dp), snackbarHostState = snackbarHostState, modifier = modifier - )*/ + ) } \ No newline at end of file diff --git a/feature/settings-impl/src/desktopMain/kotlin/org/michaelbel/movies/settings/SettingsViewModel.kt b/feature/settings-impl/src/jvmMain/kotlin/org/michaelbel/movies/settings/SettingsViewModel.kt similarity index 100% rename from feature/settings-impl/src/desktopMain/kotlin/org/michaelbel/movies/settings/SettingsViewModel.kt rename to feature/settings-impl/src/jvmMain/kotlin/org/michaelbel/movies/settings/SettingsViewModel.kt diff --git a/feature/settings-impl/src/desktopMain/kotlin/org/michaelbel/movies/settings/di/SettingsKoinModule.desktop.kt b/feature/settings-impl/src/jvmMain/kotlin/org/michaelbel/movies/settings/di/SettingsKoinModule.desktop.kt similarity index 100% rename from feature/settings-impl/src/desktopMain/kotlin/org/michaelbel/movies/settings/di/SettingsKoinModule.desktop.kt rename to feature/settings-impl/src/jvmMain/kotlin/org/michaelbel/movies/settings/di/SettingsKoinModule.desktop.kt diff --git a/feature/settings-impl/src/desktopMain/kotlin/org/michaelbel/movies/settings/ktx/GenderStringKtx.desktop.kt b/feature/settings-impl/src/jvmMain/kotlin/org/michaelbel/movies/settings/ktx/GenderStringKtx.desktop.kt similarity index 100% rename from feature/settings-impl/src/desktopMain/kotlin/org/michaelbel/movies/settings/ktx/GenderStringKtx.desktop.kt rename to feature/settings-impl/src/jvmMain/kotlin/org/michaelbel/movies/settings/ktx/GenderStringKtx.desktop.kt diff --git a/feature/settings-impl/src/desktopMain/kotlin/org/michaelbel/movies/settings/model/Features.desktop.kt b/feature/settings-impl/src/jvmMain/kotlin/org/michaelbel/movies/settings/model/Features.desktop.kt similarity index 100% rename from feature/settings-impl/src/desktopMain/kotlin/org/michaelbel/movies/settings/model/Features.desktop.kt rename to feature/settings-impl/src/jvmMain/kotlin/org/michaelbel/movies/settings/model/Features.desktop.kt diff --git a/feature/settings-impl/src/desktopMain/kotlin/org/michaelbel/movies/settings/ui/SettingsRoute.desktop.kt b/feature/settings-impl/src/jvmMain/kotlin/org/michaelbel/movies/settings/ui/SettingsRoute.desktop.kt similarity index 100% rename from feature/settings-impl/src/desktopMain/kotlin/org/michaelbel/movies/settings/ui/SettingsRoute.desktop.kt rename to feature/settings-impl/src/jvmMain/kotlin/org/michaelbel/movies/settings/ui/SettingsRoute.desktop.kt diff --git a/feature/settings/build.gradle.kts b/feature/settings/build.gradle.kts index 764acee13..ac8344215 100644 --- a/feature/settings/build.gradle.kts +++ b/feature/settings/build.gradle.kts @@ -11,7 +11,7 @@ plugins { kotlin { androidTarget() - jvm("desktop") + jvm() iosX64() iosArm64() iosSimulatorArm64() @@ -20,11 +20,6 @@ kotlin { commonMain.dependencies { api(project(":feature:settings-impl")) } - val desktopMain by getting - desktopMain.dependencies { - implementation(compose.material) - implementation(compose.material3) - } } compilerOptions { diff --git a/feature/settings/src/desktopMain/kotlin/org/michaelbel/movies/settings/SettingsNavigation.desktop.kt b/feature/settings/src/jvmMain/kotlin/org/michaelbel/movies/settings/SettingsNavigation.desktop.kt similarity index 100% rename from feature/settings/src/desktopMain/kotlin/org/michaelbel/movies/settings/SettingsNavigation.desktop.kt rename to feature/settings/src/jvmMain/kotlin/org/michaelbel/movies/settings/SettingsNavigation.desktop.kt diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b42179645..0a3f0d9d4 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -84,6 +84,7 @@ barista = "4.3.0" kotest = "5.9.1" sqldelight = "2.0.2" koin = "3.6.0-wasm-alpha2" +koin-compose = "1.2.0-Beta4" constraintlayout-compose-multiplatform = "0.4.0" okio = "3.9.0" buildkonfig = "0.15.1" @@ -229,11 +230,8 @@ sqldelight-sqlite-driver = { module = "app.cash.sqldelight:sqlite-driver", versi koin-android = { module = "io.insert-koin:koin-android", version.ref = "koin" } koin-androidx-compose = { module = "io.insert-koin:koin-androidx-compose", version.ref = "koin" } koin-androidx-workmanager = { module = "io.insert-koin:koin-androidx-workmanager", version.ref = "koin" } -koin-core = { module = "io.insert-koin:koin-core", version.ref = "koin" } -koin-core-jvm = { module = "io.insert-koin:koin-core-jvm", version.ref = "koin" } -koin-compose = { module = "io.insert-koin:koin-compose", version.ref = "koin" } -koin-test = { module = "io.insert-koin:koin-test", version.ref = "koin" } -koin-test-junit4 = { module = "io.insert-koin:koin-test-junit4", version.ref = "koin" } +koin-compose = { module = "io.insert-koin:koin-compose", version.ref = "koin-compose" } +koin-compose-viewmodel = { module = "io.insert-koin:koin-compose-viewmodel", version.ref = "koin-compose" } constraintlayout-compose-multiplatform = { module = "tech.annexflow.compose:constraintlayout-compose-multiplatform", version.ref = "constraintlayout-compose-multiplatform" } okio = { module = "com.squareup.okio:okio", version.ref = "okio" } napier = { module = "io.github.aakira:napier", version.ref = "napier" } @@ -293,7 +291,8 @@ ktor-common = [ "ktor-serialization-kotlinx-json" ] koin-common = [ - "koin-core" + "koin-compose", + "koin-compose-viewmodel" ] coil-common = [ "coil3-compose", @@ -419,9 +418,6 @@ ktor-android = [ "ktor-client-android" ] koin-android = [ - "koin-android" -] -koin-compose-work-android = [ "koin-android", "koin-androidx-compose", "koin-androidx-workmanager" diff --git a/iosApp/iosApp.xcodeproj/project.xcworkspace/xcuserdata/mihailbelyj.xcuserdatad/UserInterfaceState.xcuserstate b/iosApp/iosApp.xcodeproj/project.xcworkspace/xcuserdata/mihailbelyj.xcuserdatad/UserInterfaceState.xcuserstate index 56449aa221c13c3c2920273474177ad4560ba10b..3675cf112e6e9aa1128063d64d148d185c2eeffd 100644 GIT binary patch delta 13661 zcmai)2V9fKAMkVctPo_Wh=ND}*D_|Ns5GFMJ5Od+xdMz2CU|-5s9|_s@k3 zG+@TU>R;W)fU#g47!M|ZNx%%IfOo)j;0R`OwII@b8GHq02-~|*wXXpZZ!#=PtbcOw(8}x=g&=(GdfiM_`!f+^su`mgafax#;7Q!M}0@bhz z)<7L>fQ`@u+h9AK04Kp&a5kI+=fZjLeYhNc09U}3umgS=2-m|ca1Y!I_rYWEI6MKr zf#1Tb@H==7eh;t1AK(r6Bm5cu!X-jqa|jVeL=jRVmWU&U62piTVmOgTq!U?0Hjzi< z6GeoIC?(1W9Z^f@i8`X0XdzmOw~0xFnP7=`h*`vJVh*vGc$avOSVDY2tROmwJ;VXx zAaR8FlsG|rMtn}3Ay;(Ovcag+FoctQL_yfhQ9NC62*ND?GTQY1}^ zNEfm<*@yHX2a=v-02xRIk-=mb8A-;FGBS}&B9qA!ayXeuW|7%s4XGn*Nj+Id8pwLG zfovq3$Y!#I98XRlCzDgicgQ*9Tyh?{lw3x>PcA1{k)7lkax=MwJVAa&o+Qnu$kXKK zK@L zIn-Qg9yQ-gan$>ih3cf%P+O^O)JN2I>SJmj^(l3fI!2wLzMy`hZc(?XpQ$_4UFsh7 z3w59Rm3lxuqW-1<4QYb5r+d*3v>V-@9zeU(gJ>T*m=2*w&?D(oI*m@JGiW)TNoUd7 zw1Up3i|Hy_Ls!%FbOYT;kD<+D>2dUU`fVD~GwE5hh3=%+&}->+^oR6%dIP63;Ij?EZs$aMSo9Ur+=XD(03WYK!#vQhGJ-jVT6nwBVz0sC#E0c z#&|Je#+wOZf|(E|hLJI`OdKB9J;fSdeDpU z4+@Qpjvc~jdW*T?efx49y~76IcLrUIu#c-n)K~57Tx6=zwCM_TEn^H?U06e#v#86h z{{ZetpKyNZbHyQ{cHUq6dz zFlXxDk8&ov0s=WNw*V?wViARKqx*>g%^mC$?$m|LMM*nE&VsHOnYWblcJp(MOR$LI zOR|l6y{?6?mFgNgERnBO^oKO%GyhW;_Q(IlP3j$JQwoX2J^C$i=%Z>3zT2)M#jJi-@=cAVE_54;rf(g12{oMLv0s#*Evlp0|doPQ~ zgRA!tlU<&J`g3Bp(Ecvn)1qn9RBKwT_1Sj~_TwL7O%Ae%0=X==0Yr$zn&TN3VG)I^ zot;w0X?3PHgRwcQZJccmqomP2ZMBfNEm@pJ6w7({_a+jCL|bbchHFdY4i9uEl2dFs zBT_A*k=%m;gJ@@AS9*pmGc(&F%HqCp_a}04^Ili!fU8vE;sxBt{e8%;B2^w==fGmz zpOXKJ{B@O;TMJN?RThz&8{+OqRBLUo=x{e`@heIlmdCOGifmV%!S+gnk44nTF`k2n zW}_`x2$(G-?|R&3buro32HpZ8P#Z z(Y0dbQod(ytFeT1RHSIN#`fkmTfe(H*Vvw|TW=A4SXR`kYiZUrS>?g4YvU&CGw~KY zqOEG@z9Te^y5<^9%Lrrh7+ni)fv^0d?K}AXc=G-6$Nky0+amh-4TXeVd-qvOh_Nmv zL|G0VwtRBPSJ3_Adt|Wfo8`!-+;dNfd5d5hR?d@xuLRezTHY4i6}$o@a0C8WF{42& z7zN6K5ic;NV5NK?d;mJYE^rK-0%yPta1$>ro?BJ2H(omU!w{GV6;K7sU?rT07Y9?| zdvGn>h*tui!86$J{|X<$Cqy5@m2f9Qv8PWVMw+ohH(-a3hy}zlVkLIm$B0wJRpK7; z8}SJHViESg66|-QNflX4R*)vrjQ#0!>_=CTJIGJ5|2&Od=b)buGkqyU=*32o>4Eb@9ImNed$2#s?xBFQed}aq}%AR z^n7|T_C33?zd25yq<^CC(l4+tac25pFXGR{W51zb@|bd_lF>3_u#1?*%w^VK$8eB2 z!(3v%VZOr-;STdFHvUe+{z4DoAYp(oLMRmu6{gzYL(n}P$DF&rbpI2k?cCwjpAceu zB_13Y9L9C|jB@R35%noeYr$fIrMaQindssT&O_huKJL!g&{SaYs5R)@TQt0(;3oNo z4JhCR!`s&)@+r=1!IG?PYjuWQe*OXYtsuv;QM?=nId_P49*J2)rqAr%c<2S({g1-O-M8FeBKnzF#!$2Cy018lrrDPm<8=LQU zz!Ir zBaBU^7F}yA9*0WP*si-Ma1b~OoInFG2_$PkBWME6z{rka$Fk$t@oT_n(1I&&V<)h0 z<4PxSj)BYdZ-KWvz(n>fcB0B=bGrmH1Tz5(P7QObXnV*3Z|`Q&9)b3fSHxAUrcFf(Twi|Gr%m)Imj2UqB&_$4#^khrUv~M z#IkGIb?k@idiF5;C3}zkh5eO{P&>Pf)K$0h4zmEes5TWghur4iOm0DlFGqzGI#nt( z;|xuP3A!2#p-sol4EE#7LcHC2Mt>f32_zlh0{eakxX3Q&CdGKjz!fmf0=@>{uph7% z*4$I{JMe>`UnjT*z6aOY73@lORVTQC5#3~0V?Z6;rRWImLX5i@`~rUapMt;Rf{)lv zTyPC%FY|0D%{A$o<;{hf>Q-k#PYZv8X9CIU)oeGZf55a3@RHr|x(nD(3k8yO5JCcy zkit%zVK=gy*v;$~b}PGW9kjy+!ybP+2m;uT*zN2-{CS9Ll1voC{&1i`(g_DZcj&?H zV0W^+I-w^}12y|GmKv6`3mvZTg8?1TpWV&wy&!OcLF^vuEMe0lQRNimv^O?dV2EIj zZR%#hFbkN)r?3#g2;5Z|$?nG!3!`y52Fkdlp#%FKU_ZG8%ARJwV2`jTI7xV1qKY5RDE273_aZEXW%#XfpoW#D z@)})po1xaAYbla9*XYKv$1s57Dub~##bmPeO9QL9&%(V33)FJQ!zIDB_+>q;g9bpC z)flzyO}K_4Wp+uMp-I=;rfD*2f?XSXhW%XaJcRR(Na;HUjx8IhDoisp>hf@bPB;#Z=jcd(;w?Cl z3y%y1Z*vuqF=jJ-2dgV&A%c_P6!t88jy=y_SOcfRX?Som*e>>KJenJ9L~*vR)~XLS zq_5S(sxK)mI!$S|X1uYz4SQo!Pwfc>=kZM6!KgJ16E_iHgf_ka1B-{*vWp=0oStMVuc!L-hlN9yQ)p>RrdRT zg?TI7@!x6!cM1l>kJ<0Anp|UpUXQ>xdBSR|5$|baKRon5uO1czz)#uhxMM%CLH`cO zH~F3D_5bnmXYiarvL2p#mh3K z{yx4;0=*GT!@9>JC`T|8!E6Le*xd*=AlSHbx2z6;0M0AUEf@g- z0uTWb0U7}z0wM%@A>fFBGoA**PvAuO1DXgVf;e@Y8~uuX`JZCx>Ptw7P;8vB09y!& zV9uNGM6v?*6#{_kh^w@h*%E}>nZsgT&$Y$J2#476C~kXvr!d);U^vb2dBRj%!j1ze zTkSJ#3468kGW==;cYZ{>eXcFfLG3)>nm2oBgRsz+=fu4nI?cYsmT*x!r@mIBPltK< zl@nFib`cdsC80*34+4D=aP1^CL^YvBpdSK(2qthKab>W9Xu#4()Fa^5K{O&TfQ@)_ zbfawz^#4yF&Y|6MMYIv)_=ehvF~nE|+!63VU|=UPo|r(qg@7jl{s>RP_lfgk5VkGE zWCRAWdoK}Fv2DN>f|y23CuR^cOIme}IxW9oK)@RTF#=u)`2AO#A-;G==k0yCZ*5QG zbBP54iG`R)%tycn0bdKT5SAk_m_5dQp5$j|l{#W6v5b3_k@J#|@#%>u~=qLWxdtR>bF9}??{4a7!b69Pd9gdh-#KsW-C2uKl#K_C`^_zlDs zVk@zY_=wm}>>zd$yNHhw7=l0r0uvBeg1`<0zC_>-f&_wt{)4L>vEK$Z*gE%zZ3)Sn zVsqS<7sgA9{b^eQd+*nRV1L$@7xjj~2rt_5qIuyEer-$0tb%vVmWZ>8>5sNV!hea4 z`z_*kfn+0boA{ZyL)^v7-d~9O#IM8y;x|s6<{FK_2n0qVkh+n0C>SgV5CjlUh(Gai zDuDP~Fc^U}Y=xXyCj>GPD8beae=FU&Dy<0QGkEezta$0{UaR{f?P0(gvKLU3y+~Xt z1M4uzKtRs!btav?yXS=LOS%dASx8qB3v3nw*%q=tIRF6#0!19i%k&#W`e36*dXZuh zOHB>}xd`NSlD_0%(hq@r1PTx+y&v~o8TZdwIdi~*B5WG>KZfPN!cVgrsh9sK$=fYk87>w17UATZVje4G_{o{Yj>m(PG@A7lfj=-3nIr#wd zUV(Y*6h0zl7r7cIJ8*KLg2!)V{|5fGWMl|8M!AYbvV#gQ+qvdUpt6yRYk=IZhXy3>@Ml_iB063gm)Z#?E%QcjdR zW=T0yE_f5$hw6(rvi&GGsy~HwZz%%H5O^Pf)`zDg^;76dPa5Xo!0nCAW^B!X^dl>Uw^FS^W4na9)KTetA?OhE3(;jX5?Dn-JKH zz?M#`h*I&ew<5632HPy8Dg;hcCB}QZkf%*)aIzXFdl&sno6=ErHk^7Z&h2lsX2sb| zjpuP1DHGoRw@|HA8`X~E0As0f2<${)7XsLA>_%V@0$5o0A+R5T0|*@4NKNR*IjI}x zWFF@yJva})#(BnyQ$a1@abih1)Pr;J{|D!CY9){J0}9XM5d=Q9P^&0BlSdIag~d|t zPpzdk@Tk^NA5!ZPIEKJ+1Wt5P8>vk^s?QKO`5M&@%w{KMQ(tUFwHqh*;N*M7Z=l*w zePWxKgVu>T&7(TZPt51s)nX6#N52eg=;vAz&QlYBY<_Y3xSIWTteV70$(9;Wh3=XH_2<=B=Ig3fv(^eAO6G90@nKXS}dPY|L`22Q!fy>iokak>Lv9GfollhmGx`W zNs}~V9X?H4hyOhuA8p4E|2j9n%)`%-?u}v7PP8-ag1`*~u!XqUN%x`q^00qG;8qW8 z+C$((55#m;34&mod$s-)N1eNlWNhOp^|!!{~52f{vu4 zXek{{$Ivna?jnHg&@TwwN8nck9w6`=0+`1`1Riaq<7_nPp*E9AC-XEP_t1ROV=^JI z(WG-QO*$8WKe}nsN}eX(N%Oy$rR}GOCS5|8fNCE9goDo+9x4Uz+8# zmagTC)$oq!Zw%Bz>){dvp0QWhpvs;tXSS|c-&W^B?CQ24bQ3+Ahun;VYbFHneEoyK z%TBt5Zsj4rLQwD;@&ruvElkz1$_jZBPMUEtq3R9Dlj*58$nWrwA>Pa_q4oTfKC}8I zdN%zY4|xtfm!5|sc?;-;^dg$W5xsX2BoU+#q!DBg6e4Jcpa?;G1bZRqu#v`FMt+4w zFSm&-y$VByj@^)S)jFox`>mPaPpw` z4NzC;Z~6AV#5=#8Kcg1!i1Ot^#oc)x*Q;70n-ZjR5oIlkmM2K8{1 zyyh5Z<(SX(!W}2rH_PBbjAh1g>kaYd3Cu)6zYgXt1k*d1w-L->gDP+^ zEe8j;ZQ-WZAub%UVO;1XY}=evWwsgSVy~u$(>C!K_9wA6LqB;^x;d zYx#lm0W^LmeCqg?)-D8XyBX#~X1#5sIt%k54p7))OUy|%Bc<`m;NwKd(- z&R%9eFCqI79M!=bK(Ls5+>m1CdwrN$+uhr72XSwEUO38pDd@M6ImR4kPB5P_Cz(^s zY36f$V(|rnr3hkET8wAaGPe8m6XI3&|GwfO94N%LV!q(71Dt=|gB{?#X~T3d8_Wgs!9wsZJ|S5KmV*^wCqCSM zh_B^51<&xc9HRS(+W{YPyWq<6($Tr@EruFA~+4f>DDh(@j=akHg9fD+YDa3gbCf^b#B-|Yzvf?g~l4q zc(JBU92J=m6Dtr31_*ov5<#ROL69WK7pMf~f=avyABXRr%*6+BtMDb0b<}!l3$+bj zGucUfOFg7s;uV++UUj+RDEX1w1z!(YMjyo& zJ^Zk>EoUmMw>0K5tMSc@HTZ7EdS3mQtytZ5U?D$=1^f*2C3B9sfF<`ba|IvG-N$z_ z`Uw4n3Bq(?h0r9NB%Ce$K)6!4T4)ij5v~)i7j6`87Jec;Ec{e>On5?gQg~W;M);-h zobZL6v)RtaF2kKPyU*>e*!^Jlquoz-x9#rOJ+yml_r&fmyT9$8i+YRvMMjuak}G7$Jve+$K8(S9Pc^)<@n6;h2twH z;6ykLa#`TA$z`w00hdo)j<_6kIqq`Zr~h2uCrX{xXyFk;JU;0 zoa+VGi(bdfUgy0odR_MV+Ur}d@4TLhDRD2cqu5#8TRcGQA@&q|iM_?i;v%s|JYGCY zyjZ+SyivSayjA>>c!&6~__+8>@j3AY@kQ|^@ip-i@iXt<-of5d??Ueq?+M;!?>XM@ zdN1)_=Dpl|h4(t|_1+u3H+ygO{>b~J_f_vde4KoOeax{w2|h!8l6+EpM)*|v=zZSt zndURYPvxieYxHaOGx@dnwfVj6XZAyWQ~aj-P4`>rx5Mv@-)(>3@96L1-^ah7e}8{> z{}}&7|1$pye|13L0PldXfQW#ofam~OKwLmVKze{YAS*x-kQk>9U_-$1 zfQtbS0-l=#$v`?#7$^$t73do17C0c#BhWL@D=;>&B5+~gj=%$fhXRiT9t}Jl*cEs^ z@OI$+z&`_D1qp&+kbRJQkati}(D0y>t2AdOui-Jc5mjssuR|KnrHNo0o zU9djb5Zn+vIryF6X~8psX9dp*o)^3zcv0};;P--;2EQM?HTY`qufb14JVK-)B_YO; zNg*8}$3rfJTnhOr@sbLP>f{21q<4o)RyKza&r+ERjgUBts=~ zNx7s}Vl+!8N~TDrN~TL@N)|{KNft}qlPr~NlJ zQ|Ok^U7@=}_lE8dJs5f+^rz52Ltll#Ffxn|vkx;ng!K#a4D$&K35y7e4;vbm7?vC+ z5332Q4XXBPr?p|eHwNw?2E9QVRyn_g$u*Q;eO%6!gIsx!ruy?6>bUt zIQ&BR#qi7FSHiyuzZ!lm!YQJEghzyDgja+lA~s@JL{dab#E6K@h=Pcgh_MmxMXZY0 z9I-dzXvA@I#AgwwA{`?8MM@$gBhw@EBFiExBGr*ABG*Okh};)>BJxV)4^j3}&QU|6 zGNSUM3ZjalMn#oGRY%oC)kf7t)kif(wMWg3S{h}E+7`7pYJb$hs6$alqE1JhiTX0? zT-1fAi%}1yj?zeJrnEp>C{;0ar6=|Sls=@IE^X_xf6^tSYl^q%y-^s)4b^e^e((&y1sv}3eKv?Mw#IwCqMIyzbw z9T%MtJv3Soog1AWT@YOqJu12+x-7aPS{*$%`jhB;F#}>o#bO*TU|OEyRLp=^U}vuvAe zyKJXyw``y6pzN^hQ`vFZN!e-H8QJYvBGx%JB6d`)A$D5q`?1?&&%|DfbB+s$i-=2& zOOMNpQ^e)P6~w9HO5)1n)N$2uHF2Zk#>Y*KGf$7388gP?n&I! z_{{iG@g?zP@s;s^B!C1Wfl3f2tV-CNur=YMgq=fTh72Dva!A?``H)|RJRS0E$crJb zhAtnve(1)bn}=>2mNG17Sl%$@u%cn-hJ82e`(Zx}yO|i07?+roI6N^mF(WZIQJGkj zSe#gzxH$2+Iq^Z_^Td})Ac;(3lI)WDCG}5oPx4HvPBJEqNgAItG0B`XEoo-boTT|l z3zLo{{g&K6**ke~azJuWazgUR)l$N>fU6iZNw$%A}NqDT`BacYchaY) z&rF}4J}-Si`l9r0>1Wd)W%SL6%c#tloY9eSB;#7f?Tot__cI=3{3RF22{|Pf%I)P2 zawoZqe30B%?k^9Lhsh)5(Q=u*L_S77MLtVDSH3{b$={c+kgt}TJLPNTXEOzv-kHIf zv6-2ficD2zMP_woL*}^5*_rb)mt?NV+>p6Bb6e)F%-xy$G7n^)%={|z>&zRO4>BKT z{+aoA=F2QW7Li3|*=MJ?)Z6BTB~WW{vFEX5qfJjDvdYQ+}CF2x?j ze#Iw>Z5y z&gPuYxt?=B7vz$;Os*)`A=f##Pj0{50l5Qny>g>-V{_wkhvW{+P0k&Wo0^-Ro0*%P zo0Hp+J1ciHzvn$N=ey=dTp%xKDwtoe zv*4S8e+mZ{4k;`y)D+ef>I)5pEro9tPAX&zrxZ>toL;!Na9QC8g{unJ6nB9Ske;2+i0!3tzU6Fl}W07-_SCMy7SW!$-T+xuC#G=%qjH0ZfoT9v<@kN`8z9_m} z^kdPJqNggLa#VSnRfAQLDw!%?HB^(g zV$~AWX4N*;cGXVR$Ev-m1FBC{hgC;a$5o%HZjOSZ{6}SsY85$UI(v;GXrRk-arHazLQeA0XX?;l5(zenurQ=H9GMBzxYA*et^g!wLGEnAMmQ`jfn^(4_?DMjVWnYzjQ+BoNr?Owm zek*%e_PFdx* zW%=6j_2rw&x0ZigzPJ29`JwV7<##JQDu!01RwyfU6?GM(D<)MetS~RG=%`p%v7usf z#rBGw6}v0;R-CN3RB^ZBe#LJUk1C#2JgsbdF#>P711>NVhdoq{>I3Q{ z>SOB9)MwOZ)fdzk)xVpo`c#Rl{Hg-0LaHLFq*XChu~lhR@+wtTMO9UmwyL(OsmfH< zS~aF>TvbQa#i~E5{?Ujuo*JhG)n(GJwcYlmx7wHew>ZGpC2TdA$mR%>gtwc1wgIPF{7N!lseY1*0E+1jnzGup4U z*R?-tZ)xvnf73qFKG8naKCAJqDXJM$W3HJ~v#Q2Yv#Dlp&6%3BHCJnXsJU5lyXKdg z2Q|OfJkkLjVb(e8Ty_0*9y+nkN9U&t(8+Wobj7+dU8PQ=tI_Fo^|~gVN!O|yqnoXp zr(2*~q+6_8qI+NWfo`R)L)WQWt2?T@QA^bZ)MnL=u6?(5SM9~x-)sM_eNp>L5A-5^ zAALW4f4zs^Q}3ns)`#h(dYL|6pQumKkJP8>&0765J*Qu)U#?%N@6@l=uh(zX@6#X9 zpVFVxcj+(dzt&&Z|ERyEzoWlb*QYMEuC~rtH?eMh-J-hXb?fU6)E%ljQ+K}ZV%=AD zSL?3T{ZRK~-NU+<24El!j6r1RWf)-aFnAioh9X0?L1(Bl;H$j`lVOhGUBgnta>EL< zVTa*_;hdq%aLI7l@U`J;y>q>1eRzFTeRTb>`qcW2`mFlG`s#W^y{UeD{i6D1^*icM z)nBgvy8deY_w_gGZ`MDof7$>V$OgJW*x=gGzrnr1vq9Y8(-6`S))3JU)sWPX)*x@l zZpdv=HIy`zH>evl4U-%8H{5Laz2R|#`ANgmhUX3cG}4WZjc$$ZjlPY+jp2<$8y!H_988jpdE%#t$0THtuOW)OfP-Qsb4zZyT>Q{?PbilUGwsr+51XGF31cs#gVD)2(CB9jG=><%jFH9!<1k~gafC6= zm|@fyCmNR+KR2E?UNL@S{Ly&Vc;EP&@saTl6EF!)_9jP@i>bfK!!*d`ZSpl`nn+};ym`<6_n9iCmo4z((HC23X`oVP9^tpAeY{U0O#KL+<{ A-T(jq delta 13609 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 I{}%cG15U|b5dZ)H diff --git a/iosAppCompose/build.gradle.kts b/iosAppCompose/build.gradle.kts index 5cc61c13a..d73f9e062 100644 --- a/iosAppCompose/build.gradle.kts +++ b/iosAppCompose/build.gradle.kts @@ -5,19 +5,19 @@ plugins { } kotlin { - iosX64("iosX64") { + iosX64 { binaries.framework { baseName = "iosAppCompose" isStatic = true } } - iosArm64("iosArm64") { + iosArm64 { binaries.framework { baseName = "iosAppCompose" isStatic = true } } - iosSimulatorArm64("iosSimulatorArm64") { + iosSimulatorArm64 { binaries.framework { baseName = "iosAppCompose" isStatic = true @@ -28,39 +28,7 @@ kotlin { commonMain.dependencies { implementation(project(":core:platform-services:inject-ios")) implementation(project(":feature:main-impl")) - implementation(compose.runtime) - implementation(compose.foundation) - implementation(compose.material) - implementation(compose.ui) - implementation(compose.components.resources) - implementation(compose.components.uiToolingPreview) - } - val iosX64Main by getting - iosX64Main.dependencies { - implementation(compose.runtime) - implementation(compose.foundation) - implementation(compose.material) - implementation(compose.ui) - implementation(compose.components.resources) - implementation(compose.components.uiToolingPreview) - } - val iosArm64Main by getting - iosArm64Main.dependencies { - implementation(compose.runtime) - implementation(compose.foundation) - implementation(compose.material) - implementation(compose.ui) - implementation(compose.components.resources) - implementation(compose.components.uiToolingPreview) - } - val iosSimulatorArm64Main by getting - iosSimulatorArm64Main.dependencies { - implementation(compose.runtime) - implementation(compose.foundation) - implementation(compose.material) - implementation(compose.ui) - implementation(compose.components.resources) - implementation(compose.components.uiToolingPreview) } + iosMain.dependencies {} } } \ No newline at end of file diff --git a/iosAppCompose/src/iosMain/kotlin/org/michaelbel/movies/MainContent.kt b/iosAppCompose/src/iosMain/kotlin/org/michaelbel/movies/MainContent.kt new file mode 100644 index 000000000..8925f75de --- /dev/null +++ b/iosAppCompose/src/iosMain/kotlin/org/michaelbel/movies/MainContent.kt @@ -0,0 +1,75 @@ +package org.michaelbel.movies + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.lifecycle.ViewModelStore +import androidx.lifecycle.ViewModelStoreOwner +import androidx.lifecycle.viewmodel.compose.LocalViewModelStoreOwner +import org.koin.compose.KoinApplication +import org.koin.compose.koinInject +import org.michaelbel.movies.common.ThemeData +import org.michaelbel.movies.di.appKoinModule +import org.michaelbel.movies.main.MainContent +import org.michaelbel.movies.main.MainViewModel +import org.michaelbel.movies.ui.ktx.collectAsStateCommon +import org.michaelbel.movies.ui.theme.MoviesTheme + +@Composable +fun IosMainContent() { + KoinApplication( + application = { + modules(appKoinModule) + } + ) { + val viewModel = koinInject() + val themeData by viewModel.themeData.collectAsStateCommon() + + withViewModelStoreOwner { + MoviesTheme( + themeData = ThemeData( + appTheme = themeData.appTheme, + dynamicColors = false, + paletteKey = themeData.paletteKey, + seedColor = themeData.seedColor + ), + theme = themeData.appTheme, + enableEdgeToEdge = { _,_ -> } + ) { + MainContent() + } + } + } +} + +private class ComposeViewModelStoreOwner: ViewModelStoreOwner { + override val viewModelStore = ViewModelStore() + fun dispose() { viewModelStore.clear() } +} + +@Composable +private fun rememberComposeViewModelStoreOwner(): ViewModelStoreOwner { + val viewModelStoreOwner = remember { ComposeViewModelStoreOwner() } + DisposableEffect(viewModelStoreOwner) { + onDispose { viewModelStoreOwner.dispose() } + } + return viewModelStoreOwner +} + +@Composable +internal fun withViewModelStoreOwner(content: @Composable () -> Unit) { + if (LocalViewModelStoreOwner.current != null) { + // Normal case: use system-provided owner + content() + } else { + // Fallback case: use ViewModelStoreOwner with scope of this composable. + // It's required for Compose Multiplatform for now because it's not providing default value yet. + // Expected to be fixed in Compose Multiplatform 1.7.0 + CompositionLocalProvider( + LocalViewModelStoreOwner provides rememberComposeViewModelStoreOwner(), + content = content + ) + } +} \ No newline at end of file diff --git a/iosAppCompose/src/iosMain/kotlin/org/michaelbel/movies/main/MainViewController.kt b/iosAppCompose/src/iosMain/kotlin/org/michaelbel/movies/MainViewController.kt similarity index 77% rename from iosAppCompose/src/iosMain/kotlin/org/michaelbel/movies/main/MainViewController.kt rename to iosAppCompose/src/iosMain/kotlin/org/michaelbel/movies/MainViewController.kt index 9f305a018..b43ca8d47 100644 --- a/iosAppCompose/src/iosMain/kotlin/org/michaelbel/movies/main/MainViewController.kt +++ b/iosAppCompose/src/iosMain/kotlin/org/michaelbel/movies/MainViewController.kt @@ -1,8 +1,9 @@ @file:Suppress("unused", "FunctionName") -package org.michaelbel.movies.main +package org.michaelbel.movies import androidx.compose.ui.window.ComposeUIViewController +import org.michaelbel.movies.IosMainContent import platform.UIKit.UIViewController fun MainViewController(): UIViewController { diff --git a/iosAppCompose/src/iosMain/kotlin/org/michaelbel/movies/di/AppKoinModule.kt b/iosAppCompose/src/iosMain/kotlin/org/michaelbel/movies/di/AppKoinModule.kt new file mode 100644 index 000000000..069b810a8 --- /dev/null +++ b/iosAppCompose/src/iosMain/kotlin/org/michaelbel/movies/di/AppKoinModule.kt @@ -0,0 +1,26 @@ +package org.michaelbel.movies.di + +import org.koin.dsl.module +import org.michaelbel.movies.account.di.accountKoinModule +import org.michaelbel.movies.auth.di.authKoinModule +import org.michaelbel.movies.details.di.detailsKoinModule +import org.michaelbel.movies.feed.di.feedKoinModule +import org.michaelbel.movies.gallery.di.galleryKoinModule +import org.michaelbel.movies.main.di.mainKoinModule +import org.michaelbel.movies.platform.inject.flavorServiceKtorModule +import org.michaelbel.movies.search.di.searchKoinModule +import org.michaelbel.movies.settings.di.settingsKoinModule + +internal val appKoinModule = module { + includes( + flavorServiceKtorModule, + mainKoinModule, + accountKoinModule, + authKoinModule, + detailsKoinModule, + feedKoinModule, + galleryKoinModule, + searchKoinModule, + settingsKoinModule + ) +} \ No newline at end of file diff --git a/iosAppCompose/src/iosMain/kotlin/org/michaelbel/movies/main/MainContent.kt b/iosAppCompose/src/iosMain/kotlin/org/michaelbel/movies/main/MainContent.kt deleted file mode 100644 index 8cf820132..000000000 --- a/iosAppCompose/src/iosMain/kotlin/org/michaelbel/movies/main/MainContent.kt +++ /dev/null @@ -1,24 +0,0 @@ -package org.michaelbel.movies.main - -import androidx.compose.runtime.Composable -import org.jetbrains.compose.ui.tooling.preview.Preview -import org.michaelbel.movies.common.ThemeData -import org.michaelbel.movies.common.theme.AppTheme -import org.michaelbel.movies.ui.theme.MoviesTheme - -@Composable -@Preview -fun IosMainContent() { - MoviesTheme( - themeData = ThemeData( - appTheme = AppTheme.FollowSystem, - dynamicColors = false, - paletteKey = 0, - seedColor = 0 - ), - theme = AppTheme.FollowSystem, - enableEdgeToEdge = { _,_ -> } - ) { - MainContent() - } -} \ No newline at end of file