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