diff options
author | desperateCoder <echotodevnull@gmail.com> | 2021-09-10 18:28:12 +0300 |
---|---|---|
committer | Niedermann IT-Dienstleistungen <stefan-niedermann@users.noreply.github.com> | 2021-09-10 19:44:25 +0300 |
commit | 62feba91cdaeacd980ca702fdd42fd8a3412dca1 (patch) | |
tree | 8b9729b1580bf3ec65073c3857471657d3d3a906 /app/src/main | |
parent | c746af3af8779782ea7fe50480a9f91f1ee543e0 (diff) |
#545 visualize progress - first try
Diffstat (limited to 'app/src/main')
3 files changed, 37 insertions, 5 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java index 2cc11c607..439ad5040 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java @@ -6,6 +6,7 @@ import static java.net.HttpURLConnection.HTTP_UNAVAILABLE; import android.annotation.SuppressLint; import android.content.Context; import android.database.sqlite.SQLiteConstraintException; +import android.util.Pair; import androidx.annotation.AnyThread; import androidx.annotation.ColorInt; @@ -196,7 +197,8 @@ public class SyncManager { } @AnyThread - public void synchronize(@NonNull ResponseCallback<Boolean> responseCallback) { + public LiveData<Pair<Integer, Integer>> synchronize(@NonNull ResponseCallback<Boolean> responseCallback) { + MutableLiveData<Pair<Integer, Integer>> progress$ = new MutableLiveData<>(); Account callbackAccount = responseCallback.getAccount(); if (callbackAccount == null) { throw new IllegalArgumentException(Account.class.getSimpleName() + " object in given " + ResponseCallback.class.getSimpleName() + " must not be null."); @@ -234,7 +236,7 @@ public class SyncManager { }); executor.submit(() -> { try { - syncHelper.doUpSyncFor(new BoardDataProvider()); + syncHelper.doUpSyncFor(new BoardDataProvider(progress$)); } catch (Throwable e) { DeckLog.logError(e); responseCallback.onError(e); @@ -253,7 +255,7 @@ public class SyncManager { syncHelper.setResponseCallback(callback); try { - syncHelper.doSyncFor(new BoardDataProvider()); + syncHelper.doSyncFor(new BoardDataProvider(progress$)); } catch (Throwable e) { DeckLog.logError(e); responseCallback.onError(e); @@ -277,6 +279,7 @@ public class SyncManager { } }); }); + return progress$; } // diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/AbstractSyncDataProvider.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/AbstractSyncDataProvider.java index e7542fb8b..4c538c56e 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/AbstractSyncDataProvider.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/AbstractSyncDataProvider.java @@ -17,8 +17,8 @@ public abstract class AbstractSyncDataProvider<T extends IRemoteEntity> { @Nullable protected AbstractSyncDataProvider<?> parent; - private final List<AbstractSyncDataProvider<?>> children = new ArrayList<>(); - private boolean stillGoingDeeper = false; + protected final List<AbstractSyncDataProvider<?>> children = new ArrayList<>(); + protected boolean stillGoingDeeper = false; public AbstractSyncDataProvider(@Nullable AbstractSyncDataProvider<?> parent) { this.parent = parent; diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/BoardDataProvider.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/BoardDataProvider.java index fbde8333a..cc299ba8d 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/BoardDataProvider.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/BoardDataProvider.java @@ -1,6 +1,9 @@ package it.niedermann.nextcloud.deck.persistence.sync.helpers.providers; import android.annotation.SuppressLint; +import android.util.Pair; + +import androidx.lifecycle.MutableLiveData; import com.nextcloud.android.sso.api.ParsedResponse; @@ -25,15 +28,26 @@ import it.niedermann.nextcloud.deck.persistence.sync.helpers.util.AsyncUtil; public class BoardDataProvider extends AbstractSyncDataProvider<FullBoard> { + private int progressCount = 0; + private int progressTotal = 0; + private MutableLiveData<Pair<Integer, Integer>> progress = null; + public BoardDataProvider() { super(null); } + public BoardDataProvider(MutableLiveData<Pair<Integer, Integer>> progress) { + this(); + this.progress = progress; + } + @Override public void getAllFromServer(ServerAdapter serverAdapter, DataBaseAdapter dataBaseAdapter, long accountId, ResponseCallback<List<FullBoard>> responder, Instant lastSync) { serverAdapter.getBoards(new ResponseCallback<>(responder.getAccount()) { @Override public void onResponse(ParsedResponse<List<FullBoard>> response) { + progressTotal = response.getResponse().size(); + updateProgress(); String etag = response.getHeaders().get("ETag"); if (etag != null && !etag.equals(account.getBoardsEtag())) { account.setBoardsEtag(etag); @@ -50,6 +64,21 @@ public class BoardDataProvider extends AbstractSyncDataProvider<FullBoard> { }); } + private void updateProgress() { + if (progress != null) { + progress.postValue(Pair.create(progressCount, progressTotal)); + } + } + + @Override + public void childDone(AbstractSyncDataProvider<?> child, ResponseCallback<Boolean> responseCallback, boolean syncChangedSomething) { + super.childDone(child, responseCallback, syncChangedSomething); + if (!stillGoingDeeper && children.isEmpty()) { + progressCount++; + updateProgress(); + } + } + @Override public FullBoard getSingleFromDB(DataBaseAdapter dataBaseAdapter, long accountId, FullBoard entity) { return dataBaseAdapter.getFullBoardByRemoteIdDirectly(accountId, entity.getEntity().getId()); |