package com.amazon.example.snake.aws; import java.util.ArrayList; import java.util.List; import com.amazonaws.auth.CognitoCachingCredentialsProvider; import com.amazonaws.mobileconnectors.cognito.CognitoSyncManager; import com.amazonaws.mobileconnectors.cognito.Dataset; import com.amazonaws.mobileconnectors.cognito.Record; import com.amazonaws.mobileconnectors.cognito.SyncConflict; import com.amazonaws.mobileconnectors.cognito.Dataset.SyncCallback; import com.amazonaws.mobileconnectors.cognito.exceptions.DataStorageException; import android.app.Activity; import android.app.ProgressDialog; import android.util.Log; import android.widget.Toast; public class CognitoSyncTask{ CognitoSyncManager cognitosync; CognitoCachingCredentialsProvider cognito; Activity callingActivity; public CognitoSyncTask(Activity callingActivity) { cognitosync = AWSClientManager.getCognitoSync(); cognito = AWSClientManager.getCognito(); this.callingActivity = callingActivity; } void printDataset() { Dataset dataset = AWSClientManager.getDataset(); for (Record record : dataset.getAllRecords()) { Log.i("sync", record.toString()); } } public void doSync() { ProgressDialog dialog = ProgressDialog.show(callingActivity, "Syncing", "Please wait"); Dataset dataset = AWSClientManager.getDataset(); printDataset(); dataset.synchronize(new SimpleCallback(dialog)); } private class SimpleCallback implements SyncCallback { private ProgressDialog dialog; private SimpleCallback(ProgressDialog dialog) { this.dialog = dialog; } @Override public void onSuccess(Dataset dataset, final List<Record> newRecords) { printDataset(); callingActivity.runOnUiThread(new Runnable() { @Override public void run() { dialog.dismiss(); Log.i("Sync", String.format("%d records synced", newRecords.size())); Toast.makeText(callingActivity, "Sync Successful!", Toast.LENGTH_LONG).show(); } }); } @Override public void onFailure(final DataStorageException dse) { callingActivity.runOnUiThread(new Runnable() { @Override public void run() { dialog.dismiss(); Log.e("Sync", "failed: " + dse); Toast.makeText(callingActivity, "Sync Failed due to\n" + dse.getMessage(), Toast.LENGTH_LONG) .show(); dse.printStackTrace(); } }); } @Override public boolean onConflict(final Dataset dataset, final List<SyncConflict> conflicts) { callingActivity.runOnUiThread(new Runnable() { @Override public void run() { dialog.dismiss(); Log.i("Sync onConflict", String.format("%s records in conflict", conflicts.size())); List<Record> resolvedRecords = new ArrayList<Record>(); for (SyncConflict conflict : conflicts) { Log.i("Sync onConflict", String.format("remote: %s; local: %s", conflict.getRemoteRecord(), conflict.getLocalRecord())); /* resolve by taking remote records */ resolvedRecords.add(conflict.resolveWithRemoteRecord()); } dataset.resolve(resolvedRecords); Toast.makeText( callingActivity, String.format( "%s records in conflict. Resolve by taking remote records", conflicts.size()), Toast.LENGTH_LONG).show(); } }); return true; } @Override public boolean onDatasetDeleted(Dataset arg0, String arg1) { return false; } @Override public boolean onDatasetsMerged(Dataset arg0, List<String> arg1) { return false; } } }