From 54413154a68dc776af71d1406e70fb436289481f Mon Sep 17 00:00:00 2001 From: Infi Date: Sat, 30 Sep 2023 23:07:07 +0200 Subject: [PATCH] feat: add LifecycleEffect for future use Signed-off-by: Infi --- .../revolt/internals/extensions/Lifecycle.kt | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 app/src/main/java/chat/revolt/internals/extensions/Lifecycle.kt diff --git a/app/src/main/java/chat/revolt/internals/extensions/Lifecycle.kt b/app/src/main/java/chat/revolt/internals/extensions/Lifecycle.kt new file mode 100644 index 00000000..a0d9bf4f --- /dev/null +++ b/app/src/main/java/chat/revolt/internals/extensions/Lifecycle.kt @@ -0,0 +1,27 @@ +package chat.revolt.internals.extensions + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.platform.LocalLifecycleOwner +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleEventObserver +import androidx.lifecycle.LifecycleOwner + +@Composable +fun LifecycleEffect(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