diff --git a/app/src/main/java/org/android/go/sopt/util/Event.kt b/app/src/main/java/org/android/go/sopt/util/Event.kt new file mode 100644 index 0000000..1306679 --- /dev/null +++ b/app/src/main/java/org/android/go/sopt/util/Event.kt @@ -0,0 +1,25 @@ +package org.android.go.sopt.util + +import androidx.lifecycle.Observer + +class Event(private val content: T) { + + private var hasBeenHandled = false + + fun getContentIfNotHandled(): T? { + return if (hasBeenHandled) { + null + } else { + hasBeenHandled = true + content + } + } +} + +class EventObserver(private val onEventUnhandledContent: (T) -> Unit) : Observer> { + override fun onChanged(event: Event) { + event?.getContentIfNotHandled()?.let { + onEventUnhandledContent(it) + } + } +}