From ff46b1b35adbed716a7cc373c55caa3450e31509 Mon Sep 17 00:00:00 2001 From: stefan-niedermann Date: Fri, 6 Dec 2019 19:11:19 +0100 Subject: Background synchronization using WorkManager --- .../deck/persistence/sync/SyncManager.java | 11 +++++++++ .../deck/persistence/sync/SyncWorker.java | 28 ++++++++++++++++++++++ .../nextcloud/deck/ui/DrawerActivity.java | 13 ++++++++++ 3 files changed, 52 insertions(+) create mode 100644 app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncWorker.java (limited to 'app/src') 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 01c3ccaef..fea389f7b 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 @@ -74,6 +74,17 @@ public class SyncManager { new Thread(r).start(); } + boolean synchronizeEverything() { + // TODO do some magic here, but wait with implementation for PoC + try { + Thread.sleep(2000); + return true; + } catch (InterruptedException e) { + e.printStackTrace(); + } + return false; + } + public void synchronize(IResponseCallback responseCallback) { if (responseCallback == null || responseCallback.getAccount() == null || diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncWorker.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncWorker.java new file mode 100644 index 000000000..e3b398e6e --- /dev/null +++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncWorker.java @@ -0,0 +1,28 @@ +package it.niedermann.nextcloud.deck.persistence.sync; + +import android.content.Context; + +import androidx.annotation.NonNull; +import androidx.work.Worker; +import androidx.work.WorkerParameters; + +import it.niedermann.nextcloud.deck.DeckLog; + +public class SyncWorker extends Worker { + + public static final String TAG = SyncWorker.class.getSimpleName(); + + public SyncWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) { + super(context, workerParams); + } + + @NonNull + @Override + public Result doWork() { + SyncManager syncManager = new SyncManager(getApplicationContext(), null); + DeckLog.log("Starting background synchronization"); + boolean success = syncManager.synchronizeEverything(); + DeckLog.log("Finishing background synchronization with result " + success); + return success ? Result.failure() : Result.success(); + } +} diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/DrawerActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/DrawerActivity.java index bc5a68a49..22622899a 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/DrawerActivity.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/DrawerActivity.java @@ -31,6 +31,10 @@ import androidx.appcompat.widget.Toolbar; import androidx.coordinatorlayout.widget.CoordinatorLayout; import androidx.core.view.GravityCompat; import androidx.drawerlayout.widget.DrawerLayout; +import androidx.work.Constraints; +import androidx.work.ExistingPeriodicWorkPolicy; +import androidx.work.PeriodicWorkRequest; +import androidx.work.WorkManager; import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; @@ -49,6 +53,7 @@ import com.nextcloud.android.sso.ui.UiExceptionManager; import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.concurrent.TimeUnit; import butterknife.BindInt; import butterknife.BindString; @@ -63,6 +68,7 @@ import it.niedermann.nextcloud.deck.model.Account; import it.niedermann.nextcloud.deck.model.ocs.Capabilities; import it.niedermann.nextcloud.deck.model.ocs.Version; import it.niedermann.nextcloud.deck.persistence.sync.SyncManager; +import it.niedermann.nextcloud.deck.persistence.sync.SyncWorker; import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.WrappedLiveData; import it.niedermann.nextcloud.deck.ui.board.EditBoardDialogFragment; import it.niedermann.nextcloud.deck.ui.exception.ExceptionHandler; @@ -170,6 +176,13 @@ public abstract class DrawerActivity extends AppCompatActivity implements Naviga editor.remove(sharedPreferenceLastAccount); editor.commit(); // Has to be done synchronously } else { + Constraints constraints = new Constraints.Builder() + .setRequiresCharging(true) + .build(); + PeriodicWorkRequest work = new PeriodicWorkRequest.Builder(SyncWorker.class, 30, TimeUnit.MINUTES) + .setConstraints(constraints) + .build(); + WorkManager.getInstance(getApplicationContext()).enqueueUniquePeriodicWork(SyncWorker.TAG, ExistingPeriodicWorkPolicy.KEEP, work); accountIsGettingImportedSnackbar.show(); } } -- cgit v1.2.3