package com.RSen.Commandr;
import android.app.Activity;
import android.app.Notification;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.support.wearable.activity.ConfirmationActivity;
import com.google.android.gms.common.ConnectionResult;
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.DataMap;
import com.google.android.gms.wearable.DataMapItem;
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.PutDataRequest;
import com.google.android.gms.wearable.Wearable;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
/**
* Created by Ryan on 9/1/2014.
*/
public class WearUtil {
static GoogleApiClient mGoogleApiClient;
public static void sendCommandMessage(final Activity context, final String command, final boolean finishOnComplete)
{
GoogleApiClient.ConnectionCallbacks sendCommandAction = new GoogleApiClient.ConnectionCallbacks() {
@Override
public void onConnected(Bundle connectionHint) {
Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).setResultCallback(new ResultCallback<NodeApi.GetConnectedNodesResult>() {
@Override
public void onResult(NodeApi.GetConnectedNodesResult getConnectedNodesResult) {
for (Node node : getConnectedNodesResult.getNodes())
{
Wearable.MessageApi.sendMessage(
mGoogleApiClient, node.getId(), "/command", command.getBytes()).setResultCallback(new ResultCallback<MessageApi.SendMessageResult>() {
@Override
public void onResult(MessageApi.SendMessageResult sendMessageResult) {
Intent intent = new Intent(context, ConfirmationActivity.class);
if (!sendMessageResult.getStatus().isSuccess()) {
intent.putExtra(ConfirmationActivity.EXTRA_ANIMATION_TYPE, ConfirmationActivity.FAILURE_ANIMATION);
}
else {
intent.putExtra(ConfirmationActivity.EXTRA_ANIMATION_TYPE, ConfirmationActivity.SUCCESS_ANIMATION);
}
intent.putExtra(ConfirmationActivity.EXTRA_MESSAGE, command);
context.startActivity(intent);
if (finishOnComplete)
{
context.finish();
}
}
});
}
}
});
}
@Override
public void onConnectionSuspended(int cause) {
}
};
performActionWhenConnected(context, sendCommandAction);
}
public static void performActionWhenConnected (final Activity context, GoogleApiClient.ConnectionCallbacks action)
{
if (mGoogleApiClient != null && mGoogleApiClient.isConnected())
{
action.onConnected(null);
}
else {
mGoogleApiClient = new GoogleApiClient.Builder(context)
.addConnectionCallbacks(action)
.addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
@Override
public void onConnectionFailed(ConnectionResult result) {
Intent intent = new Intent(context, ConfirmationActivity.class);
intent.putExtra(ConfirmationActivity.EXTRA_ANIMATION_TYPE, ConfirmationActivity.FAILURE_ANIMATION);
context.startActivity(intent);
}
})
.addApi(Wearable.API)
.build();
mGoogleApiClient.connect();
}
}
public static void updateListView(final WearActivity context)
{
GoogleApiClient.ConnectionCallbacks sendCommandAction = new GoogleApiClient.ConnectionCallbacks() {
@Override
public void onConnected(Bundle connectionHint) {
Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).setResultCallback(new ResultCallback<NodeApi.GetConnectedNodesResult>() {
@Override
public void onResult(NodeApi.GetConnectedNodesResult getConnectedNodesResult) {
Uri uri = new Uri.Builder().scheme(PutDataRequest.WEAR_URI_SCHEME).authority(getConnectedNodesResult.getNodes().get(0).getId()).path("/commands").build();
Wearable.DataApi.getDataItem(mGoogleApiClient, uri).setResultCallback(new ResultCallback<DataApi.DataItemResult>() {
@Override
public void onResult(final DataApi.DataItemResult dataItemResult) {
try {
DataMap dataMap = DataMapItem.fromDataItem(dataItemResult.getDataItem()).getDataMap();
ArrayList<String> returnList = dataMap.getStringArrayList("MOSTWANTEDCOMMANDS");
returnList.addAll(dataMap.getStringArrayList("TASKERCOMMANDS"));
context.setupListView(returnList);
} catch (Exception e) {
ArrayList<String> returnList = new ArrayList<String>();
returnList.add("First, setup Commandr on your phone...");
context.setupListView(returnList);
}
}
});
}
});
}
@Override
public void onConnectionSuspended(int cause) {
}
};
performActionWhenConnected(context, sendCommandAction);
}
}