diff options
Diffstat (limited to 'app/src/main/java/net/lacolaco/smileessence/util/UIObserverBundle.kt')
-rw-r--r-- | app/src/main/java/net/lacolaco/smileessence/util/UIObserverBundle.kt | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/app/src/main/java/net/lacolaco/smileessence/util/UIObserverBundle.kt b/app/src/main/java/net/lacolaco/smileessence/util/UIObserverBundle.kt new file mode 100644 index 00000000..f6c8403b --- /dev/null +++ b/app/src/main/java/net/lacolaco/smileessence/util/UIObserverBundle.kt @@ -0,0 +1,26 @@ +package net.lacolaco.smileessence.util + +import net.lacolaco.smileessence.entity.RBinding +import java.util.* + +// UIObserver と UIObservable のセットを管理するオブジェクトだよ〜〜 +class UIObserverBundle { + private val map = HashMap<UIObservable, (EnumSet<RBinding>) -> Unit>() + + fun detachAll() { + for ((key) in map) { + key.removeObserver(this) + } + map.clear() + } + + fun attach(observable: UIObservable, observer: (EnumSet<RBinding>) -> Unit): (EnumSet<RBinding>) -> Unit { + observable.addObserver(this, observer) + map.put(observable, observer) + return observer + } + + protected fun finalize() { + detachAll() + } +} |