From d6c4ce7b6c51a4103f1dac4140a9fc8c4a1f421b Mon Sep 17 00:00:00 2001 From: michaelbel Date: Fri, 13 Dec 2024 00:01:37 +0300 Subject: [PATCH] Update project --- .../org/michaelbel/core/ktx/LifecycleKtx.kt | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 core/src/main/kotlin/org/michaelbel/core/ktx/LifecycleKtx.kt diff --git a/core/src/main/kotlin/org/michaelbel/core/ktx/LifecycleKtx.kt b/core/src/main/kotlin/org/michaelbel/core/ktx/LifecycleKtx.kt new file mode 100644 index 00000000..bb7198cf --- /dev/null +++ b/core/src/main/kotlin/org/michaelbel/core/ktx/LifecycleKtx.kt @@ -0,0 +1,39 @@ +package org.michaelbel.core.ktx + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.rememberUpdatedState +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleEventObserver +import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.compose.LocalLifecycleOwner + +@Composable +fun OnResume( + onResume: () -> Unit +) { + OnLifecycleEvent( + onEvent = { _, event -> + onResume().takeIf { event == Lifecycle.Event.ON_RESUME } + } + ) +} + +@Composable +private fun OnLifecycleEvent( + onEvent: (owner: LifecycleOwner, event: Lifecycle.Event) -> Unit +) { + val eventHandler = rememberUpdatedState(onEvent) + val lifecycleOwner = rememberUpdatedState(LocalLifecycleOwner.current) + + DisposableEffect(lifecycleOwner.value) { + val lifecycle = lifecycleOwner.value.lifecycle + val observer = LifecycleEventObserver { owner, event -> + eventHandler.value(owner, event) + } + lifecycle.addObserver(observer) + onDispose { + lifecycle.removeObserver(observer) + } + } +} \ No newline at end of file