diff options
author | Stefan Niedermann <info@niedermann.it> | 2021-06-12 15:46:48 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2021-06-12 15:46:48 +0300 |
commit | 73a78b2a9e54972221bed65d39a8dd5b38f4e4a1 (patch) | |
tree | eab02ddcb43c674dd6278eca9a67be1bc1ad2261 /app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters | |
parent | ea7839c6cb042ca162286bec62706e0948ee3661 (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')
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; |