X-Git-Url: https://git.ktnx.net/?p=mobile-ledger.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Futils%2FObservableValue.java;fp=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Futils%2FObservableValue.java;h=01fa09262dfd513bdf05bc7df248f5ddd9a38f4f;hp=0000000000000000000000000000000000000000;hb=127d9d8e0562d315ed025f659503cf64da5c2e13;hpb=7b2966220b258cc2f1becae3ff91ef62a36cc01b
diff --git a/app/src/main/java/net/ktnx/mobileledger/utils/ObservableValue.java b/app/src/main/java/net/ktnx/mobileledger/utils/ObservableValue.java
new file mode 100644
index 00000000..01fa0926
--- /dev/null
+++ b/app/src/main/java/net/ktnx/mobileledger/utils/ObservableValue.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright © 2019 Damyan Ivanov.
+ * This file is part of Mobile-Ledger.
+ * Mobile-Ledger is free software: you can distribute it and/or modify it
+ * under the term of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your opinion), any later version.
+ *
+ * Mobile-Ledger is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License terms for details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Mobile-Ledger. If not, see .
+ */
+
+package net.ktnx.mobileledger.utils;
+
+import java.util.Observable;
+import java.util.Observer;
+
+public class ObservableValue {
+ private final ObservableValueImpl impl = new ObservableValueImpl<>();
+ public ObservableValue() {}
+ public ObservableValue(T initialValue) {
+ impl.setValue(initialValue, false);
+ }
+ public void set(T newValue) {
+ impl.setValue(newValue);
+ }
+ public T get() {
+ return impl.getValue();
+ }
+ public void addObserver(Observer o) {
+ impl.addObserver(o);
+ }
+ public void deleteObserver(Observer o) {
+ impl.deleteObserver(o);
+ }
+ public void notifyObservers() {
+ impl.notifyObservers();
+ }
+ public void notifyObservers(Object arg) {
+ impl.notifyObservers(arg);
+ }
+ public void deleteObservers() {
+ impl.deleteObservers();
+ }
+ public boolean hasChanged() {
+ return impl.hasChanged();
+ }
+ public int countObservers() {
+ return impl.countObservers();
+ }
+ private class ObservableValueImpl extends Observable {
+ protected T value;
+ public void setValue(T newValue) {
+ setValue(newValue, true);
+ }
+ private synchronized void setValue(T newValue, boolean notify) {
+ if ((newValue == null) && (value == null)) return;
+
+ if ((newValue != null) && newValue.equals(value)) return;
+
+ T oldValue = value;
+ value = newValue;
+ setChanged();
+ if (notify) notifyObservers(oldValue);
+ }
+ public T getValue() {
+ return value;
+ }
+ }
+}
\ No newline at end of file