package com.dappervision.wearscript.dataproviders; import android.content.Context; import android.hardware.SensorEvent; import android.os.Handler; import android.util.Log; import com.dappervision.wearscript.Utils; import com.dappervision.wearscript.events.PebbleAccelerometerDataEvent; import com.dappervision.wearscript.managers.PebbleManager; import com.dappervision.wearscript.managers.PebbleManager.Cmd; import com.getpebble.android.kit.PebbleKit; import com.getpebble.android.kit.util.PebbleDictionary; import java.util.UUID; public class PebbleEventReceiver extends PebbleKit.PebbleDataReceiver{ private static final String TAG = "PebbleEventReceiver"; private Handler mHandler; private PebbleManager mPebbleManager; public PebbleEventReceiver(UUID PEBBLE_APP_UUID, PebbleManager pebbleManager) { super(PEBBLE_APP_UUID); mHandler = new Handler(); mPebbleManager = pebbleManager; } @Override public void receiveData(final Context context, final int transactionId, final PebbleDictionary data) { final int key = data.getUnsignedInteger(0).intValue(); mHandler.post(new Runnable() { @Override public void run() { // All data received from the Pebble must be ACK'd, otherwise you'll hit time-outs in the // watch-app which will cause the watch to feel "laggy" during periods of frequent // communication. PebbleKit.sendAckToPebble(context, transactionId); switch (key) { case Cmd.Cmd_singleClick: int click = data.getUnsignedInteger(1).intValue(); Log.v(TAG + " Single Click", " " + click); mPebbleManager.onPebbleSingleClick(PebbleManager.parseButton(click)); break; case Cmd.Cmd_longClick: int lClick = data.getUnsignedInteger(1).intValue(); Log.v(TAG + " Long Click", " " + lClick); mPebbleManager.onPebbleLongClick(PebbleManager.parseButton(lClick)); break; case PebbleManager.Cmd.Cmd_accelTap: int axis = data.getUnsignedInteger(1).intValue(); int direction = data.getInteger(2).intValue(); Log.v(TAG + " Accel Tap", " " + axis + " " + direction); mPebbleManager.onPebbleAccelTap(axis, direction); break; case Cmd.Cmd_accelData: int num_samples = data.getUnsignedInteger(2).intValue(); byte[] accelData = data.getBytes(3); Log.i(TAG + " Accel Data", " " + num_samples + " x: " + accelData[0] + " y: " + accelData[1] + " z: " + accelData[2]); Utils.eventBusPost(new PebbleAccelerometerDataEvent(accelData)); default: break; } } }); } }