From d6373ed69cce4902e79420c2271058ca391bb693 Mon Sep 17 00:00:00 2001 From: alex Date: Thu, 12 Sep 2019 12:11:51 +0300 Subject: [PATCH 1/2] Added lazy init methods for view models, with touch of roboswag flavor --- kotlin-extensions/build.gradle | 5 +++ .../ru/touchin/extensions/ViewModelLazy.kt | 34 +++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 kotlin-extensions/src/main/java/ru/touchin/extensions/ViewModelLazy.kt diff --git a/kotlin-extensions/build.gradle b/kotlin-extensions/build.gradle index 797cd49..1a98015 100644 --- a/kotlin-extensions/build.gradle +++ b/kotlin-extensions/build.gradle @@ -10,7 +10,12 @@ android { } dependencies { + implementation project(':lifecycle') + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "androidx.recyclerview:recyclerview:$versions.androidx" + + implementation "androidx.fragment:fragment:$versions.fragment" + implementation "androidx.fragment:fragment-ktx:$versions.fragment" } diff --git a/kotlin-extensions/src/main/java/ru/touchin/extensions/ViewModelLazy.kt b/kotlin-extensions/src/main/java/ru/touchin/extensions/ViewModelLazy.kt new file mode 100644 index 0000000..6f6d9da --- /dev/null +++ b/kotlin-extensions/src/main/java/ru/touchin/extensions/ViewModelLazy.kt @@ -0,0 +1,34 @@ +package ru.touchin.extensions + +import androidx.activity.ComponentActivity +import androidx.activity.viewModels +import androidx.annotation.MainThread +import androidx.fragment.app.Fragment +import androidx.fragment.app.activityViewModels +import androidx.fragment.app.viewModels +import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.ViewModelStoreOwner +import ru.touchin.lifecycle.viewmodel.LifecycleViewModelProviders + +@MainThread +inline fun Fragment.viewModels( + noinline ownerProducer: () -> ViewModelStoreOwner = { this }, + noinline factoryProducer: () -> ViewModelProvider.Factory = { LifecycleViewModelProviders.getViewModelFactory(this) } +) = viewModels(ownerProducer, factoryProducer) + +@MainThread +inline fun Fragment.targetViewModels( + noinline ownerProducer: () -> ViewModelStoreOwner = { targetFragment!! }, + noinline factoryProducer: () -> ViewModelProvider.Factory = { LifecycleViewModelProviders.getViewModelFactory(targetFragment!!) } +) = viewModels(ownerProducer, factoryProducer) + +@MainThread +inline fun Fragment.activityViewModels( + noinline factoryProducer: () -> ViewModelProvider.Factory = { LifecycleViewModelProviders.getViewModelFactory(requireActivity()) } +) = activityViewModels(factoryProducer) + +@MainThread +inline fun ComponentActivity.viewModels( + noinline factoryProducer: () -> ViewModelProvider.Factory = { LifecycleViewModelProviders.getViewModelFactory(this) } +): Lazy = viewModels(factoryProducer) From 24eca02b5da6f4889acd6e0552d88544b8df4105 Mon Sep 17 00:00:00 2001 From: alex Date: Thu, 12 Sep 2019 12:22:05 +0300 Subject: [PATCH 2/2] Changed ViewModelLazy module from extensions to lifecycle --- kotlin-extensions/build.gradle | 5 ----- lifecycle/build.gradle | 3 +++ .../java/ru/touchin/lifecycle}/extensions/ViewModelLazy.kt | 2 +- 3 files changed, 4 insertions(+), 6 deletions(-) rename {kotlin-extensions/src/main/java/ru/touchin => lifecycle/src/main/java/ru/touchin/lifecycle}/extensions/ViewModelLazy.kt (97%) diff --git a/kotlin-extensions/build.gradle b/kotlin-extensions/build.gradle index 1a98015..797cd49 100644 --- a/kotlin-extensions/build.gradle +++ b/kotlin-extensions/build.gradle @@ -10,12 +10,7 @@ android { } dependencies { - implementation project(':lifecycle') - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "androidx.recyclerview:recyclerview:$versions.androidx" - - implementation "androidx.fragment:fragment:$versions.fragment" - implementation "androidx.fragment:fragment-ktx:$versions.fragment" } diff --git a/lifecycle/build.gradle b/lifecycle/build.gradle index 72b36d0..41a0ebb 100644 --- a/lifecycle/build.gradle +++ b/lifecycle/build.gradle @@ -23,5 +23,8 @@ dependencies { implementation "androidx.appcompat:appcompat:$versions.appcompat" + implementation "androidx.fragment:fragment:$versions.fragment" + implementation "androidx.fragment:fragment-ktx:$versions.fragment" + implementation "androidx.lifecycle:lifecycle-extensions:$versions.lifecycle" } diff --git a/kotlin-extensions/src/main/java/ru/touchin/extensions/ViewModelLazy.kt b/lifecycle/src/main/java/ru/touchin/lifecycle/extensions/ViewModelLazy.kt similarity index 97% rename from kotlin-extensions/src/main/java/ru/touchin/extensions/ViewModelLazy.kt rename to lifecycle/src/main/java/ru/touchin/lifecycle/extensions/ViewModelLazy.kt index 6f6d9da..b0d7d87 100644 --- a/kotlin-extensions/src/main/java/ru/touchin/extensions/ViewModelLazy.kt +++ b/lifecycle/src/main/java/ru/touchin/lifecycle/extensions/ViewModelLazy.kt @@ -1,4 +1,4 @@ -package ru.touchin.extensions +package ru.touchin.lifecycle.extensions import androidx.activity.ComponentActivity import androidx.activity.viewModels