From fa076489bc7d45040bfb96e7b6df007340eada20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petrus=20Nguy=E1=BB=85n=20Th=C3=A1i=20H=E1=BB=8Dc?= Date: Tue, 2 Nov 2021 17:53:23 +0700 Subject: [PATCH 1/4] Update deps --- buildSrc/src/main/kotlin/deps.kt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/buildSrc/src/main/kotlin/deps.kt b/buildSrc/src/main/kotlin/deps.kt index 661aa602..a13252df 100644 --- a/buildSrc/src/main/kotlin/deps.kt +++ b/buildSrc/src/main/kotlin/deps.kt @@ -26,16 +26,16 @@ object appConfig { object deps { object androidx { - const val appCompat = "androidx.appcompat:appcompat:1.3.0-rc01" - const val coreKtx = "androidx.core:core-ktx:1.6.0-alpha03" - const val constraintLayout = "androidx.constraintlayout:constraintlayout:2.1.0-beta02" - const val recyclerView = "androidx.recyclerview:recyclerview:1.2.0" + const val appCompat = "androidx.appcompat:appcompat:1.4.0-rc01" + const val coreKtx = "androidx.core:core-ktx:1.7.0" + const val constraintLayout = "androidx.constraintlayout:constraintlayout:2.1.1" + const val recyclerView = "androidx.recyclerview:recyclerview:1.2.1" const val swipeRefreshLayout = "androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01" - const val material = "com.google.android.material:material:1.4.0-beta01" + const val material = "com.google.android.material:material:1.4.0" } object lifecycle { - private const val version = "2.4.0-alpha01" + private const val version = "2.4.0" const val viewModelKtx = "androidx.lifecycle:lifecycle-viewmodel-ktx:$version" // viewModelScope const val runtimeKtx = "androidx.lifecycle:lifecycle-runtime-ktx:$version" // lifecycleScope @@ -51,7 +51,7 @@ object deps { } object coroutines { - private const val version = "1.5.0" + private const val version = "1.5.2" const val core = "org.jetbrains.kotlinx:kotlinx-coroutines-core:$version" const val android = "org.jetbrains.kotlinx:kotlinx-coroutines-android:$version" @@ -71,7 +71,7 @@ object deps { const val flowExt = "io.github.hoc081098:FlowExt:0.0.7-SNAPSHOT" object arrow { - private const val version = "1.0.0" + private const val version = "1.0.1" const val core = "io.arrow-kt:arrow-core:$version" } From fa29c5fdfe192e9d5d1ac4483578b5a644bb08a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petrus=20Nguy=E1=BB=85n=20Th=C3=A1i=20H=E1=BB=8Dc?= Date: Tue, 2 Nov 2021 18:01:38 +0700 Subject: [PATCH 2/4] use repeatOnLifecycle --- .../java/com/hoc/flowmvi/core/CollectIn.kt | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/core/src/main/java/com/hoc/flowmvi/core/CollectIn.kt b/core/src/main/java/com/hoc/flowmvi/core/CollectIn.kt index da7e2952..22e096a5 100644 --- a/core/src/main/java/com/hoc/flowmvi/core/CollectIn.kt +++ b/core/src/main/java/com/hoc/flowmvi/core/CollectIn.kt @@ -4,32 +4,32 @@ import android.util.Log import androidx.fragment.app.Fragment import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleOwner -import androidx.lifecycle.addRepeatingJob +import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.repeatOnLifecycle import kotlinx.coroutines.Job import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.collect -import kotlin.coroutines.CoroutineContext -import kotlin.coroutines.EmptyCoroutineContext +import kotlinx.coroutines.launch inline fun Flow.collectIn( owner: LifecycleOwner, minActiveState: Lifecycle.State = Lifecycle.State.STARTED, - coroutineContext: CoroutineContext = EmptyCoroutineContext, crossinline action: suspend (value: T) -> Unit, -): Job = owner.addRepeatingJob(state = minActiveState, coroutineContext = coroutineContext) { - Log.d("collectIn", "Start collecting...") - collect { action(it) } +): Job = owner.lifecycleScope.launch { + owner.lifecycle.repeatOnLifecycle(state = minActiveState) { + Log.d("collectIn", "Start collecting $owner $minActiveState...") + collect { action(it) } + } } @Suppress("unused") inline fun Flow.collectIn( fragment: Fragment, minActiveState: Lifecycle.State = Lifecycle.State.STARTED, - coroutineContext: CoroutineContext = EmptyCoroutineContext, crossinline action: suspend (value: T) -> Unit, -): Job = collectIn( - fragment.viewLifecycleOwner, - minActiveState = minActiveState, - coroutineContext = coroutineContext, - action = action, -) +): Job = fragment.lifecycleScope.launch { + fragment.viewLifecycleOwner.repeatOnLifecycle(state = minActiveState) { + Log.d("collectIn", "Start collecting $fragment $minActiveState...") + collect { action(it) } + } +} From a6b9ae2c71eb29317ae3f3a38357aed84fd255a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petrus=20Nguy=E1=BB=85n=20Th=C3=A1i=20H=E1=BB=8Dc?= Date: Tue, 2 Nov 2021 18:11:39 +0700 Subject: [PATCH 3/4] fix --- .../java/com/hoc/flowmvi/core/CollectIn.kt | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/core/src/main/java/com/hoc/flowmvi/core/CollectIn.kt b/core/src/main/java/com/hoc/flowmvi/core/CollectIn.kt index 22e096a5..c0d8fe0f 100644 --- a/core/src/main/java/com/hoc/flowmvi/core/CollectIn.kt +++ b/core/src/main/java/com/hoc/flowmvi/core/CollectIn.kt @@ -16,20 +16,23 @@ inline fun Flow.collectIn( minActiveState: Lifecycle.State = Lifecycle.State.STARTED, crossinline action: suspend (value: T) -> Unit, ): Job = owner.lifecycleScope.launch { - owner.lifecycle.repeatOnLifecycle(state = minActiveState) { + owner.repeatOnLifecycle(state = minActiveState) { Log.d("collectIn", "Start collecting $owner $minActiveState...") collect { action(it) } } } +/** + * Launches a new coroutine and repeats `block` every time the Fragment's viewLifecycleOwner + * is in and out of `minActiveState` lifecycle state. + */ @Suppress("unused") -inline fun Flow.collectIn( +inline fun Flow.collectInViewLifecycle( fragment: Fragment, minActiveState: Lifecycle.State = Lifecycle.State.STARTED, crossinline action: suspend (value: T) -> Unit, -): Job = fragment.lifecycleScope.launch { - fragment.viewLifecycleOwner.repeatOnLifecycle(state = minActiveState) { - Log.d("collectIn", "Start collecting $fragment $minActiveState...") - collect { action(it) } - } -} +): Job = collectIn( + owner = fragment.viewLifecycleOwner, + minActiveState = minActiveState, + action = action, +) \ No newline at end of file From 415d637619c793373994cad3fcace3fadfab0436 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petrus=20Nguy=E1=BB=85n=20Th=C3=A1i=20H=E1=BB=8Dc?= Date: Tue, 2 Nov 2021 18:32:12 +0700 Subject: [PATCH 4/4] fix fmt --- core/src/main/java/com/hoc/flowmvi/core/CollectIn.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/com/hoc/flowmvi/core/CollectIn.kt b/core/src/main/java/com/hoc/flowmvi/core/CollectIn.kt index c0d8fe0f..13642a10 100644 --- a/core/src/main/java/com/hoc/flowmvi/core/CollectIn.kt +++ b/core/src/main/java/com/hoc/flowmvi/core/CollectIn.kt @@ -35,4 +35,4 @@ inline fun Flow.collectInViewLifecycle( owner = fragment.viewLifecycleOwner, minActiveState = minActiveState, action = action, -) \ No newline at end of file +)