package net.lacolaco.smileessence.util import net.lacolaco.smileessence.entity.RBinding import java.util.* abstract class UIObservable { private val observers = WeakHashMap) -> Unit>() fun addObserver(weakKey: Any, observer: (EnumSet) -> Unit) { synchronized(this) { observers.put(weakKey, observer) } } fun removeObserver(weakKey: Any) { synchronized(this) { observers.remove(weakKey) } } protected fun notifyChange(flag: RBinding) { notifyChange(EnumSet.of(flag)) } protected fun notifyChange(flags: EnumSet) { val obs = ArrayList<(EnumSet) -> Unit>() synchronized(this) { obs.addAll(observers.values) } UIHandler().post { for (observer in obs) { observer(flags) } } } }