/* * SPDX-FileCopyrightText: 2020 The Calyx Institute * SPDX-License-Identifier: Apache-2.0 */ package com.stevesoltys.seedvault.ui import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LiveData import androidx.lifecycle.Observer import com.stevesoltys.seedvault.ui.LiveEvent.ConsumableEvent open class LiveEvent : LiveData>() { fun observeEvent(owner: LifecycleOwner, handler: LiveEventHandler) { val observer = LiveEventObserver(handler) super.observe(owner, observer) } class ConsumableEvent(private val content: T) { private var consumed = false val contentIfNotConsumed: T? get() { if (consumed) return null consumed = true return content } } internal class LiveEventObserver(private val handler: LiveEventHandler) : Observer> { override fun onChanged(value: ConsumableEvent) { val content = value.contentIfNotConsumed if (content != null) handler.onEvent(content) } } }