From 3b4039a9584ad6e8bca2378b278eb40ae1b3abcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4=D0=B8=D0=BC=D0=B8=D1=80=20=D0=9C?= =?UTF-8?q?=D1=83=D0=B4=D1=80=D1=8F=D0=BA=D0=BE=D0=B2?= Date: Fri, 2 Sep 2022 10:18:12 +0300 Subject: [PATCH 01/17] podpec files added to git ignore --- utils-core/.gitignore | 2 ++ utils-core/utils_core.podspec | 39 ----------------------------------- 2 files changed, 2 insertions(+), 39 deletions(-) delete mode 100644 utils-core/utils_core.podspec diff --git a/utils-core/.gitignore b/utils-core/.gitignore index 796b96d..7ec9198 100644 --- a/utils-core/.gitignore +++ b/utils-core/.gitignore @@ -1 +1,3 @@ /build + +*.podspec \ No newline at end of file diff --git a/utils-core/utils_core.podspec b/utils-core/utils_core.podspec deleted file mode 100644 index 36e6837..0000000 --- a/utils-core/utils_core.podspec +++ /dev/null @@ -1,39 +0,0 @@ -Pod::Spec.new do |spec| - spec.name = 'utils_core' - spec.version = '1.5.2' - spec.homepage = 'https://github.com/Merseyside/mersey-kmp-library/tree/master/utils-core' - spec.source = { :http=> ''} - spec.authors = '' - spec.license = '' - spec.summary = 'A Kotlin multiplatform mobile library with useful utils' - spec.vendored_frameworks = 'build/cocoapods/framework/utils_core.framework' - spec.libraries = 'c++' - - spec.dependency 'Reachability', '3.2' - - spec.pod_target_xcconfig = { - 'KOTLIN_PROJECT_PATH' => ':utils-core', - 'PRODUCT_MODULE_NAME' => 'utils_core', - } - - spec.script_phases = [ - { - :name => 'Build utils_core', - :execution_position => :before_compile, - :shell_path => '/bin/sh', - :script => <<-SCRIPT - if [ "YES" = "$COCOAPODS_SKIP_KOTLIN_BUILD" ]; then - echo "Skipping Gradle build task invocation due to COCOAPODS_SKIP_KOTLIN_BUILD environment variable set to \"YES\"" - exit 0 - fi - set -ev - REPO_ROOT="$PODS_TARGET_SRCROOT" - "$REPO_ROOT/../../gradlew" -p "$REPO_ROOT" $KOTLIN_PROJECT_PATH:syncFramework \ - -Pkotlin.native.cocoapods.platform=$PLATFORM_NAME \ - -Pkotlin.native.cocoapods.archs="$ARCHS" \ - -Pkotlin.native.cocoapods.configuration="$CONFIGURATION" - SCRIPT - } - ] - -end \ No newline at end of file From 35bba1bb0762d1c62e09e74f8d712a51ebc9aad9 Mon Sep 17 00:00:00 2001 From: Ivan Sablin Date: Mon, 14 Nov 2022 14:44:45 +0600 Subject: [PATCH 02/17] Building changes and some ref --- archy-android/build.gradle.kts | 6 +++--- .../merseyLib/archy/android/di/SharedScopeExt.kt | 2 +- .../archy/android/di/state/AndroidKoinStateHolder.kt | 6 +++--- .../archy/android/presentation/activity/VMActivity.kt | 4 ++-- .../archy/android/presentation/fragment/VMFragment.kt | 4 ++-- archy-core/build.gradle.kts | 6 +++--- .../archy/core/di/ext/KoinSavedStateModuleExt.kt | 3 --- .../merseyLib/archy/core/{di => koin}/ext/KoinExt.kt | 2 +- .../archy/core/{di => koin}/state/KoinParametersState.kt | 2 +- build.gradle.kts | 4 +++- buildSrc/build.gradle.kts | 2 +- buildSrc/settings.gradle.kts | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- sample/androidApp/build.gradle.kts | 6 +++--- sample/mpp-library/build.gradle.kts | 6 +++--- settings.gradle.kts | 2 +- utils-core/build.gradle.kts | 6 +++--- .../merseyLib/utils/core/koin}/state/BundleExt.kt | 2 +- .../utils/core/koin}/state/KoinParametersState.kt | 2 +- .../merseyLib/utils/core/koin}/state/SavedStateExt.kt | 2 +- .../merseyLib/utils/core/koin}/KoinModuleLoader.kt | 7 +++---- .../merseyLib/utils/core/koin}/KoinStateViewModelOf.kt | 0 .../merseyLib/utils/core/koin}/SharedScopeHolder.kt | 2 +- .../merseyLib/utils/core/koin}/dsl/KoinModuleExt.kt | 6 +++--- .../merseyLib/utils/core/koin}/dsl/KoinScopeDSLExt.kt | 6 +++--- .../utils/core/koin/ext/KoinSavedStateModuleExt.kt | 3 +++ .../utils/core/koin}/ext/KoinSavedStateScopeExt.kt | 8 ++++---- .../koin}/moduleLoader/CoroutineScopeKoinModuleLoader.kt | 2 +- .../utils/core/koin}/moduleLoader/KoinModuleLoader.kt | 2 +- .../utils/core/koin}/state/KoinParametersState.kt | 2 +- .../utils/core/koin}/state/KoinSavedStateUtils.kt | 2 +- .../merseyLib/utils/core/koin}/state/KoinStateHolder.kt | 2 +- 32 files changed, 57 insertions(+), 56 deletions(-) delete mode 100644 archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/ext/KoinSavedStateModuleExt.kt rename archy-core/src/iosMain/kotlin/com/merseyside/merseyLib/archy/core/{di => koin}/ext/KoinExt.kt (94%) rename archy-core/src/iosMain/kotlin/com/merseyside/merseyLib/archy/core/{di => koin}/state/KoinParametersState.kt (80%) rename {archy-core/src/androidMain/kotlin/com/merseyside/merseyLib/archy/core/di => utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin}/state/BundleExt.kt (90%) rename {archy-core/src/androidMain/kotlin/com/merseyside/merseyLib/archy/core/di => utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin}/state/KoinParametersState.kt (85%) rename {archy-core/src/androidMain/kotlin/com/merseyside/merseyLib/archy/core/di => utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin}/state/SavedStateExt.kt (92%) rename {archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di => utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin}/KoinModuleLoader.kt (59%) rename {archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di => utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin}/KoinStateViewModelOf.kt (100%) rename {archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di => utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin}/SharedScopeHolder.kt (75%) rename {archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di => utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin}/dsl/KoinModuleExt.kt (81%) rename {archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di => utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin}/dsl/KoinScopeDSLExt.kt (81%) create mode 100644 utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/ext/KoinSavedStateModuleExt.kt rename {archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di => utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin}/ext/KoinSavedStateScopeExt.kt (75%) rename {archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di => utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin}/moduleLoader/CoroutineScopeKoinModuleLoader.kt (95%) rename {archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di => utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin}/moduleLoader/KoinModuleLoader.kt (95%) rename {archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di => utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin}/state/KoinParametersState.kt (79%) rename {archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di => utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin}/state/KoinSavedStateUtils.kt (88%) rename {archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di => utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin}/state/KoinStateHolder.kt (96%) diff --git a/archy-android/build.gradle.kts b/archy-android/build.gradle.kts index f392d21..708385f 100644 --- a/archy-android/build.gradle.kts +++ b/archy-android/build.gradle.kts @@ -3,8 +3,8 @@ plugins { with(catalogPlugins.plugins) { plugin(android.library) plugin(kotlin.android) - id(mersey.android.convention.id()) - id(mersey.kotlin.convention.id()) + id(mersey.android.extension.id()) + id(mersey.kotlin.extension.id()) plugin(kotlin.kapt) plugin(android.navigation.args) } @@ -25,7 +25,7 @@ android { } } -kotlinConvention { +kotlinExtension { debug = true setCompilerArgs( "-Xinline-classes", diff --git a/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/di/SharedScopeExt.kt b/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/di/SharedScopeExt.kt index 735a127..32ef411 100644 --- a/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/di/SharedScopeExt.kt +++ b/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/di/SharedScopeExt.kt @@ -1,7 +1,7 @@ package com.merseyside.merseyLib.archy.android.di import androidx.fragment.app.Fragment -import com.merseyside.merseyLib.archy.core.di.SharedScopeHolder +import com.merseyside.merseyLib.utils.core.koin.SharedScopeHolder import org.koin.core.scope.ScopeID fun Fragment.findParentSharedScopeHolder(scopeID: ScopeID? = null): SharedScopeHolder? { diff --git a/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/di/state/AndroidKoinStateHolder.kt b/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/di/state/AndroidKoinStateHolder.kt index 31cff38..93f71d5 100644 --- a/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/di/state/AndroidKoinStateHolder.kt +++ b/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/di/state/AndroidKoinStateHolder.kt @@ -1,10 +1,10 @@ package com.merseyside.merseyLib.archy.android.di.state import android.os.Bundle -import com.merseyside.merseyLib.archy.core.di.state.KoinStateHolder -import com.merseyside.merseyLib.archy.core.di.state.toSavedState +import com.merseyside.merseyLib.utils.core.koin.state.KoinStateHolder +import com.merseyside.merseyLib.utils.core.koin.state.toSavedState import com.merseyside.merseyLib.utils.core.state.SavedState -import com.merseyside.merseyLib.archy.core.di.state.toBundle +import com.merseyside.merseyLib.utils.core.koin.state.toBundle import org.koin.android.scope.AndroidScopeComponent import org.koin.core.context.loadKoinModules import org.koin.core.qualifier.Qualifier diff --git a/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/activity/VMActivity.kt b/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/activity/VMActivity.kt index 3a2fda8..297b823 100644 --- a/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/activity/VMActivity.kt +++ b/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/activity/VMActivity.kt @@ -5,9 +5,9 @@ import android.os.Bundle import androidx.annotation.CallSuper import androidx.databinding.ViewDataBinding import com.merseyside.archy.presentation.activity.BaseBindingActivity -import com.merseyside.merseyLib.archy.core.di.state.getStateKey +import com.merseyside.merseyLib.utils.core.koin.state.getStateKey import com.merseyside.merseyLib.archy.core.presentation.viewModel.BaseViewModel -import com.merseyside.merseyLib.archy.core.di.state.saveState +import com.merseyside.merseyLib.utils.core.koin.state.saveState import com.merseyside.merseyLib.kotlin.logger.Logger import com.merseyside.merseyLib.utils.core.state.StateSaver import com.merseyside.utils.reflection.ReflectionUtils diff --git a/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/fragment/VMFragment.kt b/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/fragment/VMFragment.kt index 487609d..a33f597 100644 --- a/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/fragment/VMFragment.kt +++ b/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/fragment/VMFragment.kt @@ -5,8 +5,8 @@ import android.os.Bundle import android.view.View import androidx.databinding.ViewDataBinding import com.merseyside.archy.presentation.fragment.BaseBindingFragment -import com.merseyside.merseyLib.archy.core.di.state.getStateKey -import com.merseyside.merseyLib.archy.core.di.state.saveState +import com.merseyside.merseyLib.utils.core.koin.state.getStateKey +import com.merseyside.merseyLib.utils.core.koin.state.saveState import com.merseyside.merseyLib.archy.core.presentation.viewModel.BaseViewModel import com.merseyside.merseyLib.kotlin.logger.Logger import com.merseyside.merseyLib.utils.core.state.StateSaver diff --git a/archy-core/build.gradle.kts b/archy-core/build.gradle.kts index 11a8970..c9bee42 100644 --- a/archy-core/build.gradle.kts +++ b/archy-core/build.gradle.kts @@ -3,8 +3,8 @@ plugins { with(catalogPlugins.plugins) { plugin(android.library) plugin(kotlin.multiplatform) - id(mersey.android.convention.id()) - id(mersey.kotlin.convention.id()) + id(mersey.android.extension.id()) + id(mersey.kotlin.extension.id()) plugin(kotlin.serialization) plugin(kotlin.kapt) plugin(moko.multiplatform) @@ -39,7 +39,7 @@ kotlin { } } -kotlinConvention { +kotlinExtension { debug = true setCompilerArgs( "-Xinline-classes", diff --git a/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/ext/KoinSavedStateModuleExt.kt b/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/ext/KoinSavedStateModuleExt.kt deleted file mode 100644 index 1f67e3b..0000000 --- a/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/ext/KoinSavedStateModuleExt.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.merseyside.merseyLib.archy.core.di.ext - - diff --git a/archy-core/src/iosMain/kotlin/com/merseyside/merseyLib/archy/core/di/ext/KoinExt.kt b/archy-core/src/iosMain/kotlin/com/merseyside/merseyLib/archy/core/koin/ext/KoinExt.kt similarity index 94% rename from archy-core/src/iosMain/kotlin/com/merseyside/merseyLib/archy/core/di/ext/KoinExt.kt rename to archy-core/src/iosMain/kotlin/com/merseyside/merseyLib/archy/core/koin/ext/KoinExt.kt index a8a7011..1ad3b49 100644 --- a/archy-core/src/iosMain/kotlin/com/merseyside/merseyLib/archy/core/di/ext/KoinExt.kt +++ b/archy-core/src/iosMain/kotlin/com/merseyside/merseyLib/archy/core/koin/ext/KoinExt.kt @@ -1,4 +1,4 @@ -package com.merseyside.merseyLib.archy.core.di.ext +package com.merseyside.merseyLib.archy.core.koin.ext import kotlinx.cinterop.ObjCClass import kotlinx.cinterop.getOriginalKotlinClass diff --git a/archy-core/src/iosMain/kotlin/com/merseyside/merseyLib/archy/core/di/state/KoinParametersState.kt b/archy-core/src/iosMain/kotlin/com/merseyside/merseyLib/archy/core/koin/state/KoinParametersState.kt similarity index 80% rename from archy-core/src/iosMain/kotlin/com/merseyside/merseyLib/archy/core/di/state/KoinParametersState.kt rename to archy-core/src/iosMain/kotlin/com/merseyside/merseyLib/archy/core/koin/state/KoinParametersState.kt index 540753a..04a5f27 100644 --- a/archy-core/src/iosMain/kotlin/com/merseyside/merseyLib/archy/core/di/state/KoinParametersState.kt +++ b/archy-core/src/iosMain/kotlin/com/merseyside/merseyLib/archy/core/koin/state/KoinParametersState.kt @@ -1,4 +1,4 @@ -package com.merseyside.merseyLib.archy.core.di.state +package com.merseyside.merseyLib.archy.core.koin.state import com.merseyside.merseyLib.utils.core.state.SavedState import org.koin.core.parameter.ParametersHolder diff --git a/build.gradle.kts b/build.gradle.kts index c3a885d..c1856c2 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,6 +2,8 @@ buildscript { repositories { gradlePluginPortal() } + + if (isLocalKotlinExtLibrary()) {} } plugins { @@ -16,4 +18,4 @@ allprojects { tasks.register("clean", Delete::class).configure { group = "build" delete(rootProject.buildDir) -} +} \ No newline at end of file diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 357835a..b28933c 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -19,7 +19,7 @@ dependencies { implementation(kotlin.gradle) implementation(kotlin.serialization) implementation(moko.resourcesGenerator) - implementation(sqlDelight) + implementation(sqldelight) implementation(nexusPublish) implementation(android.navigation.safeArgs) } diff --git a/buildSrc/settings.gradle.kts b/buildSrc/settings.gradle.kts index 1f0421f..e90692b 100644 --- a/buildSrc/settings.gradle.kts +++ b/buildSrc/settings.gradle.kts @@ -16,7 +16,7 @@ dependencyResolutionManagement { gradlePluginPortal() } - val catalogVersions = "1.5.6" + val catalogVersions = "1.6.2" val group = "io.github.merseyside" versionCatalogs { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 548ce74..4e5996f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Thu Feb 04 15:25:14 NOVT 2021 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/sample/androidApp/build.gradle.kts b/sample/androidApp/build.gradle.kts index e728c6f..dfdcdc9 100644 --- a/sample/androidApp/build.gradle.kts +++ b/sample/androidApp/build.gradle.kts @@ -3,8 +3,8 @@ plugins { with(catalogPlugins.plugins) { plugin(android.application) plugin(kotlin.android) - id(mersey.android.convention.id()) - id(mersey.kotlin.convention.id()) + id(mersey.android.extension.id()) + id(mersey.kotlin.extension.id()) plugin(kotlin.kapt) } } @@ -43,7 +43,7 @@ android { } } -kotlinConvention { +kotlinExtension { debug = true setCompilerArgs( "-Xinline-classes", diff --git a/sample/mpp-library/build.gradle.kts b/sample/mpp-library/build.gradle.kts index 04277b9..5262850 100644 --- a/sample/mpp-library/build.gradle.kts +++ b/sample/mpp-library/build.gradle.kts @@ -4,8 +4,8 @@ plugins { plugin(android.library) plugin(kotlin.multiplatform) plugin(moko.multiplatform) - id(mersey.kotlin.convention.id()) - id(mersey.android.convention.id()) + id(mersey.kotlin.extension.id()) + id(mersey.android.extension.id()) id(cocoapods.id()) } } @@ -24,7 +24,7 @@ val merseyModules = listOf( Modules.MultiPlatform.MerseyLibs.utils ) -kotlinConvention { +kotlinExtension { debug = true } diff --git a/settings.gradle.kts b/settings.gradle.kts index 0a17d12..eba8550 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -11,7 +11,7 @@ dependencyResolutionManagement { google() } - val catalogVersions = "1.5.6" + val catalogVersions = "1.6.1" val group = "io.github.merseyside" versionCatalogs { val multiplatformLibs by creating { diff --git a/utils-core/build.gradle.kts b/utils-core/build.gradle.kts index 763a647..1348437 100644 --- a/utils-core/build.gradle.kts +++ b/utils-core/build.gradle.kts @@ -4,8 +4,8 @@ plugins { plugin(android.library) plugin(kotlin.multiplatform) plugin(moko.multiplatform) - id(mersey.android.convention.id()) - id(mersey.kotlin.convention.id()) + id(mersey.android.extension.id()) + id(mersey.kotlin.extension.id()) plugin(kotlin.serialization) plugin(kotlin.kapt) id(cocoapods.id()) @@ -54,7 +54,7 @@ kotlin { } } -kotlinConvention { +kotlinExtension { debug = true setCompilerArgs( "-Xinline-classes", diff --git a/archy-core/src/androidMain/kotlin/com/merseyside/merseyLib/archy/core/di/state/BundleExt.kt b/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/state/BundleExt.kt similarity index 90% rename from archy-core/src/androidMain/kotlin/com/merseyside/merseyLib/archy/core/di/state/BundleExt.kt rename to utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/state/BundleExt.kt index a29bfe5..2e24b0e 100644 --- a/archy-core/src/androidMain/kotlin/com/merseyside/merseyLib/archy/core/di/state/BundleExt.kt +++ b/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/state/BundleExt.kt @@ -1,4 +1,4 @@ -package com.merseyside.merseyLib.archy.core.di.state +package com.merseyside.merseyLib.utils.core.koin.state import android.os.Bundle import com.merseyside.merseyLib.utils.core.state.SavedState diff --git a/archy-core/src/androidMain/kotlin/com/merseyside/merseyLib/archy/core/di/state/KoinParametersState.kt b/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/state/KoinParametersState.kt similarity index 85% rename from archy-core/src/androidMain/kotlin/com/merseyside/merseyLib/archy/core/di/state/KoinParametersState.kt rename to utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/state/KoinParametersState.kt index 2aad653..22cb478 100644 --- a/archy-core/src/androidMain/kotlin/com/merseyside/merseyLib/archy/core/di/state/KoinParametersState.kt +++ b/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/state/KoinParametersState.kt @@ -1,4 +1,4 @@ -package com.merseyside.merseyLib.archy.core.di.state +package com.merseyside.merseyLib.utils.core.koin.state import android.os.Bundle import com.merseyside.merseyLib.utils.core.state.SavedState diff --git a/archy-core/src/androidMain/kotlin/com/merseyside/merseyLib/archy/core/di/state/SavedStateExt.kt b/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/state/SavedStateExt.kt similarity index 92% rename from archy-core/src/androidMain/kotlin/com/merseyside/merseyLib/archy/core/di/state/SavedStateExt.kt rename to utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/state/SavedStateExt.kt index 58e6b27..409edf6 100644 --- a/archy-core/src/androidMain/kotlin/com/merseyside/merseyLib/archy/core/di/state/SavedStateExt.kt +++ b/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/state/SavedStateExt.kt @@ -1,5 +1,5 @@ @file:JvmName("StateExtAndroid") -package com.merseyside.merseyLib.archy.core.di.state +package com.merseyside.merseyLib.utils.core.koin.state import android.os.Bundle import com.merseyside.merseyLib.utils.core.state.SavedState diff --git a/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/KoinModuleLoader.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/KoinModuleLoader.kt similarity index 59% rename from archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/KoinModuleLoader.kt rename to utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/KoinModuleLoader.kt index 7f7a68a..767d7bf 100644 --- a/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/KoinModuleLoader.kt +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/KoinModuleLoader.kt @@ -1,16 +1,15 @@ -package com.merseyside.merseyLib.archy.core.di +package com.merseyside.merseyLib.utils.core.koin import org.koin.core.context.loadKoinModules import org.koin.core.context.unloadKoinModules import org.koin.core.module.Module -import org.koin.dsl.ModuleDeclaration import org.koin.dsl.module -abstract class KoinModuleLoader(val createdAtStart: Boolean = false) { +abstract class KoinModuleLoader(private val createdAtStart: Boolean = false) { abstract val moduleDefinition: Module.() -> Unit - private val module = module(createdAtStart, moduleDefinition) + private val module by lazy { module(createdAtStart, moduleDefinition) } fun load() { loadKoinModules(module) diff --git a/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/KoinStateViewModelOf.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/KoinStateViewModelOf.kt similarity index 100% rename from archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/KoinStateViewModelOf.kt rename to utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/KoinStateViewModelOf.kt diff --git a/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/SharedScopeHolder.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/SharedScopeHolder.kt similarity index 75% rename from archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/SharedScopeHolder.kt rename to utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/SharedScopeHolder.kt index cdf3b79..77726aa 100644 --- a/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/SharedScopeHolder.kt +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/SharedScopeHolder.kt @@ -1,4 +1,4 @@ -package com.merseyside.merseyLib.archy.core.di +package com.merseyside.merseyLib.utils.core.koin import org.koin.core.scope.Scope import org.koin.core.scope.ScopeID diff --git a/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/dsl/KoinModuleExt.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/dsl/KoinModuleExt.kt similarity index 81% rename from archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/dsl/KoinModuleExt.kt rename to utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/dsl/KoinModuleExt.kt index 7b71d14..aca2864 100644 --- a/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/dsl/KoinModuleExt.kt +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/dsl/KoinModuleExt.kt @@ -1,7 +1,7 @@ -package com.merseyside.merseyLib.archy.core.di.dsl +package com.merseyside.merseyLib.utils.core.koin.dsl -import com.merseyside.merseyLib.archy.core.di.ext.getSavedStateFromParams -import com.merseyside.merseyLib.archy.core.di.state.StateDefinition +import com.merseyside.merseyLib.utils.core.koin.ext.getSavedStateFromParams +import com.merseyside.merseyLib.utils.core.koin.state.StateDefinition import com.merseyside.merseyLib.utils.core.state.StateSaver import dev.icerock.moko.mvvm.viewmodel.ViewModel import org.koin.core.definition.Definition diff --git a/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/dsl/KoinScopeDSLExt.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/dsl/KoinScopeDSLExt.kt similarity index 81% rename from archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/dsl/KoinScopeDSLExt.kt rename to utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/dsl/KoinScopeDSLExt.kt index c602caf..286907b 100644 --- a/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/dsl/KoinScopeDSLExt.kt +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/dsl/KoinScopeDSLExt.kt @@ -1,7 +1,7 @@ -package com.merseyside.merseyLib.archy.core.di.dsl +package com.merseyside.merseyLib.utils.core.koin.dsl -import com.merseyside.merseyLib.archy.core.di.ext.getSavedStateFromParams -import com.merseyside.merseyLib.archy.core.di.state.StateDefinition +import com.merseyside.merseyLib.utils.core.koin.ext.getSavedStateFromParams +import com.merseyside.merseyLib.utils.core.koin.state.StateDefinition import com.merseyside.merseyLib.utils.core.state.StateSaver import dev.icerock.moko.mvvm.viewmodel.ViewModel import org.koin.core.definition.Definition diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/ext/KoinSavedStateModuleExt.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/ext/KoinSavedStateModuleExt.kt new file mode 100644 index 0000000..e4e4135 --- /dev/null +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/ext/KoinSavedStateModuleExt.kt @@ -0,0 +1,3 @@ +package com.merseyside.merseyLib.utils.core.koin.ext + + diff --git a/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/ext/KoinSavedStateScopeExt.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/ext/KoinSavedStateScopeExt.kt similarity index 75% rename from archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/ext/KoinSavedStateScopeExt.kt rename to utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/ext/KoinSavedStateScopeExt.kt index 850be71..37846e4 100644 --- a/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/ext/KoinSavedStateScopeExt.kt +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/ext/KoinSavedStateScopeExt.kt @@ -1,12 +1,12 @@ -package com.merseyside.merseyLib.archy.core.di.ext +package com.merseyside.merseyLib.utils.core.koin.ext -import com.merseyside.merseyLib.archy.core.di.state.KoinStateHolder -import com.merseyside.merseyLib.archy.core.di.state.getStateKey +import com.merseyside.merseyLib.utils.core.koin.state.KoinStateHolder +import com.merseyside.merseyLib.utils.core.koin.state.getStateKey import com.merseyside.merseyLib.utils.core.state.SavedState import com.merseyside.merseyLib.utils.core.state.StateSaver import org.koin.core.parameter.ParametersHolder import org.koin.core.scope.Scope -import com.merseyside.merseyLib.archy.core.di.state.getSavedStateFromParams +import com.merseyside.merseyLib.utils.core.koin.state.getSavedStateFromParams import com.merseyside.merseyLib.utils.core.state.DummySavedState inline fun getSavedStateFromParams(paramsHolder: ParametersHolder): SavedState { diff --git a/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/moduleLoader/CoroutineScopeKoinModuleLoader.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/moduleLoader/CoroutineScopeKoinModuleLoader.kt similarity index 95% rename from archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/moduleLoader/CoroutineScopeKoinModuleLoader.kt rename to utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/moduleLoader/CoroutineScopeKoinModuleLoader.kt index 36cfbc3..9fef8bd 100644 --- a/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/moduleLoader/CoroutineScopeKoinModuleLoader.kt +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/moduleLoader/CoroutineScopeKoinModuleLoader.kt @@ -1,4 +1,4 @@ -package com.merseyside.merseyLib.archy.core.di.moduleLoader +package com.merseyside.merseyLib.utils.core.koin.moduleLoader import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.cancel diff --git a/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/moduleLoader/KoinModuleLoader.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/moduleLoader/KoinModuleLoader.kt similarity index 95% rename from archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/moduleLoader/KoinModuleLoader.kt rename to utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/moduleLoader/KoinModuleLoader.kt index 119df71..cb453a3 100644 --- a/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/moduleLoader/KoinModuleLoader.kt +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/moduleLoader/KoinModuleLoader.kt @@ -1,4 +1,4 @@ -package com.merseyside.merseyLib.archy.core.di.moduleLoader +package com.merseyside.merseyLib.utils.core.koin.moduleLoader import org.koin.core.context.loadKoinModules import org.koin.core.context.unloadKoinModules diff --git a/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/state/KoinParametersState.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/state/KoinParametersState.kt similarity index 79% rename from archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/state/KoinParametersState.kt rename to utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/state/KoinParametersState.kt index edc8ca5..fb086ab 100644 --- a/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/state/KoinParametersState.kt +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/state/KoinParametersState.kt @@ -1,4 +1,4 @@ -package com.merseyside.merseyLib.archy.core.di.state +package com.merseyside.merseyLib.utils.core.koin.state import com.merseyside.merseyLib.utils.core.state.SavedState import org.koin.core.parameter.ParametersHolder diff --git a/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/state/KoinSavedStateUtils.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/state/KoinSavedStateUtils.kt similarity index 88% rename from archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/state/KoinSavedStateUtils.kt rename to utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/state/KoinSavedStateUtils.kt index 38d1521..7a481f5 100644 --- a/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/state/KoinSavedStateUtils.kt +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/state/KoinSavedStateUtils.kt @@ -1,4 +1,4 @@ -package com.merseyside.merseyLib.archy.core.di.state +package com.merseyside.merseyLib.utils.core.koin.state import com.merseyside.merseyLib.utils.core.state.SavedState import org.koin.core.parameter.ParametersHolder diff --git a/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/state/KoinStateHolder.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/state/KoinStateHolder.kt similarity index 96% rename from archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/state/KoinStateHolder.kt rename to utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/state/KoinStateHolder.kt index cc541ed..4cf95e8 100644 --- a/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/di/state/KoinStateHolder.kt +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/state/KoinStateHolder.kt @@ -1,4 +1,4 @@ -package com.merseyside.merseyLib.archy.core.di.state +package com.merseyside.merseyLib.utils.core.koin.state import com.merseyside.merseyLib.utils.core.state.DummySavedState import com.merseyside.merseyLib.utils.core.state.SavedState From e068d99af98ee7dbf329a6822f0846bf07bbb6c7 Mon Sep 17 00:00:00 2001 From: Ivan Sablin Date: Thu, 17 Nov 2022 15:01:59 +0600 Subject: [PATCH 03/17] Adding shared scope implementation --- .../di/state/AndroidKoinStateHolder.kt | 2 +- .../presentation/activity/VMActivity.kt | 6 +-- .../android/presentation/dialog/VMDialog.kt | 6 +-- .../presentation/fragment/VMFragment.kt | 6 +-- build.gradle.kts | 29 ++++++++++---- buildSrc/settings.gradle.kts | 2 +- buildSrc/src/main/kotlin/Versions.kt | 4 +- gradle.properties | 1 + settings.gradle.kts | 2 +- utils-core/build.gradle.kts | 3 +- .../koin/scope/ext/AndroidSharedScopeExt.kt | 39 +++++++++++++++++++ .../core/koin/scope/SharedScopeDefinition.kt | 10 +++++ .../utils/core/koin/scope/SharedScopeExt.kt | 16 ++++++++ 13 files changed, 103 insertions(+), 23 deletions(-) create mode 100644 utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/AndroidSharedScopeExt.kt create mode 100644 utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/SharedScopeDefinition.kt create mode 100644 utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/SharedScopeExt.kt diff --git a/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/di/state/AndroidKoinStateHolder.kt b/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/di/state/AndroidKoinStateHolder.kt index 93f71d5..212f377 100644 --- a/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/di/state/AndroidKoinStateHolder.kt +++ b/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/di/state/AndroidKoinStateHolder.kt @@ -38,7 +38,7 @@ interface AndroidKoinScopeState : AndroidScopeComponent { // ) // } - fun getKoinStateHolder(): KoinStateHolder = scope.get() + fun getKoinStateHolder(): KoinStateHolder = scope?.get() ?: throw NullPointerException("Scope is null") } diff --git a/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/activity/VMActivity.kt b/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/activity/VMActivity.kt index 297b823..76fce39 100644 --- a/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/activity/VMActivity.kt +++ b/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/activity/VMActivity.kt @@ -11,7 +11,7 @@ import com.merseyside.merseyLib.utils.core.koin.state.saveState import com.merseyside.merseyLib.kotlin.logger.Logger import com.merseyside.merseyLib.utils.core.state.StateSaver import com.merseyside.utils.reflection.ReflectionUtils -import org.koin.androidx.viewmodel.ext.android.getViewModel +import org.koin.androidx.viewmodel.ext.android.viewModelForClass import org.koin.core.context.loadKoinModules import org.koin.core.module.Module import org.koin.core.parameter.parametersOf @@ -37,10 +37,10 @@ abstract class VMActivity } protected open fun provideViewModel(bundle: Bundle?, vararg params: Any): Model { - return getViewModel( + return viewModelForClass( clazz = getViewModelClass(), parameters = { parametersOf(bundle, *params) } - ) + ).value } @CallSuper diff --git a/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/dialog/VMDialog.kt b/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/dialog/VMDialog.kt index 96acb7b..d09b87d 100644 --- a/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/dialog/VMDialog.kt +++ b/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/dialog/VMDialog.kt @@ -9,7 +9,7 @@ import com.merseyside.merseyLib.archy.core.presentation.viewModel.BaseViewModel import com.merseyside.merseyLib.archy.core.presentation.viewModel.entity.TextMessage import com.merseyside.merseyLib.kotlin.logger.Logger import com.merseyside.utils.reflection.ReflectionUtils -import org.koin.androidx.viewmodel.ext.android.getViewModel +import org.koin.androidx.viewmodel.ext.android.viewModelForClass import org.koin.core.context.loadKoinModules import org.koin.core.module.Module import org.koin.core.parameter.parametersOf @@ -49,10 +49,10 @@ abstract class VMDialog } protected open fun provideViewModel(bundle: Bundle?, vararg params: Any): Model { - return getViewModel( + return viewModelForClass( clazz = getViewModelClass(), parameters = { parametersOf(bundle, *params) } - ) + ).value } private fun showErrorMsg(textMessage: TextMessage) { diff --git a/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/fragment/VMFragment.kt b/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/fragment/VMFragment.kt index a33f597..6e13562 100644 --- a/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/fragment/VMFragment.kt +++ b/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/fragment/VMFragment.kt @@ -11,7 +11,7 @@ import com.merseyside.merseyLib.archy.core.presentation.viewModel.BaseViewModel import com.merseyside.merseyLib.kotlin.logger.Logger import com.merseyside.merseyLib.utils.core.state.StateSaver import com.merseyside.utils.reflection.ReflectionUtils -import org.koin.androidx.viewmodel.ext.android.getViewModel +import org.koin.androidx.viewmodel.ext.android.viewModelForClass import org.koin.core.context.loadKoinModules import org.koin.core.module.Module import org.koin.core.parameter.parametersOf @@ -46,10 +46,10 @@ abstract class VMFragment } protected open fun provideViewModel(bundle: Bundle?, vararg params: Any): Model { - return getViewModel( + return viewModelForClass( clazz = getViewModelClass(), parameters = { parametersOf(*params, bundle) } - ) + ).value } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { diff --git a/build.gradle.kts b/build.gradle.kts index c1856c2..fb0350a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,11 +1,3 @@ -buildscript { - repositories { - gradlePluginPortal() - } - - if (isLocalKotlinExtLibrary()) {} -} - plugins { `nexus-config` } @@ -15,6 +7,27 @@ allprojects { version = "1.5.2" } +buildscript { // disable pod install tasks until find a solution + repositories { + gradlePluginPortal() + } + + if (!isBuildIos()) { + with(project.gradle.startParameter.excludedTaskNames) { + add("podImport") + add("podInstall") + add("podGenIOS") + add("podSetupBuildReachabilityIphoneos") + add("podSetupBuildReachabilityIphonesimulator") + add("podBuildReachabilityIphoneos") + add("podBuildReachabilityIphonesimulator") + add("cinteropReachabilityIosX64") + add("cinteropReachabilityIosSimulatorArm64") + add("cinteropReachabilityIosArm64") + } + } +} + tasks.register("clean", Delete::class).configure { group = "build" delete(rootProject.buildDir) diff --git a/buildSrc/settings.gradle.kts b/buildSrc/settings.gradle.kts index e90692b..31f010b 100644 --- a/buildSrc/settings.gradle.kts +++ b/buildSrc/settings.gradle.kts @@ -16,7 +16,7 @@ dependencyResolutionManagement { gradlePluginPortal() } - val catalogVersions = "1.6.2" + val catalogVersions = "1.6.3" val group = "io.github.merseyside" versionCatalogs { diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index 9d46fec..2e7e860 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -1,7 +1,7 @@ object Application { const val applicationId = "com.merseyside.sample" - const val compileSdk = 31 - const val targetSdk = 31 + const val compileSdk = 33 + const val targetSdk = 33 const val minSdk = 21 } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index ffe5069..66db110 100644 --- a/gradle.properties +++ b/gradle.properties @@ -14,4 +14,5 @@ android.disableAutomaticComponentCreation=true build.localAndroidDependencies=false build.localKotlinExtLibrary=false +build.buildIos=false diff --git a/settings.gradle.kts b/settings.gradle.kts index eba8550..3a07614 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -11,7 +11,7 @@ dependencyResolutionManagement { google() } - val catalogVersions = "1.6.1" + val catalogVersions = "1.6.3" val group = "io.github.merseyside" versionCatalogs { val multiplatformLibs by creating { diff --git a/utils-core/build.gradle.kts b/utils-core/build.gradle.kts index 1348437..174aba5 100644 --- a/utils-core/build.gradle.kts +++ b/utils-core/build.gradle.kts @@ -74,7 +74,8 @@ val mppLibs = listOf( val android = listOf( androidLibs.sqldelight, - androidLibs.lifecycleLiveDataKtx + androidLibs.lifecycleLiveDataKtx, + androidLibs.koin ) val merseyLibs = listOf( diff --git a/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/AndroidSharedScopeExt.kt b/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/AndroidSharedScopeExt.kt new file mode 100644 index 0000000..f32123d --- /dev/null +++ b/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/AndroidSharedScopeExt.kt @@ -0,0 +1,39 @@ +package com.merseyside.merseyLib.utils.core.koin.scope.ext + +import androidx.fragment.app.Fragment +import androidx.lifecycle.DefaultLifecycleObserver +import androidx.lifecycle.LifecycleObserver +import androidx.lifecycle.LifecycleOwner +import com.merseyside.merseyLib.utils.core.koin.scope.SharedScopeDefinition +import com.merseyside.merseyLib.utils.core.koin.scope.createSharedScope +import com.merseyside.merseyLib.utils.core.koin.scope.getSharedScopeOrNull +import org.koin.android.ext.android.getKoin +import org.koin.core.scope.Scope + +fun Fragment.getOrCreateSharedScope(definition: SharedScopeDefinition): Scope { + with(getKoin()) { + return getSharedScopeOrNull(definition) ?: createSharedScope(definition).apply { + addLifecycleObserver(this) + } + } +} + +fun Fragment.getOrCreateSharedScope(): Scope { + if (this !is SharedScopeDefinition) { + throw IllegalArgumentException("Implement SharedScopeDefinition or pass it as argument explicitly!") + } + + return getOrCreateSharedScope(this as SharedScopeDefinition) +} + +internal fun LifecycleOwner.addLifecycleObserver(scope: Scope): Scope { + + lifecycle.addObserver(object : DefaultLifecycleObserver { + override fun onDestroy(owner: LifecycleOwner) { + super.onDestroy(owner) + scope.close() + } + }) + + return scope +} \ No newline at end of file diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/SharedScopeDefinition.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/SharedScopeDefinition.kt new file mode 100644 index 0000000..12f8c9f --- /dev/null +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/SharedScopeDefinition.kt @@ -0,0 +1,10 @@ +package com.merseyside.merseyLib.utils.core.koin.scope + +import org.koin.core.qualifier.Qualifier +import org.koin.core.scope.ScopeID + +interface SharedScopeDefinition { + + val scopeID: ScopeID + val qualifier: Qualifier +} \ No newline at end of file diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/SharedScopeExt.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/SharedScopeExt.kt new file mode 100644 index 0000000..a55b5b6 --- /dev/null +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/SharedScopeExt.kt @@ -0,0 +1,16 @@ +package com.merseyside.merseyLib.utils.core.koin.scope + +import org.koin.core.Koin +import org.koin.core.scope.Scope + +fun Koin.getSharedScopeOrNull(definition: SharedScopeDefinition): Scope? { + return with(definition) { + getScopeOrNull(scopeId = scopeID) + } +} + +fun Koin.createSharedScope(definition: SharedScopeDefinition): Scope { + return with(definition) { + getOrCreateScope(scopeId = scopeID, qualifier = qualifier) + } +} \ No newline at end of file From 46f3d970ac581589f882a4bef96110184ac36173 Mon Sep 17 00:00:00 2001 From: Ivan Sablin Date: Mon, 21 Nov 2022 15:48:11 +0600 Subject: [PATCH 04/17] Koin vers up, add shared scope logic --- .../koin/scope/ext/ActivitySharedScopeExt.kt | 22 ++++++++ .../koin/scope/ext/AndroidSharedScopeExt.kt | 39 -------------- .../koin/scope/ext/FragmentSharedScopeExt.kt | 22 ++++++++ .../core/koin/scope/ext/LifecycleOwnerExt.kt | 17 ++++++ .../scope/ext/LifecycleSharedScopeDelegate.kt | 53 +++++++++++++++++++ .../core/koin/scope/SharedScopeDefinition.kt | 10 ---- .../utils/core/koin/scope/SharedScopeExt.kt | 16 ------ 7 files changed, 114 insertions(+), 65 deletions(-) create mode 100644 utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/ActivitySharedScopeExt.kt delete mode 100644 utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/AndroidSharedScopeExt.kt create mode 100644 utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/FragmentSharedScopeExt.kt create mode 100644 utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/LifecycleOwnerExt.kt create mode 100644 utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/LifecycleSharedScopeDelegate.kt delete mode 100644 utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/SharedScopeDefinition.kt delete mode 100644 utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/SharedScopeExt.kt diff --git a/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/ActivitySharedScopeExt.kt b/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/ActivitySharedScopeExt.kt new file mode 100644 index 0000000..976059f --- /dev/null +++ b/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/ActivitySharedScopeExt.kt @@ -0,0 +1,22 @@ +package com.merseyside.merseyLib.utils.core.koin.scope.ext + +import androidx.activity.ComponentActivity +import org.koin.android.ext.android.getKoin +import org.koin.core.qualifier.Qualifier +import org.koin.core.scope.ScopeID + +fun ComponentActivity.sharedScope( + scopeID: Lazy, + qualifier: Lazy +): LifecycleSharedScopeDelegate { + return LifecycleSharedScopeDelegate(getKoin(), this) { koin -> + koin.getScopeOrNull(scopeID.value) ?: koin.createScope(scopeID.value, qualifier.value, this) + } +} + +fun ComponentActivity.sharedScope( + scopeID: ScopeID, + qualifier: Qualifier +): LifecycleSharedScopeDelegate { + return sharedScope(lazy {scopeID}, lazy {qualifier}) +} \ No newline at end of file diff --git a/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/AndroidSharedScopeExt.kt b/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/AndroidSharedScopeExt.kt deleted file mode 100644 index f32123d..0000000 --- a/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/AndroidSharedScopeExt.kt +++ /dev/null @@ -1,39 +0,0 @@ -package com.merseyside.merseyLib.utils.core.koin.scope.ext - -import androidx.fragment.app.Fragment -import androidx.lifecycle.DefaultLifecycleObserver -import androidx.lifecycle.LifecycleObserver -import androidx.lifecycle.LifecycleOwner -import com.merseyside.merseyLib.utils.core.koin.scope.SharedScopeDefinition -import com.merseyside.merseyLib.utils.core.koin.scope.createSharedScope -import com.merseyside.merseyLib.utils.core.koin.scope.getSharedScopeOrNull -import org.koin.android.ext.android.getKoin -import org.koin.core.scope.Scope - -fun Fragment.getOrCreateSharedScope(definition: SharedScopeDefinition): Scope { - with(getKoin()) { - return getSharedScopeOrNull(definition) ?: createSharedScope(definition).apply { - addLifecycleObserver(this) - } - } -} - -fun Fragment.getOrCreateSharedScope(): Scope { - if (this !is SharedScopeDefinition) { - throw IllegalArgumentException("Implement SharedScopeDefinition or pass it as argument explicitly!") - } - - return getOrCreateSharedScope(this as SharedScopeDefinition) -} - -internal fun LifecycleOwner.addLifecycleObserver(scope: Scope): Scope { - - lifecycle.addObserver(object : DefaultLifecycleObserver { - override fun onDestroy(owner: LifecycleOwner) { - super.onDestroy(owner) - scope.close() - } - }) - - return scope -} \ No newline at end of file diff --git a/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/FragmentSharedScopeExt.kt b/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/FragmentSharedScopeExt.kt new file mode 100644 index 0000000..70058ee --- /dev/null +++ b/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/FragmentSharedScopeExt.kt @@ -0,0 +1,22 @@ +package com.merseyside.merseyLib.utils.core.koin.scope.ext + +import androidx.fragment.app.Fragment +import org.koin.android.ext.android.getKoin +import org.koin.core.qualifier.Qualifier +import org.koin.core.scope.ScopeID + +fun Fragment.sharedScope( + scopeID: ScopeID, + qualifier: Qualifier +): LifecycleSharedScopeDelegate { + return sharedScope(lazy {scopeID}, lazy {qualifier}) +} + +fun Fragment.sharedScope( + scopeID: Lazy, + qualifier: Lazy +): LifecycleSharedScopeDelegate { + return LifecycleSharedScopeDelegate(getKoin(), this) { koin -> + koin.getScopeOrNull(scopeID.value) ?: koin.createScope(scopeID.value, qualifier.value, this) + } +} \ No newline at end of file diff --git a/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/LifecycleOwnerExt.kt b/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/LifecycleOwnerExt.kt new file mode 100644 index 0000000..e0086f7 --- /dev/null +++ b/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/LifecycleOwnerExt.kt @@ -0,0 +1,17 @@ +package com.merseyside.merseyLib.utils.core.koin.scope.ext + +import androidx.lifecycle.DefaultLifecycleObserver +import androidx.lifecycle.LifecycleOwner +import org.koin.core.scope.Scope + +internal fun LifecycleOwner.addLifecycleObserver(scope: Scope): Scope { + + lifecycle.addObserver(object : DefaultLifecycleObserver { + override fun onDestroy(owner: LifecycleOwner) { + super.onDestroy(owner) + scope.close() + } + }) + + return scope +} \ No newline at end of file diff --git a/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/LifecycleSharedScopeDelegate.kt b/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/LifecycleSharedScopeDelegate.kt new file mode 100644 index 0000000..3516f2e --- /dev/null +++ b/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/LifecycleSharedScopeDelegate.kt @@ -0,0 +1,53 @@ +package com.merseyside.merseyLib.utils.core.koin.scope.ext + +import androidx.lifecycle.DefaultLifecycleObserver +import androidx.lifecycle.LifecycleOwner +import org.koin.core.Koin +import org.koin.core.scope.Scope +import kotlin.properties.ReadOnlyProperty +import kotlin.reflect.KProperty + +class LifecycleSharedScopeDelegate( + val koin: Koin, + val lifecycleOwner: LifecycleOwner, + private val provideScope: (Koin) -> Scope +) : ReadOnlyProperty { + + private var _scope: Scope? = null + + init { + val logger = koin.logger + + logger.debug("setup scope: $_scope for $lifecycleOwner") + lifecycleOwner.lifecycle.addObserver(object : DefaultLifecycleObserver { + override fun onCreate(owner: LifecycleOwner) { + createScope() + } + + override fun onDestroy(owner: LifecycleOwner) { + logger.debug("Closing scope: $_scope for $lifecycleOwner") + if (_scope?.closed == false) { + _scope?.close() + } + _scope = null + } + }) + } + + private fun createScope() { + if (_scope == null) { + koin.logger.debug("Create scope: $_scope for $lifecycleOwner") + _scope = provideScope(koin) + } + } + + override fun getValue(thisRef: LifecycleOwner, property: KProperty<*>): Scope { + return if (_scope == null) { + createScope() + return _scope ?: error("can't get Scope for $lifecycleOwner") + } + else { + _scope ?: error("can't get Scope for $lifecycleOwner") + } + } +} \ No newline at end of file diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/SharedScopeDefinition.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/SharedScopeDefinition.kt deleted file mode 100644 index 12f8c9f..0000000 --- a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/SharedScopeDefinition.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.merseyside.merseyLib.utils.core.koin.scope - -import org.koin.core.qualifier.Qualifier -import org.koin.core.scope.ScopeID - -interface SharedScopeDefinition { - - val scopeID: ScopeID - val qualifier: Qualifier -} \ No newline at end of file diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/SharedScopeExt.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/SharedScopeExt.kt deleted file mode 100644 index a55b5b6..0000000 --- a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/SharedScopeExt.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.merseyside.merseyLib.utils.core.koin.scope - -import org.koin.core.Koin -import org.koin.core.scope.Scope - -fun Koin.getSharedScopeOrNull(definition: SharedScopeDefinition): Scope? { - return with(definition) { - getScopeOrNull(scopeId = scopeID) - } -} - -fun Koin.createSharedScope(definition: SharedScopeDefinition): Scope { - return with(definition) { - getOrCreateScope(scopeId = scopeID, qualifier = qualifier) - } -} \ No newline at end of file From c8c6e9c23f78fb2ecd5cda56827221263d7c444a Mon Sep 17 00:00:00 2001 From: Ivan Sablin Date: Tue, 22 Nov 2022 15:21:38 +0600 Subject: [PATCH 05/17] Fix koin scopes lifecycle --- .../koin/scope/ext/ActivitySharedScopeExt.kt | 13 ++++-- .../koin/scope/ext/FragmentSharedScopeExt.kt | 15 +++++-- .../scope/ext/LifecycleSharedScopeDelegate.kt | 41 ++++++++----------- 3 files changed, 37 insertions(+), 32 deletions(-) diff --git a/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/ActivitySharedScopeExt.kt b/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/ActivitySharedScopeExt.kt index 976059f..9959bcf 100644 --- a/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/ActivitySharedScopeExt.kt +++ b/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/ActivitySharedScopeExt.kt @@ -9,9 +9,16 @@ fun ComponentActivity.sharedScope( scopeID: Lazy, qualifier: Lazy ): LifecycleSharedScopeDelegate { - return LifecycleSharedScopeDelegate(getKoin(), this) { koin -> - koin.getScopeOrNull(scopeID.value) ?: koin.createScope(scopeID.value, qualifier.value, this) - } + return LifecycleSharedScopeDelegate( + koin = getKoin(), + lifecycleOwner = this, + provideScope = { koin -> + koin.getScopeOrNull(scopeID.value) + }, + createScope = { koin -> + koin.createScope(scopeID.value, qualifier.value, this) + } + ) } fun ComponentActivity.sharedScope( diff --git a/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/FragmentSharedScopeExt.kt b/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/FragmentSharedScopeExt.kt index 70058ee..372b72f 100644 --- a/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/FragmentSharedScopeExt.kt +++ b/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/FragmentSharedScopeExt.kt @@ -9,14 +9,21 @@ fun Fragment.sharedScope( scopeID: ScopeID, qualifier: Qualifier ): LifecycleSharedScopeDelegate { - return sharedScope(lazy {scopeID}, lazy {qualifier}) + return sharedScope(lazy { scopeID }, lazy { qualifier }) } fun Fragment.sharedScope( scopeID: Lazy, qualifier: Lazy ): LifecycleSharedScopeDelegate { - return LifecycleSharedScopeDelegate(getKoin(), this) { koin -> - koin.getScopeOrNull(scopeID.value) ?: koin.createScope(scopeID.value, qualifier.value, this) - } + return LifecycleSharedScopeDelegate( + koin = getKoin(), + lifecycleOwner = this, + provideScope = { koin -> + koin.getScopeOrNull(scopeID.value) + }, + createScope = { koin -> + koin.createScope(scopeID.value, qualifier.value, this) + } + ) } \ No newline at end of file diff --git a/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/LifecycleSharedScopeDelegate.kt b/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/LifecycleSharedScopeDelegate.kt index 3516f2e..a430ffa 100644 --- a/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/LifecycleSharedScopeDelegate.kt +++ b/utils-core/src/androidMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ext/LifecycleSharedScopeDelegate.kt @@ -10,41 +10,32 @@ import kotlin.reflect.KProperty class LifecycleSharedScopeDelegate( val koin: Koin, val lifecycleOwner: LifecycleOwner, - private val provideScope: (Koin) -> Scope + private val provideScope: (Koin) -> Scope?, + private val createScope: (Koin) -> Scope ) : ReadOnlyProperty { private var _scope: Scope? = null - init { - val logger = koin.logger - - logger.debug("setup scope: $_scope for $lifecycleOwner") - lifecycleOwner.lifecycle.addObserver(object : DefaultLifecycleObserver { - override fun onCreate(owner: LifecycleOwner) { - createScope() - } - - override fun onDestroy(owner: LifecycleOwner) { - logger.debug("Closing scope: $_scope for $lifecycleOwner") - if (_scope?.closed == false) { - _scope?.close() + private fun createScope(): Scope { + koin.logger.debug("Create scope: $_scope for $lifecycleOwner") + return this.createScope.invoke(koin).also { scope -> + lifecycleOwner.lifecycle.addObserver(object : DefaultLifecycleObserver { + + override fun onDestroy(owner: LifecycleOwner) { + koin.logger.debug("Closing scope: $_scope for $lifecycleOwner") + if (!scope.closed) { + scope.close() + } + _scope = null } - _scope = null - } - }) - } - - private fun createScope() { - if (_scope == null) { - koin.logger.debug("Create scope: $_scope for $lifecycleOwner") - _scope = provideScope(koin) + }) } } override fun getValue(thisRef: LifecycleOwner, property: KProperty<*>): Scope { return if (_scope == null) { - createScope() - return _scope ?: error("can't get Scope for $lifecycleOwner") + val _scope = provideScope(koin) ?: createScope() + return _scope } else { _scope ?: error("can't get Scope for $lifecycleOwner") From 66755ef689acf28d371e66b11ff38c08d8c817f2 Mon Sep 17 00:00:00 2001 From: Ivan Sablin Date: Tue, 22 Nov 2022 19:03:30 +0600 Subject: [PATCH 06/17] Add koin dsl exts --- .../core/koin/{ => module}/dsl/KoinModuleExt.kt | 2 +- .../koin/{ => module}/dsl/KoinScopeDSLExt.kt | 2 +- .../merseyLib/utils/core/koin/module/dsl/New.kt | 15 +++++++++++++++ .../utils/core/koin/module/dsl/ScopedOf.kt | 16 ++++++++++++++++ 4 files changed, 33 insertions(+), 2 deletions(-) rename utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/{ => module}/dsl/KoinModuleExt.kt (94%) rename utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/{ => module}/dsl/KoinScopeDSLExt.kt (94%) create mode 100644 utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/New.kt create mode 100644 utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/ScopedOf.kt diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/dsl/KoinModuleExt.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/KoinModuleExt.kt similarity index 94% rename from utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/dsl/KoinModuleExt.kt rename to utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/KoinModuleExt.kt index aca2864..9e2829b 100644 --- a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/dsl/KoinModuleExt.kt +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/KoinModuleExt.kt @@ -1,4 +1,4 @@ -package com.merseyside.merseyLib.utils.core.koin.dsl +package com.merseyside.merseyLib.utils.core.koin.module.dsl import com.merseyside.merseyLib.utils.core.koin.ext.getSavedStateFromParams import com.merseyside.merseyLib.utils.core.koin.state.StateDefinition diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/dsl/KoinScopeDSLExt.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/KoinScopeDSLExt.kt similarity index 94% rename from utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/dsl/KoinScopeDSLExt.kt rename to utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/KoinScopeDSLExt.kt index 286907b..f71d7d2 100644 --- a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/dsl/KoinScopeDSLExt.kt +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/KoinScopeDSLExt.kt @@ -1,4 +1,4 @@ -package com.merseyside.merseyLib.utils.core.koin.dsl +package com.merseyside.merseyLib.utils.core.koin.module.dsl import com.merseyside.merseyLib.utils.core.koin.ext.getSavedStateFromParams import com.merseyside.merseyLib.utils.core.koin.state.StateDefinition diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/New.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/New.kt new file mode 100644 index 0000000..0a7d84f --- /dev/null +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/New.kt @@ -0,0 +1,15 @@ +package com.merseyside.merseyLib.utils.core.koin.module.dsl + +import org.koin.core.scope.Scope + +inline fun Scope.new( + constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, +): R = constructor(get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get()) + +inline fun Scope.new( + constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, +): R = constructor(get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get()) + +inline fun Scope.new( + constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, +): R = constructor(get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get()) \ No newline at end of file diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/ScopedOf.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/ScopedOf.kt new file mode 100644 index 0000000..ecb9850 --- /dev/null +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/ScopedOf.kt @@ -0,0 +1,16 @@ +package com.merseyside.merseyLib.utils.core.koin.module.dsl + +import org.koin.core.module.KoinDefinition +import org.koin.dsl.ScopeDSL + +inline fun ScopeDSL.scopedOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, +): KoinDefinition = scoped { new(constructor) } + +inline fun ScopeDSL.scopedOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, +): KoinDefinition = scoped { new(constructor) } + +inline fun ScopeDSL.scopedOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, +): KoinDefinition = scoped { new(constructor) } \ No newline at end of file From ac6c7bc5b49eee6b20f2233764b0f35db982ef33 Mon Sep 17 00:00:00 2001 From: Ivan Sablin Date: Wed, 23 Nov 2022 16:47:05 +0600 Subject: [PATCH 07/17] Add koin dsl --- .../di/state/AndroidKoinStateHolder.kt | 11 +- .../utils/core/koin/KoinStateViewModelOf.kt | 124 ------------------ .../core/koin/ext/KoinSavedStateScopeExt.kt | 4 +- .../core/koin/module/dsl/NewSavedState.kt | 91 +++++++++++++ .../core/koin/module/dsl/SavedScopedOf.kt | 64 +++++++++ .../core/koin/module/dsl/StateViewModelOf.kt | 64 +++++++++ .../utils/core/koin/module/dsl/ViewModelOf.kt | 63 +++++++++ .../koin/core/module/dsl/ext}/New.kt | 8 +- .../koin/core/module/dsl/ext}/ScopedOf.kt | 2 +- 9 files changed, 293 insertions(+), 138 deletions(-) delete mode 100644 utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/KoinStateViewModelOf.kt create mode 100644 utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/NewSavedState.kt create mode 100644 utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/SavedScopedOf.kt create mode 100644 utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/StateViewModelOf.kt create mode 100644 utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/ViewModelOf.kt rename utils-core/src/commonMain/kotlin/{com/merseyside/merseyLib/utils/core/koin/module/dsl => org/koin/core/module/dsl/ext}/New.kt (68%) rename utils-core/src/commonMain/kotlin/{com/merseyside/merseyLib/utils/core/koin/module/dsl => org/koin/core/module/dsl/ext}/ScopedOf.kt (94%) diff --git a/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/di/state/AndroidKoinStateHolder.kt b/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/di/state/AndroidKoinStateHolder.kt index 212f377..5d72c9d 100644 --- a/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/di/state/AndroidKoinStateHolder.kt +++ b/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/di/state/AndroidKoinStateHolder.kt @@ -2,9 +2,9 @@ package com.merseyside.merseyLib.archy.android.di.state import android.os.Bundle import com.merseyside.merseyLib.utils.core.koin.state.KoinStateHolder +import com.merseyside.merseyLib.utils.core.koin.state.toBundle import com.merseyside.merseyLib.utils.core.koin.state.toSavedState import com.merseyside.merseyLib.utils.core.state.SavedState -import com.merseyside.merseyLib.utils.core.koin.state.toBundle import org.koin.android.scope.AndroidScopeComponent import org.koin.core.context.loadKoinModules import org.koin.core.qualifier.Qualifier @@ -31,14 +31,7 @@ interface AndroidKoinScopeState : AndroidScopeComponent { } } -// private fun getKoinStateScope(): Scope { -// return getKoin().getOrCreateScope( -// scopeId = linkableScope.id, -// qualifier = qualifier -// ) -// } - - fun getKoinStateHolder(): KoinStateHolder = scope?.get() ?: throw NullPointerException("Scope is null") + fun getKoinStateHolder(): KoinStateHolder = scope.get() } diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/KoinStateViewModelOf.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/KoinStateViewModelOf.kt deleted file mode 100644 index 9550cd3..0000000 --- a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/KoinStateViewModelOf.kt +++ /dev/null @@ -1,124 +0,0 @@ -//@file:OptIn(KoinInternalApi::class) -// -//package com.merseyside.merseyLib.archy.core.presentation.di -// -//import com.merseyside.merseyLib.archy.core.presentation.model.StateViewModel -//import org.koin.core.annotation.KoinInternalApi -//import org.koin.core.definition.BeanDefinition -//import org.koin.core.module.KoinDefinition -//import org.koin.core.module._scopedInstanceFactory -//import org.koin.core.module.dsl.new -//import org.koin.core.module.dsl.stateViewModelOf -//import org.koin.core.module.dsl.setupInstance -//import org.koin.dsl.ScopeDSL -// -//inline fun ScopeDSL.stateViewModelOf( -// crossinline constructor: () -> R, -// options: BeanDefinition.() -> Unit -//): KoinDefinition = module.setupInstance(_scopedInstanceFactory(definition = { new(constructor) }, scopeQualifier = scopeQualifier), options) -// -///** -// * @see stateViewModelOf -// */ -//inline fun ScopeDSL.stateViewModelOf( -// crossinline constructor: () -> R, -//): KoinDefinition = scoped { new(constructor) } -// -///** -// * @see stateViewModelOf -// */ -//inline fun ScopeDSL.stateViewModelOf( -// crossinline constructor: (T1) -> R, -// options: BeanDefinition.() -> Unit -//): KoinDefinition = module.setupInstance(_scopedInstanceFactory(definition = { new(constructor) }, scopeQualifier = scopeQualifier), options) -// -///** -// * @see stateViewModelOf -// */ -//inline fun ScopeDSL.stateViewModelOf( -// crossinline constructor: (T1) -> R, -//): KoinDefinition = scoped { new(constructor) } -// -///** -// * @see stateViewModelOf -// */ -//inline fun ScopeDSL.stateViewModelOf( -// crossinline constructor: (T1, T2) -> R, -// options: BeanDefinition.() -> Unit -//): KoinDefinition = module.setupInstance(_scopedInstanceFactory(definition = { new(constructor) }, scopeQualifier = scopeQualifier), options) -// -///** -// * @see stateViewModelOf -// */ -//inline fun ScopeDSL.stateViewModelOf( -// crossinline constructor: (T1, T2) -> R, -//): KoinDefinition = scoped { new(constructor) } -// -///** -// * @see stateViewModelOf -// */ -//inline fun ScopeDSL.stateViewModelOf( -// crossinline constructor: (T1, T2, T3) -> R, -// options: BeanDefinition.() -> Unit -//): KoinDefinition = module.setupInstance(_scopedInstanceFactory(definition = { new(constructor) }, scopeQualifier = scopeQualifier), options) -// -///** -// * @see stateViewModelOf -// */ -//inline fun ScopeDSL.stateViewModelOf( -// crossinline constructor: (T1, T2, T3) -> R, -//): KoinDefinition = scoped { new(constructor) } -// -///** -// * @see stateViewModelOf -// */ -//inline fun ScopeDSL.stateViewModelOf( -// crossinline constructor: (T1, T2, T3, T4) -> R, -// options: BeanDefinition.() -> Unit -//): KoinDefinition = module.setupInstance(_scopedInstanceFactory(definition = { new(constructor) }, scopeQualifier = scopeQualifier), options) -// -///** -// * @see stateViewModelOf -// */ -//inline fun ScopeDSL.stateViewModelOf( -// crossinline constructor: (T1, T2, T3, T4) -> R, -//): KoinDefinition = scoped { new(constructor) } -// -///** -// * @see stateViewModelOf -// */ -//inline fun ScopeDSL.stateViewModelOf( -// crossinline constructor: (T1, T2, T3, T4, T5) -> R, -// options: BeanDefinition.() -> Unit -//): KoinDefinition = module.setupInstance(_scopedInstanceFactory(definition = { new(constructor) }, scopeQualifier = scopeQualifier), options) -// -///** -// * @see stateViewModelOf -// */ -//inline fun ScopeDSL.stateViewModelOf( -// crossinline constructor: (T1, T2, T3, T4, T5) -> R, -//): KoinDefinition = scoped { new(constructor) } -// -///** -// * @see stateViewModelOf -// */ -//inline fun ScopeDSL.stateViewModelOf( -// crossinline constructor: (T1, T2, T3, T4, T5, T6) -> R, -// options: BeanDefinition.() -> Unit -//): KoinDefinition = module.setupInstance(_scopedInstanceFactory(definition = { new(constructor) }, scopeQualifier = scopeQualifier), options) -// -///** -// * @see stateViewModelOf -// */ -//inline fun ScopeDSL.stateViewModelOf( -// crossinline constructor: (T1, T2, T3, T4, T5, T6) -> R, -//): KoinDefinition = scoped { new(constructor) } -// -///** -// * @see stateViewModelOf -// */ -//inline fun ScopeDSL.stateViewModelOf( -// crossinline constructor: (T1, T2, T3, T4, T5, T6, T7) -> R, -// options: BeanDefinition.() -> Unit -//): KoinDefinition = module.setupInstance(_scopedInstanceFactory(definition = { new(constructor) }, scopeQualifier = scopeQualifier), options) -// diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/ext/KoinSavedStateScopeExt.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/ext/KoinSavedStateScopeExt.kt index 37846e4..ad1f3d3 100644 --- a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/ext/KoinSavedStateScopeExt.kt +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/ext/KoinSavedStateScopeExt.kt @@ -1,13 +1,13 @@ package com.merseyside.merseyLib.utils.core.koin.ext import com.merseyside.merseyLib.utils.core.koin.state.KoinStateHolder +import com.merseyside.merseyLib.utils.core.koin.state.getSavedStateFromParams import com.merseyside.merseyLib.utils.core.koin.state.getStateKey +import com.merseyside.merseyLib.utils.core.state.DummySavedState import com.merseyside.merseyLib.utils.core.state.SavedState import com.merseyside.merseyLib.utils.core.state.StateSaver import org.koin.core.parameter.ParametersHolder import org.koin.core.scope.Scope -import com.merseyside.merseyLib.utils.core.koin.state.getSavedStateFromParams -import com.merseyside.merseyLib.utils.core.state.DummySavedState inline fun getSavedStateFromParams(paramsHolder: ParametersHolder): SavedState { return getSavedStateFromParams(paramsHolder, getStateKey()) ?: DummySavedState() diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/NewSavedState.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/NewSavedState.kt new file mode 100644 index 0000000..2b335d3 --- /dev/null +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/NewSavedState.kt @@ -0,0 +1,91 @@ +package com.merseyside.merseyLib.utils.core.koin.module.dsl + +import com.merseyside.merseyLib.utils.core.koin.ext.getKoinStateHolder +import com.merseyside.merseyLib.utils.core.koin.ext.getSavedStateFromStateHolder +import com.merseyside.merseyLib.utils.core.state.SavedState +import com.merseyside.merseyLib.utils.core.state.StateSaver +import org.koin.core.scope.Scope + +inline fun Scope.newSavedState( + constructor: (SavedState) -> R, +): R = constructor(getSavedStateFromStateHolder()).also { + getKoinStateHolder()?.addStateSaver(it) +} + +inline fun Scope.newSavedState( + constructor: (SavedState, T1) -> R, +): R = constructor(getSavedStateFromStateHolder(), get()).also { + getKoinStateHolder()?.addStateSaver(it) +} + +inline fun Scope.newSavedState( + constructor: (SavedState, T1, T2) -> R, +): R = constructor(getSavedStateFromStateHolder(), get(), get()).also { + getKoinStateHolder()?.addStateSaver(it) +} + +inline fun Scope.newSavedState( + constructor: (SavedState, T1, T2, T3) -> R, +): R = constructor(getSavedStateFromStateHolder(), get(), get(), get()).also { + getKoinStateHolder()?.addStateSaver(it) +} + +inline fun Scope.newSavedState( + constructor: (SavedState, T1, T2, T3, T4) -> R, +): R = constructor(getSavedStateFromStateHolder(), get(), get(), get(), get()).also { + getKoinStateHolder()?.addStateSaver(it) +} + +inline fun Scope.newSavedState( + constructor: (SavedState, T1, T2, T3, T4, T5) -> R, +): R = constructor(getSavedStateFromStateHolder(), get(), get(), get(), get(), get()).also { + getKoinStateHolder()?.addStateSaver(it) +} + +inline fun Scope.newSavedState( + constructor: (SavedState, T1, T2, T3, T4, T5, T6) -> R, +): R = constructor(getSavedStateFromStateHolder(), get(), get(), get(), get(), get(), get()).also { + getKoinStateHolder()?.addStateSaver(it) +} + +inline fun Scope.newSavedState( + constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7) -> R, +): R = constructor(getSavedStateFromStateHolder(), get(), get(), get(), get(), get(), get(), get()).also { + getKoinStateHolder()?.addStateSaver(it) +} + +inline fun Scope.newSavedState( + constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8) -> R, +): R = constructor(getSavedStateFromStateHolder(), get(), get(), get(), get(), get(), get(), get(), get()).also { + getKoinStateHolder()?.addStateSaver(it) +} + +inline fun Scope.newSavedState( + constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R, +): R = constructor(getSavedStateFromStateHolder(), get(), get(), get(), get(), get(), get(), get(), get(), get()).also { + getKoinStateHolder()?.addStateSaver(it) +} + +inline fun Scope.newSavedState( + constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R, +): R = constructor(getSavedStateFromStateHolder(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get()).also { + getKoinStateHolder()?.addStateSaver(it) +} + +inline fun Scope.newSavedState( + constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, +): R = constructor(getSavedStateFromStateHolder(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get()).also { + getKoinStateHolder()?.addStateSaver(it) +} + +inline fun Scope.newSavedState( + constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, +): R = constructor(getSavedStateFromStateHolder(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get()).also { + getKoinStateHolder()?.addStateSaver(it) +} + +inline fun Scope.newSavedState( + constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, +): R = constructor(getSavedStateFromStateHolder(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get()).also { + getKoinStateHolder()?.addStateSaver(it) +} \ No newline at end of file diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/SavedScopedOf.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/SavedScopedOf.kt new file mode 100644 index 0000000..3be55b1 --- /dev/null +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/SavedScopedOf.kt @@ -0,0 +1,64 @@ +package com.merseyside.merseyLib.utils.core.koin.module.dsl + +import com.merseyside.merseyLib.utils.core.state.SavedState +import com.merseyside.merseyLib.utils.core.state.StateSaver +import dev.icerock.moko.mvvm.viewmodel.ViewModel +import org.koin.core.module.KoinDefinition +import org.koin.dsl.ScopeDSL +import com.merseyside.merseyLib.utils.core.koin.module.dsl.newSavedState as new + +inline fun ScopeDSL.savedScopedOf( + crossinline constructor: (SavedState) -> R, +): KoinDefinition where R : StateSaver = scoped { new(constructor) } + +inline fun ScopeDSL.savedScopedOf( + crossinline constructor: (SavedState, T1) -> R, +): KoinDefinition where R : StateSaver = scoped { new(constructor) } + +inline fun ScopeDSL.savedScopedOf( + crossinline constructor: (SavedState, T1, T2) -> R, +): KoinDefinition where R : StateSaver = scoped { new(constructor) } + +inline fun ScopeDSL.savedScopedOf( + crossinline constructor: (SavedState, T1, T2, T3) -> R, +): KoinDefinition where R : StateSaver = scoped { new(constructor) } + +inline fun ScopeDSL.savedScopedOf( + crossinline constructor: (SavedState, T1, T2, T3, T4) -> R, +): KoinDefinition where R : StateSaver = scoped { new(constructor) } + +inline fun ScopeDSL.savedScopedOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5) -> R, +): KoinDefinition where R : StateSaver = scoped { new(constructor) } + +inline fun ScopeDSL.savedScopedOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6) -> R, +): KoinDefinition where R : StateSaver = scoped { new(constructor) } + +inline fun ScopeDSL.savedScopedOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7) -> R, +): KoinDefinition where R : StateSaver = scoped { new(constructor) } + +inline fun ScopeDSL.savedScopedOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8) -> R, +): KoinDefinition where R : StateSaver = scoped { new(constructor) } + +inline fun ScopeDSL.savedScopedOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R, +): KoinDefinition where R : StateSaver = scoped { new(constructor) } + +inline fun ScopeDSL.savedScopedOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R, +): KoinDefinition where R : StateSaver = scoped { new(constructor) } + +inline fun ScopeDSL.savedScopedOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, +): KoinDefinition where R : StateSaver = scoped { new(constructor) } + +inline fun ScopeDSL.savedScopedOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, +): KoinDefinition where R : StateSaver = scoped { new(constructor) } + +inline fun ScopeDSL.savedScopedOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, +): KoinDefinition where R : StateSaver = scoped { new(constructor) } \ No newline at end of file diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/StateViewModelOf.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/StateViewModelOf.kt new file mode 100644 index 0000000..ea175d4 --- /dev/null +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/StateViewModelOf.kt @@ -0,0 +1,64 @@ +package com.merseyside.merseyLib.utils.core.koin.module.dsl + +import com.merseyside.merseyLib.utils.core.state.SavedState +import com.merseyside.merseyLib.utils.core.state.StateSaver +import dev.icerock.moko.mvvm.viewmodel.ViewModel +import org.koin.core.module.KoinDefinition +import org.koin.dsl.ScopeDSL +import com.merseyside.merseyLib.utils.core.koin.module.dsl.newSavedState as new + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (SavedState) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (SavedState, T1) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (SavedState, T1, T2) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (SavedState, T1, T2, T3) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (SavedState, T1, T2, T3, T4) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } \ No newline at end of file diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/ViewModelOf.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/ViewModelOf.kt new file mode 100644 index 0000000..97fe2de --- /dev/null +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/ViewModelOf.kt @@ -0,0 +1,63 @@ +package com.merseyside.merseyLib.utils.core.koin.module.dsl + +import dev.icerock.moko.mvvm.viewmodel.ViewModel +import org.koin.core.module.KoinDefinition +import org.koin.core.module.dsl.new +import org.koin.dsl.ScopeDSL +import org.koin.core.module.dsl.ext.new as hugeNew + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: () -> R, +): KoinDefinition = viewModel { new(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (T1) -> R, +): KoinDefinition = viewModel { new(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (T1, T2) -> R, +): KoinDefinition = viewModel { new(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (T1, T2, T3) -> R, +): KoinDefinition = viewModel { new(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (T1, T2, T3, T4) -> R, +): KoinDefinition = viewModel { new(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (T1, T2, T3, T4, T5) -> R, +): KoinDefinition = viewModel { new(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6) -> R, +): KoinDefinition = viewModel { new(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7) -> R, +): KoinDefinition = viewModel { new(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8) -> R, +): KoinDefinition = viewModel { new(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R, +): KoinDefinition = viewModel { new(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R, +): KoinDefinition = viewModel { new(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, +): KoinDefinition = viewModel { hugeNew(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, +): KoinDefinition = viewModel { hugeNew(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, +): KoinDefinition = viewModel { hugeNew(constructor) } \ No newline at end of file diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/New.kt b/utils-core/src/commonMain/kotlin/org/koin/core/module/dsl/ext/New.kt similarity index 68% rename from utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/New.kt rename to utils-core/src/commonMain/kotlin/org/koin/core/module/dsl/ext/New.kt index 0a7d84f..012f720 100644 --- a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/New.kt +++ b/utils-core/src/commonMain/kotlin/org/koin/core/module/dsl/ext/New.kt @@ -1,4 +1,4 @@ -package com.merseyside.merseyLib.utils.core.koin.module.dsl +package org.koin.core.module.dsl.ext import org.koin.core.scope.Scope @@ -12,4 +12,8 @@ inline fun Scope.new( constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, -): R = constructor(get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get()) \ No newline at end of file +): R = constructor(get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get()) + +inline fun Scope.new( + constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, +): R = constructor(get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get()) \ No newline at end of file diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/ScopedOf.kt b/utils-core/src/commonMain/kotlin/org/koin/core/module/dsl/ext/ScopedOf.kt similarity index 94% rename from utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/ScopedOf.kt rename to utils-core/src/commonMain/kotlin/org/koin/core/module/dsl/ext/ScopedOf.kt index ecb9850..83272e6 100644 --- a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/ScopedOf.kt +++ b/utils-core/src/commonMain/kotlin/org/koin/core/module/dsl/ext/ScopedOf.kt @@ -1,4 +1,4 @@ -package com.merseyside.merseyLib.utils.core.koin.module.dsl +package org.koin.core.module.dsl.ext import org.koin.core.module.KoinDefinition import org.koin.dsl.ScopeDSL From 5faef6e06800e737ac19cda4085dcd790e8232e8 Mon Sep 17 00:00:00 2001 From: Ivan Sablin Date: Thu, 24 Nov 2022 18:55:57 +0600 Subject: [PATCH 08/17] Add koin dsl helpers, fix StateFlowUseCase --- .../presentation/activity/VMEventsActivity.kt | 2 + .../presentation/fragment/VMEventsFragment.kt | 2 + .../presentation/viewModel/EventsViewModel.kt | 7 +- .../{KoinModuleExt.kt => ModuleViewModel.kt} | 0 .../utils/core/koin/module/dsl/New.kt | 31 +++++++ .../utils/core/koin/module/dsl/SingleOf.kt | 32 ++++++++ .../koin/module/dsl/SingleStateViewModelOf.kt | 82 +++++++++++++++++++ .../core/koin/module/dsl/SingleViewModelOf.kt | 79 ++++++++++++++++++ .../ScopeNewSavedState.kt} | 26 +++++- .../{module => scope}/dsl/SavedScopedOf.kt | 5 +- .../dsl/ScopeViewModel.kt} | 2 +- .../utils/core/koin/scope/dsl/ScopedOf.kt | 34 ++++++++ .../dsl/ScopedStateViewModelOf.kt} | 20 ++++- .../dsl/ScopedViewModelOf.kt} | 20 ++++- .../org/koin/core/module/dsl/ext/New.kt | 19 ----- .../org/koin/core/module/dsl/ext/ScopedOf.kt | 16 ---- 16 files changed, 331 insertions(+), 46 deletions(-) rename utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/{KoinModuleExt.kt => ModuleViewModel.kt} (100%) create mode 100644 utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/New.kt create mode 100644 utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/SingleOf.kt create mode 100644 utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/SingleStateViewModelOf.kt create mode 100644 utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/SingleViewModelOf.kt rename utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/{module/dsl/NewSavedState.kt => scope/ScopeNewSavedState.kt} (69%) rename utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/{module => scope}/dsl/SavedScopedOf.kt (95%) rename utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/{module/dsl/KoinScopeDSLExt.kt => scope/dsl/ScopeViewModel.kt} (94%) create mode 100644 utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/ScopedOf.kt rename utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/{module/dsl/StateViewModelOf.kt => scope/dsl/ScopedStateViewModelOf.kt} (69%) rename utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/{module/dsl/ViewModelOf.kt => scope/dsl/ScopedViewModelOf.kt} (67%) delete mode 100644 utils-core/src/commonMain/kotlin/org/koin/core/module/dsl/ext/New.kt delete mode 100644 utils-core/src/commonMain/kotlin/org/koin/core/module/dsl/ext/ScopedOf.kt diff --git a/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/activity/VMEventsActivity.kt b/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/activity/VMEventsActivity.kt index a22b540..0bb1604 100644 --- a/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/activity/VMEventsActivity.kt +++ b/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/activity/VMEventsActivity.kt @@ -60,6 +60,8 @@ abstract class VMEventsActivity } } + override fun onConnectionStateChanged(state: Boolean) {} + private fun showErrorMsg(textMessage: TextMessage) { with(textMessage) { actionMsg?.let { diff --git a/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/fragment/VMEventsFragment.kt b/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/fragment/VMEventsFragment.kt index 032c3eb..20630f8 100644 --- a/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/fragment/VMEventsFragment.kt +++ b/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/fragment/VMEventsFragment.kt @@ -60,6 +60,8 @@ abstract class VMEventsFragment : } } + override fun onConnectionStateChanged(state: Boolean) {} + private fun showErrorMsg(textMessage: TextMessage) { with(textMessage) { actionMsg?.let { diff --git a/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/presentation/viewModel/EventsViewModel.kt b/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/presentation/viewModel/EventsViewModel.kt index df559a2..8b0499c 100644 --- a/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/presentation/viewModel/EventsViewModel.kt +++ b/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/presentation/viewModel/EventsViewModel.kt @@ -4,9 +4,7 @@ import com.merseyside.merseyLib.archy.core.presentation.viewModel.entity.Alert import com.merseyside.merseyLib.archy.core.presentation.viewModel.entity.TextMessage import com.merseyside.merseyLib.archy.core.presentation.viewModel.entity.TextValue import com.merseyside.merseyLib.kotlin.logger.Logger -import com.merseyside.merseyLib.utils.core.ext.getStringNull import dev.icerock.moko.mvvm.dispatcher.EventsDispatcher -import dev.icerock.moko.resources.StringResource import dev.icerock.moko.resources.desc.StringDesc abstract class EventsViewModel : BaseViewModel() { @@ -162,9 +160,14 @@ abstract class EventsViewModel : BaseViewModel() { eventsDispatcher.dispatchEvent { onAlert(alert) } } + protected open fun dispatchConnectionStateEvent(state: Boolean) { + eventsDispatcher.dispatchEvent { onConnectionStateChanged(state) } + } + interface BaseEventsListener { fun onError(throwable: Throwable): Boolean fun onMessage(message: TextMessage) fun onAlert(alert: Alert) + fun onConnectionStateChanged(state: Boolean) } } \ No newline at end of file diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/KoinModuleExt.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/ModuleViewModel.kt similarity index 100% rename from utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/KoinModuleExt.kt rename to utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/ModuleViewModel.kt diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/New.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/New.kt new file mode 100644 index 0000000..a8457fd --- /dev/null +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/New.kt @@ -0,0 +1,31 @@ +package com.merseyside.merseyLib.utils.core.koin.module.dsl + +import org.koin.core.scope.Scope + +inline fun Scope.new( + constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, +): R = constructor(get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get()) + +inline fun Scope.new( + constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, +): R = constructor(get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get()) + +inline fun Scope.new( + constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, +): R = constructor(get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get()) + +inline fun Scope.new( + constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, +): R = constructor(get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get()) + +inline fun Scope.new( + constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, +): R = constructor(get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get()) + +inline fun Scope.new( + constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, +): R = constructor(get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get()) + +inline fun Scope.new( + constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, +): R = constructor(get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get()) \ No newline at end of file diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/SingleOf.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/SingleOf.kt new file mode 100644 index 0000000..273454d --- /dev/null +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/SingleOf.kt @@ -0,0 +1,32 @@ +package com.merseyside.merseyLib.utils.core.koin.module.dsl + +import org.koin.core.module.KoinDefinition +import org.koin.core.module.Module + +inline fun Module.singleOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, +): KoinDefinition = single { new(constructor) } + +inline fun Module.singleOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, +): KoinDefinition = single { new(constructor) } + +inline fun Module.singleOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, +): KoinDefinition = single { new(constructor) } + +inline fun Module.singleOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, +): KoinDefinition = single { new(constructor) } + +inline fun Module.singleOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, +): KoinDefinition = single { new(constructor) } + +inline fun Module.singleOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, +): KoinDefinition = single { new(constructor) } + +inline fun Module.singleOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, +): KoinDefinition = single { new(constructor) } \ No newline at end of file diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/SingleStateViewModelOf.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/SingleStateViewModelOf.kt new file mode 100644 index 0000000..ec08593 --- /dev/null +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/SingleStateViewModelOf.kt @@ -0,0 +1,82 @@ +package com.merseyside.merseyLib.utils.core.koin.module.dsl + +import com.merseyside.merseyLib.utils.core.state.SavedState +import com.merseyside.merseyLib.utils.core.state.StateSaver +import dev.icerock.moko.mvvm.viewmodel.ViewModel +import org.koin.core.module.KoinDefinition +import org.koin.core.module.Module +import org.koin.dsl.ScopeDSL +import com.merseyside.merseyLib.utils.core.koin.scope.newSavedState as new + +inline fun Module.viewModelOf( + crossinline constructor: (SavedState) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (SavedState, T1) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (SavedState, T1, T2) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (SavedState, T1, T2, T3) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (SavedState, T1, T2, T3, T4) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/SingleViewModelOf.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/SingleViewModelOf.kt new file mode 100644 index 0000000..6124451 --- /dev/null +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/SingleViewModelOf.kt @@ -0,0 +1,79 @@ +package com.merseyside.merseyLib.utils.core.koin.module.dsl + +import dev.icerock.moko.mvvm.viewmodel.ViewModel +import org.koin.core.module.KoinDefinition +import org.koin.core.module.Module +import org.koin.core.module.dsl.new +import com.merseyside.merseyLib.utils.core.koin.module.dsl.new as hugeNew + +inline fun Module.viewModelOf( + crossinline constructor: () -> R, +): KoinDefinition = viewModel { new(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (T1) -> R, +): KoinDefinition = viewModel { new(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (T1, T2) -> R, +): KoinDefinition = viewModel { new(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (T1, T2, T3) -> R, +): KoinDefinition = viewModel { new(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (T1, T2, T3, T4) -> R, +): KoinDefinition = viewModel { new(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (T1, T2, T3, T4, T5) -> R, +): KoinDefinition = viewModel { new(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6) -> R, +): KoinDefinition = viewModel { new(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7) -> R, +): KoinDefinition = viewModel { new(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8) -> R, +): KoinDefinition = viewModel { new(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R, +): KoinDefinition = viewModel { new(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R, +): KoinDefinition = viewModel { new(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, +): KoinDefinition = viewModel { hugeNew(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, +): KoinDefinition = viewModel { hugeNew(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, +): KoinDefinition = viewModel { hugeNew(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, +): KoinDefinition = viewModel { hugeNew(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, +): KoinDefinition = viewModel { hugeNew(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, +): KoinDefinition = viewModel { hugeNew(constructor) } + +inline fun Module.viewModelOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, +): KoinDefinition = viewModel { hugeNew(constructor) } \ No newline at end of file diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/NewSavedState.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ScopeNewSavedState.kt similarity index 69% rename from utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/NewSavedState.kt rename to utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ScopeNewSavedState.kt index 2b335d3..0ca930c 100644 --- a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/NewSavedState.kt +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/ScopeNewSavedState.kt @@ -1,4 +1,4 @@ -package com.merseyside.merseyLib.utils.core.koin.module.dsl +package com.merseyside.merseyLib.utils.core.koin.scope import com.merseyside.merseyLib.utils.core.koin.ext.getKoinStateHolder import com.merseyside.merseyLib.utils.core.koin.ext.getSavedStateFromStateHolder @@ -88,4 +88,28 @@ inline fun R, ): R = constructor(getSavedStateFromStateHolder(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get()).also { getKoinStateHolder()?.addStateSaver(it) +} + +inline fun Scope.newSavedState( + constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, +): R = constructor(getSavedStateFromStateHolder(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get()).also { + getKoinStateHolder()?.addStateSaver(it) +} + +inline fun Scope.newSavedState( + constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, +): R = constructor(getSavedStateFromStateHolder(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get()).also { + getKoinStateHolder()?.addStateSaver(it) +} + +inline fun Scope.newSavedState( + constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, +): R = constructor(getSavedStateFromStateHolder(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get()).also { + getKoinStateHolder()?.addStateSaver(it) +} + +inline fun Scope.newSavedState( + constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, +): R = constructor(getSavedStateFromStateHolder(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get()).also { + getKoinStateHolder()?.addStateSaver(it) } \ No newline at end of file diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/SavedScopedOf.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/SavedScopedOf.kt similarity index 95% rename from utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/SavedScopedOf.kt rename to utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/SavedScopedOf.kt index 3be55b1..bf659d4 100644 --- a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/SavedScopedOf.kt +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/SavedScopedOf.kt @@ -1,11 +1,10 @@ -package com.merseyside.merseyLib.utils.core.koin.module.dsl +package com.merseyside.merseyLib.utils.core.koin.scope.dsl import com.merseyside.merseyLib.utils.core.state.SavedState import com.merseyside.merseyLib.utils.core.state.StateSaver -import dev.icerock.moko.mvvm.viewmodel.ViewModel import org.koin.core.module.KoinDefinition import org.koin.dsl.ScopeDSL -import com.merseyside.merseyLib.utils.core.koin.module.dsl.newSavedState as new +import com.merseyside.merseyLib.utils.core.koin.scope.newSavedState as new inline fun ScopeDSL.savedScopedOf( crossinline constructor: (SavedState) -> R, diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/KoinScopeDSLExt.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/ScopeViewModel.kt similarity index 94% rename from utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/KoinScopeDSLExt.kt rename to utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/ScopeViewModel.kt index f71d7d2..c3116ee 100644 --- a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/KoinScopeDSLExt.kt +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/ScopeViewModel.kt @@ -1,4 +1,4 @@ -package com.merseyside.merseyLib.utils.core.koin.module.dsl +package com.merseyside.merseyLib.utils.core.koin.scope.dsl import com.merseyside.merseyLib.utils.core.koin.ext.getSavedStateFromParams import com.merseyside.merseyLib.utils.core.koin.state.StateDefinition diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/ScopedOf.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/ScopedOf.kt new file mode 100644 index 0000000..24f1427 --- /dev/null +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/ScopedOf.kt @@ -0,0 +1,34 @@ +package com.merseyside.merseyLib.utils.core.koin.scope.dsl + +import com.merseyside.merseyLib.utils.core.koin.module.dsl.new +import dev.icerock.moko.mvvm.viewmodel.ViewModel +import org.koin.core.module.KoinDefinition +import org.koin.dsl.ScopeDSL + +inline fun ScopeDSL.scopedOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, +): KoinDefinition = scoped { new(constructor) } + +inline fun ScopeDSL.scopedOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, +): KoinDefinition = scoped { new(constructor) } + +inline fun ScopeDSL.scopedOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, +): KoinDefinition = scoped { new(constructor) } + +inline fun ScopeDSL.scopedOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, +): KoinDefinition = scoped { new(constructor) } + +inline fun ScopeDSL.scopedOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, +): KoinDefinition = scoped { new(constructor) } + +inline fun ScopeDSL.scopedOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, +): KoinDefinition = scoped { new(constructor) } + +inline fun ScopeDSL.scopedOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, +): KoinDefinition = scoped { new(constructor) } \ No newline at end of file diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/StateViewModelOf.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/ScopedStateViewModelOf.kt similarity index 69% rename from utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/StateViewModelOf.kt rename to utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/ScopedStateViewModelOf.kt index ea175d4..d6624f6 100644 --- a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/StateViewModelOf.kt +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/ScopedStateViewModelOf.kt @@ -1,11 +1,11 @@ -package com.merseyside.merseyLib.utils.core.koin.module.dsl +package com.merseyside.merseyLib.utils.core.koin.scope.dsl import com.merseyside.merseyLib.utils.core.state.SavedState import com.merseyside.merseyLib.utils.core.state.StateSaver import dev.icerock.moko.mvvm.viewmodel.ViewModel import org.koin.core.module.KoinDefinition import org.koin.dsl.ScopeDSL -import com.merseyside.merseyLib.utils.core.koin.module.dsl.newSavedState as new +import com.merseyside.merseyLib.utils.core.koin.scope.newSavedState as new inline fun ScopeDSL.viewModelOf( crossinline constructor: (SavedState) -> R, @@ -61,4 +61,20 @@ inline fun ScopeDSL.viewModelOf( crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, +): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, ): KoinDefinition where R : ViewModel, R : StateSaver = viewModel { new(constructor) } \ No newline at end of file diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/ViewModelOf.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/ScopedViewModelOf.kt similarity index 67% rename from utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/ViewModelOf.kt rename to utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/ScopedViewModelOf.kt index 97fe2de..0031bc0 100644 --- a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/ViewModelOf.kt +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/ScopedViewModelOf.kt @@ -1,10 +1,10 @@ -package com.merseyside.merseyLib.utils.core.koin.module.dsl +package com.merseyside.merseyLib.utils.core.koin.scope.dsl import dev.icerock.moko.mvvm.viewmodel.ViewModel import org.koin.core.module.KoinDefinition import org.koin.core.module.dsl.new import org.koin.dsl.ScopeDSL -import org.koin.core.module.dsl.ext.new as hugeNew +import com.merseyside.merseyLib.utils.core.koin.module.dsl.new as hugeNew inline fun ScopeDSL.viewModelOf( crossinline constructor: () -> R, @@ -60,4 +60,20 @@ inline fun ScopeDSL.viewModelOf( crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, +): KoinDefinition = viewModel { hugeNew(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, +): KoinDefinition = viewModel { hugeNew(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, +): KoinDefinition = viewModel { hugeNew(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, +): KoinDefinition = viewModel { hugeNew(constructor) } + +inline fun ScopeDSL.viewModelOf( + crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, ): KoinDefinition = viewModel { hugeNew(constructor) } \ No newline at end of file diff --git a/utils-core/src/commonMain/kotlin/org/koin/core/module/dsl/ext/New.kt b/utils-core/src/commonMain/kotlin/org/koin/core/module/dsl/ext/New.kt deleted file mode 100644 index 012f720..0000000 --- a/utils-core/src/commonMain/kotlin/org/koin/core/module/dsl/ext/New.kt +++ /dev/null @@ -1,19 +0,0 @@ -package org.koin.core.module.dsl.ext - -import org.koin.core.scope.Scope - -inline fun Scope.new( - constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, -): R = constructor(get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get()) - -inline fun Scope.new( - constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, -): R = constructor(get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get()) - -inline fun Scope.new( - constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, -): R = constructor(get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get()) - -inline fun Scope.new( - constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, -): R = constructor(get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get()) \ No newline at end of file diff --git a/utils-core/src/commonMain/kotlin/org/koin/core/module/dsl/ext/ScopedOf.kt b/utils-core/src/commonMain/kotlin/org/koin/core/module/dsl/ext/ScopedOf.kt deleted file mode 100644 index 83272e6..0000000 --- a/utils-core/src/commonMain/kotlin/org/koin/core/module/dsl/ext/ScopedOf.kt +++ /dev/null @@ -1,16 +0,0 @@ -package org.koin.core.module.dsl.ext - -import org.koin.core.module.KoinDefinition -import org.koin.dsl.ScopeDSL - -inline fun ScopeDSL.scopedOf( - crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, -): KoinDefinition = scoped { new(constructor) } - -inline fun ScopeDSL.scopedOf( - crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, -): KoinDefinition = scoped { new(constructor) } - -inline fun ScopeDSL.scopedOf( - crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, -): KoinDefinition = scoped { new(constructor) } \ No newline at end of file From 5ad5c68479cb3afd2fcdc7fccd32c0e9783c2894 Mon Sep 17 00:00:00 2001 From: Ivan Sablin Date: Mon, 28 Nov 2022 19:35:57 +0600 Subject: [PATCH 09/17] Move CountDownTimer to kotlin ext --- .../utils/core/coroutines/CountDownTimer.kt | 142 ------------------ 1 file changed, 142 deletions(-) delete mode 100644 utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/coroutines/CountDownTimer.kt diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/coroutines/CountDownTimer.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/coroutines/CountDownTimer.kt deleted file mode 100644 index 6e65810..0000000 --- a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/coroutines/CountDownTimer.kt +++ /dev/null @@ -1,142 +0,0 @@ -package com.merseyside.merseyLib.utils.core.coroutines - -/* -* https://github.com/Kotlin/kotlinx.coroutines/issues/2171 - */ - -import com.merseyside.merseyLib.kotlin.logger.Logger -import com.merseyside.merseyLib.time.units.Seconds -import com.merseyside.merseyLib.time.units.TimeUnit -import com.merseyside.merseyLib.time.units.minus -import com.merseyside.merseyLib.utils.core.ext.delay -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.* -import kotlinx.coroutines.withContext - -class CountDownTimer( - private val listener: CoroutineTimerListener, - private val delay: TimeUnit = Seconds(1), - private val scope: CoroutineScope = CoroutineScope(Job() + Dispatchers.Unconfined) -) { - - private var timerJob: Job? = null - private var countDownTimer: TimeUnit = TimeUnit.getEmpty() - - var state: CurrentTimerState = CurrentTimerState.STOPPED - private set(value) { - if (field == CurrentTimerState.DESTROYED) { - return - } - field = value - } - - fun startTimer(countDownTimer: TimeUnit) { - this.countDownTimer = countDownTimer - when (state) { - CurrentTimerState.RUNNING -> { - listener.onTick(countDownTimer, TimerException(TimerErrorTypes.ALREADY_RUNNING)) - } - CurrentTimerState.PAUSED -> { - listener.onTick(countDownTimer, TimerException(TimerErrorTypes.CURRENTLY_PAUSED)) - } - CurrentTimerState.DESTROYED -> { - listener.onTick(countDownTimer, TimerException(TimerErrorTypes.DESTROYED)) - } - else -> { - timerCanStart() - } - } - } - - fun stopTimer() { - val error = if (state == CurrentTimerState.STOPPED) { - TimerException(TimerErrorTypes.NO_TIMER_RUNNING) - } else { - null - } - timerJob?.cancel() - state = CurrentTimerState.STOPPED - listener.onStop(error) - } - - fun pauseTimer() { - if (state == CurrentTimerState.PAUSED) { - Logger.logErr(TAG, "Already paused, check your code for multiple callers") - } - state = CurrentTimerState.PAUSED - } - - fun continueTimer() { - if (state == CurrentTimerState.RUNNING) { - Logger.logErr(TAG, "Already running, check your code for multiple callers") - } - state = CurrentTimerState.RUNNING - listener.onContinue() - } - - fun destroyTimer() { - scope.cancel("Timer was now destroyed. Need a new instance to work") - listener.onDestroy() - state = CurrentTimerState.DESTROYED - } - - private fun timerCanStart() { - timerJob = scope.launch { - - state = CurrentTimerState.RUNNING - - onTick(countDownTimer) - delay(delay) - - timerLoop@ while (isActive) { - countDownTimer -= delay - - if (countDownTimer <= TimeUnit.getEmpty()) { - state = CurrentTimerState.STOPPED - - onTick(TimeUnit.getEmpty()) - timerJob?.cancel() - listener.onStop() - } else { - onTick(countDownTimer) - - if (countDownTimer < delay) { - delay(countDownTimer) - } else { - delay(delay) - } - } - } - } - } - - private suspend fun onTick(timeLeft: TimeUnit, error: Exception? = null) = - withContext(Dispatchers.Main) { - listener.onTick(timeLeft, error) - } - - companion object { - const val TAG = "CoroutineTimer" - } -} - -interface CoroutineTimerListener { - fun onTick(timeLeft: TimeUnit, error: Exception? = null) - fun onStop(error: Exception? = null) {} - fun onContinue() {} - fun onPause(remainingTime: TimeUnit) {} - fun onDestroy() {} -} - -enum class CurrentTimerState { - RUNNING, PAUSED, STOPPED, DESTROYED -} - -enum class TimerErrorTypes(val message: String) { - ALREADY_RUNNING("This instance of the timer is already running, create a new instance or stop your current one"), - CURRENTLY_PAUSED("This timer is currently paused. Choose to continue or stop to start over"), - NO_TIMER_RUNNING("You are trying to stop or pause a timer that isn't running"), - DESTROYED("This timer is destroyed and can't be used anymore") -} - -private class TimerException(val type: TimerErrorTypes) : Exception(type.message) \ No newline at end of file From bae368a8def6541a13fe7d0d2dc7301ecdb6f575 Mon Sep 17 00:00:00 2001 From: Ivan Sablin Date: Tue, 6 Dec 2022 14:42:53 +0600 Subject: [PATCH 10/17] Koin module loader small changes --- .../utils/core/koin/KoinModuleLoader.kt | 21 ------------- .../CoroutineScopeKoinModuleLoader.kt | 31 +++---------------- .../koin/moduleLoader/KoinModuleLoader.kt | 9 +----- 3 files changed, 6 insertions(+), 55 deletions(-) delete mode 100644 utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/KoinModuleLoader.kt diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/KoinModuleLoader.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/KoinModuleLoader.kt deleted file mode 100644 index 767d7bf..0000000 --- a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/KoinModuleLoader.kt +++ /dev/null @@ -1,21 +0,0 @@ -package com.merseyside.merseyLib.utils.core.koin - -import org.koin.core.context.loadKoinModules -import org.koin.core.context.unloadKoinModules -import org.koin.core.module.Module -import org.koin.dsl.module - -abstract class KoinModuleLoader(private val createdAtStart: Boolean = false) { - - abstract val moduleDefinition: Module.() -> Unit - - private val module by lazy { module(createdAtStart, moduleDefinition) } - - fun load() { - loadKoinModules(module) - } - - fun unload() { - unloadKoinModules(module) - } -} \ No newline at end of file diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/moduleLoader/CoroutineScopeKoinModuleLoader.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/moduleLoader/CoroutineScopeKoinModuleLoader.kt index 9fef8bd..dbc57ad 100644 --- a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/moduleLoader/CoroutineScopeKoinModuleLoader.kt +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/moduleLoader/CoroutineScopeKoinModuleLoader.kt @@ -5,42 +5,21 @@ import kotlinx.coroutines.cancel import org.koin.core.qualifier.Qualifier import org.koin.dsl.ModuleDeclaration -class CoroutineScopeKoinModuleLoader internal constructor( +class CoroutineScopeKoinModuleLoader( + private val scopeQualifier: Qualifier, + val coroutineScope: CoroutineScope, createdAtStart: Boolean = false, - private val scopeQualifier: Qualifier? = null, - private val coroutineScope: () -> CoroutineScope, moduleDeclaration: ModuleDeclaration ) : KoinModuleLoader(createdAtStart, moduleDeclaration) { - private var currentScope: CoroutineScope? = null - init { declarations.add { - single(scopeQualifier) { coroutineScope().also { - currentScope = it - }} + single(scopeQualifier) { coroutineScope } } } override fun unload() { - currentScope?.run { - cancel("Scope canceled because module unloaded") - currentScope = null - } + coroutineScope.cancel("Scope canceled because module unloaded") super.unload() } -} - -fun coroutineScopeModuleLoader( - createdAtStart: Boolean = false, - scopeQualifier: Qualifier? = null, - coroutineScope: () -> CoroutineScope, - moduleDeclaration: ModuleDeclaration -): CoroutineScopeKoinModuleLoader { - return CoroutineScopeKoinModuleLoader( - createdAtStart, - scopeQualifier, - coroutineScope, - moduleDeclaration - ) } \ No newline at end of file diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/moduleLoader/KoinModuleLoader.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/moduleLoader/KoinModuleLoader.kt index cb453a3..3a38bb2 100644 --- a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/moduleLoader/KoinModuleLoader.kt +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/moduleLoader/KoinModuleLoader.kt @@ -6,7 +6,7 @@ import org.koin.core.module.Module import org.koin.dsl.ModuleDeclaration import org.koin.dsl.module -open class KoinModuleLoader internal constructor( +open class KoinModuleLoader( private val createdAtStart: Boolean = false, moduleDeclaration: ModuleDeclaration ) { @@ -36,11 +36,4 @@ open class KoinModuleLoader internal constructor( declarations.forEach { declaration -> declaration() } } } -} - -fun moduleLoader( - createdAtStart: Boolean = false, - moduleDeclaration: ModuleDeclaration -): KoinModuleLoader { - return KoinModuleLoader(createdAtStart, moduleDeclaration) } \ No newline at end of file From 982c1e1d9fc5d9b574cda731a57283c7ebddf81e Mon Sep 17 00:00:00 2001 From: Ivan Sablin Date: Wed, 7 Dec 2022 18:05:52 +0600 Subject: [PATCH 11/17] Adding pagination logic --- .../presentation/viewModel/BaseViewModel.kt | 3 - .../utils/core/pagination/PagerData.kt | 7 +++ .../utils/core/pagination/Pagination.kt | 61 +++++++++++++++++++ .../core/pagination/PositionPagerData.kt | 6 ++ .../core/pagination/PositionPagination.kt | 4 ++ 5 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/pagination/PagerData.kt create mode 100644 utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/pagination/Pagination.kt create mode 100644 utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/pagination/PositionPagerData.kt create mode 100644 utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/pagination/PositionPagination.kt diff --git a/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/presentation/viewModel/BaseViewModel.kt b/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/presentation/viewModel/BaseViewModel.kt index f1cb79c..c572b4d 100644 --- a/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/presentation/viewModel/BaseViewModel.kt +++ b/archy-core/src/commonMain/kotlin/com/merseyside/merseyLib/archy/core/presentation/viewModel/BaseViewModel.kt @@ -7,9 +7,6 @@ import kotlinx.coroutines.flow.* abstract class BaseViewModel protected constructor() : ViewModel() { -// internal val scope: CoroutineScope -// get() { return viewModelScope } - private val mutProgress = MutableStateFlow(false) val isInProgress = mutProgress.asStateFlow() diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/pagination/PagerData.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/pagination/PagerData.kt new file mode 100644 index 0000000..cf1a687 --- /dev/null +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/pagination/PagerData.kt @@ -0,0 +1,7 @@ +package com.merseyside.merseyLib.utils.core.pagination + +open class PagerData( + val data: Data, + val nextPage: Page?, + val prevPage: Page? = null +) \ No newline at end of file diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/pagination/Pagination.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/pagination/Pagination.kt new file mode 100644 index 0000000..1298caa --- /dev/null +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/pagination/Pagination.kt @@ -0,0 +1,61 @@ +package com.merseyside.merseyLib.utils.core.pagination + +import com.merseyside.merseyLib.kotlin.entity.Result +import com.merseyside.merseyLib.kotlin.logger.ILogger +import com.merseyside.merseyLib.kotlin.utils.safeLet +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.filterIsInstance +import kotlinx.coroutines.flow.map + +abstract class Pagination(private val initPage: Page): ILogger + where PD : PagerData { + + private var lastData: PD? = null + var currentPage: Page = initPage + + private val mutSharedFlow: MutableSharedFlow> = MutableSharedFlow(extraBufferCapacity = 10) + val resultFlow: Flow> = mutSharedFlow + + val dataFlow: Flow = resultFlow.filterIsInstance>().map { it.value } + + private fun getNextPage(): Page { + return safeLet(lastData) { + it.nextPage + } ?: initPage + } + + abstract suspend fun loadData(page: Page): PD + + private suspend fun onDataLoaded(pagerData: PD) { + lastData = pagerData + emitResult(Result.Success(pagerData.data)) + } + + private fun isNextPageValid(): Boolean { + return getNextPage() != null || lastData == null + } + + suspend fun loadNextPage() { + if (!isNextPageValid()) { + logMsg("No next page") + return + } + + currentPage = getNextPage() + + try { + val newData = loadData(currentPage) + emitResult(Result.Loading()) + onDataLoaded(newData) + } catch (e: Exception) { + emitResult(Result.Error(e)) + } + } + + private suspend fun emitResult(result: Result) { + mutSharedFlow.emit(result) + } + + override val tag: String = "Pagination" +} \ No newline at end of file diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/pagination/PositionPagerData.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/pagination/PositionPagerData.kt new file mode 100644 index 0000000..c5cec80 --- /dev/null +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/pagination/PositionPagerData.kt @@ -0,0 +1,6 @@ +package com.merseyside.merseyLib.utils.core.pagination + +class PositionPagerData( + data: Data, + currentPage: Int +) : PagerData(data, currentPage + 1, currentPage - 1) \ No newline at end of file diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/pagination/PositionPagination.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/pagination/PositionPagination.kt new file mode 100644 index 0000000..b50f0f8 --- /dev/null +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/pagination/PositionPagination.kt @@ -0,0 +1,4 @@ +package com.merseyside.merseyLib.utils.core.pagination + +abstract class PositionPagination(initPage: Int) : + Pagination, Data, Int>(initPage) \ No newline at end of file From 21ee5974cb2d0d9e10562b3654980a0f851aaed8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4=D0=B8=D0=BC=D0=B8=D1=80=20=D0=9C?= =?UTF-8?q?=D1=83=D0=B4=D1=80=D1=8F=D0=BA=D0=BE=D0=B2?= Date: Thu, 8 Dec 2022 16:02:44 +0300 Subject: [PATCH 12/17] parameter bug fixed --- .../merseyLib/archy/android/presentation/dialog/VMDialog.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/dialog/VMDialog.kt b/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/dialog/VMDialog.kt index d09b87d..c25e017 100644 --- a/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/dialog/VMDialog.kt +++ b/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/dialog/VMDialog.kt @@ -39,7 +39,7 @@ abstract class VMDialog override fun performInjection(bundle: Bundle?, vararg params: Any) { loadKoinModules(getKoinModules(bundle, *params)) - viewModel = provideViewModel(bundle, params) + viewModel = provideViewModel(bundle, *params) } open fun getKoinModules(bundle: Bundle?, vararg params: Any): List { From 63cdece31654396e3d50a3501f7f3679c718aa7c Mon Sep 17 00:00:00 2001 From: Ivan Sablin Date: Thu, 8 Dec 2022 19:05:41 +0600 Subject: [PATCH 13/17] Add paging scroll listener --- .../recycler/PaginationScrollListener.kt | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/recycler/PaginationScrollListener.kt diff --git a/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/recycler/PaginationScrollListener.kt b/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/recycler/PaginationScrollListener.kt new file mode 100644 index 0000000..adace59 --- /dev/null +++ b/archy-android/src/main/java/com/merseyside/merseyLib/archy/android/presentation/recycler/PaginationScrollListener.kt @@ -0,0 +1,29 @@ +package com.merseyside.merseyLib.archy.android.presentation.recycler + +import android.view.View +import androidx.recyclerview.widget.RecyclerView +import com.merseyside.merseyLib.kotlin.utils.safeLet + +abstract class PaginationScrollListener( + private val loadItemsCountOffset: Int = 5 +) : RecyclerView.OnChildAttachStateChangeListener { + + abstract val recyclerView: RecyclerView + abstract val onLoadNextPage: () -> Unit + + override fun onChildViewAttachedToWindow(view: View) { + if (needToLoadNextPage(view)) onLoadNextPage() + } + + override fun onChildViewDetachedFromWindow(view: View) {} + + private fun needToLoadNextPage(view: View): Boolean { + with(recyclerView) { + val lastPosition = getChildAdapterPosition(view) + val itemCount = adapter?.itemCount + return safeLet(itemCount) { + (it - lastPosition) <= loadItemsCountOffset + } ?: false + } + } +} \ No newline at end of file From d305ccf0475e58d795b2aba8d38cd7e76eba5333 Mon Sep 17 00:00:00 2001 From: Ivan Sablin Date: Wed, 28 Dec 2022 18:37:23 +0600 Subject: [PATCH 14/17] Add savedScopedOf funcs --- .../utils/core/koin/scope/dsl/SavedScopedOf.kt | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/SavedScopedOf.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/SavedScopedOf.kt index bf659d4..d7f6e4e 100644 --- a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/SavedScopedOf.kt +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/SavedScopedOf.kt @@ -60,4 +60,20 @@ inline fun ScopeDSL.savedScopedOf( crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, -): KoinDefinition where R : StateSaver = scoped { new(constructor) } \ No newline at end of file +): KoinDefinition where R : StateSaver = scoped { new(constructor) } + +inline fun ScopeDSL.savedScopedOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, +): KoinDefinition where R : StateSaver = scoped { new(constructor) } + +inline fun ScopeDSL.savedScopedOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, +): KoinDefinition where R : StateSaver = scoped { new(constructor) } + +inline fun ScopeDSL.savedScopedOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, +): KoinDefinition where R : StateSaver = scoped { new(constructor) } + +inline fun ScopeDSL.savedScopedOf( + crossinline constructor: (SavedState, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, +): KoinDefinition where R : StateSaver = scoped { new(constructor) } From 16b667838890a621398f2c16e162a51457877f5c Mon Sep 17 00:00:00 2001 From: Ivan Sablin Date: Thu, 29 Dec 2022 14:54:02 +0600 Subject: [PATCH 15/17] ++ver 1.5.3 --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index fb0350a..234a835 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,7 @@ plugins { allprojects { group = "io.github.merseyside" - version = "1.5.2" + version = "1.5.3" } buildscript { // disable pod install tasks until find a solution From 8f39137870bb099fed07a06502bfb402fafaef5e Mon Sep 17 00:00:00 2001 From: Ivan Sablin Date: Thu, 29 Dec 2022 15:01:08 +0600 Subject: [PATCH 16/17] Up catalog ver --- buildSrc/settings.gradle.kts | 2 +- settings.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/buildSrc/settings.gradle.kts b/buildSrc/settings.gradle.kts index 31f010b..a8ebd08 100644 --- a/buildSrc/settings.gradle.kts +++ b/buildSrc/settings.gradle.kts @@ -16,7 +16,7 @@ dependencyResolutionManagement { gradlePluginPortal() } - val catalogVersions = "1.6.3" + val catalogVersions = "1.6.4" val group = "io.github.merseyside" versionCatalogs { diff --git a/settings.gradle.kts b/settings.gradle.kts index 3a07614..cf890db 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -11,7 +11,7 @@ dependencyResolutionManagement { google() } - val catalogVersions = "1.6.3" + val catalogVersions = "1.6.4" val group = "io.github.merseyside" versionCatalogs { val multiplatformLibs by creating { From 90e6520d819854e96a1d4327a471c3eb8aeb4635 Mon Sep 17 00:00:00 2001 From: Ivan Sablin Date: Thu, 29 Dec 2022 19:48:53 +0600 Subject: [PATCH 17/17] Koin, building changes --- build.gradle.kts | 14 +++---- buildSrc/build.gradle.kts | 2 - gradle.properties | 6 ++- gradle/wrapper/gradle-wrapper.properties | 2 +- sample/androidApp/build.gradle.kts | 1 + .../androidApp/src/main/AndroidManifest.xml | 9 +++-- sample/mpp-library/build.gradle.kts | 1 + .../src/androidMain/AndroidManifest.xml | 2 +- .../sample/notifications/Converters.kt | 4 +- utils-core/build.gradle.kts | 30 +++++++------- .../core/koin/module/dsl/ModuleViewModel.kt | 6 +-- .../utils/core/koin/module/dsl/SingleOf.kt | 2 +- .../koin/module/dsl/SingleStateViewModelOf.kt | 2 +- .../core/koin/module/dsl/SingleViewModelOf.kt | 2 +- .../core/koin/scope/dsl/SavedScopedOf.kt | 2 +- .../core/koin/scope/dsl/ScopeViewModel.kt | 7 ++-- .../utils/core/koin/scope/dsl/ScopedOf.kt | 2 +- .../koin/scope/dsl/ScopedStateViewModelOf.kt | 2 +- .../core/koin/scope/dsl/ScopedViewModelOf.kt | 2 +- .../core/koin/state/KoinParametersState.kt | 2 +- .../utils/core/ktor/ConnectionStateChecker.kt | 39 ++++++++++--------- 21 files changed, 71 insertions(+), 68 deletions(-) rename {archy-core/src/iosMain/kotlin/com/merseyside/merseyLib/archy => utils-core/src/iosMain/kotlin/com/merseyside/merseyLib/utils}/core/koin/state/KoinParametersState.kt (80%) diff --git a/build.gradle.kts b/build.gradle.kts index 234a835..071dc63 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -17,13 +17,13 @@ buildscript { // disable pod install tasks until find a solution add("podImport") add("podInstall") add("podGenIOS") - add("podSetupBuildReachabilityIphoneos") - add("podSetupBuildReachabilityIphonesimulator") - add("podBuildReachabilityIphoneos") - add("podBuildReachabilityIphonesimulator") - add("cinteropReachabilityIosX64") - add("cinteropReachabilityIosSimulatorArm64") - add("cinteropReachabilityIosArm64") +// add("podSetupBuildReachabilityIphoneos") +// add("podSetupBuildReachabilityIphonesimulator") +// add("podBuildReachabilityIphoneos") +// add("podBuildReachabilityIphonesimulator") +// add("cinteropReachabilityIosX64") +// add("cinteropReachabilityIosSimulatorArm64") +// add("cinteropReachabilityIosArm64") } } } diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index b28933c..1635a18 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -1,6 +1,4 @@ plugins { - kotlin("jvm") version "1.7.0" - kotlin("plugin.serialization") version "1.7.0" `kotlin-dsl` } diff --git a/gradle.properties b/gradle.properties index 66db110..88e56a4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,12 +2,14 @@ org.gradle.jvmargs=-Xmx4096m -Dfile.encoding=UTF-8 kotlin.code.style=official -kotlin.mpp.stability.nowarn=true kotlin.native.ignoreDisabledTargets=true -kotlin.mpp.enableCInteropCommonization=true kotlin.native.binary.memoryModel=experimental kotlin.native.cacheKind=none +kotlin.mpp.stability.nowarn=true +kotlin.mpp.enableCInteropCommonization=true +kotlin.mpp.androidSourceSetLayoutVersion=2 + android.useAndroidX=true android.enableJetifier=false android.disableAutomaticComponentCreation=true diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 4e5996f..867eb9c 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Thu Feb 04 15:25:14 NOVT 2021 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/sample/androidApp/build.gradle.kts b/sample/androidApp/build.gradle.kts index dfdcdc9..65d8973 100644 --- a/sample/androidApp/build.gradle.kts +++ b/sample/androidApp/build.gradle.kts @@ -10,6 +10,7 @@ plugins { } android { + namespace = "com.merseyside.sample" compileSdk = Application.compileSdk defaultConfig { diff --git a/sample/androidApp/src/main/AndroidManifest.xml b/sample/androidApp/src/main/AndroidManifest.xml index 3c35280..845d390 100644 --- a/sample/androidApp/src/main/AndroidManifest.xml +++ b/sample/androidApp/src/main/AndroidManifest.xml @@ -1,6 +1,7 @@ - + + + + android:theme="@style/Theme.Sample" + android:windowSoftInputMode="adjustResize"> diff --git a/sample/mpp-library/build.gradle.kts b/sample/mpp-library/build.gradle.kts index 5262850..50cacfa 100644 --- a/sample/mpp-library/build.gradle.kts +++ b/sample/mpp-library/build.gradle.kts @@ -11,6 +11,7 @@ plugins { } android { + namespace = "com.merseyside.sample.mppLibrary" compileSdk = Application.compileSdk defaultConfig { diff --git a/sample/mpp-library/src/androidMain/AndroidManifest.xml b/sample/mpp-library/src/androidMain/AndroidManifest.xml index 8a83053..568741e 100644 --- a/sample/mpp-library/src/androidMain/AndroidManifest.xml +++ b/sample/mpp-library/src/androidMain/AndroidManifest.xml @@ -1,2 +1,2 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/sample/mpp-library/src/androidMain/kotlin/com/merseyside/sample/notifications/Converters.kt b/sample/mpp-library/src/androidMain/kotlin/com/merseyside/sample/notifications/Converters.kt index 93476fd..fb3560b 100644 --- a/sample/mpp-library/src/androidMain/kotlin/com/merseyside/sample/notifications/Converters.kt +++ b/sample/mpp-library/src/androidMain/kotlin/com/merseyside/sample/notifications/Converters.kt @@ -13,8 +13,8 @@ actual class MessageEntityConverter { ): NotificationDefinition { return { with(data) { - setContentTitle(sender) - setContentText(message) + //setContentTitle(sender) + //setContentText(message) } } } diff --git a/utils-core/build.gradle.kts b/utils-core/build.gradle.kts index 174aba5..516045c 100644 --- a/utils-core/build.gradle.kts +++ b/utils-core/build.gradle.kts @@ -8,7 +8,7 @@ plugins { id(mersey.kotlin.extension.id()) plugin(kotlin.serialization) plugin(kotlin.kapt) - id(cocoapods.id()) + //id(cocoapods.id()) } `maven-publish-config` } @@ -38,20 +38,20 @@ kotlin { iosSimulatorArm64Main.dependsOn(iosMain) } - cocoapods { - - framework { - summary = "A Kotlin multiplatform mobile library with useful utils" - homepage = "https://github.com/Merseyside/mersey-kmp-library/tree/master/utils-core" - - version = multiplatformLibs.versions.mersey.kmm.get() - } - - // https://github.com/tonymillion/Reachability - pod("Reachability") { - version = "3.2" - } - } +// cocoapods { +// +// framework { +// summary = "A Kotlin multiplatform mobile library with useful utils" +// homepage = "https://github.com/Merseyside/mersey-kmp-library/tree/master/utils-core" +// +// version = multiplatformLibs.versions.mersey.kmm.get() +// } +// +// // https://github.com/tonymillion/Reachability +// pod("Reachability") { +// version = "3.2" +// } +// } } kotlinExtension { diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/ModuleViewModel.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/ModuleViewModel.kt index 9e2829b..4649cf4 100644 --- a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/ModuleViewModel.kt +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/ModuleViewModel.kt @@ -5,21 +5,21 @@ import com.merseyside.merseyLib.utils.core.koin.state.StateDefinition import com.merseyside.merseyLib.utils.core.state.StateSaver import dev.icerock.moko.mvvm.viewmodel.ViewModel import org.koin.core.definition.Definition -import org.koin.core.instance.InstanceFactory +import org.koin.core.definition.KoinDefinition import org.koin.core.module.Module import org.koin.core.qualifier.Qualifier inline fun Module.viewModel( qualifier: Qualifier? = null, noinline definition: Definition -): Pair> { +): KoinDefinition { return factory(qualifier, definition) } inline fun Module.stateViewModel( qualifier: Qualifier? = null, noinline viewModelDefinition: StateDefinition -): Pair> where T : ViewModel, T : StateSaver { +): KoinDefinition where T : ViewModel, T : StateSaver { return factory(qualifier) { paramsHolder -> viewModelDefinition( getSavedStateFromParams(paramsHolder), diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/SingleOf.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/SingleOf.kt index 273454d..5881917 100644 --- a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/SingleOf.kt +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/SingleOf.kt @@ -1,6 +1,6 @@ package com.merseyside.merseyLib.utils.core.koin.module.dsl -import org.koin.core.module.KoinDefinition +import org.koin.core.definition.KoinDefinition import org.koin.core.module.Module inline fun Module.singleOf( diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/SingleStateViewModelOf.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/SingleStateViewModelOf.kt index ec08593..e5f9704 100644 --- a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/SingleStateViewModelOf.kt +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/SingleStateViewModelOf.kt @@ -3,7 +3,7 @@ package com.merseyside.merseyLib.utils.core.koin.module.dsl import com.merseyside.merseyLib.utils.core.state.SavedState import com.merseyside.merseyLib.utils.core.state.StateSaver import dev.icerock.moko.mvvm.viewmodel.ViewModel -import org.koin.core.module.KoinDefinition +import org.koin.core.definition.KoinDefinition import org.koin.core.module.Module import org.koin.dsl.ScopeDSL import com.merseyside.merseyLib.utils.core.koin.scope.newSavedState as new diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/SingleViewModelOf.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/SingleViewModelOf.kt index 6124451..e28c897 100644 --- a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/SingleViewModelOf.kt +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/module/dsl/SingleViewModelOf.kt @@ -1,7 +1,7 @@ package com.merseyside.merseyLib.utils.core.koin.module.dsl import dev.icerock.moko.mvvm.viewmodel.ViewModel -import org.koin.core.module.KoinDefinition +import org.koin.core.definition.KoinDefinition import org.koin.core.module.Module import org.koin.core.module.dsl.new import com.merseyside.merseyLib.utils.core.koin.module.dsl.new as hugeNew diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/SavedScopedOf.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/SavedScopedOf.kt index d7f6e4e..75038e5 100644 --- a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/SavedScopedOf.kt +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/SavedScopedOf.kt @@ -2,7 +2,7 @@ package com.merseyside.merseyLib.utils.core.koin.scope.dsl import com.merseyside.merseyLib.utils.core.state.SavedState import com.merseyside.merseyLib.utils.core.state.StateSaver -import org.koin.core.module.KoinDefinition +import org.koin.core.definition.KoinDefinition import org.koin.dsl.ScopeDSL import com.merseyside.merseyLib.utils.core.koin.scope.newSavedState as new diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/ScopeViewModel.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/ScopeViewModel.kt index c3116ee..2a6ac55 100644 --- a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/ScopeViewModel.kt +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/ScopeViewModel.kt @@ -5,22 +5,21 @@ import com.merseyside.merseyLib.utils.core.koin.state.StateDefinition import com.merseyside.merseyLib.utils.core.state.StateSaver import dev.icerock.moko.mvvm.viewmodel.ViewModel import org.koin.core.definition.Definition -import org.koin.core.instance.InstanceFactory -import org.koin.core.module.Module +import org.koin.core.definition.KoinDefinition import org.koin.core.qualifier.Qualifier import org.koin.dsl.ScopeDSL inline fun ScopeDSL.viewModel( qualifier: Qualifier? = null, noinline definition: Definition -): Pair> { +): KoinDefinition { return factory(qualifier, definition) } inline fun ScopeDSL.stateViewModel( qualifier: Qualifier? = null, noinline viewModelDefinition: StateDefinition -): Pair> where T : ViewModel, T : StateSaver { +): KoinDefinition where T : ViewModel, T : StateSaver { return factory(qualifier) { paramsHolder -> viewModelDefinition( getSavedStateFromParams(paramsHolder), diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/ScopedOf.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/ScopedOf.kt index 24f1427..f5cc9c5 100644 --- a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/ScopedOf.kt +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/ScopedOf.kt @@ -2,7 +2,7 @@ package com.merseyside.merseyLib.utils.core.koin.scope.dsl import com.merseyside.merseyLib.utils.core.koin.module.dsl.new import dev.icerock.moko.mvvm.viewmodel.ViewModel -import org.koin.core.module.KoinDefinition +import org.koin.core.definition.KoinDefinition import org.koin.dsl.ScopeDSL inline fun ScopeDSL.scopedOf( diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/ScopedStateViewModelOf.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/ScopedStateViewModelOf.kt index d6624f6..7b4becf 100644 --- a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/ScopedStateViewModelOf.kt +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/ScopedStateViewModelOf.kt @@ -3,7 +3,7 @@ package com.merseyside.merseyLib.utils.core.koin.scope.dsl import com.merseyside.merseyLib.utils.core.state.SavedState import com.merseyside.merseyLib.utils.core.state.StateSaver import dev.icerock.moko.mvvm.viewmodel.ViewModel -import org.koin.core.module.KoinDefinition +import org.koin.core.definition.KoinDefinition import org.koin.dsl.ScopeDSL import com.merseyside.merseyLib.utils.core.koin.scope.newSavedState as new diff --git a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/ScopedViewModelOf.kt b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/ScopedViewModelOf.kt index 0031bc0..23c1b4d 100644 --- a/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/ScopedViewModelOf.kt +++ b/utils-core/src/commonMain/kotlin/com/merseyside/merseyLib/utils/core/koin/scope/dsl/ScopedViewModelOf.kt @@ -1,7 +1,7 @@ package com.merseyside.merseyLib.utils.core.koin.scope.dsl import dev.icerock.moko.mvvm.viewmodel.ViewModel -import org.koin.core.module.KoinDefinition +import org.koin.core.definition.KoinDefinition import org.koin.core.module.dsl.new import org.koin.dsl.ScopeDSL import com.merseyside.merseyLib.utils.core.koin.module.dsl.new as hugeNew diff --git a/archy-core/src/iosMain/kotlin/com/merseyside/merseyLib/archy/core/koin/state/KoinParametersState.kt b/utils-core/src/iosMain/kotlin/com/merseyside/merseyLib/utils/core/koin/state/KoinParametersState.kt similarity index 80% rename from archy-core/src/iosMain/kotlin/com/merseyside/merseyLib/archy/core/koin/state/KoinParametersState.kt rename to utils-core/src/iosMain/kotlin/com/merseyside/merseyLib/utils/core/koin/state/KoinParametersState.kt index 04a5f27..58a015b 100644 --- a/archy-core/src/iosMain/kotlin/com/merseyside/merseyLib/archy/core/koin/state/KoinParametersState.kt +++ b/utils-core/src/iosMain/kotlin/com/merseyside/merseyLib/utils/core/koin/state/KoinParametersState.kt @@ -1,4 +1,4 @@ -package com.merseyside.merseyLib.archy.core.koin.state +package com.merseyside.merseyLib.utils.core.koin.state import com.merseyside.merseyLib.utils.core.state.SavedState import org.koin.core.parameter.ParametersHolder diff --git a/utils-core/src/iosMain/kotlin/com/merseyside/merseyLib/utils/core/ktor/ConnectionStateChecker.kt b/utils-core/src/iosMain/kotlin/com/merseyside/merseyLib/utils/core/ktor/ConnectionStateChecker.kt index d3ee0bc..9725455 100644 --- a/utils-core/src/iosMain/kotlin/com/merseyside/merseyLib/utils/core/ktor/ConnectionStateChecker.kt +++ b/utils-core/src/iosMain/kotlin/com/merseyside/merseyLib/utils/core/ktor/ConnectionStateChecker.kt @@ -1,6 +1,6 @@ package com.merseyside.merseyLib.utils.core.ktor -import cocoapods.Reachability.Reachability +//import cocoapods.Reachability.Reachability import com.merseyside.merseyLib.kotlin.coroutines.utils.uiDispatcher import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow @@ -12,32 +12,33 @@ actual class ConnectionStateChecker { private val mutFlow = MutableStateFlow(false) actual val networkStateFlow: Flow = mutFlow - private lateinit var reachability: Reachability +// private lateinit var reachability: Reachability actual fun isOnline(): Boolean { - return reachability.isReachable() + TODO() + //return reachability.isReachable() } actual fun start() { - reachability = Reachability.reachabilityForInternetConnection() - ?: throw Exception("Can not init reachability") - - val reachableCallback = { _: Reachability? -> - mutFlow.update { true } - } - reachability.reachableBlock = reachableCallback - - val unreachableCallback = { _: Reachability? -> - mutFlow.update { false } - } - reachability.unreachableBlock = unreachableCallback - - reachability.startNotifier() - mutFlow.update { reachability.isReachable() } +// reachability = Reachability.reachabilityForInternetConnection() +// ?: throw Exception("Can not init reachability") +// +// val reachableCallback = { _: Reachability? -> +// mutFlow.update { true } +// } +// reachability.reachableBlock = reachableCallback +// +// val unreachableCallback = { _: Reachability? -> +// mutFlow.update { false } +// } +// reachability.unreachableBlock = unreachableCallback +// +// reachability.startNotifier() +// mutFlow.update { reachability.isReachable() } } actual fun stop() { - reachability.stopNotifier() + //reachability.stopNotifier() } actual fun addNetworkStateCallback(callback: (Boolean) -> Unit) {