Added button to do full sync

gtask_note_sync
Bernhard Mähr 7 years ago
parent 0b194a6cf9
commit d46bbd4d2c

@ -80,6 +80,24 @@ public class GtasksPreferences extends InjectingPreferenceActivity implements Go
syncAdapterHelper.enableSynchronization((Boolean) o);
return true;
});
boolean useNote = gtasksPreferenceService.getUseNoteForMetadataSync();
final CheckBoxPreference gtaskUseNotePreference = (CheckBoxPreference) findPreference(getString(R.string.gtasks_sync_metadata_using_note_key));
gtaskUseNotePreference.setChecked(useNote);
gtaskUseNotePreference.setOnPreferenceChangeListener((preference, o) -> {
String summary = getString(((Boolean) o)?R.string.sync_force_add:R.string.sync_force_delete);
findPreference(getString(R.string.sync_force)).setSummary(summary);
return true;
});
Preference gtaskForcePreference = findPreference(getString(R.string.sync_force));
gtaskForcePreference.setEnabled(!gtasksPreferenceService.isOngoing());
gtaskForcePreference.setOnPreferenceClickListener(preference -> {
gtaskForcePreference.setEnabled(false);
if (!gtasksPreferenceService.isOngoing()) {
syncAdapterHelper.initiateManualFullSync();
}
return true;
});
findPreference(getString(R.string.sync_force)).setSummary(getString(useNote?R.string.sync_force_add:R.string.sync_force_delete));
findPreference(getString(R.string.sync_SPr_forget_key)).setOnPreferenceClickListener(preference -> {
dialogBuilder.newMessageDialog(R.string.sync_forget_confirm)
.setPositiveButton(android.R.string.ok, (dialog, which) -> {

@ -153,7 +153,8 @@ public class GoogleTaskSyncAdapter extends InjectingAbstractThreadedSyncAdapter
RecordSyncStatusCallback callback = new RecordSyncStatusCallback(gtasksPreferenceService, broadcaster);
try {
callback.started();
synchronize();
boolean full = extras.getBoolean(SyncAdapterHelper.SYNC_FULL, false);
synchronize(full);
gtasksPreferenceService.recordSuccessfulSync();
} catch (UserRecoverableAuthIOException e) {
Timber.e(e, e.getMessage());
@ -182,8 +183,8 @@ public class GoogleTaskSyncAdapter extends InjectingAbstractThreadedSyncAdapter
notificationManager.notify(Constants.NOTIFICATION_SYNC_ERROR, builder.build());
}
private void synchronize() throws IOException {
pushLocalChanges();
private void synchronize(boolean full) throws IOException {
pushLocalChanges(full);
List<TaskList> gtaskLists = new ArrayList<>();
String nextPageToken = null;
@ -207,10 +208,12 @@ public class GoogleTaskSyncAdapter extends InjectingAbstractThreadedSyncAdapter
}
}
private void pushLocalChanges() throws UserRecoverableAuthIOException {
List<Task> tasks = taskDao.toList(Query.select(Task.PROPERTIES)
.join(Join.left(Metadata.TABLE, Criterion.and(MetadataDao.MetadataCriteria.withKey(GtasksMetadata.METADATA_KEY), Task.ID.eq(Metadata.TASK))))
.where(Criterion.or(Task.MODIFICATION_DATE.gt(GtasksMetadata.LAST_SYNC), GtasksMetadata.ID.eq(""))));
private void pushLocalChanges(boolean full) throws UserRecoverableAuthIOException {
Query query = Query.select(Task.PROPERTIES).join(Join.left(Metadata.TABLE, Criterion.and(MetadataDao.MetadataCriteria.withKey(GtasksMetadata.METADATA_KEY), Task.ID.eq(Metadata.TASK))));
if (!full) {
query = query.where(Criterion.or(Task.MODIFICATION_DATE.gt(GtasksMetadata.LAST_SYNC), GtasksMetadata.ID.eq("")));
}
List<Task> tasks = taskDao.toList(query);
for (Task task : tasks) {
try {
pushTask(task, task.getMergedValues(), gtasksInvoker);

@ -22,6 +22,7 @@ import timber.log.Timber;
public class SyncAdapterHelper {
private static final String AUTHORITY = "org.tasks";
public static final String SYNC_FULL = "full";
private final AccountManager accountManager;
private final Preferences preferences;
@ -64,6 +65,20 @@ public class SyncAdapterHelper {
return true;
}
public boolean initiateManualFullSync() {
Account account = getAccount();
if (account == null) {
return false;
}
Bundle extras = new Bundle();
// Disable sync backoff and ignore sync preferences. In other words...perform sync NOW!
extras.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
extras.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
extras.putBoolean(SYNC_FULL, true);
ContentResolver.requestSync(account, AUTHORITY, extras);
return true;
}
public void requestSynchronization() {
Account account = getAccount();
if (account == null) {

@ -641,10 +641,13 @@ File %1$s contained %2$s.\n\n
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">Background sync</string>
<string name="sync_metadata_using_note_off">The note field is not modified.</string>
<string name="sync_metadata_using_note_on">The note field is used to sync additional information.</string>
<string name="sync_metadata_using_note">Sync additional information with note field?</string>
<string name="sync_metadata_using_note_off">The note field is not modified.</string>
<string name="sync_metadata_using_note_on">The note field is used to sync additional information.</string>
<string name="sync_metadata_using_note">Sync additional information with note field?</string>
<string name="sync_force">Overwrite all tasks on Google</string>
<string name="sync_force_add">Add additional information to all tasks</string>
<string name="sync_force_delete">Remove additional information from all tasks</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">Log out</string>

@ -30,6 +30,11 @@
android:summaryOff="@string/sync_metadata_using_note_off"
android:summaryOn="@string/sync_metadata_using_note_on"
android:title="@string/sync_metadata_using_note" />
<com.todoroo.astrid.ui.MultilinePreference
android:dependency="@string/sync_gtasks"
android:key="@string/sync_force"
android:title="@string/sync_force">
</com.todoroo.astrid.ui.MultilinePreference>
<com.todoroo.astrid.ui.MultilinePreference
android:dependency="@string/sync_gtasks"
android:key="@string/sync_SPr_forget_key"

Loading…
Cancel
Save