From e0b592594fda78c68a7f7b3ebc6f40b14a754798 Mon Sep 17 00:00:00 2001 From: stefan-niedermann Date: Sat, 14 Dec 2019 09:43:28 +0100 Subject: #230 Background synchronization --- .../deck/persistence/sync/SyncWorker.java | 34 +++++++++++++--------- .../nextcloud/deck/ui/DrawerActivity.java | 2 +- .../deck/ui/settings/SettingsFragment.java | 3 +- 3 files changed, 22 insertions(+), 17 deletions(-) (limited to 'app/src') 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); } } 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 4bbe77b2e..0126e251e 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 @@ -171,7 +171,7 @@ public abstract class DrawerActivity extends AppCompatActivity implements Naviga editor.remove(sharedPreferenceLastAccount); editor.commit(); // Has to be done synchronously } else { - SyncWorker.register(getApplicationContext()); + SyncWorker.update(getApplicationContext()); accountIsGettingImportedSnackbar.show(); } } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/settings/SettingsFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/settings/SettingsFragment.java index 4925c447d..17d5be87e 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/settings/SettingsFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/settings/SettingsFragment.java @@ -52,8 +52,7 @@ public class SettingsFragment extends PreferenceFragment { final ListPreference backgroundSyncPref = (ListPreference) findPreference(prefKeyBackgroundSync); backgroundSyncPref.setOnPreferenceChangeListener((Preference preference, Object newValue) -> { - DeckLog.log("backgroundSync: " + newValue); - SyncWorker.register(getActivity().getApplicationContext()); + SyncWorker.update(getActivity().getApplicationContext(), (String) newValue); return true; }); } -- cgit v1.2.3