package org.gdg.frisbee.android; import android.net.Uri; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.common.api.ResultCallback; import com.google.android.gms.wearable.DataApi; import com.google.android.gms.wearable.DataItem; import com.google.android.gms.wearable.DataMap; import com.google.android.gms.wearable.DataMapItem; import com.google.android.gms.wearable.NodeApi; import com.google.android.gms.wearable.PutDataMapRequest; import com.google.android.gms.wearable.Wearable; import timber.log.Timber; public class WearableConfigurationUtil { public static final String PATH_ANALOG = "/watch_face_config/Analog"; public static final String CONFIG_BACKGROUND = "Background"; public static final String CONFIG_DATE = "Date"; public static final String CONFIG_DATE_TIME = "Date/Time Color"; public static final String CONFIG_DIGITAL_TIME = "Digital Time"; public static final String CONFIG_HAND_HOUR = "Hour Hand"; public static final String CONFIG_HAND_MINUTE = "Minute Hand"; public static final String CONFIG_HAND_SECOND = "Second Hand"; public static final String CONFIG_HOUR_MARKER = "Hour Marker"; public static final int TIME_12_HOUR = 12; public static final int TIME_24_HOUR = 24; public static void updateKeysInConfigDataMap(final GoogleApiClient googleApiClient, final String path, final DataMap configKeysToUpdate) { fetchConfigDataMap(googleApiClient, path, new ResultCallback<DataApi.DataItemResult>() { @Override public void onResult(DataApi.DataItemResult dataItemResult) { if (dataItemResult.getStatus().isSuccess()) { DataMap config = new DataMap(); if (dataItemResult.getDataItem() != null) { DataItem configDataItem = dataItemResult.getDataItem(); DataMapItem dataMapItem = DataMapItem.fromDataItem(configDataItem); config = dataMapItem.getDataMap(); } DataMap updatedConfig = new DataMap(); updatedConfig.putAll(config); updatedConfig.putAll(configKeysToUpdate); putConfigDataItem(googleApiClient, path, updatedConfig); } } }); } public static void fetchConfigDataMap(final GoogleApiClient client, final String path, final ResultCallback<DataApi.DataItemResult> callback) { Wearable.NodeApi.getLocalNode(client).setResultCallback( new ResultCallback<NodeApi.GetLocalNodeResult>() { @Override public void onResult(NodeApi.GetLocalNodeResult getLocalNodeResult) { String localNode = getLocalNodeResult.getNode().getId(); Uri uri = new Uri.Builder() .scheme("wear") .path(path) .authority(localNode) .build(); Wearable.DataApi.getDataItem(client, uri) .setResultCallback(callback); } } ); } private static void putConfigDataItem(GoogleApiClient googleApiClient, final String path, DataMap updatedConfig) { PutDataMapRequest putDataMapRequest = PutDataMapRequest.create(path); DataMap configToPut = putDataMapRequest.getDataMap(); configToPut.putAll(updatedConfig); Wearable.DataApi.putDataItem(googleApiClient, putDataMapRequest.asPutDataRequest()) .setResultCallback(new ResultCallback<DataApi.DataItemResult>() { @Override public void onResult(DataApi.DataItemResult dataItemResult) { Timber.d("putDataItem result status: " + dataItemResult.getStatus()); } }); } }