* If the current config {@link DataItem} doesn't exist, it isn't created and the callback * receives an empty DataMap. */ public static void fetchConfigDataMap(final GoogleApiClient client, final FetchConfigDataMapCallback callback) { Wearable.NodeApi.getLocalNode(client).setResultCallback( new ResultCallback() { @Override public void onResult(NodeApi.GetLocalNodeResult getLocalNodeResult) { String localNode = getLocalNodeResult.getNode().getId(); Uri uri = new Uri.Builder() .scheme("wear") .path(DigitalWatchFaceUtil.PATH_WITH_FEATURE) .authority(localNode) .build(); Wearable.DataApi.getDataItem(client, uri) .setResultCallback(new DataItemResultCallback(callback)); } } ); } /** * Overwrites (or sets, if not present) the keys in the current config {@link DataItem} with * the ones appearing in the given {@link DataMap}. If the config DataItem doesn't exist, * it's created. * * It is allowed that only some of the keys used in the config DataItem appear in * {@code configKeysToOverwrite}. The rest of the keys remains unmodified in this case. */ public static void overwriteKeysInConfigDataMap(final GoogleApiClient googleApiClient, final DataMap configKeysToOverwrite) { DigitalWatchFaceUtil.fetchConfigDataMap(googleApiClient, new FetchConfigDataMapCallback() { @Override public void onConfigDataMapFetched(DataMap currentConfig) { DataMap overwrittenConfig = new DataMap(); overwrittenConfig.putAll(currentConfig); overwrittenConfig.putAll(configKeysToOverwrite); DigitalWatchFaceUtil.putConfigDataItem(googleApiClient, overwrittenConfig); } } ); } /** * Overwrites the current config {@link DataItem}'s {@link DataMap} with {@code newConfig}. * If the config DataItem doesn't exist, it's created. */ public static void putConfigDataItem(GoogleApiClient googleApiClient, DataMap newConfig) { PutDataMapRequest putDataMapRequest = PutDataMapRequest.create(PATH_WITH_FEATURE); putDataMapRequest.setUrgent(); DataMap configToPut = putDataMapRequest.getDataMap(); configToPut.putAll(newConfig); Wearable.DataApi.putDataItem(googleApiClient, putDataMapRequest.asPutDataRequest()) .setResultCallback(new ResultCallback() { @Override public void onResult(DataApi.DataItemResult dataItemResult) { if (Log.isLoggable(TAG, Log.DEBUG)) { Log.d(TAG, "putDataItem result status: " + dataItemResult.getStatus()); } } }); } private static class DataItemResultCallback implements ResultCallback { private final FetchConfigDataMapCallback mCallback; public DataItemResultCallback(FetchConfigDataMapCallback callback) { mCallback = callback; } @Override public void onResult(DataApi.DataItemResult dataItemResult) { if (dataItemResult.getStatus().isSuccess()) { if (dataItemResult.getDataItem() != null) { DataItem configDataItem = dataItemResult.getDataItem(); DataMapItem dataMapItem = DataMapItem.fromDataItem(configDataItem); DataMap config = dataMapItem.getDataMap(); mCallback.onConfigDataMapFetched(config); } else { mCallback.onConfigDataMapFetched(new DataMap()); } } } } private DigitalWatchFaceUtil() { } }
* It is allowed that only some of the keys used in the config DataItem appear in * {@code configKeysToOverwrite}. The rest of the keys remains unmodified in this case. */ public static void overwriteKeysInConfigDataMap(final GoogleApiClient googleApiClient, final DataMap configKeysToOverwrite) { DigitalWatchFaceUtil.fetchConfigDataMap(googleApiClient, new FetchConfigDataMapCallback() { @Override public void onConfigDataMapFetched(DataMap currentConfig) { DataMap overwrittenConfig = new DataMap(); overwrittenConfig.putAll(currentConfig); overwrittenConfig.putAll(configKeysToOverwrite); DigitalWatchFaceUtil.putConfigDataItem(googleApiClient, overwrittenConfig); } } ); } /** * Overwrites the current config {@link DataItem}'s {@link DataMap} with {@code newConfig}. * If the config DataItem doesn't exist, it's created. */ public static void putConfigDataItem(GoogleApiClient googleApiClient, DataMap newConfig) { PutDataMapRequest putDataMapRequest = PutDataMapRequest.create(PATH_WITH_FEATURE); putDataMapRequest.setUrgent(); DataMap configToPut = putDataMapRequest.getDataMap(); configToPut.putAll(newConfig); Wearable.DataApi.putDataItem(googleApiClient, putDataMapRequest.asPutDataRequest()) .setResultCallback(new ResultCallback() { @Override public void onResult(DataApi.DataItemResult dataItemResult) { if (Log.isLoggable(TAG, Log.DEBUG)) { Log.d(TAG, "putDataItem result status: " + dataItemResult.getStatus()); } } }); } private static class DataItemResultCallback implements ResultCallback { private final FetchConfigDataMapCallback mCallback; public DataItemResultCallback(FetchConfigDataMapCallback callback) { mCallback = callback; } @Override public void onResult(DataApi.DataItemResult dataItemResult) { if (dataItemResult.getStatus().isSuccess()) { if (dataItemResult.getDataItem() != null) { DataItem configDataItem = dataItemResult.getDataItem(); DataMapItem dataMapItem = DataMapItem.fromDataItem(configDataItem); DataMap config = dataMapItem.getDataMap(); mCallback.onConfigDataMapFetched(config); } else { mCallback.onConfigDataMapFetched(new DataMap()); } } } } private DigitalWatchFaceUtil() { } }