diff options
Diffstat (limited to 'app/src/main/java/it/niedermann/nextcloud/deck/persistence')
-rw-r--r-- | app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncWorker.java | 34 |
1 files changed, 20 insertions, 14 deletions
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 index a3dcc624d..39eb0e628 100644 --- 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 @@ -21,6 +21,9 @@ import it.niedermann.nextcloud.deck.R; public class SyncWorker extends Worker { private static final String TAG = "it.niedermann.nextcloud.deck.background_synchronization"; + private static final Constraints constraints = new Constraints.Builder() + .setRequiredNetworkType(NetworkType.CONNECTED) + .build(); public SyncWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) { super(context, workerParams); @@ -29,12 +32,13 @@ public class SyncWorker extends Worker { @NonNull @Override public Result doWork() { + SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); + SharedPreferences.Editor sharedPreferencesEditor = sharedPreferences.edit(); SyncManager syncManager = new SyncManager(getApplicationContext(), null); if (syncManager.hasInternetConnection()) { DeckLog.log("Starting background synchronization"); - SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit(); - editor.putLong(getApplicationContext().getString(R.string.shared_preference_last_background_sync), System.currentTimeMillis()); - editor.apply(); + sharedPreferencesEditor.putLong(getApplicationContext().getString(R.string.shared_preference_last_background_sync), System.currentTimeMillis()); + sharedPreferencesEditor.apply(); boolean success = syncManager.synchronizeEverything(); DeckLog.log("Finishing background synchronization with result " + success); return success ? Result.failure() : Result.success(); @@ -42,31 +46,33 @@ public class SyncWorker extends Worker { return Result.success(); } - public static void register(@NonNull Context context) { - SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext()); - String backgroundSync = sharedPreferences.getString(context.getString(R.string.pref_key_background_sync), context.getString(R.string.pref_value_background_15_minutes)); - if (!context.getString(R.string.pref_value_background_sync_off).equals(backgroundSync)) { + public static void update(@NonNull Context context) { + SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); + update(context, sharedPreferences.getString(context.getString(R.string.pref_key_background_sync), context.getString(R.string.pref_value_background_15_minutes))); + } + + public static void update(@NonNull Context context, String preferenceValue) { + if (context.getString(R.string.pref_value_background_sync_off).equals(preferenceValue)) { + deregister(context); + } else { int repeatInterval = 15; TimeUnit unit = TimeUnit.MINUTES; - if (context.getString(R.string.pref_value_background_1_hour).equals(backgroundSync)) { + if (context.getString(R.string.pref_value_background_1_hour).equals(preferenceValue)) { repeatInterval = 1; unit = TimeUnit.HOURS; - } else if (context.getString(R.string.pref_value_background_6_hours).equals(backgroundSync)) { + } else if (context.getString(R.string.pref_value_background_6_hours).equals(preferenceValue)) { repeatInterval = 6; unit = TimeUnit.HOURS; } - Constraints constraints = new Constraints.Builder() - .setRequiredNetworkType(NetworkType.CONNECTED) - .build(); PeriodicWorkRequest work = new PeriodicWorkRequest.Builder(SyncWorker.class, repeatInterval, unit) .setConstraints(constraints).build(); + DeckLog.log("Registering worker running each " + repeatInterval + " " + unit); WorkManager.getInstance(context.getApplicationContext()).enqueueUniquePeriodicWork(SyncWorker.TAG, ExistingPeriodicWorkPolicy.REPLACE, work); - } else { - deregister(context); } } private static void deregister(@NonNull Context context) { + DeckLog.log("Deregistering all workers with tag \"" + TAG + "\""); WorkManager.getInstance(context.getApplicationContext()).cancelAllWorkByTag(TAG); } } |