Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/stefan-niedermann/nextcloud-deck.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Niedermann <info@niedermann.it>2021-06-12 15:46:48 +0300
committerStefan Niedermann <info@niedermann.it>2021-06-12 15:46:48 +0300
commit73a78b2a9e54972221bed65d39a8dd5b38f4e4a1 (patch)
treeeab02ddcb43c674dd6278eca9a67be1bc1ad2261 /app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters
parentea7839c6cb042ca162286bec62706e0948ee3661 (diff)
Use executors for more control over started threads
Signed-off-by: Stefan Niedermann <info@niedermann.it>
Diffstat (limited to 'app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters')
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/util/LiveDataHelper.java70
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/util/extrawurst/UserSearchLiveData.java6
2 files changed, 39 insertions, 37 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/util/LiveDataHelper.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/util/LiveDataHelper.java
index 10a18bb09..059ed5e6b 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/util/LiveDataHelper.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/util/LiveDataHelper.java
@@ -6,38 +6,24 @@ import androidx.lifecycle.LiveData;
import androidx.lifecycle.MediatorLiveData;
import androidx.lifecycle.Observer;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
import static androidx.lifecycle.Transformations.distinctUntilChanged;
public class LiveDataHelper {
- public interface DataChangeProcessor<T> {
- void onDataChanged(T data);
+ private LiveDataHelper() {
+ throw new UnsupportedOperationException("This class must not be instantiated.");
}
- public interface DataTransformator<I, O> {
- O transform(I data);
- }
-
- public interface LiveDataWrapper<T> {
- T getData();
-
- default void postResult(WrappedLiveData<T> liveData) {
- liveData.setError(null);
- T data = null;
- try {
- data = getData();
- } catch (RuntimeException e) {
- liveData.setError(e);
- }
- liveData.postValue(data);
- }
- }
+ private static final ExecutorService executor = Executors.newCachedThreadPool();
public static <T> LiveData<T> interceptLiveData(LiveData<T> data, DataChangeProcessor<T> onDataChange) {
MediatorLiveData<T> ret = new MediatorLiveData<>();
ret.addSource(data, changedData ->
- doAsync(() -> {
+ executor.submit(() -> {
onDataChange.onDataChanged(changedData);
ret.postValue(changedData);
})
@@ -47,32 +33,29 @@ public class LiveDataHelper {
public static <I, O> LiveData<O> postCustomValue(LiveData<I> data, DataTransformator<I, O> transformator) {
- MediatorLiveData<O> ret = new MediatorLiveData<>();
-
- ret.addSource(data, changedData -> doAsync(() -> ret.postValue(transformator.transform(changedData))));
+ final MediatorLiveData<O> ret = new MediatorLiveData<>();
+ ret.addSource(data, changedData -> executor.submit(() -> ret.postValue(transformator.transform(changedData))));
return distinctUntilChanged(ret);
}
public static <I> MediatorLiveData<I> of(I oneShot) {
- MediatorLiveData<I> ret = new MediatorLiveData<I>() {
+ return new MediatorLiveData<I>() {
@Override
public void observe(@NonNull LifecycleOwner owner, @NonNull Observer observer) {
super.observe(owner, observer);
- doAsync(() -> postValue(oneShot));
+ executor.submit(() -> postValue(oneShot));
}
};
- return ret;
}
public static <I, O> LiveData<O> postSingleValue(LiveData<I> data, DataTransformator<I, O> transformator) {
- MediatorLiveData<O> ret = new MediatorLiveData<>();
-
- ret.addSource(data, changedData -> doAsync(() -> ret.postValue(transformator.transform(changedData))));
+ final MediatorLiveData<O> ret = new MediatorLiveData<>();
+ ret.addSource(data, changedData -> executor.submit(() -> ret.postValue(transformator.transform(changedData))));
return distinctUntilChanged(ret);
}
public static <T> void observeOnce(LiveData<T> liveData, LifecycleOwner owner, Observer<T> observer) {
- Observer<T> tempObserver = new Observer<T>() {
+ final Observer<T> tempObserver = new Observer<T>() {
@Override
public void onChanged(T result) {
liveData.removeObserver(this);
@@ -85,7 +68,7 @@ public class LiveDataHelper {
public static <T> WrappedLiveData<T> wrapInLiveData(final LiveDataWrapper<T> liveDataWrapper) {
final WrappedLiveData<T> liveData = new WrappedLiveData<>();
- doAsync(() -> {
+ executor.submit(() -> {
try {
liveDataWrapper.postResult(liveData);
} catch (Throwable t) {
@@ -96,7 +79,26 @@ public class LiveDataHelper {
return liveData;
}
- private static void doAsync(Runnable r) {
- new Thread(r).start();
+ public interface DataChangeProcessor<T> {
+ void onDataChanged(T data);
+ }
+
+ public interface DataTransformator<I, O> {
+ O transform(I data);
+ }
+
+ public interface LiveDataWrapper<T> {
+ T getData();
+
+ default void postResult(WrappedLiveData<T> liveData) {
+ liveData.setError(null);
+ T data = null;
+ try {
+ data = getData();
+ } catch (RuntimeException e) {
+ liveData.setError(e);
+ }
+ liveData.postValue(data);
+ }
}
} \ No newline at end of file
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/util/extrawurst/UserSearchLiveData.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/util/extrawurst/UserSearchLiveData.java
index 3d05247b3..4a90664c9 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/util/extrawurst/UserSearchLiveData.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/util/extrawurst/UserSearchLiveData.java
@@ -18,12 +18,12 @@ import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.DataBaseAdapter
public class UserSearchLiveData extends MediatorLiveData<List<User>> implements Debouncer.Callback<Long> {
private static final int DEBOUNCE_TIME = 300; // ms
- private DataBaseAdapter db;
- private ServerAdapter server;
+ private final DataBaseAdapter db;
+ private final ServerAdapter server;
long accountId;
String searchTerm;
long notYetAssignedInACL;
- private Debouncer<Long> debouncer = new Debouncer<>(this, DEBOUNCE_TIME);
+ private final Debouncer<Long> debouncer = new Debouncer<>(this, DEBOUNCE_TIME);
public UserSearchLiveData(DataBaseAdapter db, ServerAdapter server) {
this.db = db;