diff options
author | Stefan Niedermann <info@niedermann.it> | 2021-10-26 12:24:36 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2021-10-26 12:24:36 +0300 |
commit | 2579a54ed94502bef625f410b501d1538f474fec (patch) | |
tree | c3dfd448c75bb91b534e25a43a8a61082d974329 /app/src | |
parent | 5e3fdb6f1f16d20d0656653c61cc94bec96ba532 (diff) |
Use CountdownLatch for SyncWorker
Signed-off-by: Stefan Niedermann <info@niedermann.it>
Diffstat (limited to 'app/src')
-rw-r--r-- | app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java | 8 | ||||
-rw-r--r-- | app/src/main/java/it/niedermann/owncloud/notes/persistence/SyncWorker.java | 25 |
2 files changed, 22 insertions, 11 deletions
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java index 0c2fbb6e..e8f46b10 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java @@ -210,9 +210,9 @@ public class MainActivity extends LockedActivity implements NoteClickListener, A } }); - mainViewModel.hasMultipleAccountsConfigured().observe(this, (hasMultipleAccountsConfigured) -> canMoveNoteToAnotherAccounts = hasMultipleAccountsConfigured); - mainViewModel.getSyncStatus().observe(this, (syncStatus) -> swipeRefreshLayout.setRefreshing(syncStatus)); - mainViewModel.getSyncErrors().observe(this, (exceptions) -> BrandedSnackbar.make(coordinatorLayout, R.string.error_synchronization, Snackbar.LENGTH_LONG) + mainViewModel.hasMultipleAccountsConfigured().observe(this, hasMultipleAccountsConfigured -> canMoveNoteToAnotherAccounts = hasMultipleAccountsConfigured); + mainViewModel.getSyncStatus().observe(this, syncStatus -> swipeRefreshLayout.setRefreshing(syncStatus)); + mainViewModel.getSyncErrors().observe(this, exceptions -> BrandedSnackbar.make(coordinatorLayout, R.string.error_synchronization, Snackbar.LENGTH_LONG) .setAction(R.string.simple_more, v -> ExceptionDialogFragment.newInstance(exceptions) .show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName())) .show()); @@ -666,7 +666,7 @@ public class MainActivity extends LockedActivity implements NoteClickListener, A AccountImporter.onActivityResult(requestCode, resultCode, data, this, (ssoAccount) -> { CapabilitiesWorker.update(this); executor.submit(() -> { - final var importSnackbar = BrandedSnackbar.make(binding.drawerLayout, R.string.progress_import_indeterminate, Snackbar.LENGTH_INDEFINITE); + final var importSnackbar = BrandedSnackbar.make(coordinatorLayout, R.string.progress_import_indeterminate, Snackbar.LENGTH_INDEFINITE); Log.i(TAG, "Added account: " + "name:" + ssoAccount.name + ", " + ssoAccount.url + ", userId" + ssoAccount.userId); try { Log.i(TAG, "Refreshing capabilities for " + ssoAccount.name); diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/SyncWorker.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/SyncWorker.java index ab2a90f6..3816f6b8 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/SyncWorker.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/SyncWorker.java @@ -13,10 +13,9 @@ import androidx.work.Worker; import androidx.work.WorkerParameters; import java.util.Objects; +import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import it.niedermann.owncloud.notes.persistence.entity.Account; - public class SyncWorker extends Worker { private static final String TAG = Objects.requireNonNull(SyncWorker.class.getSimpleName()); @@ -34,19 +33,31 @@ public class SyncWorker extends Worker { @Override public Result doWork() { final var repo = NotesRepository.getInstance(getApplicationContext()); - for (final var account : repo.getAccounts()) { + final var accounts = repo.getAccounts(); + final var latch = new CountDownLatch(accounts.size()); + + for (final var account : accounts) { Log.v(TAG, "Starting background synchronization for " + account.getAccountName()); - repo.addCallbackPull(account, () -> Log.v(TAG, "Finished background synchronization for " + account.getAccountName())); + repo.addCallbackPull(account, () -> { + Log.v(TAG, "Finished background synchronization for " + account.getAccountName()); + latch.countDown(); + }); repo.scheduleSync(account, false); } - // TODO return result depending on callbackPull - return Result.success(); + + try { + latch.await(); + return Result.success(); + } catch (InterruptedException e) { + return Result.failure(); + } } /** * Set up sync work to enabled every 15 minutes or just disabled * https://github.com/stefan-niedermann/nextcloud-notes/issues/1168 - * @param context the application + * + * @param context the application * @param backgroundSync the toggle result backgroundSync */ |