package tv.piratemedia.lightcontroler.wear;
import android.content.Context;
import android.content.SharedPreferences;
import android.net.Uri;
import android.preference.PreferenceManager;
import android.util.Log;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.wearable.MessageEvent;
import com.google.android.gms.wearable.Node;
import com.google.android.gms.wearable.NodeApi;
import com.google.android.gms.wearable.Wearable;
import com.google.android.gms.wearable.WearableListenerService;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import tv.piratemedia.lightcontroler.R;
import tv.piratemedia.lightcontroler.api.ControlProviders;
import tv.piratemedia.lightcontroler.controlCommands;
import tv.piratemedia.lightcontroler.controller;
public class DataLayerListenerService extends WearableListenerService {
private static final String TAG = "DataLayer";
private GoogleApiClient mApiClient;
public void connectToWatch(Context context){
//setup google API connnection to wearable
mApiClient = new GoogleApiClient.Builder(context)
.addApi( Wearable.API )
.build();
mApiClient.connect();
}
@Override
//On message received event, does an action when the handheld app receives a message from the watch
public void onMessageReceived(MessageEvent messageEvent) {
super.onMessageReceived(messageEvent);
// if ("/MESSAGE".equals(messageEvent.getPath())) {
// Create a new controller instance so we can send commands to the wifi controller
controller mCont = new controller();
controlCommands cmd;
cmd = new controlCommands(this, mCont.mHandler);
//A switch to find out what message was sent from the watch
if(messageEvent.getPath().equals("/zones")) {
connectToWatch(getApplicationContext());
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
final com.google.android.gms.common.api.PendingResult<NodeApi.GetConnectedNodesResult> nodes = Wearable.NodeApi.getConnectedNodes(mApiClient);
nodes.setResultCallback(new ResultCallback<NodeApi.GetConnectedNodesResult>() {
@Override
public void onResult(NodeApi.GetConnectedNodesResult result) {
final List<Node> nodes = result.getNodes();
if (nodes != null) {
for (int i = 0; i < nodes.size(); i++) {
final Node node = nodes.get(i);
Log.d("Wear","Sending Zone List");
List<String> zones = new ArrayList<String>(10);
zones.add("All Color");
zones.add(prefs.getString("pref_zone1", getApplicationContext().getString(R.string.Zone1)));
zones.add(prefs.getString("pref_zone2", getApplicationContext().getString(R.string.Zone2)));
zones.add(prefs.getString("pref_zone3", getApplicationContext().getString(R.string.Zone3)));
zones.add(prefs.getString("pref_zone4", getApplicationContext().getString(R.string.Zone4)));
zones.add(prefs.getString("pref_zone5", getApplicationContext().getString(R.string.Zone1)));
zones.add(prefs.getString("pref_zone6", getApplicationContext().getString(R.string.Zone2)));
zones.add(prefs.getString("pref_zone7", getApplicationContext().getString(R.string.Zone3)));
zones.add(prefs.getString("pref_zone8", getApplicationContext().getString(R.string.Zone4)));
zones.add("All White");
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(zones);
byte[] bytes = bos.toByteArray();
Wearable.MessageApi.sendMessage(mApiClient, node.getId(), "/zones", bytes);
} catch(IOException e) {
e.printStackTrace();
}
}
}
}
});
} else {
Uri path = Uri.parse(messageEvent.getPath());
int zone = Integer.parseInt(path.getPathSegments().get(0));
switch(path.getPathSegments().get(1)) {
case "on":
if(zone > 4) {
//white
zone = zone - 4;
if(zone > 8) {
zone = 0;
}
cmd.LightsOn(ControlProviders.ZONE_TYPE_WHITE, zone);
cmd.appState.setOnOff(zone, true);
} else {
//color
cmd.LightsOn(ControlProviders.ZONE_TYPE_COLOR, zone);
cmd.appState.setOnOff(zone, true);
}
break;
case "off":
if(zone > 4) {
//white
zone = zone - 4;
if(zone > 8) {
zone = 0;
}
cmd.LightsOff(ControlProviders.ZONE_TYPE_WHITE, zone);
cmd.appState.setOnOff(zone, false);
} else {
//color
cmd.LightsOff(ControlProviders.ZONE_TYPE_COLOR, zone);
cmd.appState.setOnOff(zone, false);
}
break;
case "level":
cmd.appState.setOnOff(zone, true);
if(zone > 4) {
zone = zone - 4;
if(zone > 8) {
zone = 0;
}
if(Integer.parseInt(path.getPathSegments().get(2)) == 1) {
cmd.setBrightnessUpOne(ControlProviders.ZONE_TYPE_WHITE, zone);
Log.d("wear", "up one");
} else if(Integer.parseInt(path.getPathSegments().get(2)) == -1) {
cmd.setBrightnessDownOne(ControlProviders.ZONE_TYPE_WHITE, zone);
Log.d("wear", "down one");
} else {
Log.d("wear", "unknown level: "+path.getPathSegments().get(2));
}
} else {
cmd.setBrightness(ControlProviders.ZONE_TYPE_COLOR, zone, Integer.parseInt(path.getPathSegments().get(2)));
Log.d("wear", "set brightness for color");
}
}
}
}
}