diff options
author | Stefan Niedermann <info@niedermann.it> | 2023-03-20 10:05:59 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2023-03-20 10:05:59 +0300 |
commit | f3cb21dbf1f41f8f2a2f5d37bc006b2aa7e72634 (patch) | |
tree | a6a8e043f50196a920a9f633bd8eb43e4088d06a /app/src | |
parent | 9813acf93f43637d4fb40f64f83846325253b5dc (diff) |
fix: Avoid SQLiteConstraint failures by reverting to custom ExecutorService
Signed-off-by: Stefan Niedermann <info@niedermann.it>
Diffstat (limited to 'app/src')
5 files changed, 13 insertions, 17 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/database/DataBaseAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/database/DataBaseAdapter.java index 387350562..dc5883ba9 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/database/DataBaseAdapter.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/database/DataBaseAdapter.java @@ -91,6 +91,7 @@ import it.niedermann.nextcloud.deck.model.widget.singlecard.SingleCardWidgetMode import it.niedermann.nextcloud.deck.remote.api.IResponseCallback; import it.niedermann.nextcloud.deck.ui.upcomingcards.UpcomingCardsAdapterItem; import it.niedermann.nextcloud.deck.ui.widget.singlecard.SingleCardWidget; +import it.niedermann.nextcloud.deck.util.ExecutorServiceProvider; public class DataBaseAdapter { @NonNull @@ -108,7 +109,7 @@ public class DataBaseAdapter { private final int defaultColor; public DataBaseAdapter(@NonNull Context appContext) { - this(appContext, DeckDatabase.getInstance(appContext), Executors.newCachedThreadPool(), Executors.newCachedThreadPool()); + this(appContext, DeckDatabase.getInstance(appContext), Executors.newCachedThreadPool(), ExecutorServiceProvider.getLinkedBlockingQueueExecutor()); } @VisibleForTesting diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/remote/api/RequestHelper.java b/app/src/main/java/it/niedermann/nextcloud/deck/remote/api/RequestHelper.java index af23b6d2e..e7533b66c 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/remote/api/RequestHelper.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/remote/api/RequestHelper.java @@ -23,7 +23,7 @@ public class RequestHelper { final ResponseConsumer<T> cb = new ResponseConsumer<>(callback); return call.getObservableFromCall() - .subscribeOn(Schedulers.from(ExecutorServiceProvider.getExecutorService())) + .subscribeOn(Schedulers.from(ExecutorServiceProvider.getLinkedBlockingQueueExecutor())) .subscribe(cb, cb.getExceptionConsumer()); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/repository/BaseRepository.java b/app/src/main/java/it/niedermann/nextcloud/deck/repository/BaseRepository.java index 238195e03..981b16ec8 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/repository/BaseRepository.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/repository/BaseRepository.java @@ -71,7 +71,7 @@ public class BaseRepository { } protected BaseRepository(@NonNull Context context, @NonNull ConnectivityUtil connectivityUtil) { - this(context, connectivityUtil, new DataBaseAdapter(context.getApplicationContext()), ExecutorServiceProvider.getExecutorService()); + this(context, connectivityUtil, new DataBaseAdapter(context.getApplicationContext()), ExecutorServiceProvider.getLinkedBlockingQueueExecutor()); } protected BaseRepository(@NonNull Context context, diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/viewmodel/BaseViewModel.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/viewmodel/BaseViewModel.java index 02788ff07..e6ae707ea 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/viewmodel/BaseViewModel.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/viewmodel/BaseViewModel.java @@ -7,9 +7,9 @@ import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.ViewModel; import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; import it.niedermann.nextcloud.deck.repository.BaseRepository; +import it.niedermann.nextcloud.deck.util.ExecutorServiceProvider; /** * To be used for {@link ViewModel}s which need an {@link BaseRepository} instance @@ -26,7 +26,7 @@ public abstract class BaseViewModel extends AndroidViewModel { public BaseViewModel(@NonNull Application application, @NonNull BaseRepository baseRepository) { - this(application, baseRepository, Executors.newCachedThreadPool()); + this(application, baseRepository, ExecutorServiceProvider.getLinkedBlockingQueueExecutor()); } public BaseViewModel(@NonNull Application application, diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/util/ExecutorServiceProvider.java b/app/src/main/java/it/niedermann/nextcloud/deck/util/ExecutorServiceProvider.java index dc5e30bac..8ef8c5771 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/util/ExecutorServiceProvider.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/util/ExecutorServiceProvider.java @@ -1,27 +1,22 @@ package it.niedermann.nextcloud.deck.util; import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; -/** - * If we really want <strong>this</strong>, we should default to {@link Executors#newWorkStealingPool()}. - * Though I recommend to distinguish between blocking threads and non-blocking threads (like network operations), where it does not make sense to limit it to available CPU cores. - */ -//@Deprecated(forRemoval = true) public class ExecutorServiceProvider { -// private static final int NUMBER_OF_CORES = Runtime.getRuntime().availableProcessors(); + private static final int NUMBER_OF_CORES = Runtime.getRuntime().availableProcessors(); - private static final ExecutorService EXECUTOR = - Executors.newWorkStealingPool(); -// new ThreadPoolExecutor(NUMBER_OF_CORES>>1, NUMBER_OF_CORES, -// 60L, TimeUnit.SECONDS, new LinkedBlockingQueue<>()); + private static final ExecutorService EXECUTOR = new ThreadPoolExecutor(NUMBER_OF_CORES >> 1, NUMBER_OF_CORES, + 60L, TimeUnit.SECONDS, new LinkedBlockingQueue<>()); private ExecutorServiceProvider() { // hide Constructor } - public static ExecutorService getExecutorService() { + public static ExecutorService getLinkedBlockingQueueExecutor() { return EXECUTOR; } } |