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 434ddc272..f50553984 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 @@ -6,6 +6,8 @@ import com.nextcloud.android.sso.exceptions.NextcloudHttpRequestFailedException; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; import java.util.function.Supplier; import it.niedermann.nextcloud.deck.DeckLog; @@ -45,8 +47,17 @@ public void request(@NonNull final Supplier> callProvider, this.apiProvider.initSsoApi(callback::onError); } - final var cb = new ResponseConsumer<>(this.apiProvider.getContext(), callback); - ExecutorServiceProvider.getLinkedBlockingQueueExecutor().submit(() -> callProvider.get().enqueue(cb)); + final CountDownLatch latch = new CountDownLatch(1); + final var cb = new ResponseConsumer<>(this.apiProvider.getContext(), callback, latch); + ExecutorServiceProvider.getLinkedBlockingQueueExecutor().submit(() -> { + callProvider.get().enqueue(cb); + try { + latch.await(20, TimeUnit.SECONDS); + } catch (InterruptedException e) { + DeckLog.logError(e); + } + }); + DeckLog.log(DeckLog.Severity.DEBUG, "#Executor: " + ExecutorServiceProvider.getLinkedBlockingQueueExecutor().toString()); } private static class ResponseConsumer implements Callback { @@ -54,16 +65,20 @@ private static class ResponseConsumer implements Callback { private final Context context; @NonNull private final ResponseCallback callback; + @NonNull + private final CountDownLatch latch; - private ResponseConsumer(@NonNull Context context, @NonNull ResponseCallback callback) { + private ResponseConsumer(@NonNull Context context, @NonNull ResponseCallback callback, @NonNull CountDownLatch latch) { this.context = context; this.callback = callback; + this.latch = latch; } @Override public void onResponse(@NonNull Call call, Response response) { if (response.isSuccessful()) { T responseObject = response.body(); + latch.countDown(); callback.fillAccountIDs(responseObject); callback.onResponse(responseObject, response.headers()); } else { @@ -92,6 +107,7 @@ private RuntimeException buildCause(Response response) { @Override public void onFailure(@NonNull Call call, @NonNull Throwable t) { DeckLog.logError(t); + latch.countDown(); callback.onError(ServerCommunicationErrorHandler.translateError(t)); } }