package org.openintents.shopping.sync; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.util.Log; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GooglePlayServicesUtil; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.common.api.PendingResult; import com.google.android.gms.wearable.DataApi; import com.google.android.gms.wearable.MessageApi; import com.google.android.gms.wearable.Node; import com.google.android.gms.wearable.NodeApi; import com.google.android.gms.wearable.PutDataMapRequest; import com.google.android.gms.wearable.PutDataRequest; import com.google.android.gms.wearable.Wearable; import org.openintents.shopping.SyncSupport; import org.openintents.shopping.library.provider.ShoppingContract; public class GooglePlaySyncSupport implements SyncSupport { private static final String TAG = GooglePlaySyncSupport.class.getSimpleName(); GoogleApiClient mGoogleApiClient; private boolean syncEnabled = true; public GooglePlaySyncSupport(Context context) { int availability = GooglePlayServicesUtil.isGooglePlayServicesAvailable(context); if (availability == ConnectionResult.SUCCESS) { mGoogleApiClient = new GoogleApiClient.Builder(context) .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() { @Override public void onConnected(Bundle connectionHint) { } @Override public void onConnectionSuspended(int cause) { } }) .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() { @Override public void onConnectionFailed(ConnectionResult result) { } }) .addApi(Wearable.API) .build(); mGoogleApiClient.connect(); } } @Override public boolean isAvailable() { return mGoogleApiClient != null && mGoogleApiClient.isConnected(); } @Override public void setSyncEnabled(boolean enableSync) { syncEnabled = enableSync; } @Override public boolean isSyncEnabled() { return syncEnabled; } @Override public void pushListItem(long listId, Cursor cursor) { String id = cursor.getString(cursor.getColumnIndex(ShoppingContract.ContainsFull._ID)); String listIdString = String.valueOf(listId); PutDataMapRequest dataMap = PutDataMapRequest.create("/" + listIdString + "/items/" + id); putString(dataMap, cursor, ShoppingContract.ContainsFull.ITEM_NAME); putString(dataMap, cursor, ShoppingContract.ContainsFull.QUANTITY); putString(dataMap, cursor, ShoppingContract.ContainsFull.ITEM_UNITS); putString(dataMap, cursor, ShoppingContract.ContainsFull.STATUS); putString(dataMap, cursor, ShoppingContract.ContainsFull.ITEM_TAGS); sendRequest(dataMap, listIdString); } public void pushList(Cursor cursor){ String id = cursor.getString(cursor.getColumnIndex(ShoppingContract.Lists._ID)); PutDataMapRequest dataMap = PutDataMapRequest.create("/lists/" + id); putString(dataMap, cursor, ShoppingContract.Lists.NAME); putString(dataMap, cursor, ShoppingContract.Lists.ITEMS_SORT); putString(dataMap, cursor, ShoppingContract.Lists.STORE_FILTER); sendRequest(dataMap, null); } @Override public void updateListItem(long listId, Uri itemUri, ContentValues values) { String id = itemUri.getLastPathSegment(); PutDataMapRequest request = PutDataMapRequest.create("/" + listId + "/items/" + id); for (String key : values.keySet()){ String value = values.getAsString(key); request.getDataMap().putString(key, value); } sendRequest(request, String.valueOf(listId)); } private void sendRequest(PutDataMapRequest dataMap, String listIdToShow) { PutDataRequest request = dataMap.asPutDataRequest(); PendingResult<DataApi.DataItemResult> pendingResult = Wearable.DataApi .putDataItem(mGoogleApiClient, request); pendingResult.await(); if (listIdToShow != null) { NodeApi.GetConnectedNodesResult nodes = Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).await(); Node node = nodes.getNodes().get(0); if (node != null) { MessageApi.SendMessageResult result = Wearable.MessageApi.sendMessage(mGoogleApiClient, node.getId(), "items", listIdToShow.getBytes()).await(); Log.d(TAG, "" + result.getStatus()); } else { Log.d(TAG, "no android wear"); } } } private void putString(PutDataMapRequest request, Cursor cursor, String columnName) { String value = cursor.getString(cursor.getColumnIndex(columnName)); request.getDataMap().putString(columnName, value); } }