aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/net/lacolaco/smileessence/util/UIObserverBundle.kt
diff options
context:
space:
mode:
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.kt26
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()
+ }
+}