diff options
author | stefan-niedermann <info@niedermann.it> | 2019-12-14 11:43:28 +0300 |
---|---|---|
committer | stefan-niedermann <info@niedermann.it> | 2019-12-14 11:43:28 +0300 |
commit | 2956f0f909573f13de126a3ee8609ae28c34442f (patch) | |
tree | ecf93cda93a57e35498ba336585efdda0cff3fbd /app/src/main/java | |
parent | 72fd49a31c2ed298e9f9ee58afcaf8097236dd99 (diff) |
#230 Background synchronization
Diffstat (limited to 'app/src/main/java')
3 files changed, 22 insertions, 17 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); } } 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; }); } |